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

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

Merge "Convert FLAC Extractor to V3 format"

parents 87127ec5 88bd26d8
Loading
Loading
Loading
Loading
+24 −24
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MetaDataUtils.h>
#include <media/stagefright/MediaBufferBase.h>
#include <private/android_filesystem_config.h> // for AID_MEDIA
#include <system/audio.h>

@@ -53,7 +52,7 @@ static inline bool shouldExtractorOutputFloat(int bitsPerSample)

class FLACParser;

class FLACSource : public MediaTrackHelperV2 {
class FLACSource : public MediaTrackHelperV3 {

public:
    FLACSource(
@@ -66,7 +65,7 @@ public:
    virtual media_status_t getFormat(AMediaFormat *meta);

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

protected:
    virtual ~FLACSource();
@@ -125,12 +124,12 @@ public:
    }

    // media buffers
    void allocateBuffers();
    void allocateBuffers(MediaBufferGroupHelperV3 *group);
    void releaseBuffers();
    MediaBufferBase *readBuffer() {
    MediaBufferHelperV3 *readBuffer() {
        return readBuffer(false, 0LL);
    }
    MediaBufferBase *readBuffer(FLAC__uint64 sample) {
    MediaBufferHelperV3 *readBuffer(FLAC__uint64 sample) {
        return readBuffer(true, sample);
    }

@@ -143,7 +142,7 @@ private:

    // media buffers
    size_t mMaxBufferSize;
    MediaBufferGroup *mGroup;
    MediaBufferGroupHelperV3 *mGroup;
    void (*mCopy)(int16_t *dst, const int * src[kMaxChannels], unsigned nSamples, unsigned nChannels);

    // handle to underlying libFLAC parser
@@ -167,7 +166,7 @@ private:
    FLAC__StreamDecoderErrorStatus mErrorStatus;

    status_t init();
    MediaBufferBase *readBuffer(bool doSeek, FLAC__uint64 sample);
    MediaBufferHelperV3 *readBuffer(bool doSeek, FLAC__uint64 sample);

    // no copy constructor or assignment
    FLACParser(const FLACParser &);
@@ -577,12 +576,12 @@ status_t FLACParser::init()
    return OK;
}

void FLACParser::allocateBuffers()
void FLACParser::allocateBuffers(MediaBufferGroupHelperV3 *group)
{
    CHECK(mGroup == NULL);
    mGroup = new MediaBufferGroup;
    mGroup = group;
    mMaxBufferSize = getMaxBlockSize() * getChannels() * getOutputSampleSize();
    mGroup->add_buffer(MediaBufferBase::Create(mMaxBufferSize));
    mGroup->add_buffer(mMaxBufferSize);
}

void FLACParser::releaseBuffers()
@@ -592,7 +591,7 @@ void FLACParser::releaseBuffers()
    mGroup = NULL;
}

MediaBufferBase *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample)
MediaBufferHelperV3 *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample)
{
    mWriteRequested = true;
    mWriteCompleted = false;
@@ -629,7 +628,7 @@ MediaBufferBase *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample)
    }
    // acquire a media buffer
    CHECK(mGroup != NULL);
    MediaBufferBase *buffer;
    MediaBufferHelperV3 *buffer;
    status_t err = mGroup->acquire_buffer(&buffer);
    if (err != OK) {
        return NULL;
@@ -656,8 +655,9 @@ MediaBufferBase *FLACParser::readBuffer(bool doSeek, FLAC__uint64 sample)
    CHECK(mWriteHeader.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER);
    FLAC__uint64 sampleNumber = mWriteHeader.number.sample_number;
    int64_t timeUs = (1000000LL * sampleNumber) / getSampleRate();
    buffer->meta_data().setInt64(kKeyTime, timeUs);
    buffer->meta_data().setInt32(kKeyIsSyncFrame, 1);
    AMediaFormat *meta = buffer->meta_data();
    AMediaFormat_setInt64(meta, AMEDIAFORMAT_KEY_TIME_US, timeUs);
    AMediaFormat_setInt32(meta, AMEDIAFORMAT_KEY_IS_SYNC_FRAME, 1);
    return buffer;
}

@@ -691,7 +691,7 @@ media_status_t FLACSource::start()
    ALOGV("FLACSource::start");

    CHECK(!mStarted);
    mParser->allocateBuffers();
    mParser->allocateBuffers(mBufferGroup);
    mStarted = true;

    return AMEDIA_OK;
@@ -719,9 +719,9 @@ media_status_t FLACSource::getFormat(AMediaFormat *meta)
}

media_status_t FLACSource::read(
        MediaBufferBase **outBuffer, const ReadOptions *options)
        MediaBufferHelperV3 **outBuffer, const ReadOptions *options)
{
    MediaBufferBase *buffer;
    MediaBufferHelperV3 *buffer;
    // process an optional seek request
    int64_t seekTimeUs;
    ReadOptions::SeekMode mode;
@@ -775,7 +775,7 @@ size_t FLACExtractor::countTracks()
    return mInitCheck == OK ? 1 : 0;
}

MediaTrackHelperV2 *FLACExtractor::getTrack(size_t index)
MediaTrackHelperV3 *FLACExtractor::getTrack(size_t index)
{
    if (mInitCheck != OK || index > 0) {
        return NULL;
@@ -831,22 +831,22 @@ extern "C" {
__attribute__ ((visibility ("default")))
ExtractorDef GETEXTRACTORDEF() {
    return {
            EXTRACTORDEF_VERSION_CURRENT,
            EXTRACTORDEF_VERSION_CURRENT + 1,
            UUID("1364b048-cc45-4fda-9934-327d0ebf9829"),
            1,
            "FLAC Extractor",
            {
                .v2 = [](
                .v3 = [](
                        CDataSource *source,
                        float *confidence,
                        void **,
                        FreeMetaFunc *) -> CreatorFuncV2 {
                        FreeMetaFunc *) -> CreatorFuncV3 {
                    DataSourceHelper helper(source);
                    if (SniffFLAC(&helper, confidence)) {
                        return [](
                                CDataSource *source,
                                void *) -> CMediaExtractorV2* {
                            return wrapV2(new FLACExtractor(new DataSourceHelper(source)));};
                                void *) -> CMediaExtractorV3* {
                            return wrapV3(new FLACExtractor(new DataSourceHelper(source)));};
                    }
                    return NULL;
                }
+2 −2
Original line number Diff line number Diff line
@@ -27,13 +27,13 @@ namespace android {

class FLACParser;

class FLACExtractor : public MediaExtractorPluginHelperV2 {
class FLACExtractor : public MediaExtractorPluginHelperV3 {

public:
    explicit FLACExtractor(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);