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

Commit 155481c2 authored by Harish Mahendrakar's avatar Harish Mahendrakar
Browse files

C2SoftFlacEnc: Update max input buffer size calculation

INPUT_MAX_BUFFER_SIZE is now set based on channel count and
pcm encoding mode.

Bug: 332051852
Test: atest CtsMediaV2TestCases -- --module-arg  CtsMediaV2TestCases:\
instrumentation-arg:codec-prefix:=c2.android.flac
Change-Id: I9edf56de98e5ad73dd2cbec15f74d04e90f62124
parent 74656ddd
Loading
Loading
Loading
Loading
+24 −4
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@
#include <audio_utils/primitives.h>
#include <audio_utils/primitives.h>
#include <media/stagefright/foundation/MediaDefs.h>
#include <media/stagefright/foundation/MediaDefs.h>


#include <C2Debug.h>
#include <C2PlatformSupport.h>
#include <C2PlatformSupport.h>
#include <SimpleC2Interface.h>
#include <SimpleC2Interface.h>


@@ -81,10 +82,6 @@ public:
                    FLAC_COMPRESSION_LEVEL_MIN, FLAC_COMPRESSION_LEVEL_MAX)})
                    FLAC_COMPRESSION_LEVEL_MIN, FLAC_COMPRESSION_LEVEL_MAX)})
                .withSetter(Setter<decltype(*mComplexity)>::NonStrictValueWithNoDeps)
                .withSetter(Setter<decltype(*mComplexity)>::NonStrictValueWithNoDeps)
                .build());
                .build());
        addParameter(
                DefineParam(mInputMaxBufSize, C2_PARAMKEY_INPUT_MAX_BUFFER_SIZE)
                .withConstValue(new C2StreamMaxBufferSizeInfo::input(0u, 4608))
                .build());


        addParameter(
        addParameter(
                DefineParam(mPcmEncodingInfo, C2_PARAMKEY_PCM_ENCODING)
                DefineParam(mPcmEncodingInfo, C2_PARAMKEY_PCM_ENCODING)
@@ -96,6 +93,26 @@ public:
                })
                })
                .withSetter((Setter<decltype(*mPcmEncodingInfo)>::StrictValueWithNoDeps))
                .withSetter((Setter<decltype(*mPcmEncodingInfo)>::StrictValueWithNoDeps))
                .build());
                .build());

        addParameter(
                DefineParam(mInputMaxBufSize, C2_PARAMKEY_INPUT_MAX_BUFFER_SIZE)
                .withDefault(new C2StreamMaxBufferSizeInfo::input(0u, kMaxBlockSize))
                .withFields({
                    C2F(mInputMaxBufSize, value).any(),
                })
                .withSetter(MaxInputSizeSetter, mChannelCount, mPcmEncodingInfo)
                .build());
    }

    static C2R MaxInputSizeSetter(bool mayBlock,
            C2P<C2StreamMaxBufferSizeInfo::input> &me,
            const C2P<C2StreamChannelCountInfo::input> &channelCount,
            const C2P<C2StreamPcmEncodingInfo::input> &pcmEncoding) {
        (void)mayBlock;
        C2R res = C2R::Ok();
        int bytesPerSample = pcmEncoding.v.value == C2Config::PCM_FLOAT ? 4 : 2;
        me.set().value = kMaxBlockSize * bytesPerSample * channelCount.v.value;
        return res;
    }
    }


    uint32_t getSampleRate() const { return mSampleRate->value; }
    uint32_t getSampleRate() const { return mSampleRate->value; }
@@ -446,6 +463,9 @@ status_t C2SoftFlacEnc::configureEncoder() {


    mBlockSize = FLAC__stream_encoder_get_blocksize(mFlacStreamEncoder);
    mBlockSize = FLAC__stream_encoder_get_blocksize(mFlacStreamEncoder);


    // Update kMaxBlockSize to match maximum size used by the encoder
    CHECK(mBlockSize <= kMaxBlockSize);

    ALOGV("encoder successfully configured");
    ALOGV("encoder successfully configured");
    return OK;
    return OK;
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -63,7 +63,8 @@ private:


    std::shared_ptr<IntfImpl> mIntf;
    std::shared_ptr<IntfImpl> mIntf;
    const unsigned int kInBlockSize = 1152;
    const unsigned int kInBlockSize = 1152;
    const unsigned int kMaxNumChannels = 2;
    static constexpr unsigned int kMaxNumChannels = 2;
    static constexpr unsigned int kMaxBlockSize = 4608;
    FLAC__StreamEncoder* mFlacStreamEncoder;
    FLAC__StreamEncoder* mFlacStreamEncoder;
    FLAC__int32* mInputBufferPcm32;
    FLAC__int32* mInputBufferPcm32;
    std::shared_ptr<C2LinearBlock> mOutputBlock;
    std::shared_ptr<C2LinearBlock> mOutputBlock;