diff options
author | Richard Fitzgerald <rf@opensource.wolfsonmicro.com> | 2013-05-14 15:52:03 +0100 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2013-07-26 10:12:33 -0700 |
commit | 94ea60f975c3eb7ce6d2a4430538a42a5fc3babd (patch) | |
tree | b16c8a2a59ab68cf0564eefea6c9e68baba56860 /include | |
parent | d89532e133b881c7e0dac089333ad7642fc510f1 (diff) | |
download | frameworks_av-94ea60f975c3eb7ce6d2a4430538a42a5fc3babd.zip frameworks_av-94ea60f975c3eb7ce6d2a4430538a42a5fc3babd.tar.gz frameworks_av-94ea60f975c3eb7ce6d2a4430538a42a5fc3babd.tar.bz2 |
stagefright: offload playback support
Offloading of compressed audio decoding to audio DSP
is implemented for audio only, non streamed content.
when the datasource is
AudioPlayer:
- Create an offloaded sink when playing a compressed
source
- Send metadata to audio HAL
- Return sink start error to AwesomePlayer so that a
new player for PCM audio can be created in case of problem.
- Forward stream end and tear down callback events to AwesomePlayer
- Stop the sink and wait for stream end callback when EOS is reached.
- Pause and restart the sink if needed before flushing when seeking
(otherwise flush is a no op).
- For current media time, directly query the render position from the
sink and offset by the start position (seek to time)
AwesomePlayer:
- When initializing the audio decoder, check with audio policy manager
if offloading is supported. If yes, create the software decoder in
case a reconfiguration is needed but connect the audio track directly
to the AudioPlayer.
- In case of error when starting the AudioPlayer, reconnect the software
decoder (OMXSource) and recreate a PCM AudioPlayer.
- Handle AudioPlayer tear down event by detroying and recreating the
AudioPlayer to allow transitions between situations were offloading
is supported or not.
- Force tear down of offloaded AudioPlayer when paused for a certain time:
This will close the sink and allow the DSP to power down.
Utils:
- Added helper methods:
- send meta data to audio ia sink setParameters
- query audio policy manager if offloading is supported for a
given audio content
Change-Id: I115842ce424f947b966d45e253a74d3fd5df9aae
Signed-off-by: Eric Laurent <elaurent@google.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/media/stagefright/AudioPlayer.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/include/media/stagefright/AudioPlayer.h b/include/media/stagefright/AudioPlayer.h index ec9f2df..912a43c 100644 --- a/include/media/stagefright/AudioPlayer.h +++ b/include/media/stagefright/AudioPlayer.h @@ -38,7 +38,10 @@ public: enum { ALLOW_DEEP_BUFFERING = 0x01, - USE_OFFLOAD = 0x02 + USE_OFFLOAD = 0x02, + HAS_VIDEO = 0x1000, + IS_STREAMING = 0x2000 + }; AudioPlayer(const sp<MediaPlayerBase::AudioSink> &audioSink, @@ -56,7 +59,7 @@ public: status_t start(bool sourceAlreadyStarted = false); void pause(bool playPendingSamples = false); - void resume(); + status_t resume(); // Returns the timestamp of the last buffer played (in us). int64_t getMediaTimeUs(); @@ -104,11 +107,13 @@ private: MediaBuffer *mFirstBuffer; sp<MediaPlayerBase::AudioSink> mAudioSink; - bool mAllowDeepBuffering; // allow audio deep audio buffers. Helps with low power audio - // playback but implies high latency AwesomePlayer *mObserver; int64_t mPinnedTimeUs; + bool mPlaying; + int64_t mStartPosUs; + const uint32_t mCreateFlags; + static void AudioCallback(int event, void *user, void *info); void AudioCallback(int event, void *info); @@ -126,6 +131,9 @@ private: uint32_t getNumFramesPendingPlayout() const; int64_t getOutputPlayPositionUs_l() const; + bool allowDeepBuffering() const { return (mCreateFlags & ALLOW_DEEP_BUFFERING) != 0; } + bool useOffload() const { return (mCreateFlags & USE_OFFLOAD) != 0; } + AudioPlayer(const AudioPlayer &); AudioPlayer &operator=(const AudioPlayer &); }; |