qcom平台 audio usecase debug


usecase

指的是 音频应用场景,每个usecase都映射到一个特定的 PCM 设备。

在高通平台上,枚举定义了很多usecase,可以参考查看以下内容:

代码路径:

\code\hardware\qcom\audio\hal\audio_hw.c   //use_case_table
\code\hardware\qcom\audio\hal\audio_hw.h   //enum Playback usecases num
Playback usecases
const char * const use_case_table[AUDIO_USECASE_MAX] = {
    [USECASE_AUDIO_PLAYBACK_DEEP_BUFFER] = "deep-buffer-playback",
    [USECASE_AUDIO_PLAYBACK_LOW_LATENCY] = "low-latency-playback",
    [USECASE_AUDIO_PLAYBACK_ULL]         = "audio-ull-playback",
    [USECASE_AUDIO_PLAYBACK_MULTI_CH]    = "multi-channel-playback",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD] = "compress-offload-playback",
    //Enabled for Direct_PCM
    [USECASE_AUDIO_PLAYBACK_OFFLOAD2] = "compress-offload-playback2",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD3] = "compress-offload-playback3",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD4] = "compress-offload-playback4",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD5] = "compress-offload-playback5",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD6] = "compress-offload-playback6",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD7] = "compress-offload-playback7",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD8] = "compress-offload-playback8",
    [USECASE_AUDIO_PLAYBACK_OFFLOAD9] = "compress-offload-playback9",
    [USECASE_AUDIO_PLAYBACK_FM] = "play-fm",
    [USECASE_AUDIO_PLAYBACK_MMAP] = "mmap-playback",
    [USECASE_AUDIO_PLAYBACK_HIFI] = "hifi-playback",
    ......
Capture usecases
const char * const use_case_table[AUDIO_USECASE_MAX] = {
    ......
    [USECASE_AUDIO_RECORD] = "audio-record",
    [USECASE_AUDIO_RECORD_COMPRESS] = "audio-record-compress",
    [USECASE_AUDIO_RECORD_COMPRESS2] = "audio-record-compress2",
    [USECASE_AUDIO_RECORD_COMPRESS3] = "audio-record-compress3",
    [USECASE_AUDIO_RECORD_COMPRESS4] = "audio-record-compress4",
    [USECASE_AUDIO_RECORD_COMPRESS5] = "audio-record-compress5",
    [USECASE_AUDIO_RECORD_COMPRESS6] = "audio-record-compress6",
    [USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
    [USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
    [USECASE_AUDIO_RECORD_MMAP] = "mmap-record",
    [USECASE_AUDIO_RECORD_HIFI] = "hifi-record",
    ......
HFP Use case
const char * const use_case_table[AUDIO_USECASE_MAX] = {
    ......
    [USECASE_AUDIO_HFP_SCO] = "hfp-sco",
    [USECASE_AUDIO_HFP_SCO_WB] = "hfp-sco-wb",
    ......
Voice/call usecase
const char * const use_case_table[AUDIO_USECASE_MAX] = {
    ......
    [USECASE_VOICE_CALL] = "voice-call",
    [USECASE_VOICE2_CALL] = "voice2-call",
    [USECASE_VOLTE_CALL] = "volte-call",
    [USECASE_QCHAT_CALL] = "qchat-call",
    [USECASE_VOWLAN_CALL] = "vowlan-call",
    [USECASE_VOICEMMODE1_CALL] = "voicemmode1-call",
    [USECASE_VOICEMMODE2_CALL] = "voicemmode2-call",
    [USECASE_COMPRESS_VOIP_CALL] = "compress-voip-call",
    [USECASE_INCALL_REC_UPLINK] = "incall-rec-uplink",
    [USECASE_INCALL_REC_DOWNLINK] = "incall-rec-downlink",
    [USECASE_INCALL_REC_UPLINK_AND_DOWNLINK] = "incall-rec-uplink-and-downlink",
    [USECASE_INCALL_REC_UPLINK_COMPRESS] = "incall-rec-uplink-compress",
    [USECASE_INCALL_REC_DOWNLINK_COMPRESS] = "incall-rec-downlink-compress",
    [USECASE_INCALL_REC_UPLINK_AND_DOWNLINK_COMPRESS] = "incall-rec-uplink-and-downlink-compress",
    ......
others
const char * const use_case_table[AUDIO_USECASE_MAX] = {
    ......
    [USECASE_INCALL_MUSIC_UPLINK] = "incall_music_uplink",
    [USECASE_INCALL_MUSIC_UPLINK2] = "incall_music_uplink2",
    [USECASE_AUDIO_SPKR_CALIB_RX] = "spkr-rx-calib",
    [USECASE_AUDIO_SPKR_CALIB_TX] = "spkr-vi-record",

    [USECASE_AUDIO_PLAYBACK_AFE_PROXY] = "afe-proxy-playback",
    [USECASE_AUDIO_RECORD_AFE_PROXY] = "afe-proxy-record",
    [USECASE_AUDIO_PLAYBACK_SILENCE] = "silence-playback",

    /* Transcode loopback cases */
    [USECASE_AUDIO_TRANSCODE_LOOPBACK] = "audio-transcode-loopback",

    [USECASE_AUDIO_PLAYBACK_VOIP] = "audio-playback-voip",
    [USECASE_AUDIO_RECORD_VOIP] = "audio-record-voip",
    /* For Interactive Audio Streams */
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1] = "audio-interactive-stream1",
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2] = "audio-interactive-stream2",
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM3] = "audio-interactive-stream3",
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM4] = "audio-interactive-stream4",
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM5] = "audio-interactive-stream5",
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM6] = "audio-interactive-stream6",
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM7] = "audio-interactive-stream7",
    [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8] = "audio-interactive-stream8",

    [USECASE_AUDIO_EC_REF_LOOPBACK] = "ec-ref-audio-capture",

    [USECASE_AUDIO_A2DP_ABR_FEEDBACK] = "a2dp-abr-feedback"

