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

Commit cd7466f4 authored by Yanning Bai's avatar Yanning Bai Committed by Mikhail Naganov
Browse files

Add AC-4 support for ACodec

Bug: 119312182
Test: make
Change-Id: I96ae9822914fb84041df25b3120d6744fd502e6a
parent b079c02b
Loading
Loading
Loading
Loading
+60 −0
Original line number Original line Diff line number Diff line
@@ -2237,6 +2237,15 @@ status_t ACodec::configureCodec(
        } else {
        } else {
            err = setupEAC3Codec(encoder, numChannels, sampleRate);
            err = setupEAC3Codec(encoder, numChannels, sampleRate);
        }
        }
     } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AC4)) {
        int32_t numChannels;
        int32_t sampleRate;
        if (!msg->findInt32("channel-count", &numChannels)
                || !msg->findInt32("sample-rate", &sampleRate)) {
            err = INVALID_OPERATION;
        } else {
            err = setupAC4Codec(encoder, numChannels, sampleRate);
        }
    }
    }


    if (err != OK) {
    if (err != OK) {
@@ -2893,6 +2902,38 @@ status_t ACodec::setupEAC3Codec(
            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidEac3, &def, sizeof(def));
            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidEac3, &def, sizeof(def));
}
}


status_t ACodec::setupAC4Codec(
        bool encoder, int32_t numChannels, int32_t sampleRate) {
    status_t err = setupRawAudioFormat(
            encoder ? kPortIndexInput : kPortIndexOutput, sampleRate, numChannels);

    if (err != OK) {
        return err;
    }

    if (encoder) {
        ALOGW("AC4 encoding is not supported.");
        return INVALID_OPERATION;
    }

    OMX_AUDIO_PARAM_ANDROID_AC4TYPE def;
    InitOMXParams(&def);
    def.nPortIndex = kPortIndexInput;

    err = mOMXNode->getParameter(
            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc4, &def, sizeof(def));

    if (err != OK) {
        return err;
    }

    def.nChannels = numChannels;
    def.nSampleRate = sampleRate;

    return mOMXNode->setParameter(
            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc4, &def, sizeof(def));
}

static OMX_AUDIO_AMRBANDMODETYPE pickModeFromBitRate(
static OMX_AUDIO_AMRBANDMODETYPE pickModeFromBitRate(
        bool isAMRWB, int32_t bps) {
        bool isAMRWB, int32_t bps) {
    if (isAMRWB) {
    if (isAMRWB) {
@@ -5246,6 +5287,25 @@ status_t ACodec::getPortFormat(OMX_U32 portIndex, sp<AMessage> &notify) {
                    break;
                    break;
                }
                }


                case OMX_AUDIO_CodingAndroidAC4:
                {
                    OMX_AUDIO_PARAM_ANDROID_AC4TYPE params;
                    InitOMXParams(&params);
                    params.nPortIndex = portIndex;

                    err = mOMXNode->getParameter(
                            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc4,
                            &params, sizeof(params));
                    if (err != OK) {
                        return err;
                    }

                    notify->setString("mime", MEDIA_MIMETYPE_AUDIO_AC4);
                    notify->setInt32("channel-count", params.nChannels);
                    notify->setInt32("sample-rate", params.nSampleRate);
                    break;
                }

                case OMX_AUDIO_CodingAndroidOPUS:
                case OMX_AUDIO_CodingAndroidOPUS:
                {
                {
                    OMX_AUDIO_PARAM_ANDROID_OPUSTYPE params;
                    OMX_AUDIO_PARAM_ANDROID_OPUSTYPE params;
+2 −0
Original line number Original line Diff line number Diff line
@@ -461,6 +461,8 @@ private:


    status_t setupEAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate);
    status_t setupEAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate);


    status_t setupAC4Codec(bool encoder, int32_t numChannels, int32_t sampleRate);

    status_t selectAudioPortFormat(
    status_t selectAudioPortFormat(
            OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat);
            OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat);