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

Commit adc46cce authored by Neelkamal Semwal's avatar Neelkamal Semwal Committed by Automerger Merge Worker
Browse files

C2SoftOpusEnc: Add support for a constant bitrate am: 7cfafacb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/15153144

Change-Id: I89467c7d7903b4f5054f4b2d8ef0457af80f54e4
parents af9cd746 7cfafacb
Loading
Loading
Loading
Loading
+34 −8
Original line number Diff line number Diff line
@@ -77,6 +77,19 @@ public:
                .withSetter((Setter<decltype(*mChannelCount)>::StrictValueWithNoDeps))
                .build());

        addParameter(
            DefineParam(mBitrateMode, C2_PARAMKEY_BITRATE_MODE)
                .withDefault(new C2StreamBitrateModeTuning::output(
                        0u, C2Config::BITRATE_VARIABLE))
                .withFields({
                    C2F(mBitrateMode, value).oneOf({
                        C2Config::BITRATE_CONST,
                        C2Config::BITRATE_VARIABLE})
                })
                .withSetter(
                    Setter<decltype(*mBitrateMode)>::StrictValueWithNoDeps)
                .build());

        addParameter(
                DefineParam(mBitrate, C2_PARAMKEY_BITRATE)
                .withDefault(new C2StreamBitrateInfo::output(0u, 128000))
@@ -100,12 +113,14 @@ public:
    uint32_t getSampleRate() const { return mSampleRate->value; }
    uint32_t getChannelCount() const { return mChannelCount->value; }
    uint32_t getBitrate() const { return mBitrate->value; }
    uint32_t getBitrateMode() const { return mBitrateMode->value; }
    uint32_t getComplexity() const { return mComplexity->value; }

private:
    std::shared_ptr<C2StreamSampleRateInfo::input> mSampleRate;
    std::shared_ptr<C2StreamChannelCountInfo::input> mChannelCount;
    std::shared_ptr<C2StreamBitrateInfo::output> mBitrate;
    std::shared_ptr<C2StreamBitrateModeTuning::output> mBitrateMode;
    std::shared_ptr<C2StreamComplexityTuning::output> mComplexity;
    std::shared_ptr<C2StreamMaxBufferSizeInfo::input> mInputMaxBufSize;
};
@@ -135,6 +150,7 @@ c2_status_t C2SoftOpusEnc::configureEncoder() {
    mSampleRate = mIntf->getSampleRate();
    mChannelCount = mIntf->getChannelCount();
    uint32_t bitrate = mIntf->getBitrate();
    uint32_t bitrateMode = mIntf->getBitrateMode();
    int complexity = mIntf->getComplexity();
    mNumSamplesPerFrame = mSampleRate / (1000 / mFrameDurationMs);
    mNumPcmBytesPerInputFrame =
@@ -189,6 +205,7 @@ c2_status_t C2SoftOpusEnc::configureEncoder() {
        return C2_BAD_VALUE;
    }

    if (bitrateMode == C2Config::BITRATE_VARIABLE) {
        // Constrained VBR
        if (opus_multistream_encoder_ctl(mEncoder, OPUS_SET_VBR(1) != OPUS_OK)) {
            ALOGE("failed to set vbr type");
@@ -199,6 +216,15 @@ c2_status_t C2SoftOpusEnc::configureEncoder() {
            ALOGE("failed to set vbr constraint");
            return C2_BAD_VALUE;
        }
    } else if (bitrateMode == C2Config::BITRATE_CONST) {
        if (opus_multistream_encoder_ctl(mEncoder, OPUS_SET_VBR(0) != OPUS_OK)) {
            ALOGE("failed to set cbr type");
            return C2_BAD_VALUE;
        }
    } else {
        ALOGE("unknown bitrate mode");
        return C2_BAD_VALUE;
    }

    // Bitrate
    if (opus_multistream_encoder_ctl(mEncoder, OPUS_SET_BITRATE(bitrate)) !=
+1 −1
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@
            <Limit name="sample-rate" ranges="8000,12000,16000,24000,48000" />
            <Limit name="bitrate" range="500-512000" />
            <Limit name="complexity" range="0-10"  default="5" />
            <Feature name="bitrate-modes" value="CBR" />
            <Feature name="bitrate-modes" value="CBR,VBR" />
        </MediaCodec>
        <MediaCodec name="c2.android.h263.encoder" type="video/3gpp">
            <Alias name="OMX.google.h263.encoder" />