palyback类

Deep buffer Playback

  • 描述:音频在AP中已处理为PCM 数据, 发送到ADSP, 最终经由ADSP输出到 device上;
  • 音频轨道中的标志位:AUDIO_OUTPUT_FLAG_PRIMARY
  • 应用主要的场景: 铃声、音频/视频流数据和等等。
  • 数据格式:PCM
  • 支持的声道: 双声道
  • 支持的采样率: 44.1Kh, 48Khz

Low latency Playback

  • 描述:如其名称,针对低延时的播放场景; 和Deep buffer类似,音频在AP中已处理为PCM 数据, 发送到ADSP,区别是它所分配的buffer更小些,并且在ADSP侧只做很少或者基本不做处理,
  • 音频轨道中的标志位:AUDIO_OUTPUT_FLAG_FAST
  • 应用主要的场景:一些对延迟要求较高的音频,比如触碰音和游戏音。
  • 数据格式:PCM
  • 支持的声道: 双声道
  • 支持的采样率: 44.1Khz,48Khz

Offload playback

  • 描述:音频解码部分的工作是在ADSP中完成,AP侧只负责把音频数据送到ADSP中,送出去后,AP侧会进行休眠,ADSP中会分配一块较大的buffer去处理此数据,在ADSP中进行解码,音效的处理工作,在ADSP解码器处理完数据之前,它会唤醒AP侧去送下一包数据。

  • 音频轨道中的标志位:

    AUDIO_OUTPUT_FLAG_DIRECT,

    AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD,

    AUDIO_OUTPUT_FLAG_NON_BLOCKING

  • 应用主要的场景:音乐文件播放等;

  • 数据格式:MP3, AC3, EAC3, AAC, FLAC, 24bit PCM, 16 bit PCM

  • 支持的声道:1, 2, 2,1, 4, 5, 5.1, 6, 7.1

Mutichannel Playback

  • 描述:和Deep buffer playback类似,但是,它多应用于处理多声道音频数据,采样的解码器是Multichannel Decoder将多通道解码器的 PCM 输出发送到的播放模式在输出设备上进行 aDSP、后处理和渲染
  • 应用场景:播放AAC格式5.1声道音源, 播放杜比AC3/eAC3格式音频
  • 音频轨道中的标志位:AUDIO_OUTPUT_FLAG_DIRECT
  • 支持的采样率: 44.1KHZ, 48k

通过logcast 可以Debug 当前使用的usecase:

比如 播放一段音频,从logcat 信息中 可以获取到如下内容:

# logcat | grep usecase
02-11 15:37:09.177   700   645 D audio_hw_primary: start_output_stream: enter: stream(0xf5359000)usecase(4: compress-offload-playback2) devices(0x2)
02-11 15:37:09.178   700   645 I msm8916_platform: platform_check_and_set_codec_backend_cfg:becf: afe: bitwidth 16, samplerate 44100 channels 2, backend_idx 0 usecase = 4 device (speaker)
02-11 15:37:09.179   700   645 I msm8916_platform: platform_check_codec_backend_cfg:becf: afe: Codec selected backend: 0 current bit width: 16 sample rate: 44100 channels: 2 usecase 4 device (speaker) 
02-11 15:37:09.179   700   645 D audio_hw_primary: check_usecases_codec_backend:becf: force routing 0
02-11 15:37:09.179   700   645 D audio_hw_primary: check_usecases_codec_backend:becf: (63) check_usecases curr device: speaker, usecase device: backends match 0
02-11 15:37:09.179   700   645 D audio_hw_primary: check_usecases_codec_backend:becf: check_usecases num.of Usecases to switch 0
02-11 15:37:09.187   700   645 I sound_trigger_platform: platform_stdev_check_and_update_concurrency: Received STREAM event, event type 3, usecase type -177593328
02-11 15:37:09.187   700   645 D audio_hw_utils: audio_extn_utils_send_app_type_cfg: usecase->out_snd_device speaker


02-11 15:37:21.529   700   611 D audio_hw_primary: out_standby: enter: stream (0xf5359000) usecase(4: compress-offload-playback2)
02-11 15:37:21.623   700   611 I sound_trigger_platform: platform_stdev_check_and_update_concurrency: Received STREAM event, event type 2, usecase type 0

可知当前使用的 usecase 是ompress-offload-playback2, 输出到device是 speaker;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM