Commit 4ff75f02 by olly Committed by Ian Baker

Fix For Sample-To-Bytes Calculation In OpusDecoder

Aligning the byte size calculation with the sizes defined in opus_jni.cc
for the `outputFloat=true` case

#minor-release

PiperOrigin-RevId: 427028982
parent 690e97a5
...@@ -211,7 +211,7 @@ public final class OpusDecoder ...@@ -211,7 +211,7 @@ public final class OpusDecoder
outputData.position(0); outputData.position(0);
outputData.limit(result); outputData.limit(result);
if (skipSamples > 0) { if (skipSamples > 0) {
int bytesPerSample = channelCount * 2; int bytesPerSample = samplesToBytes(1, channelCount, outputFloat);
int skipBytes = skipSamples * bytesPerSample; int skipBytes = skipSamples * bytesPerSample;
if (result <= skipBytes) { if (result <= skipBytes) {
skipSamples -= result / bytesPerSample; skipSamples -= result / bytesPerSample;
...@@ -278,6 +278,12 @@ public final class OpusDecoder ...@@ -278,6 +278,12 @@ public final class OpusDecoder
return DEFAULT_SEEK_PRE_ROLL_SAMPLES; return DEFAULT_SEEK_PRE_ROLL_SAMPLES;
} }
/** Returns number of bytes to represent {@code samples}. */
private static int samplesToBytes(int samples, int channelCount, boolean outputFloat) {
int bytesPerChannel = outputFloat ? 4 : 2;
return samples * channelCount * bytesPerChannel;
}
private static int readSignedLittleEndian16(byte[] input, int offset) { private static int readSignedLittleEndian16(byte[] input, int offset) {
int value = input[offset] & 0xFF; int value = input[offset] & 0xFF;
value |= (input[offset + 1] & 0xFF) << 8; value |= (input[offset + 1] & 0xFF) << 8;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment