Loading include/media/stagefright/MediaBuffer.h +10 −0 Original line number Original line Diff line number Diff line Loading @@ -108,6 +108,14 @@ public: return reinterpret_cast<SharedControl *>(memory->pointer())->isDeadObject(); return reinterpret_cast<SharedControl *>(memory->pointer())->isDeadObject(); } } // Sticky on enabling of shared memory MediaBuffers. By default we don't use // shared memory for MediaBuffers, but we enable this for those processes // that export MediaBuffers. static void useSharedMemory() { std::atomic_store_explicit( &mUseSharedMemory, (int_least32_t)1, std::memory_order_seq_cst); } protected: protected: // MediaBuffer remote releases are handled through a // MediaBuffer remote releases are handled through a // pending release count variable stored in a SharedControl block // pending release count variable stored in a SharedControl block Loading Loading @@ -161,6 +169,8 @@ private: MediaBuffer *mOriginal; MediaBuffer *mOriginal; static std::atomic_int_least32_t mUseSharedMemory; MediaBuffer(const MediaBuffer &); MediaBuffer(const MediaBuffer &); MediaBuffer &operator=(const MediaBuffer &); MediaBuffer &operator=(const MediaBuffer &); Loading media/libmedia/IMediaExtractorService.cpp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -71,6 +71,9 @@ status_t BnMediaExtractorService::onTransact( ALOGE("Error reading source from parcel"); ALOGE("Error reading source from parcel"); return ret; return ret; } } // If we make an extractor through Binder, enabled shared memory // for MediaBuffers for this process. MediaBuffer::useSharedMemory(); sp<IDataSource> source = interface_cast<IDataSource>(b); sp<IDataSource> source = interface_cast<IDataSource>(b); const char *mime = data.readCString(); const char *mime = data.readCString(); sp<IMediaExtractor> ex = makeExtractor(source, mime); sp<IMediaExtractor> ex = makeExtractor(source, mime); Loading media/libstagefright/foundation/MediaBuffer.cpp +5 −1 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,9 @@ namespace android { namespace android { /* static */ std::atomic_int_least32_t MediaBuffer::mUseSharedMemory(0); MediaBuffer::MediaBuffer(void *data, size_t size) MediaBuffer::MediaBuffer(void *data, size_t size) : mObserver(NULL), : mObserver(NULL), mRefCount(0), mRefCount(0), Loading @@ -52,7 +55,8 @@ MediaBuffer::MediaBuffer(size_t size) mOwnsData(true), mOwnsData(true), mMetaData(new MetaData), mMetaData(new MetaData), mOriginal(NULL) { mOriginal(NULL) { if (size < kSharedMemThreshold) { if (size < kSharedMemThreshold || std::atomic_load_explicit(&mUseSharedMemory, std::memory_order_seq_cst) == 0) { mData = malloc(size); mData = malloc(size); } else { } else { ALOGV("creating memoryDealer"); ALOGV("creating memoryDealer"); Loading Loading
include/media/stagefright/MediaBuffer.h +10 −0 Original line number Original line Diff line number Diff line Loading @@ -108,6 +108,14 @@ public: return reinterpret_cast<SharedControl *>(memory->pointer())->isDeadObject(); return reinterpret_cast<SharedControl *>(memory->pointer())->isDeadObject(); } } // Sticky on enabling of shared memory MediaBuffers. By default we don't use // shared memory for MediaBuffers, but we enable this for those processes // that export MediaBuffers. static void useSharedMemory() { std::atomic_store_explicit( &mUseSharedMemory, (int_least32_t)1, std::memory_order_seq_cst); } protected: protected: // MediaBuffer remote releases are handled through a // MediaBuffer remote releases are handled through a // pending release count variable stored in a SharedControl block // pending release count variable stored in a SharedControl block Loading Loading @@ -161,6 +169,8 @@ private: MediaBuffer *mOriginal; MediaBuffer *mOriginal; static std::atomic_int_least32_t mUseSharedMemory; MediaBuffer(const MediaBuffer &); MediaBuffer(const MediaBuffer &); MediaBuffer &operator=(const MediaBuffer &); MediaBuffer &operator=(const MediaBuffer &); Loading
media/libmedia/IMediaExtractorService.cpp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -71,6 +71,9 @@ status_t BnMediaExtractorService::onTransact( ALOGE("Error reading source from parcel"); ALOGE("Error reading source from parcel"); return ret; return ret; } } // If we make an extractor through Binder, enabled shared memory // for MediaBuffers for this process. MediaBuffer::useSharedMemory(); sp<IDataSource> source = interface_cast<IDataSource>(b); sp<IDataSource> source = interface_cast<IDataSource>(b); const char *mime = data.readCString(); const char *mime = data.readCString(); sp<IMediaExtractor> ex = makeExtractor(source, mime); sp<IMediaExtractor> ex = makeExtractor(source, mime); Loading
media/libstagefright/foundation/MediaBuffer.cpp +5 −1 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,9 @@ namespace android { namespace android { /* static */ std::atomic_int_least32_t MediaBuffer::mUseSharedMemory(0); MediaBuffer::MediaBuffer(void *data, size_t size) MediaBuffer::MediaBuffer(void *data, size_t size) : mObserver(NULL), : mObserver(NULL), mRefCount(0), mRefCount(0), Loading @@ -52,7 +55,8 @@ MediaBuffer::MediaBuffer(size_t size) mOwnsData(true), mOwnsData(true), mMetaData(new MetaData), mMetaData(new MetaData), mOriginal(NULL) { mOriginal(NULL) { if (size < kSharedMemThreshold) { if (size < kSharedMemThreshold || std::atomic_load_explicit(&mUseSharedMemory, std::memory_order_seq_cst) == 0) { mData = malloc(size); mData = malloc(size); } else { } else { ALOGV("creating memoryDealer"); ALOGV("creating memoryDealer"); Loading