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

Commit 2a243f08 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Remove RefBase from plugin-side DataSource

Extractor plugins now use DataSourceBase, which is not refcounted.
Framework-side DataSource derives from DataSourceBase and RefBase.
Also remove MediaExtractor::release, because it is not needed
anymore due to the way the extractor/track/datasource lifecycle
is managed now.
Also add source and target pid to CallbackDataSource name, to
make the extractor dumpsys more useful.

Bug: 67908556
Test: build, boot, CTS, skia test app for heif
Change-Id: I6b9cbe903f76b0cf27ba87f4a456f424803efd08
parent 58bce947
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
../../media/libmediaextractor/include/media/DataSourceBase.h
 No newline at end of file
+8 −8
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@
#include <utils/Log.h>

#include "AACExtractor.h"
#include <media/DataSource.h>
#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -35,7 +35,7 @@ namespace android {

class AACSource : public MediaSourceBase {
public:
    AACSource(const sp<DataSource> &source,
    AACSource(DataSourceBase *source,
              const sp<MetaData> &meta,
              const Vector<uint64_t> &offset_vector,
              int64_t frame_duration_us);
@@ -53,7 +53,7 @@ protected:

private:
    static const size_t kMaxFrameSize;
    sp<DataSource> mDataSource;
    DataSourceBase *mDataSource;
    sp<MetaData> mMeta;

    off64_t mOffset;
@@ -91,7 +91,7 @@ uint32_t get_sample_rate(const uint8_t sf_index)
// The returned value is the AAC frame size with the ADTS header length (regardless of
//     the presence of the CRC).
// If headerSize is non-NULL, it will be used to return the size of the header of this ADTS frame.
static size_t getAdtsFrameLength(const sp<DataSource> &source, off64_t offset, size_t* headerSize) {
static size_t getAdtsFrameLength(DataSourceBase *source, off64_t offset, size_t* headerSize) {

    const size_t kAdtsHeaderLengthNoCrc = 7;
    const size_t kAdtsHeaderLengthWithCrc = 9;
@@ -132,7 +132,7 @@ static size_t getAdtsFrameLength(const sp<DataSource> &source, off64_t offset, s
}

AACExtractor::AACExtractor(
        const sp<DataSource> &source, const sp<AMessage> &_meta)
        DataSourceBase *source, const sp<AMessage> &_meta)
    : mDataSource(source),
      mInitCheck(NO_INIT),
      mFrameDurationUs(0) {
@@ -229,7 +229,7 @@ sp<MetaData> AACExtractor::getTrackMetaData(size_t index, uint32_t /* flags */)
const size_t AACSource::kMaxFrameSize = 8192;

AACSource::AACSource(
        const sp<DataSource> &source, const sp<MetaData> &meta,
        DataSourceBase *source, const sp<MetaData> &meta,
        const Vector<uint64_t> &offset_vector,
        int64_t frame_duration_us)
    : mDataSource(source),
@@ -332,13 +332,13 @@ status_t AACSource::read(
////////////////////////////////////////////////////////////////////////////////

static MediaExtractor* CreateExtractor(
        const sp<DataSource> &source,
        DataSourceBase *source,
        const sp<AMessage>& meta) {
    return new AACExtractor(source, meta);
}

static MediaExtractor::CreatorFunc Sniff(
        const sp<DataSource> &source, String8 *mimeType, float *confidence,
        DataSourceBase *source, String8 *mimeType, float *confidence,
        sp<AMessage> *meta) {
    off64_t pos = 0;

+3 −3
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ class String8;

class AACExtractor : public MediaExtractor {
public:
    AACExtractor(const sp<DataSource> &source, const sp<AMessage> &meta);
    AACExtractor(DataSourceBase *source, const sp<AMessage> &meta);

    virtual size_t countTracks();
    virtual MediaSourceBase *getTrack(size_t index);
@@ -42,7 +42,7 @@ protected:
    virtual ~AACExtractor();

private:
    sp<DataSource> mDataSource;
    DataSourceBase *mDataSource;
    sp<MetaData> mMeta;
    status_t mInitCheck;

@@ -54,7 +54,7 @@ private:
};

bool SniffAAC(
        const sp<DataSource> &source, String8 *mimeType, float *confidence,
        DataSourceBase *source, String8 *mimeType, float *confidence,
        sp<AMessage> *);

}  // namespace android
+9 −9
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@

#include "AMRExtractor.h"

#include <media/DataSource.h>
#include <media/DataSourceBase.h>
#include <media/MediaSourceBase.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/MediaBufferGroup.h>
@@ -33,7 +33,7 @@ namespace android {

class AMRSource : public MediaSourceBase {
public:
    AMRSource(const sp<DataSource> &source,
    AMRSource(DataSourceBase *source,
              const sp<MetaData> &meta,
              bool isWide,
              const off64_t *offset_table,
@@ -51,7 +51,7 @@ protected:
    virtual ~AMRSource();

private:
    sp<DataSource> mDataSource;
    DataSourceBase *mDataSource;
    sp<MetaData> mMeta;
    bool mIsWide;

@@ -97,7 +97,7 @@ static size_t getFrameSize(bool isWide, unsigned FT) {
    return frameSize;
}

static status_t getFrameSizeByOffset(const sp<DataSource> &source,
static status_t getFrameSizeByOffset(DataSourceBase *source,
        off64_t offset, bool isWide, size_t *frameSize) {
    uint8_t header;
    ssize_t count = source->readAt(offset, &header, 1);
@@ -116,7 +116,7 @@ static status_t getFrameSizeByOffset(const sp<DataSource> &source,
    return OK;
}

AMRExtractor::AMRExtractor(const sp<DataSource> &source)
AMRExtractor::AMRExtractor(DataSourceBase *source)
    : mDataSource(source),
      mInitCheck(NO_INIT),
      mOffsetTableLength(0) {
@@ -206,7 +206,7 @@ sp<MetaData> AMRExtractor::getTrackMetaData(size_t index, uint32_t /* flags */)
////////////////////////////////////////////////////////////////////////////////

AMRSource::AMRSource(
        const sp<DataSource> &source, const sp<MetaData> &meta,
        DataSourceBase *source, const sp<MetaData> &meta,
        bool isWide, const off64_t *offset_table, size_t offset_table_length)
    : mDataSource(source),
      mMeta(meta),
@@ -339,7 +339,7 @@ status_t AMRSource::read(
////////////////////////////////////////////////////////////////////////////////

bool SniffAMR(
        const sp<DataSource> &source, String8 *mimeType, float *confidence,
        DataSourceBase *source, String8 *mimeType, float *confidence,
        sp<AMessage> *) {
    char header[9];

@@ -372,13 +372,13 @@ MediaExtractor::ExtractorDef GETEXTRACTORDEF() {
        1,
        "AMR Extractor",
        [](
                const sp<DataSource> &source,
                DataSourceBase *source,
                String8 *mimeType,
                float *confidence,
                sp<AMessage> *meta __unused) -> MediaExtractor::CreatorFunc {
            if (SniffAMR(source, mimeType, confidence, meta)) {
                return [](
                        const sp<DataSource> &source,
                        DataSourceBase *source,
                        const sp<AMessage>& meta __unused) -> MediaExtractor* {
                    return new AMRExtractor(source);};
            }
+3 −3
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ class String8;

class AMRExtractor : public MediaExtractor {
public:
    explicit AMRExtractor(const sp<DataSource> &source);
    explicit AMRExtractor(DataSourceBase *source);

    virtual size_t countTracks();
    virtual MediaSourceBase *getTrack(size_t index);
@@ -42,7 +42,7 @@ protected:
    virtual ~AMRExtractor();

private:
    sp<DataSource> mDataSource;
    DataSourceBase *mDataSource;
    sp<MetaData> mMeta;
    status_t mInitCheck;
    bool mIsWide;
@@ -55,7 +55,7 @@ private:
};

bool SniffAMR(
        const sp<DataSource> &source, String8 *mimeType, float *confidence,
        DataSourceBase *source, String8 *mimeType, float *confidence,
        sp<AMessage> *);

}  // namespace android
Loading