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

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

Merge "Convert AMRExtractor to AMediaFormat"

parents f0f5a1bd 5da22937
Loading
Loading
Loading
Loading
+31 −29
Original line number Diff line number Diff line
@@ -29,11 +29,11 @@

namespace android {

class AMRSource : public MediaTrackHelper {
class AMRSource : public MediaTrackHelperV2 {
public:
    AMRSource(
            DataSourceHelper *source,
            MetaDataBase &meta,
            AMediaFormat *meta,
            bool isWide,
            const off64_t *offset_table,
            size_t offset_table_length);
@@ -41,7 +41,7 @@ public:
    virtual status_t start();
    virtual status_t stop();

    virtual status_t getFormat(MetaDataBase &);
    virtual status_t getFormat(AMediaFormat *);

    virtual status_t read(
            MediaBufferBase **buffer, const ReadOptions *options = NULL);
@@ -51,7 +51,7 @@ protected:

private:
    DataSourceHelper *mDataSource;
    MetaDataBase mMeta;
    AMediaFormat *mMeta;
    bool mIsWide;

    off64_t mOffset;
@@ -151,12 +151,12 @@ AMRExtractor::AMRExtractor(DataSourceHelper *source)
        return;
    }

    mMeta.setCString(
            kKeyMIMEType, mIsWide ? MEDIA_MIMETYPE_AUDIO_AMR_WB
                                  : MEDIA_MIMETYPE_AUDIO_AMR_NB);
    mMeta = AMediaFormat_new();
    AMediaFormat_setString(mMeta, AMEDIAFORMAT_KEY_MIME,
            mIsWide ? MEDIA_MIMETYPE_AUDIO_AMR_WB : MEDIA_MIMETYPE_AUDIO_AMR_NB);

    mMeta.setInt32(kKeyChannelCount, 1);
    mMeta.setInt32(kKeySampleRate, mIsWide ? 16000 : 8000);
    AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_CHANNEL_COUNT, 1);
    AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_SAMPLE_RATE, mIsWide ? 16000 : 8000);

    off64_t offset = mIsWide ? 9 : 6;
    off64_t streamSize;
@@ -183,7 +183,7 @@ AMRExtractor::AMRExtractor(DataSourceHelper *source)
            numFrames ++;
        }

        mMeta.setInt64(kKeyDuration, duration);
        AMediaFormat_setInt64(mMeta, AMEDIAFORMAT_KEY_DURATION, duration);
    }

    mInitCheck = OK;
@@ -191,13 +191,15 @@ AMRExtractor::AMRExtractor(DataSourceHelper *source)

AMRExtractor::~AMRExtractor() {
    delete mDataSource;
    AMediaFormat_delete(mMeta);
}

status_t AMRExtractor::getMetaData(MetaDataBase &meta) {
    meta.clear();
status_t AMRExtractor::getMetaData(AMediaFormat *meta) {
    AMediaFormat_clear(meta);

    if (mInitCheck == OK) {
        meta.setCString(kKeyMIMEType, mIsWide ? "audio/amr-wb" : "audio/amr");
        AMediaFormat_setString(meta,
                AMEDIAFORMAT_KEY_MIME, mIsWide ? "audio/amr-wb" : "audio/amr");
    }

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

MediaTrackHelper *AMRExtractor::getTrack(size_t index) {
MediaTrackHelperV2 *AMRExtractor::getTrack(size_t index) {
    if (mInitCheck != OK || index != 0) {
        return NULL;
    }
@@ -216,19 +218,19 @@ MediaTrackHelper *AMRExtractor::getTrack(size_t index) {
            mOffsetTable, mOffsetTableLength);
}

status_t AMRExtractor::getTrackMetaData(MetaDataBase &meta, size_t index, uint32_t /* flags */) {
status_t AMRExtractor::getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t /* flags */) {
    if (mInitCheck != OK || index != 0) {
        return UNKNOWN_ERROR;
    }

    meta = mMeta;
    AMediaFormat_copy(meta, mMeta);
    return OK;
}

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

AMRSource::AMRSource(
        DataSourceHelper *source, MetaDataBase &meta,
        DataSourceHelper *source, AMediaFormat *meta,
        bool isWide, const off64_t *offset_table, size_t offset_table_length)
    : mDataSource(source),
      mMeta(meta),
@@ -271,8 +273,8 @@ status_t AMRSource::stop() {
    return OK;
}

status_t AMRSource::getFormat(MetaDataBase &meta) {
    meta = mMeta;
status_t AMRSource::getFormat(AMediaFormat *meta) {
    AMediaFormat_copy(meta, mMeta);
    return OK;
}

@@ -366,22 +368,22 @@ extern "C" {
__attribute__ ((visibility ("default")))
ExtractorDef GETEXTRACTORDEF() {
    return {
        EXTRACTORDEF_VERSION,
        EXTRACTORDEF_VERSION_CURRENT,
        UUID("c86639c9-2f31-40ac-a715-fa01b4493aaf"),
        1,
        "AMR Extractor",
        {
           [](
           .v2 = [](
                    CDataSource *source,
                    float *confidence,
                    void **,
                    FreeMetaFunc *) -> CreatorFunc {
                    FreeMetaFunc *) -> CreatorFuncV2 {
                DataSourceHelper helper(source);
                if (SniffAMR(&helper, nullptr, confidence)) {
                    return [](
                            CDataSource *source,
                            void *) -> CMediaExtractor* {
                        return wrap(new AMRExtractor(new DataSourceHelper(source)));};
                            void *) -> CMediaExtractorV2* {
                        return wrapV2(new AMRExtractor(new DataSourceHelper(source)));};
                }
                return NULL;
            }
+6 −6
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@
#include <utils/Errors.h>
#include <media/MediaExtractorPluginApi.h>
#include <media/MediaExtractorPluginHelper.h>
#include <media/stagefright/MetaDataBase.h>
#include <media/NdkMediaFormat.h>

namespace android {

@@ -29,15 +29,15 @@ struct AMessage;
class String8;
#define OFFSET_TABLE_LEN    300

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

    virtual size_t countTracks();
    virtual MediaTrackHelper *getTrack(size_t index);
    virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags);
    virtual MediaTrackHelperV2 *getTrack(size_t index);
    virtual status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);

    virtual status_t getMetaData(MetaDataBase& meta);
    virtual status_t getMetaData(AMediaFormat *meta);
    virtual const char * name() { return "AMRExtractor"; }

protected:
@@ -45,7 +45,7 @@ protected:

private:
    DataSourceHelper *mDataSource;
    MetaDataBase mMeta;
    AMediaFormat *mMeta;
    status_t mInitCheck;
    bool mIsWide;

+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ cc_library_shared {
    shared_libs: [
        "liblog",
        "libmediaextractor",
        "libmediandk",
    ],

    static_libs: [