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

Commit 8c928088 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Convert AAC, AMR and Midi Extractors to V3 format

Bug: 111407253
Test: manual, CTS
Change-Id: Id2168fa3dffb070538592fe2c28c285b1a2bf081
parent fd7fa089
Loading
Loading
Loading
Loading
+15 −20
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@

namespace android {

class AACSource : public MediaTrackHelperV2 {
class AACSource : public MediaTrackHelperV3 {
public:
    AACSource(
            DataSourceHelper *source,
@@ -45,7 +45,7 @@ public:
    virtual media_status_t getFormat(AMediaFormat*);

    virtual media_status_t read(
            MediaBufferBase **buffer, const ReadOptions *options = NULL);
            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);

protected:
    virtual ~AACSource();
@@ -58,7 +58,6 @@ private:
    off64_t mOffset;
    int64_t mCurrentTimeUs;
    bool mStarted;
    MediaBufferGroup *mGroup;

    Vector<uint64_t> mOffsetVector;
    int64_t mFrameDurationUs;
@@ -196,7 +195,7 @@ size_t AACExtractor::countTracks() {
    return mInitCheck == OK ? 1 : 0;
}

MediaTrackHelperV2 *AACExtractor::getTrack(size_t index) {
MediaTrackHelperV3 *AACExtractor::getTrack(size_t index) {
    if (mInitCheck != OK || index != 0) {
        return NULL;
    }
@@ -227,7 +226,6 @@ AACSource::AACSource(
      mOffset(0),
      mCurrentTimeUs(0),
      mStarted(false),
      mGroup(NULL),
      mOffsetVector(offset_vector),
      mFrameDurationUs(frame_duration_us) {
}
@@ -248,8 +246,7 @@ media_status_t AACSource::start() {
    }

    mCurrentTimeUs = 0;
    mGroup = new MediaBufferGroup;
    mGroup->add_buffer(MediaBufferBase::Create(kMaxFrameSize));
    mBufferGroup->add_buffer(kMaxFrameSize);
    mStarted = true;

    return AMEDIA_OK;
@@ -258,9 +255,6 @@ media_status_t AACSource::start() {
media_status_t AACSource::stop() {
    CHECK(mStarted);

    delete mGroup;
    mGroup = NULL;

    mStarted = false;
    return AMEDIA_OK;
}
@@ -270,7 +264,7 @@ media_status_t AACSource::getFormat(AMediaFormat *meta) {
}

media_status_t AACSource::read(
        MediaBufferBase **out, const ReadOptions *options) {
        MediaBufferHelperV3 **out, const ReadOptions *options) {
    *out = NULL;

    int64_t seekTimeUs;
@@ -293,8 +287,8 @@ media_status_t AACSource::read(
        return AMEDIA_ERROR_END_OF_STREAM;
    }

    MediaBufferBase *buffer;
    status_t err = mGroup->acquire_buffer(&buffer);
    MediaBufferHelperV3 *buffer;
    status_t err = mBufferGroup->acquire_buffer(&buffer);
    if (err != OK) {
        return AMEDIA_ERROR_UNKNOWN;
    }
@@ -309,8 +303,9 @@ media_status_t AACSource::read(
    }

    buffer->set_range(0, frameSizeWithoutHeader);
    buffer->meta_data().setInt64(kKeyTime, mCurrentTimeUs);
    buffer->meta_data().setInt32(kKeyIsSyncFrame, 1);
    AMediaFormat *meta = buffer->meta_data();
    AMediaFormat_setInt64(meta, AMEDIAFORMAT_KEY_TIME_US, mCurrentTimeUs);
    AMediaFormat_setInt32(meta, AMEDIAFORMAT_KEY_IS_SYNC_FRAME, 1);

    mOffset += frameSize;
    mCurrentTimeUs += mFrameDurationUs;
@@ -321,14 +316,14 @@ media_status_t AACSource::read(

////////////////////////////////////////////////////////////////////////////////

static CMediaExtractorV2* CreateExtractor(
static CMediaExtractorV3* CreateExtractor(
        CDataSource *source,
        void *meta) {
    off64_t offset = *static_cast<off64_t*>(meta);
    return wrapV2(new AACExtractor(new DataSourceHelper(source), offset));
    return wrapV3(new AACExtractor(new DataSourceHelper(source), offset));
}

static CreatorFuncV2 Sniff(
static CreatorFuncV3 Sniff(
        CDataSource *source, float *confidence, void **meta,
        FreeMetaFunc *freeMeta) {
    off64_t pos = 0;
@@ -388,11 +383,11 @@ extern "C" {
__attribute__ ((visibility ("default")))
ExtractorDef GETEXTRACTORDEF() {
    return {
        EXTRACTORDEF_VERSION_CURRENT,
        EXTRACTORDEF_VERSION_CURRENT + 1,
        UUID("4fd80eae-03d2-4d72-9eb9-48fa6bb54613"),
        1, // version
        "AAC Extractor",
        { .v2 = Sniff }
        { .v3 = Sniff }
    };
}

+2 −2
Original line number Diff line number Diff line
@@ -29,12 +29,12 @@ namespace android {
struct AMessage;
class String8;

class AACExtractor : public MediaExtractorPluginHelperV2 {
class AACExtractor : public MediaExtractorPluginHelperV3 {
public:
    AACExtractor(DataSourceHelper *source, off64_t offset);

    virtual size_t countTracks();
    virtual MediaTrackHelperV2 *getTrack(size_t index);
    virtual MediaTrackHelperV3 *getTrack(size_t index);
    virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);

    virtual media_status_t getMetaData(AMediaFormat *meta);
+0 −1
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@ cc_library_shared {

    shared_libs: [
        "liblog",
        "libmediaextractor",
        "libmediandk",
    ],

+15 −18
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@

namespace android {

class AMRSource : public MediaTrackHelperV2 {
class AMRSource : public MediaTrackHelperV3 {
public:
    AMRSource(
            DataSourceHelper *source,
@@ -44,7 +44,7 @@ public:
    virtual media_status_t getFormat(AMediaFormat *);

    virtual media_status_t read(
            MediaBufferBase **buffer, const ReadOptions *options = NULL);
            MediaBufferHelperV3 **buffer, const ReadOptions *options = NULL);

protected:
    virtual ~AMRSource();
@@ -209,7 +209,7 @@ size_t AMRExtractor::countTracks() {
    return mInitCheck == OK ? 1 : 0;
}

MediaTrackHelperV2 *AMRExtractor::getTrack(size_t index) {
MediaTrackHelperV3 *AMRExtractor::getTrack(size_t index) {
    if (mInitCheck != OK || index != 0) {
        return NULL;
    }
@@ -255,8 +255,7 @@ media_status_t AMRSource::start() {

    mOffset = mIsWide ? 9 : 6;
    mCurrentTimeUs = 0;
    mGroup = new MediaBufferGroup;
    mGroup->add_buffer(MediaBufferBase::Create(128));
    mBufferGroup->add_buffer(128);
    mStarted = true;

    return AMEDIA_OK;
@@ -265,9 +264,6 @@ media_status_t AMRSource::start() {
media_status_t AMRSource::stop() {
    CHECK(mStarted);

    delete mGroup;
    mGroup = NULL;

    mStarted = false;
    return AMEDIA_OK;
}
@@ -277,7 +273,7 @@ media_status_t AMRSource::getFormat(AMediaFormat *meta) {
}

media_status_t AMRSource::read(
        MediaBufferBase **out, const ReadOptions *options) {
        MediaBufferHelperV3 **out, const ReadOptions *options) {
    *out = NULL;

    int64_t seekTimeUs;
@@ -326,8 +322,8 @@ media_status_t AMRSource::read(
        return AMEDIA_ERROR_MALFORMED;
    }

    MediaBufferBase *buffer;
    status_t err = mGroup->acquire_buffer(&buffer);
    MediaBufferHelperV3 *buffer;
    status_t err = mBufferGroup->acquire_buffer(&buffer);
    if (err != OK) {
        return AMEDIA_ERROR_UNKNOWN;
    }
@@ -348,8 +344,9 @@ media_status_t AMRSource::read(
    }

    buffer->set_range(0, frameSize);
    buffer->meta_data().setInt64(kKeyTime, mCurrentTimeUs);
    buffer->meta_data().setInt32(kKeyIsSyncFrame, 1);
    AMediaFormat *meta = buffer->meta_data();
    AMediaFormat_setInt64(meta, AMEDIAFORMAT_KEY_TIME_US, mCurrentTimeUs);
    AMediaFormat_setInt32(meta, AMEDIAFORMAT_KEY_IS_SYNC_FRAME, 1);

    mOffset += frameSize;
    mCurrentTimeUs += 20000;  // Each frame is 20ms
@@ -366,22 +363,22 @@ extern "C" {
__attribute__ ((visibility ("default")))
ExtractorDef GETEXTRACTORDEF() {
    return {
        EXTRACTORDEF_VERSION_CURRENT,
        EXTRACTORDEF_VERSION_CURRENT + 1,
        UUID("c86639c9-2f31-40ac-a715-fa01b4493aaf"),
        1,
        "AMR Extractor",
        {
           .v2 = [](
           .v3 = [](
                    CDataSource *source,
                    float *confidence,
                    void **,
                    FreeMetaFunc *) -> CreatorFuncV2 {
                    FreeMetaFunc *) -> CreatorFuncV3 {
                DataSourceHelper helper(source);
                if (SniffAMR(&helper, nullptr, confidence)) {
                    return [](
                            CDataSource *source,
                            void *) -> CMediaExtractorV2* {
                        return wrapV2(new AMRExtractor(new DataSourceHelper(source)));};
                            void *) -> CMediaExtractorV3* {
                        return wrapV3(new AMRExtractor(new DataSourceHelper(source)));};
                }
                return NULL;
            }
+2 −2
Original line number Diff line number Diff line
@@ -29,12 +29,12 @@ struct AMessage;
class String8;
#define OFFSET_TABLE_LEN    300

class AMRExtractor : public MediaExtractorPluginHelperV2 {
class AMRExtractor : public MediaExtractorPluginHelperV3 {
public:
    explicit AMRExtractor(DataSourceHelper *source);

    virtual size_t countTracks();
    virtual MediaTrackHelperV2 *getTrack(size_t index);
    virtual MediaTrackHelperV3 *getTrack(size_t index);
    virtual media_status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);

    virtual media_status_t getMetaData(AMediaFormat *meta);
Loading