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