diff --git a/include/media/MediaExtractorPluginHelper.h b/include/media/MediaExtractorPluginHelper.h index c817b30764..a659660865 100644 --- a/include/media/MediaExtractorPluginHelper.h +++ b/include/media/MediaExtractorPluginHelper.h @@ -129,11 +129,13 @@ public: mSource = source->mSource; } - ssize_t readAt(off64_t offset, void *data, size_t size) { + virtual ~DataSourceHelper() {} + + virtual ssize_t readAt(off64_t offset, void *data, size_t size) { return mSource->readAt(mSource->handle, offset, data, size); } - status_t getSize(off64_t *size) { + virtual status_t getSize(off64_t *size) { return mSource->getSize(mSource->handle, size); } @@ -141,7 +143,7 @@ public: return mSource->getUri(mSource->handle, uriString, bufferSize); } - uint32_t flags() { + virtual uint32_t flags() { return mSource->flags(mSource->handle); } diff --git a/media/extractors/mp4/MPEG4Extractor.cpp b/media/extractors/mp4/MPEG4Extractor.cpp index f52d451356..9d2f5d28c5 100644 --- a/media/extractors/mp4/MPEG4Extractor.cpp +++ b/media/extractors/mp4/MPEG4Extractor.cpp @@ -198,13 +198,14 @@ private: // possibly wrapping multiple times to cover all tracks, i.e. // Each CachedRangedDataSource caches the sampletable metadata for a single track. -struct CachedRangedDataSource : public DataSourceHelper { +class CachedRangedDataSource : public DataSourceHelper { +public: explicit CachedRangedDataSource(DataSourceHelper *source); virtual ~CachedRangedDataSource(); - virtual ssize_t readAt(off64_t offset, void *data, size_t size); - virtual status_t getSize(off64_t *size); - virtual uint32_t flags(); + ssize_t readAt(off64_t offset, void *data, size_t size) override; + status_t getSize(off64_t *size) override; + uint32_t flags() override; status_t setCachedRange(off64_t offset, size_t size, bool assumeSourceOwnershipOnSuccess); @@ -236,7 +237,7 @@ CachedRangedDataSource::CachedRangedDataSource(DataSourceHelper *source) CachedRangedDataSource::~CachedRangedDataSource() { clearCache(); if (mOwnsDataSource) { - delete (CachedRangedDataSource*)mSource; + delete mSource; } } @@ -366,7 +367,6 @@ MPEG4Extractor::MPEG4Extractor(DataSourceHelper *source, const char *mime) mMoofFound(false), mMdatFound(false), mDataSource(source), - mCachedSource(NULL), mInitCheck(NO_INIT), mHeaderTimescale(0), mIsQT(false), @@ -393,9 +393,6 @@ MPEG4Extractor::~MPEG4Extractor() { } mPssh.clear(); - if (mCachedSource != mDataSource) { - delete mCachedSource; - } delete mDataSource; } @@ -909,8 +906,8 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { if (cachedSource->setCachedRange( *offset, chunk_size, - mCachedSource != NULL /* assume ownership on success */) == OK) { - mDataSource = mCachedSource = cachedSource; + true /* assume ownership on success */) == OK) { + mDataSource = cachedSource; } else { delete cachedSource; } diff --git a/media/extractors/mp4/MPEG4Extractor.h b/media/extractors/mp4/MPEG4Extractor.h index ca273e082c..b1e04c7c73 100644 --- a/media/extractors/mp4/MPEG4Extractor.h +++ b/media/extractors/mp4/MPEG4Extractor.h @@ -33,7 +33,6 @@ namespace android { struct AMessage; struct CDataSource; class DataSourceHelper; -struct CachedRangedDataSource; class SampleTable; class String8; namespace heif { @@ -99,7 +98,6 @@ private: Vector mTrex; DataSourceHelper *mDataSource; - CachedRangedDataSource *mCachedSource; status_t mInitCheck; uint32_t mHeaderTimescale; bool mIsQT;