diff options
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h index 7b46a59..003d1d0 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h @@ -23,6 +23,7 @@ namespace android { struct ABuffer; +class AWakeLock; struct VideoFrameScheduler; struct NuPlayer::Renderer : public AHandler { @@ -46,13 +47,14 @@ struct NuPlayer::Renderer : public AHandler { void queueEOS(bool audio, status_t finalResult); - void flush(bool audio); + void flush(bool audio, bool notifyComplete); void signalTimeDiscontinuity(); void signalAudioSinkChanged(); void signalDisableOffloadAudio(); + void signalEnableOffloadAudio(); void pause(); void resume(); @@ -61,8 +63,6 @@ struct NuPlayer::Renderer : public AHandler { // Following setters and getters are protected by mTimeLock. status_t getCurrentPosition(int64_t *mediaUs); - status_t getCurrentPosition( - int64_t *mediaUs, int64_t nowUs, bool allowPastQueuedVideo = false); void setHasMedia(bool audio); void setAudioFirstAnchorTime(int64_t mediaUs); void setAudioFirstAnchorTimeIfNeeded(int64_t mediaUs); @@ -72,11 +72,12 @@ struct NuPlayer::Renderer : public AHandler { int64_t getVideoLateByUs(); void setPauseStartedTimeRealUs(int64_t realUs); - bool openAudioSink( + status_t openAudioSink( const sp<AMessage> &format, bool offloadOnly, bool hasVideo, - uint32_t flags); + uint32_t flags, + bool *isOffloaded); void closeAudioSink(); enum { @@ -114,6 +115,7 @@ private: kWhatCloseAudioSink = 'clsA', kWhatStopAudioSink = 'stpA', kWhatDisableOffloadAudio = 'noOA', + kWhatEnableOffloadAudio = 'enOA', kWhatSetVideoFrameRate = 'sVFR', }; @@ -160,10 +162,15 @@ private: Mutex mFlushLock; // protects the following 2 member vars. bool mFlushingAudio; bool mFlushingVideo; + bool mNotifyCompleteAudio; + bool mNotifyCompleteVideo; bool mSyncQueues; + // modified on only renderer's thread. bool mPaused; + int64_t mPausePositionMediaTimeUs; + bool mVideoSampleReceived; bool mVideoRenderingStarted; int32_t mVideoRenderingStartGeneration; @@ -175,9 +182,27 @@ private: bool mAudioOffloadTornDown; audio_offload_info_t mCurrentOffloadInfo; + struct PcmInfo { + audio_channel_mask_t mChannelMask; + audio_output_flags_t mFlags; + audio_format_t mFormat; + int32_t mNumChannels; + int32_t mSampleRate; + }; + PcmInfo mCurrentPcmInfo; + static const PcmInfo AUDIO_PCMINFO_INITIALIZER; + int32_t mTotalBuffersQueued; int32_t mLastAudioBufferDrained; + sp<AWakeLock> mWakeLock; + + status_t getCurrentPositionOnLooper(int64_t *mediaUs); + status_t getCurrentPositionOnLooper( + int64_t *mediaUs, int64_t nowUs, bool allowPastQueuedVideo = false); + bool getCurrentPositionIfPaused_l(int64_t *mediaUs); + status_t getCurrentPositionFromAnchor( + int64_t *mediaUs, int64_t nowUs, bool allowPastQueuedVideo = false); size_t fillAudioBuffer(void *buffer, size_t size); @@ -190,7 +215,7 @@ private: int64_t getRealTimeUs(int64_t mediaTimeUs, int64_t nowUs); void onDrainVideoQueue(); - void postDrainVideoQueue(); + void postDrainVideoQueue_l(); void prepareForMediaRenderingStart(); void notifyIfMediaRenderingStarted(); @@ -200,11 +225,12 @@ private: void onFlush(const sp<AMessage> &msg); void onAudioSinkChanged(); void onDisableOffloadAudio(); + void onEnableOffloadAudio(); void onPause(); void onResume(); void onSetVideoFrameRate(float fps); void onAudioOffloadTearDown(AudioOffloadTearDownReason reason); - bool onOpenAudioSink( + status_t onOpenAudioSink( const sp<AMessage> &format, bool offloadOnly, bool hasVideo, |