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

Commit 17bab796 authored by Satya Krishna Pindiproli's avatar Satya Krishna Pindiproli Committed by Linux Build Service Account
Browse files

libstagefright: Enable ACodec path for QTI FLAC solution

Use the OMX component of default RAW decoder for FLAC codec and
setup NuMediaExtractor to extract PCM samples from FLACDecoder.

CRs-Fixed: 643618
Change-Id: Iaa7594e4d882b52157f49e7c9b2da1861ba49568
parent 301e8a9c
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1118,8 +1118,13 @@ status_t ACodec::setComponentRole(
            "video_decoder.vp9", "video_encoder.vp9" },
        { MEDIA_MIMETYPE_AUDIO_RAW,
            "audio_decoder.raw", "audio_encoder.raw" },
#ifdef QTI_FLAC_DECODER
        { MEDIA_MIMETYPE_AUDIO_FLAC,
            "audio_decoder.raw", NULL },
#else
        { MEDIA_MIMETYPE_AUDIO_FLAC,
            "audio_decoder.flac", "audio_encoder.flac" },
#endif
        { MEDIA_MIMETYPE_AUDIO_MSGSM,
            "audio_decoder.gsm", "audio_encoder.gsm" },
        { MEDIA_MIMETYPE_VIDEO_MPEG2,
+16 −8
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@
#include "include/ESDS.h"
#include "include/NuCachedSource2.h"
#include "include/WVMExtractor.h"
#ifdef QTI_FLAC_DECODER
#include "include/FLACDecoder.h"
#endif

#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -277,24 +280,29 @@ status_t NuMediaExtractor::selectTrack(size_t index) {
            return OK;
        }
    }

    sp<MediaSource> source = mImpl->getTrack(index);

    CHECK_EQ((status_t)OK, source->start());

    mSelectedTracks.push();
    TrackInfo *info = &mSelectedTracks.editItemAt(mSelectedTracks.size() - 1);

    const char *mime;
    CHECK(source->getFormat()->findCString(kKeyMIMEType, &mime));
    if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_FLAC)) {
#ifdef QTI_FLAC_DECODER
        sp<MediaSource> mFlacSource = new FLACDecoder(source);
        info->mSource = mFlacSource;
        mFlacSource->start();
#endif
    } else {
        CHECK_EQ((status_t)OK, source->start());
        info->mSource = source;
    }

    info->mTrackIndex = index;
    info->mFinalResult = OK;
    info->mSample = NULL;
    info->mSampleTimeUs = -1ll;
    info->mTrackFlags = 0;

    const char *mime;
    CHECK(source->getFormat()->findCString(kKeyMIMEType, &mime));

    if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_VORBIS)) {
        info->mTrackFlags |= kIsVorbis;
    }