void MediaOmxCommonDecoder::FirstFrameLoaded(nsAutoPtr<MediaInfo> aInfo) { MOZ_ASSERT(NS_IsMainThread()); MediaDecoder::FirstFrameLoaded(aInfo); ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); if (!CheckDecoderCanOffloadAudio()) { DECODER_LOG(PR_LOG_DEBUG, ("In %s Offload Audio check failed", __PRETTY_FUNCTION__)); return; } #ifdef MOZ_AUDIO_OFFLOAD mAudioOffloadPlayer = new AudioOffloadPlayer(this); #endif if (!mAudioOffloadPlayer) { return; } mAudioOffloadPlayer->SetSource(mReader->GetAudioOffloadTrack()); status_t err = mAudioOffloadPlayer->Start(false); if (err == OK) { PauseStateMachine(); // Call ChangeState() to run AudioOffloadPlayer since offload state enabled ChangeState(mPlayState); return; } mAudioOffloadPlayer = nullptr; mFallbackToStateMachine = true; DECODER_LOG(PR_LOG_DEBUG, ("In %s Unable to start offload audio %d." "Switching to normal mode", __PRETTY_FUNCTION__, err)); }
void MediaOmxCommonDecoder::FirstFrameLoaded(nsAutoPtr<MediaInfo> aInfo, MediaDecoderEventVisibility aEventVisibility) { MOZ_ASSERT(NS_IsMainThread()); if (mShuttingDown) { return; } MediaDecoder::FirstFrameLoaded(aInfo, aEventVisibility); if (!CheckDecoderCanOffloadAudio()) { DECODER_LOG(LogLevel::Debug, ("In %s Offload Audio check failed", __PRETTY_FUNCTION__)); DisableStateMachineAudioOffloading(); return; } #ifdef MOZ_AUDIO_OFFLOAD mAudioOffloadPlayer = new AudioOffloadPlayer(this); #endif if (!mAudioOffloadPlayer) { DisableStateMachineAudioOffloading(); return; } mAudioOffloadPlayer->SetSource(mReader->GetAudioOffloadTrack()); status_t err = mAudioOffloadPlayer->Start(false); if (err != OK) { mAudioOffloadPlayer = nullptr; mFallbackToStateMachine = true; DECODER_LOG(LogLevel::Debug, ("In %s Unable to start offload audio %d." "Switching to normal mode", __PRETTY_FUNCTION__, err)); DisableStateMachineAudioOffloading(); return; } PauseStateMachine(); if (mLogicallySeeking) { SeekTarget target = SeekTarget(mLogicalPosition, SeekTarget::Accurate, MediaDecoderEventVisibility::Observable); mSeekRequest.DisconnectIfExists(); mSeekRequest.Begin(mAudioOffloadPlayer->Seek(target) ->Then(AbstractThread::MainThread(), __func__, static_cast<MediaDecoder*>(this), &MediaDecoder::OnSeekResolved, &MediaDecoder::OnSeekRejected)); } // Call ChangeState() to run AudioOffloadPlayer since offload state enabled ChangeState(mPlayState); }