diff options
author | Weiyin Jiang <wjiang@codeaurora.org> | 2015-08-04 16:24:47 +0800 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2015-10-06 03:24:33 -0600 |
commit | f9756b6900daa0f98bbcbb7d26f6184cda2a8eef (patch) | |
tree | 3fe629dfc56ac386f81476fd94b6ab80a3b56fd8 | |
parent | c9792cdfba32fd517b7940d5d1a2a93496afb80c (diff) | |
download | frameworks_av-f9756b6900daa0f98bbcbb7d26f6184cda2a8eef.zip frameworks_av-f9756b6900daa0f98bbcbb7d26f6184cda2a8eef.tar.gz frameworks_av-f9756b6900daa0f98bbcbb7d26f6184cda2a8eef.tar.bz2 |
audio: add support for vorbis offloading
add support for vorbis offload playback
Change-Id: Ic51a9d3e0fad1114908f59bfbc6ce62c6fd9fdea
7 files changed, 29 insertions, 14 deletions
diff --git a/media/libavextensions/mediaplayerservice/AVNuExtensions.h b/media/libavextensions/mediaplayerservice/AVNuExtensions.h index ccf3615..6ab790f 100644 --- a/media/libavextensions/mediaplayerservice/AVNuExtensions.h +++ b/media/libavextensions/mediaplayerservice/AVNuExtensions.h @@ -69,6 +69,7 @@ struct AVNuUtils { virtual bool pcmOffloadException(const sp<MetaData> &); virtual bool isRAWFormat(const sp<MetaData> &); virtual bool isRAWFormat(const sp<AMessage> &); + virtual bool isVorbisFormat(const sp<MetaData> &); virtual int updateAudioBitWidth(audio_format_t audioFormat, const sp<AMessage> &); virtual audio_format_t getKeyPCMFormat(const sp<MetaData> &); diff --git a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp index e890a61..2e2e511 100644 --- a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp +++ b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp @@ -61,6 +61,9 @@ bool AVNuUtils::isRAWFormat(const sp<AMessage> &) { return false; } +bool AVNuUtils::isVorbisFormat(const sp<MetaData> &) { + return false; +} int AVNuUtils::updateAudioBitWidth(audio_format_t /*audioFormat*/, const sp<AMessage> &){ diff --git a/media/libavextensions/stagefright/AVExtensions.h b/media/libavextensions/stagefright/AVExtensions.h index 06257be..8ac21a1 100644 --- a/media/libavextensions/stagefright/AVExtensions.h +++ b/media/libavextensions/stagefright/AVExtensions.h @@ -35,13 +35,15 @@ namespace android { -struct ACodec; +class AudioParameter; +class MetaData; class MediaExtractor; +struct ACodec; +struct ALooper; +struct IMediaHTTPConnection; struct MediaCodec; -class AudioParameter; -struct NuCachedSource2; struct MediaHTTP; -struct IMediaHTTPConnection; +struct NuCachedSource2; /* * Factory to create objects of base-classes in libstagefright @@ -74,6 +76,7 @@ struct AVUtils { virtual sp<MediaCodec> createCustomComponentByName(const sp<ALooper> &looper, const char* mime, bool encoder); + virtual bool isEnhancedExtension(const char *extension); virtual bool is24bitPCMOffloadEnabled(); virtual bool is16bitPCMOffloadEnabled(); diff --git a/media/libavextensions/stagefright/AVUtils.cpp b/media/libavextensions/stagefright/AVUtils.cpp index ee0602b..64bbc03 100644 --- a/media/libavextensions/stagefright/AVUtils.cpp +++ b/media/libavextensions/stagefright/AVUtils.cpp @@ -105,6 +105,10 @@ bool AVUtils::canOffloadAPE(const sp<MetaData> &meta) { return true; } +bool AVUtils::isEnhancedExtension(const char *) { + return false; +} + // ----- NO TRESSPASSING BEYOND THIS LINE ------ AVUtils::AVUtils() { } diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp index 96e98f0..c5e1aaf 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp @@ -35,9 +35,6 @@ namespace android { -// TODO optimize buffer size for power consumption -// The offload read buffer size is 32 KB but 24 KB uses less power. -static const size_t kAggregateBufferSizeBytes = 24 * 1024; static const size_t kMaxCachedBytes = 200000; NuPlayer::DecoderPassThrough::DecoderPassThrough( @@ -47,6 +44,9 @@ NuPlayer::DecoderPassThrough::DecoderPassThrough( : DecoderBase(notify), mSource(source), mRenderer(renderer), + // TODO optimize buffer size for power consumption + // The offload read buffer size is 32 KB but 24 KB uses less power. + mAggregateBufferSizeBytes(24 * 1024), mSkipRenderingUntilMediaTimeUs(-1ll), mPaused(false), mReachedEOS(true), @@ -174,9 +174,9 @@ sp<ABuffer> NuPlayer::DecoderPassThrough::aggregateBuffer( size_t smallSize = accessUnit->size(); if ((mAggregateBuffer == NULL) // Don't bother if only room for a few small buffers. - && (smallSize < (kAggregateBufferSizeBytes / 3))) { + && (smallSize < (mAggregateBufferSizeBytes / 3))) { // Create a larger buffer for combining smaller buffers from the extractor. - mAggregateBuffer = new ABuffer(kAggregateBufferSizeBytes); + mAggregateBuffer = new ABuffer(mAggregateBufferSizeBytes); mAggregateBuffer->setRange(0, 0); // start empty } diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h index 188967a..629e266 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h @@ -44,6 +44,7 @@ protected: virtual void onShutdown(bool notifyComplete); virtual bool doRequestBuffers(); virtual void setPcmFormat(const sp<AMessage> & /*format*/) {} + virtual sp<ABuffer> aggregateBuffer(const sp<ABuffer> &accessUnit); enum { kWhatBufferConsumed = 'bufC', @@ -51,17 +52,18 @@ protected: sp<Source> mSource; sp<Renderer> mRenderer; + size_t mAggregateBufferSizeBytes; int64_t mSkipRenderingUntilMediaTimeUs; bool mPaused; - - bool mReachedEOS; + bool mReachedEOS; // Used by feedDecoderInputData to aggregate small buffers into // one large buffer. + status_t mPendingAudioErr; sp<ABuffer> mPendingAudioAccessUnit; - status_t mPendingAudioErr; sp<ABuffer> mAggregateBuffer; +private: // mPendingBuffersToDrain are only for debugging. It can be removed // when the power investigation is done. size_t mPendingBuffersToDrain; @@ -72,7 +74,6 @@ protected: bool isDoneFetching() const; status_t dequeueAccessUnit(sp<ABuffer> *accessUnit); - sp<ABuffer> aggregateBuffer(const sp<ABuffer> &accessUnit); status_t fetchInputData(sp<AMessage> &reply); void doFlush(bool notifyComplete); diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp index db33e83..a757181 100644 --- a/media/libstagefright/StagefrightMediaScanner.cpp +++ b/media/libstagefright/StagefrightMediaScanner.cpp @@ -28,6 +28,8 @@ #include <media/mediametadataretriever.h> #include <private/media/VideoFrame.h> +#include <stagefright/AVExtensions.h> + namespace android { StagefrightMediaScanner::StagefrightMediaScanner() {} @@ -75,7 +77,8 @@ MediaScanResult StagefrightMediaScanner::processFileInternal( return MEDIA_SCAN_RESULT_SKIPPED; } - if (!FileHasAcceptableExtension(extension)) { + if (!FileHasAcceptableExtension(extension) + && !AVUtils::get()->isEnhancedExtension(extension)) { return MEDIA_SCAN_RESULT_SKIPPED; } |