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

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

Merge "Convert AAC, AMR and Midi Extractors to V3 format"

parents 3d583d96 8c928088
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