Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb179d14 authored by Marco Nelissen's avatar Marco Nelissen Committed by Android (Google) Code Review
Browse files

Merge "Fix and simplify cached datasource handling."

parents c4e5b8d0 c2b10b3d
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -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);
    }

+8 −11
Original line number Diff line number Diff line
@@ -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;
                    }
+0 −2
Original line number Diff line number Diff line
@@ -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<Trex> mTrex;

    DataSourceHelper *mDataSource;
    CachedRangedDataSource *mCachedSource;
    status_t mInitCheck;
    uint32_t mHeaderTimescale;
    bool mIsQT;