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

Commit d423f9d2 authored by Mingming Yin's avatar Mingming Yin Committed by Linux Build Service Account
Browse files

audio: add support for extended audio encoding

- add support for EVRC, QCELP, h/w AAC and LPCM encoding.

Conflicts:
	include/media/mediarecorder.h
	media/libmediaplayerservice/StagefrightRecorder.h

Change-Id: I2f93a88ed5c9bd502399ef145a5802d1a15fcc45
parent 46bc4f0c
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -816,8 +816,10 @@ status_t StagefrightRecorder::prepareInternal() {
            break;

        default:
            if (handleCustomRecording() != OK) {
                ALOGE("Unsupported output file format: %d", mOutputFormat);
                status = UNKNOWN_ERROR;
            }
            break;
    }

@@ -881,8 +883,10 @@ status_t StagefrightRecorder::start() {

        default:
        {
            if (handleCustomOutputFormats() != OK) {
                ALOGE("Unsupported output file format: %d", mOutputFormat);
                status = UNKNOWN_ERROR;
            }
            break;
        }
    }
@@ -969,9 +973,11 @@ sp<MediaCodecSource> StagefrightRecorder::createAudioSource() {
            break;

        default:
            if (handleCustomAudioSource(format) != OK) {
                ALOGE("Unknown audio encoder: %d", mAudioEncoder);
                return NULL;
            }
    }

    int32_t maxInputSize;
    CHECK(audioSource->getFormat()->findInt32(
@@ -1620,9 +1626,11 @@ status_t StagefrightRecorder::setupAudioEncoder(const sp<MediaWriter>& writer) {
            break;

        default:
            if (handleCustomAudioEncoder() != OK) {
                ALOGE("Unsupported audio encoder: %d", mAudioEncoder);
                return UNKNOWN_ERROR;
            }
    }

    sp<MediaCodecSource> audioEncoder = createAudioSource();
    if (audioEncoder == NULL) {
+4 −0
Original line number Diff line number Diff line
@@ -195,6 +195,10 @@ protected:
    void clipNumberOfAudioChannels();
    void setDefaultProfileIfNecessary();
    void setDefaultVideoEncoderIfNecessary();
    virtual status_t handleCustomOutputFormats() {return UNKNOWN_ERROR;}
    virtual status_t handleCustomRecording() {return UNKNOWN_ERROR;}
    virtual status_t handleCustomAudioSource(sp<AMessage> /*format*/) {return UNKNOWN_ERROR;}
    virtual status_t handleCustomAudioEncoder() {return UNKNOWN_ERROR;}


    StagefrightRecorder(const StagefrightRecorder &);
+4 −0
Original line number Diff line number Diff line
@@ -6392,6 +6392,10 @@ bool ACodec::UninitializedState::onAllocateComponent(const sp<AMessage> &msg) {
        if (list != NULL && list->findCodecByName(componentName.c_str()) >= 0) {
            matchingCodecs.add(componentName);
        }
        if (matchingCodecs.size() == 0 && componentName.find("qcom", 0) > 0) {
            matchingCodecs.add(componentName);
        }

    } else {
        CHECK(msg->findString("mime", &mime));

+9 −6
Original line number Diff line number Diff line
@@ -458,12 +458,15 @@ status_t MediaCodecSource::initEncoder() {
    CHECK(mOutputFormat->findString("mime", &outputMIME));

    Vector<AString> matchingCodecs;
    if (AVUtils::get()->useQCHWEncoder(mOutputFormat, &matchingCodecs)) {
        ;
    } else {
        MediaCodecList::findMatchingCodecs(
                outputMIME.c_str(), true /* encoder */,
                ((mFlags & FLAG_PREFER_SOFTWARE_CODEC) ? MediaCodecList::kPreferSoftwareCodecs : 0),
                &matchingCodecs);
    if (matchingCodecs.size() == 0)
        AVUtils::get()->useQCHWEncoder(mOutputFormat, &matchingCodecs);
    }

    status_t err = NO_INIT;
    for (size_t ix = 0; ix < matchingCodecs.size(); ++ix) {
        mEncoder = MediaCodec::CreateByComponentName(