summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorWeiyin Jiang <wjiang@codeaurora.org>2015-08-04 16:24:47 +0800
committerLinux Build Service Account <lnxbuild@localhost>2015-10-06 03:24:33 -0600
commitf9756b6900daa0f98bbcbb7d26f6184cda2a8eef (patch)
tree3fe629dfc56ac386f81476fd94b6ab80a3b56fd8 /media
parentc9792cdfba32fd517b7940d5d1a2a93496afb80c (diff)
downloadframeworks_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
Diffstat (limited to 'media')
-rw-r--r--media/libavextensions/mediaplayerservice/AVNuExtensions.h1
-rw-r--r--media/libavextensions/mediaplayerservice/AVNuUtils.cpp3
-rw-r--r--media/libavextensions/stagefright/AVExtensions.h11
-rw-r--r--media/libavextensions/stagefright/AVUtils.cpp4
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp10
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h9
-rw-r--r--media/libstagefright/StagefrightMediaScanner.cpp5
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;
}