Loading media/libmedia/IMediaSource.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -107,7 +107,7 @@ public: data.writeInterfaceToken(BpMediaSource::getInterfaceDescriptor()); data.writeInterfaceToken(BpMediaSource::getInterfaceDescriptor()); status_t ret = remote()->transact(GETFORMAT, data, &reply); status_t ret = remote()->transact(GETFORMAT, data, &reply); if (ret == NO_ERROR) { if (ret == NO_ERROR) { AutoMutex _l(mLock); AutoMutex _l(mBpLock); mMetaData = MetaData::createFromParcel(reply); mMetaData = MetaData::createFromParcel(reply); return mMetaData; return mMetaData; } } Loading Loading @@ -224,7 +224,7 @@ private: // XXX: could we use this for caching, or does metadata change on the fly? // XXX: could we use this for caching, or does metadata change on the fly? sp<MetaData> mMetaData; sp<MetaData> mMetaData; // ensure synchronize access to mMetaData // ensure synchronize access to mMetaData Mutex mLock; Mutex mBpLock; // Cache all IMemory objects received from MediaExtractor. // Cache all IMemory objects received from MediaExtractor. // We gc IMemory objects that are no longer active (referenced by a MediaBuffer). // We gc IMemory objects that are no longer active (referenced by a MediaBuffer). Loading Loading @@ -301,6 +301,7 @@ status_t BnMediaSource::onTransact( CHECK_INTERFACE(IMediaSource, data, reply); CHECK_INTERFACE(IMediaSource, data, reply); mGroup->signalBufferReturned(nullptr); mGroup->signalBufferReturned(nullptr); status_t status = stop(); status_t status = stop(); AutoMutex _l(mBnLock); mIndexCache.reset(); mIndexCache.reset(); mBuffersSinceStop = 0; mBuffersSinceStop = 0; return status; return status; Loading Loading @@ -340,6 +341,7 @@ status_t BnMediaSource::onTransact( && len == sizeof(opts) && len == sizeof(opts) && data.read((void *)&opts, len) == NO_ERROR; && data.read((void *)&opts, len) == NO_ERROR; AutoMutex _l(mBnLock); mGroup->signalBufferReturned(nullptr); mGroup->signalBufferReturned(nullptr); mIndexCache.gc(); mIndexCache.gc(); size_t inlineTransferSize = 0; size_t inlineTransferSize = 0; Loading media/libmedia/include/media/IMediaSource.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -135,6 +135,7 @@ protected: private: private: uint32_t mBuffersSinceStop; // Buffer tracking variable uint32_t mBuffersSinceStop; // Buffer tracking variable Mutex mBnLock; // to guard readMultiple against concurrent access to the buffer cache std::unique_ptr<MediaBufferGroup> mGroup; std::unique_ptr<MediaBufferGroup> mGroup; Loading Loading
media/libmedia/IMediaSource.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -107,7 +107,7 @@ public: data.writeInterfaceToken(BpMediaSource::getInterfaceDescriptor()); data.writeInterfaceToken(BpMediaSource::getInterfaceDescriptor()); status_t ret = remote()->transact(GETFORMAT, data, &reply); status_t ret = remote()->transact(GETFORMAT, data, &reply); if (ret == NO_ERROR) { if (ret == NO_ERROR) { AutoMutex _l(mLock); AutoMutex _l(mBpLock); mMetaData = MetaData::createFromParcel(reply); mMetaData = MetaData::createFromParcel(reply); return mMetaData; return mMetaData; } } Loading Loading @@ -224,7 +224,7 @@ private: // XXX: could we use this for caching, or does metadata change on the fly? // XXX: could we use this for caching, or does metadata change on the fly? sp<MetaData> mMetaData; sp<MetaData> mMetaData; // ensure synchronize access to mMetaData // ensure synchronize access to mMetaData Mutex mLock; Mutex mBpLock; // Cache all IMemory objects received from MediaExtractor. // Cache all IMemory objects received from MediaExtractor. // We gc IMemory objects that are no longer active (referenced by a MediaBuffer). // We gc IMemory objects that are no longer active (referenced by a MediaBuffer). Loading Loading @@ -301,6 +301,7 @@ status_t BnMediaSource::onTransact( CHECK_INTERFACE(IMediaSource, data, reply); CHECK_INTERFACE(IMediaSource, data, reply); mGroup->signalBufferReturned(nullptr); mGroup->signalBufferReturned(nullptr); status_t status = stop(); status_t status = stop(); AutoMutex _l(mBnLock); mIndexCache.reset(); mIndexCache.reset(); mBuffersSinceStop = 0; mBuffersSinceStop = 0; return status; return status; Loading Loading @@ -340,6 +341,7 @@ status_t BnMediaSource::onTransact( && len == sizeof(opts) && len == sizeof(opts) && data.read((void *)&opts, len) == NO_ERROR; && data.read((void *)&opts, len) == NO_ERROR; AutoMutex _l(mBnLock); mGroup->signalBufferReturned(nullptr); mGroup->signalBufferReturned(nullptr); mIndexCache.gc(); mIndexCache.gc(); size_t inlineTransferSize = 0; size_t inlineTransferSize = 0; Loading
media/libmedia/include/media/IMediaSource.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -135,6 +135,7 @@ protected: private: private: uint32_t mBuffersSinceStop; // Buffer tracking variable uint32_t mBuffersSinceStop; // Buffer tracking variable Mutex mBnLock; // to guard readMultiple against concurrent access to the buffer cache std::unique_ptr<MediaBufferGroup> mGroup; std::unique_ptr<MediaBufferGroup> mGroup; Loading