C2SoftOpusEnc: Fix higher bitrate encoding at lower sample rates
Output buffer allocated was not large enough to hold higher bitrate
outputs for lower sample rates (eg: 512kbps at 8000 Hz)
Also pass remaining bytes in the allocated output buffer correctly
to encoder.
Bug: 134087860
Test: Apply CTS cl mentioned in the bug
Test: atest android.media.cts.EncoderTest#testOpusEncoders
Change-Id: I01a75cb76d15b733690e35fa107ec973668d19bb
diff --git a/media/codec2/components/opus/C2SoftOpusEnc.cpp b/media/codec2/components/opus/C2SoftOpusEnc.cpp
index 384d58b..70d1965 100644
--- a/media/codec2/components/opus/C2SoftOpusEnc.cpp
+++ b/media/codec2/components/opus/C2SoftOpusEnc.cpp
@@ -471,11 +471,11 @@
uint8_t* outPtr = wView.data() + mBytesEncoded;
int encodedBytes =
opus_multistream_encode(mEncoder, mInputBufferPcm16,
- mNumSamplesPerFrame, outPtr, kMaxPayload);
+ mNumSamplesPerFrame, outPtr, kMaxPayload - mBytesEncoded);
ALOGV("encoded %i Opus bytes from %zu PCM bytes", encodedBytes,
processSize);
- if (encodedBytes < 0 || encodedBytes > kMaxPayload) {
+ if (encodedBytes < 0 || encodedBytes > (kMaxPayload - mBytesEncoded)) {
ALOGE("opus_encode failed, encodedBytes : %d", encodedBytes);
mSignalledError = true;
work->result = C2_CORRUPTED;