Loading media/libmediaextractor/MediaBuffer.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ MediaBuffer::MediaBuffer(void *data, size_t size) mRangeOffset(0), mRangeLength(size), mOwnsData(false), mMetaData(new MetaData), mMetaData(new MetaDataBase), mOriginal(NULL) { } Loading @@ -51,7 +51,7 @@ MediaBuffer::MediaBuffer(size_t size) mRangeOffset(0), mRangeLength(size), mOwnsData(true), mMetaData(new MetaData), mMetaData(new MetaDataBase), mOriginal(NULL) { if (size < kSharedMemThreshold || std::atomic_load_explicit(&mUseSharedMemory, std::memory_order_seq_cst) == 0) { Loading Loading @@ -84,7 +84,7 @@ MediaBuffer::MediaBuffer(const sp<ABuffer> &buffer) mRangeLength(mSize), mBuffer(buffer), mOwnsData(false), mMetaData(new MetaData), mMetaData(new MetaDataBase), mOriginal(NULL) { } Loading @@ -96,7 +96,7 @@ void MediaBuffer::release() { return; } int prevCount = __sync_fetch_and_sub(&mRefCount, 1); int prevCount = mRefCount.fetch_sub(1); if (prevCount == 1) { if (mObserver == NULL) { delete this; Loading @@ -110,13 +110,13 @@ void MediaBuffer::release() { void MediaBuffer::claim() { CHECK(mObserver != NULL); CHECK_EQ(mRefCount, 1); CHECK_EQ(mRefCount.load(std::memory_order_relaxed), 1); mRefCount = 0; mRefCount.store(0, std::memory_order_relaxed); } void MediaBuffer::add_ref() { (void) __sync_fetch_and_add(&mRefCount, 1); (void) mRefCount.fetch_add(1); } void *MediaBuffer::data() const { Loading media/libmediaextractor/include/media/stagefright/MediaBuffer.h +4 −2 Original line number Diff line number Diff line Loading @@ -86,12 +86,14 @@ public: virtual MediaBufferBase *clone(); // sum of localRefcount() and remoteRefcount() // Result should be treated as approximate unless the result precludes concurrent accesses. virtual int refcount() const { return localRefcount() + remoteRefcount(); } // Result should be treated as approximate unless the result precludes concurrent accesses. virtual int localRefcount() const { return mRefCount; return mRefCount.load(std::memory_order_relaxed); } virtual int remoteRefcount() const { Loading Loading @@ -146,7 +148,7 @@ private: void claim(); MediaBufferObserver *mObserver; int mRefCount; std::atomic<int> mRefCount; void *mData; size_t mSize, mRangeOffset, mRangeLength; Loading Loading
media/libmediaextractor/MediaBuffer.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ MediaBuffer::MediaBuffer(void *data, size_t size) mRangeOffset(0), mRangeLength(size), mOwnsData(false), mMetaData(new MetaData), mMetaData(new MetaDataBase), mOriginal(NULL) { } Loading @@ -51,7 +51,7 @@ MediaBuffer::MediaBuffer(size_t size) mRangeOffset(0), mRangeLength(size), mOwnsData(true), mMetaData(new MetaData), mMetaData(new MetaDataBase), mOriginal(NULL) { if (size < kSharedMemThreshold || std::atomic_load_explicit(&mUseSharedMemory, std::memory_order_seq_cst) == 0) { Loading Loading @@ -84,7 +84,7 @@ MediaBuffer::MediaBuffer(const sp<ABuffer> &buffer) mRangeLength(mSize), mBuffer(buffer), mOwnsData(false), mMetaData(new MetaData), mMetaData(new MetaDataBase), mOriginal(NULL) { } Loading @@ -96,7 +96,7 @@ void MediaBuffer::release() { return; } int prevCount = __sync_fetch_and_sub(&mRefCount, 1); int prevCount = mRefCount.fetch_sub(1); if (prevCount == 1) { if (mObserver == NULL) { delete this; Loading @@ -110,13 +110,13 @@ void MediaBuffer::release() { void MediaBuffer::claim() { CHECK(mObserver != NULL); CHECK_EQ(mRefCount, 1); CHECK_EQ(mRefCount.load(std::memory_order_relaxed), 1); mRefCount = 0; mRefCount.store(0, std::memory_order_relaxed); } void MediaBuffer::add_ref() { (void) __sync_fetch_and_add(&mRefCount, 1); (void) mRefCount.fetch_add(1); } void *MediaBuffer::data() const { Loading
media/libmediaextractor/include/media/stagefright/MediaBuffer.h +4 −2 Original line number Diff line number Diff line Loading @@ -86,12 +86,14 @@ public: virtual MediaBufferBase *clone(); // sum of localRefcount() and remoteRefcount() // Result should be treated as approximate unless the result precludes concurrent accesses. virtual int refcount() const { return localRefcount() + remoteRefcount(); } // Result should be treated as approximate unless the result precludes concurrent accesses. virtual int localRefcount() const { return mRefCount; return mRefCount.load(std::memory_order_relaxed); } virtual int remoteRefcount() const { Loading Loading @@ -146,7 +148,7 @@ private: void claim(); MediaBufferObserver *mObserver; int mRefCount; std::atomic<int> mRefCount; void *mData; size_t mSize, mRangeOffset, mRangeLength; Loading