Loading media/libheif/HeifDecoderImpl.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -401,6 +401,10 @@ bool HeifDecoderImpl::decode(HeifFrameInfo* frameInfo) { videoFrame->getFlattenedIccData()); } mFrameDecoded = true; // Aggressive clear to avoid holding on to resources mRetriever.clear(); mDataSource.clear(); return true; } Loading media/libmedia/IMediaExtractor.cpp +15 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ enum { SETMEDIACAS, SETUID, NAME, GETMETRICS GETMETRICS, RELEASE, }; class BpMediaExtractor : public BpInterface<IMediaExtractor> { Loading Loading @@ -138,6 +139,13 @@ public: ALOGV("name NOT IMPLEMENTED"); return NULL; } virtual void release() { ALOGV("release"); Parcel data, reply; data.writeInterfaceToken(BpMediaExtractor::getInterfaceDescriptor()); remote()->transact(RELEASE, data, &reply); } }; IMPLEMENT_META_INTERFACE(MediaExtractor, "android.media.IMediaExtractor"); Loading Loading @@ -215,6 +223,12 @@ status_t BnMediaExtractor::onTransact( reply->writeInt32(setMediaCas(casToken)); return OK; } case RELEASE: { ALOGV("release"); CHECK_INTERFACE(IMediaExtractor, data, reply); release(); return OK; } default: return BBinder::onTransact(code, data, reply, flags); } Loading media/libmedia/include/media/IMediaExtractor.h +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ public: virtual void setUID(uid_t uid) = 0; virtual const char * name() = 0; virtual void release() = 0; }; Loading media/libstagefright/MPEG4Extractor.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,10 @@ MPEG4Extractor::MPEG4Extractor(const sp<DataSource> &source) } MPEG4Extractor::~MPEG4Extractor() { release(); } void MPEG4Extractor::release() { Track *track = mFirstTrack; while (track) { Track *next = track->next; Loading @@ -375,6 +379,12 @@ MPEG4Extractor::~MPEG4Extractor() { for (size_t i = 0; i < mPssh.size(); i++) { delete [] mPssh[i].data; } mPssh.clear(); if (mDataSource != NULL) { mDataSource->close(); mDataSource.clear(); } } uint32_t MPEG4Extractor::flags() const { Loading media/libstagefright/StagefrightMetadataRetriever.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,12 @@ StagefrightMetadataRetriever::StagefrightMetadataRetriever() StagefrightMetadataRetriever::~StagefrightMetadataRetriever() { ALOGV("~StagefrightMetadataRetriever()"); clearMetadata(); // Explicitly release extractor before continuing with the destructor, // some extractors might need to callback to close off the DataSource // and we need to make sure it's still there. if (mExtractor != NULL) { mExtractor->release(); } if (mSource != NULL) { mSource->close(); } Loading Loading
media/libheif/HeifDecoderImpl.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -401,6 +401,10 @@ bool HeifDecoderImpl::decode(HeifFrameInfo* frameInfo) { videoFrame->getFlattenedIccData()); } mFrameDecoded = true; // Aggressive clear to avoid holding on to resources mRetriever.clear(); mDataSource.clear(); return true; } Loading
media/libmedia/IMediaExtractor.cpp +15 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ enum { SETMEDIACAS, SETUID, NAME, GETMETRICS GETMETRICS, RELEASE, }; class BpMediaExtractor : public BpInterface<IMediaExtractor> { Loading Loading @@ -138,6 +139,13 @@ public: ALOGV("name NOT IMPLEMENTED"); return NULL; } virtual void release() { ALOGV("release"); Parcel data, reply; data.writeInterfaceToken(BpMediaExtractor::getInterfaceDescriptor()); remote()->transact(RELEASE, data, &reply); } }; IMPLEMENT_META_INTERFACE(MediaExtractor, "android.media.IMediaExtractor"); Loading Loading @@ -215,6 +223,12 @@ status_t BnMediaExtractor::onTransact( reply->writeInt32(setMediaCas(casToken)); return OK; } case RELEASE: { ALOGV("release"); CHECK_INTERFACE(IMediaExtractor, data, reply); release(); return OK; } default: return BBinder::onTransact(code, data, reply, flags); } Loading
media/libmedia/include/media/IMediaExtractor.h +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ public: virtual void setUID(uid_t uid) = 0; virtual const char * name() = 0; virtual void release() = 0; }; Loading
media/libstagefright/MPEG4Extractor.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,10 @@ MPEG4Extractor::MPEG4Extractor(const sp<DataSource> &source) } MPEG4Extractor::~MPEG4Extractor() { release(); } void MPEG4Extractor::release() { Track *track = mFirstTrack; while (track) { Track *next = track->next; Loading @@ -375,6 +379,12 @@ MPEG4Extractor::~MPEG4Extractor() { for (size_t i = 0; i < mPssh.size(); i++) { delete [] mPssh[i].data; } mPssh.clear(); if (mDataSource != NULL) { mDataSource->close(); mDataSource.clear(); } } uint32_t MPEG4Extractor::flags() const { Loading
media/libstagefright/StagefrightMetadataRetriever.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,12 @@ StagefrightMetadataRetriever::StagefrightMetadataRetriever() StagefrightMetadataRetriever::~StagefrightMetadataRetriever() { ALOGV("~StagefrightMetadataRetriever()"); clearMetadata(); // Explicitly release extractor before continuing with the destructor, // some extractors might need to callback to close off the DataSource // and we need to make sure it's still there. if (mExtractor != NULL) { mExtractor->release(); } if (mSource != NULL) { mSource->close(); } Loading