From bc2fb720bbd0acd122bacc67e844e982d068f6f9 Mon Sep 17 00:00:00 2001 From: Wei Jia Date: Tue, 8 Jul 2014 16:37:57 -0700 Subject: Add support of audio offloading for NuPlayer. Change-Id: Ic83973339fb46a83b48382e6097925f45d200867 --- .../nuplayer/NuPlayerRenderer.h | 37 ++++++++++++++++------ 1 file changed, 27 insertions(+), 10 deletions(-) (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h') diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h index 94a05ea..6e86a8f 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h @@ -27,11 +27,17 @@ struct ABuffer; struct NuPlayer::Renderer : public AHandler { enum Flags { FLAG_REAL_TIME = 1, + FLAG_OFFLOAD_AUDIO = 2, }; Renderer(const sp &sink, const sp ¬ify, uint32_t flags = 0); + static size_t AudioSinkCallback( + MediaPlayerBase::AudioSink *audioSink, + void *data, size_t size, void *me, + MediaPlayerBase::AudioSink::cb_event_t event); + void queueBuffer( bool audio, const sp &buffer, @@ -45,6 +51,8 @@ struct NuPlayer::Renderer : public AHandler { void signalAudioSinkChanged(); + void signalDisableOffloadAudio(); + void pause(); void resume(); @@ -63,14 +71,16 @@ protected: private: enum { - kWhatDrainAudioQueue = 'draA', - kWhatDrainVideoQueue = 'draV', - kWhatQueueBuffer = 'queB', - kWhatQueueEOS = 'qEOS', - kWhatFlush = 'flus', - kWhatAudioSinkChanged = 'auSC', - kWhatPause = 'paus', - kWhatResume = 'resm', + kWhatDrainAudioQueue = 'draA', + kWhatDrainVideoQueue = 'draV', + kWhatQueueBuffer = 'queB', + kWhatQueueEOS = 'qEOS', + kWhatFlush = 'flus', + kWhatAudioSinkChanged = 'auSC', + kWhatPause = 'paus', + kWhatResume = 'resm', + kWhatStopAudioSink = 'stpA', + kWhatDisableOffloadAudio = 'noOA', }; struct QueueEntry { @@ -84,6 +94,7 @@ private: sp mAudioSink; sp mNotify; + Mutex mLock; uint32_t mFlags; List mAudioQueue; List mVideoQueue; @@ -94,6 +105,7 @@ private: int32_t mAudioQueueGeneration; int32_t mVideoQueueGeneration; + int64_t mFirstAudioTimeUs; int64_t mAnchorTimeMediaUs; int64_t mAnchorTimeRealUs; @@ -113,8 +125,10 @@ private: int64_t mLastPositionUpdateUs; int64_t mVideoLateByUs; + size_t fillAudioBuffer(void *buffer, size_t size); + bool onDrainAudioQueue(); - void postDrainAudioQueue(int64_t delayUs = 0); + void postDrainAudioQueue_l(int64_t delayUs = 0); void onDrainVideoQueue(); void postDrainVideoQueue(); @@ -126,6 +140,7 @@ private: void onQueueEOS(const sp &msg); void onFlush(const sp &msg); void onAudioSinkChanged(); + void onDisableOffloadAudio(); void onPause(); void onResume(); @@ -137,7 +152,9 @@ private: void flushQueue(List *queue); bool dropBufferWhileFlushing(bool audio, const sp &msg); - void syncQueuesDone(); + void syncQueuesDone_l(); + + bool offloadingAudio() const { return (mFlags & FLAG_OFFLOAD_AUDIO) != 0; } DISALLOW_EVIL_CONSTRUCTORS(Renderer); }; -- cgit v1.1