frameworks\av\media\libmediaplayerservice\nuplayer\NuPlayer.cpp
void NuPlayer::determineAudioModeChange(const sp<AMessage> &audioFormat) {
{
...
bool canOffload = canOffloadStream(
audioMeta, hasVideo, mSource->isStreaming(), streamType)
&& (mPlaybackSettings.mSpeed == 1.f && mPlaybackSettings.mPitch == 1.f);
//Offload改为false后才会Call到OMX的软解码
canOffload = false;
if (canOffload) {
if (!mOffloadAudio) {
mRenderer->signalEnableOffloadAudio();
}
// open audio sink early under offload mode.
tryOpenAudioSinkForOffload(audioFormat, audioMeta, hasVideo);
} else {
if (mOffloadAudio) {
mRenderer->signalDisableOffloadAudio();
mOffloadAudio = false;
}
}
}
看下Log确认下:
02-15 08:15:12.567 751 1033 D audio_hw_primary: out_set_parameters: enter: usecase(0: deep-buffer-playback) kvpairs: routing=4
02-15 08:15:12.585 751 1033 D audio_hw_primary: start_output_stream: enter: stream(0xe657c000)usecase(0: deep-buffer-playback) devices(0x4)
02-15 08:15:12.587 751 1033 D audio_hw_primary: select_devices for use case (deep-buffer-playback)
02-15 08:15:12.587 751 1033 D audio_hw_extn: audio_extn_get_anc_enabled: anc_enabled:0
如上usecase从3(Offload)切换为了0(DEEP_BUFFER)
进一步的可以看到如下的Log
ACodec : [OMX.google.mp3.decoder] calling emptyBuffer 2 w/ time 130612 us