diff options
Diffstat (limited to 'media')
-rw-r--r-- | media/libmediaplayerservice/MetadataRetrieverClient.cpp | 23 | ||||
-rw-r--r-- | media/libmediaplayerservice/MetadataRetrieverClient.h | 2 | ||||
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 13 | ||||
-rw-r--r-- | media/libstagefright/colorconversion/SoftwareRenderer.cpp | 11 |
4 files changed, 28 insertions, 21 deletions
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 162bebb..550b84d 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -28,7 +28,8 @@ #include <string.h> #include <cutils/atomic.h> #include <cutils/properties.h> -#include <binder/MemoryDealer.h> +#include <binder/MemoryBase.h> +#include <binder/MemoryHeapBase.h> #include <android_runtime/ActivityManager.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> @@ -62,8 +63,6 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) { LOGV("MetadataRetrieverClient constructor pid(%d)", pid); mPid = pid; - mThumbnailDealer = NULL; - mAlbumArtDealer = NULL; mThumbnail = NULL; mAlbumArt = NULL; mRetriever = NULL; @@ -94,8 +93,6 @@ void MetadataRetrieverClient::disconnect() LOGV("disconnect from pid %d", mPid); Mutex::Autolock lock(mLock); mRetriever.clear(); - mThumbnailDealer.clear(); - mAlbumArtDealer.clear(); mThumbnail.clear(); mAlbumArt.clear(); mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL; @@ -242,7 +239,6 @@ sp<IMemory> MetadataRetrieverClient::captureFrame() LOGV("captureFrame"); Mutex::Autolock lock(mLock); mThumbnail.clear(); - mThumbnailDealer.clear(); if (mRetriever == NULL) { LOGE("retriever is not initialized"); return NULL; @@ -253,16 +249,15 @@ sp<IMemory> MetadataRetrieverClient::captureFrame() return NULL; } size_t size = sizeof(VideoFrame) + frame->mSize; - mThumbnailDealer = new MemoryDealer(size, "MetadataRetrieverClient"); - if (mThumbnailDealer == NULL) { + sp<MemoryHeapBase> heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient"); + if (heap == NULL) { LOGE("failed to create MemoryDealer"); delete frame; return NULL; } - mThumbnail = mThumbnailDealer->allocate(size); + mThumbnail = new MemoryBase(heap, 0, size); if (mThumbnail == NULL) { LOGE("not enough memory for VideoFrame size=%u", size); - mThumbnailDealer.clear(); delete frame; return NULL; } @@ -283,7 +278,6 @@ sp<IMemory> MetadataRetrieverClient::extractAlbumArt() LOGV("extractAlbumArt"); Mutex::Autolock lock(mLock); mAlbumArt.clear(); - mAlbumArtDealer.clear(); if (mRetriever == NULL) { LOGE("retriever is not initialized"); return NULL; @@ -294,16 +288,15 @@ sp<IMemory> MetadataRetrieverClient::extractAlbumArt() return NULL; } size_t size = sizeof(MediaAlbumArt) + albumArt->mSize; - mAlbumArtDealer = new MemoryDealer(size, "MetadataRetrieverClient"); - if (mAlbumArtDealer == NULL) { + sp<MemoryHeapBase> heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient"); + if (heap == NULL) { LOGE("failed to create MemoryDealer object"); delete albumArt; return NULL; } - mAlbumArt = mAlbumArtDealer->allocate(size); + mAlbumArt = new MemoryBase(heap, 0, size); if (mAlbumArt == NULL) { LOGE("not enough memory for MediaAlbumArt size=%u", size); - mAlbumArtDealer.clear(); delete albumArt; return NULL; } diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.h b/media/libmediaplayerservice/MetadataRetrieverClient.h index 8cb8ad1..4aab94f 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.h +++ b/media/libmediaplayerservice/MetadataRetrieverClient.h @@ -63,8 +63,6 @@ private: int mMode; // Keep the shared memory copy of album art and capture frame (for thumbnail) - sp<MemoryDealer> mAlbumArtDealer; - sp<MemoryDealer> mThumbnailDealer; sp<IMemory> mAlbumArt; sp<IMemory> mThumbnail; }; diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index e17fbb8..90bbdfe 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -290,6 +290,7 @@ uint32_t OMXCodec::getComponentQuirks(const char *componentName) { } if (!strcmp(componentName, "OMX.TI.MP3.decode")) { quirks |= kNeedsFlushBeforeDisable; + quirks |= kDecoderLiesAboutNumberOfChannels; } if (!strcmp(componentName, "OMX.TI.AAC.decode")) { quirks |= kNeedsFlushBeforeDisable; @@ -2817,7 +2818,9 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { if ((OMX_U32)numChannels != params.nChannels) { LOGW("Codec outputs a different number of channels than " - "the input stream contains."); + "the input stream contains (contains %d channels, " + "codec outputs %ld channels).", + numChannels, params.nChannels); } mOutputFormat->setCString( @@ -2825,8 +2828,12 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { // Use the codec-advertised number of channels, as some // codecs appear to output stereo even if the input data is - // mono. - mOutputFormat->setInt32(kKeyChannelCount, params.nChannels); + // mono. If we know the codec lies about this information, + // use the actual number of channels instead. + mOutputFormat->setInt32( + kKeyChannelCount, + (mQuirks & kDecoderLiesAboutNumberOfChannels) + ? numChannels : params.nChannels); // The codec-reported sampleRate is not reliable... mOutputFormat->setInt32(kKeySampleRate, sampleRate); diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp index ef6ede0..ed91eea 100644 --- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp +++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp @@ -20,6 +20,7 @@ #include "../include/SoftwareRenderer.h" #include <binder/MemoryHeapBase.h> +#include <binder/MemoryHeapPmem.h> #include <media/stagefright/MediaDebug.h> #include <ui/ISurface.h> @@ -38,8 +39,16 @@ SoftwareRenderer::SoftwareRenderer( mDecodedWidth(decodedWidth), mDecodedHeight(decodedHeight), mFrameSize(mDecodedWidth * mDecodedHeight * 2), // RGB565 - mMemoryHeap(new MemoryHeapBase(2 * mFrameSize)), mIndex(0) { + // TODO: How do I allocate physical memory on Droid? + mMemoryHeap = new MemoryHeapBase("/dev/pmem_adsp", 2 * mFrameSize); + if (mMemoryHeap->heapID() < 0) { + LOGI("Creating physical memory heap failed, reverting to regular heap."); + mMemoryHeap = new MemoryHeapBase(2 * mFrameSize); + } else { + mMemoryHeap = new MemoryHeapPmem(mMemoryHeap); + } + CHECK(mISurface.get() != NULL); CHECK(mDecodedWidth > 0); CHECK(mDecodedHeight > 0); |