Add configuration to support OPUS offload

To support OPUS offload, we need to provide a few configuration values
that are currently not set due to the lack of devices supporting
OPUS offload.

PiperOrigin-RevId: 491613716
(cherry picked from commit 568fa1e1fa479fd1659abf1d83d71e01227ab9cf)
This commit is contained in:
tonihei 2022-11-29 14:01:35 +00:00 committed by christosts
parent 1d082ee9a7
commit e85e497911
7 changed files with 648 additions and 41 deletions

View File

@ -196,7 +196,7 @@ public final class C {
* #ENCODING_PCM_16BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_24BIT}, {@link #ENCODING_PCM_32BIT},
* {@link #ENCODING_PCM_FLOAT}, {@link #ENCODING_MP3}, {@link #ENCODING_AC3}, {@link
* #ENCODING_E_AC3}, {@link #ENCODING_E_AC3_JOC}, {@link #ENCODING_AC4}, {@link #ENCODING_DTS},
* {@link #ENCODING_DTS_HD} or {@link #ENCODING_DOLBY_TRUEHD}.
* {@link #ENCODING_DTS_HD}, {@link #ENCODING_DOLBY_TRUEHD} or {@link #ENCODING_OPUS}.
*/
@UnstableApi
@Documented
@ -224,7 +224,8 @@ public final class C {
ENCODING_AC4,
ENCODING_DTS,
ENCODING_DTS_HD,
ENCODING_DOLBY_TRUEHD
ENCODING_DOLBY_TRUEHD,
ENCODING_OPUS,
})
public @interface Encoding {}
@ -325,6 +326,10 @@ public final class C {
* @see AudioFormat#ENCODING_DOLBY_TRUEHD
*/
@UnstableApi public static final int ENCODING_DOLBY_TRUEHD = AudioFormat.ENCODING_DOLBY_TRUEHD;
/**
* @see AudioFormat#ENCODING_OPUS
*/
@UnstableApi public static final int ENCODING_OPUS = AudioFormat.ENCODING_OPUS;
/** Represents the behavior affecting whether spatialization will be used. */
@Documented

View File

@ -587,6 +587,8 @@ public final class MimeTypes {
return C.ENCODING_DTS_HD;
case MimeTypes.AUDIO_TRUEHD:
return C.ENCODING_DOLBY_TRUEHD;
case MimeTypes.AUDIO_OPUS:
return C.ENCODING_OPUS;
default:
return C.ENCODING_INVALID;
}

View File

@ -60,6 +60,7 @@ import androidx.media3.extractor.Ac3Util;
import androidx.media3.extractor.Ac4Util;
import androidx.media3.extractor.DtsUtil;
import androidx.media3.extractor.MpegAudioUtil;
import androidx.media3.extractor.OpusUtil;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import com.google.errorprone.annotations.InlineMe;
import com.google.errorprone.annotations.InlineMeValidationDisabled;
@ -1787,6 +1788,8 @@ public final class DefaultAudioSink implements AudioSink {
? 0
: (Ac3Util.parseTrueHdSyncframeAudioSampleCount(buffer, syncframeOffset)
* Ac3Util.TRUEHD_RECHUNK_SAMPLE_COUNT);
case C.ENCODING_OPUS:
return OpusUtil.parsePacketAudioSampleCount(buffer);
case C.ENCODING_PCM_16BIT:
case C.ENCODING_PCM_16BIT_BIG_ENDIAN:
case C.ENCODING_PCM_24BIT:

View File

@ -32,6 +32,7 @@ import androidx.media3.extractor.Ac3Util;
import androidx.media3.extractor.Ac4Util;
import androidx.media3.extractor.DtsUtil;
import androidx.media3.extractor.MpegAudioUtil;
import androidx.media3.extractor.OpusUtil;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
/** Provide the buffer size to use when creating an {@link AudioTrack}. */
@ -255,6 +256,8 @@ public class DefaultAudioTrackBufferSizeProvider
return DtsUtil.DTS_HD_MAX_RATE_BYTES_PER_SECOND;
case C.ENCODING_DOLBY_TRUEHD:
return Ac3Util.TRUEHD_MAX_RATE_BYTES_PER_SECOND;
case C.ENCODING_OPUS:
return OpusUtil.MAX_BYTES_PER_SECOND;
case C.ENCODING_PCM_16BIT:
case C.ENCODING_PCM_16BIT_BIG_ENDIAN:
case C.ENCODING_PCM_24BIT:

View File

@ -29,6 +29,9 @@ public class OpusUtil {
/** Opus streams are always 48000 Hz. */
public static final int SAMPLE_RATE = 48_000;
/** Maximum achievable Opus bitrate. */
public static final int MAX_BYTES_PER_SECOND = 510 * 1000 / 8; // See RFC 6716. Section 2.1.1
private static final int DEFAULT_SEEK_PRE_ROLL_SAMPLES = 3840;
private static final int FULL_CODEC_INITIALIZATION_DATA_BUFFER_COUNT = 3;
@ -63,6 +66,62 @@ public class OpusUtil {
return initializationData;
}
/**
* Returns the number of audio samples in the given audio packet.
*
* <p>The buffer's position is not modified.
*
* @param buffer The audio packet.
* @return Returns the number of audio samples in the packet.
*/
public static int parsePacketAudioSampleCount(ByteBuffer buffer) {
long packetDurationUs =
getPacketDurationUs(buffer.get(0), buffer.limit() > 1 ? buffer.get(1) : 0);
return (int) (packetDurationUs * SAMPLE_RATE / C.MICROS_PER_SECOND);
}
/**
* Returns the duration of the given audio packet.
*
* @param buffer The audio packet.
* @return Returns the duration of the given audio packet, in microseconds.
*/
public static long getPacketDurationUs(byte[] buffer) {
return getPacketDurationUs(buffer[0], buffer.length > 1 ? buffer[1] : 0);
}
private static long getPacketDurationUs(byte packetByte0, byte packetByte1) {
// See RFC6716, Sections 3.1 and 3.2.
int toc = packetByte0 & 0xFF;
int frames;
switch (toc & 0x3) {
case 0:
frames = 1;
break;
case 1:
case 2:
frames = 2;
break;
default:
frames = packetByte1 & 0x3F;
break;
}
int config = toc >> 3;
int length = config & 0x3;
int frameDurationUs;
if (config >= 16) {
frameDurationUs = 2500 << length;
} else if (config >= 12) {
frameDurationUs = 10000 << (length & 0x1);
} else if (length == 3) {
frameDurationUs = 60000;
} else {
frameDurationUs = 10000 << length;
}
return (long) frames * frameDurationUs;
}
private static int getPreSkipSamples(byte[] header) {
return ((header[11] & 0xFF) << 8) | (header[10] & 0xFF);
}

View File

@ -54,7 +54,7 @@ import org.checkerframework.checker.nullness.qual.EnsuresNonNullIf;
@Override
protected long preparePayload(ParsableByteArray packet) {
return convertTimeToGranule(getPacketDurationUs(packet.getData()));
return convertTimeToGranule(OpusUtil.getPacketDurationUs(packet.getData()));
}
@Override
@ -121,42 +121,6 @@ import org.checkerframework.checker.nullness.qual.EnsuresNonNullIf;
}
}
/**
* Returns the duration of the given audio packet.
*
* @param packet Contains audio data.
* @return Returns the duration of the given audio packet.
*/
private long getPacketDurationUs(byte[] packet) {
int toc = packet[0] & 0xFF;
int frames;
switch (toc & 0x3) {
case 0:
frames = 1;
break;
case 1:
case 2:
frames = 2;
break;
default:
frames = packet[1] & 0x3F;
break;
}
int config = toc >> 3;
int length = config & 0x3;
if (config >= 16) {
length = 2500 << length;
} else if (config >= 12) {
length = 10000 << (length & 0x1);
} else if (length == 3) {
length = 60000;
} else {
length = 10000 << length;
}
return (long) frames * length;
}
/**
* Returns true if the given {@link ParsableByteArray} starts with {@code expectedPrefix}. Does
* not change the {@link ParsableByteArray#getPosition() position} of {@code packet}.

View File

@ -15,6 +15,7 @@
*/
package androidx.media3.extractor;
import static androidx.media3.common.util.Util.getBytesFromHexString;
import static com.google.common.truth.Truth.assertThat;
import androidx.media3.common.C;
@ -41,8 +42,9 @@ public final class OpusUtilTest {
buildNativeOrderByteArray(sampleCountToNanoseconds(DEFAULT_SEEK_PRE_ROLL_SAMPLES));
@Test
public void buildInitializationData() {
public void buildInitializationData_returnsExpectedHeaderWithPreSkipAndPreRoll() {
List<byte[]> initializationData = OpusUtil.buildInitializationData(HEADER);
assertThat(initializationData).hasSize(3);
assertThat(initializationData.get(0)).isEqualTo(HEADER);
assertThat(initializationData.get(1)).isEqualTo(HEADER_PRE_SKIP_BYTES);
@ -50,11 +52,576 @@ public final class OpusUtilTest {
}
@Test
public void getChannelCount() {
public void getChannelCount_returnsChannelCount() {
int channelCount = OpusUtil.getChannelCount(HEADER);
assertThat(channelCount).isEqualTo(2);
}
@Test
public void getPacketDurationUs_code0_returnsExpectedDuration() {
long config0DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("04"));
long config1DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("0C"));
long config2DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("14"));
long config3DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("1C"));
long config4DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("24"));
long config5DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("2C"));
long config6DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("34"));
long config7DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("3C"));
long config8DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("44"));
long config9DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("4C"));
long config10DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("54"));
long config11DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("5C"));
long config12DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("64"));
long config13DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("6C"));
long config14DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("74"));
long config15DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("7C"));
long config16DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("84"));
long config17DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("8C"));
long config18DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("94"));
long config19DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("9C"));
long config20DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("A4"));
long config21DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("AC"));
long config22DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("B4"));
long config23DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("BC"));
long config24DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("C4"));
long config25DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("CC"));
long config26DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("D4"));
long config27DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("DC"));
long config28DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("E4"));
long config29DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("EC"));
long config30DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("F4"));
long config31DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("FC"));
assertThat(config0DurationUs).isEqualTo(10_000);
assertThat(config1DurationUs).isEqualTo(20_000);
assertThat(config2DurationUs).isEqualTo(40_000);
assertThat(config3DurationUs).isEqualTo(60_000);
assertThat(config4DurationUs).isEqualTo(10_000);
assertThat(config5DurationUs).isEqualTo(20_000);
assertThat(config6DurationUs).isEqualTo(40_000);
assertThat(config7DurationUs).isEqualTo(60_000);
assertThat(config8DurationUs).isEqualTo(10_000);
assertThat(config9DurationUs).isEqualTo(20_000);
assertThat(config10DurationUs).isEqualTo(40_000);
assertThat(config11DurationUs).isEqualTo(60_000);
assertThat(config12DurationUs).isEqualTo(10_000);
assertThat(config13DurationUs).isEqualTo(20_000);
assertThat(config14DurationUs).isEqualTo(10_000);
assertThat(config15DurationUs).isEqualTo(20_000);
assertThat(config16DurationUs).isEqualTo(2_500);
assertThat(config17DurationUs).isEqualTo(5_000);
assertThat(config18DurationUs).isEqualTo(10_000);
assertThat(config19DurationUs).isEqualTo(20_000);
assertThat(config20DurationUs).isEqualTo(2_500);
assertThat(config21DurationUs).isEqualTo(5_000);
assertThat(config22DurationUs).isEqualTo(10_000);
assertThat(config23DurationUs).isEqualTo(20_000);
assertThat(config24DurationUs).isEqualTo(2_500);
assertThat(config25DurationUs).isEqualTo(5_000);
assertThat(config26DurationUs).isEqualTo(10_000);
assertThat(config27DurationUs).isEqualTo(20_000);
assertThat(config28DurationUs).isEqualTo(2_500);
assertThat(config29DurationUs).isEqualTo(5_000);
assertThat(config30DurationUs).isEqualTo(10_000);
assertThat(config31DurationUs).isEqualTo(20_000);
}
@Test
public void getPacketDurationUs_code1_returnsExpectedDuration() {
long config0DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("05"));
long config1DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("0D"));
long config2DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("15"));
long config3DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("1D"));
long config4DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("25"));
long config5DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("2D"));
long config6DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("35"));
long config7DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("3D"));
long config8DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("45"));
long config9DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("4D"));
long config10DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("55"));
long config11DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("5D"));
long config12DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("65"));
long config13DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("6D"));
long config14DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("75"));
long config15DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("7D"));
long config16DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("85"));
long config17DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("8D"));
long config18DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("95"));
long config19DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("9D"));
long config20DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("A5"));
long config21DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("AD"));
long config22DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("B5"));
long config23DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("BD"));
long config24DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("C5"));
long config25DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("CD"));
long config26DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("D5"));
long config27DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("DD"));
long config28DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("E5"));
long config29DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("ED"));
long config30DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("F5"));
long config31DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("FD"));
assertThat(config0DurationUs).isEqualTo(20_000);
assertThat(config1DurationUs).isEqualTo(40_000);
assertThat(config2DurationUs).isEqualTo(80_000);
assertThat(config3DurationUs).isEqualTo(120_000);
assertThat(config4DurationUs).isEqualTo(20_000);
assertThat(config5DurationUs).isEqualTo(40_000);
assertThat(config6DurationUs).isEqualTo(80_000);
assertThat(config7DurationUs).isEqualTo(120_000);
assertThat(config8DurationUs).isEqualTo(20_000);
assertThat(config9DurationUs).isEqualTo(40_000);
assertThat(config10DurationUs).isEqualTo(80_000);
assertThat(config11DurationUs).isEqualTo(120_000);
assertThat(config12DurationUs).isEqualTo(20_000);
assertThat(config13DurationUs).isEqualTo(40_000);
assertThat(config14DurationUs).isEqualTo(20_000);
assertThat(config15DurationUs).isEqualTo(40_000);
assertThat(config16DurationUs).isEqualTo(5_000);
assertThat(config17DurationUs).isEqualTo(10_000);
assertThat(config18DurationUs).isEqualTo(20_000);
assertThat(config19DurationUs).isEqualTo(40_000);
assertThat(config20DurationUs).isEqualTo(5_000);
assertThat(config21DurationUs).isEqualTo(10_000);
assertThat(config22DurationUs).isEqualTo(20_000);
assertThat(config23DurationUs).isEqualTo(40_000);
assertThat(config24DurationUs).isEqualTo(5_000);
assertThat(config25DurationUs).isEqualTo(10_000);
assertThat(config26DurationUs).isEqualTo(20_000);
assertThat(config27DurationUs).isEqualTo(40_000);
assertThat(config28DurationUs).isEqualTo(5_000);
assertThat(config29DurationUs).isEqualTo(10_000);
assertThat(config30DurationUs).isEqualTo(20_000);
assertThat(config31DurationUs).isEqualTo(40_000);
}
@Test
public void getPacketDurationUs_code2_returnsExpectedDuration() {
long config0DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("06"));
long config1DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("0E"));
long config2DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("16"));
long config3DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("1E"));
long config4DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("26"));
long config5DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("2E"));
long config6DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("36"));
long config7DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("3E"));
long config8DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("46"));
long config9DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("4E"));
long config10DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("56"));
long config11DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("5E"));
long config12DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("66"));
long config13DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("6E"));
long config14DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("76"));
long config15DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("7E"));
long config16DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("86"));
long config17DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("8E"));
long config18DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("96"));
long config19DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("9E"));
long config20DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("A6"));
long config21DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("AE"));
long config22DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("B6"));
long config23DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("BE"));
long config24DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("C6"));
long config25DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("CE"));
long config26DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("D6"));
long config27DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("DE"));
long config28DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("E6"));
long config29DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("EE"));
long config30DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("F6"));
long config31DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("FE"));
assertThat(config0DurationUs).isEqualTo(20_000);
assertThat(config1DurationUs).isEqualTo(40_000);
assertThat(config2DurationUs).isEqualTo(80_000);
assertThat(config3DurationUs).isEqualTo(120_000);
assertThat(config4DurationUs).isEqualTo(20_000);
assertThat(config5DurationUs).isEqualTo(40_000);
assertThat(config6DurationUs).isEqualTo(80_000);
assertThat(config7DurationUs).isEqualTo(120_000);
assertThat(config8DurationUs).isEqualTo(20_000);
assertThat(config9DurationUs).isEqualTo(40_000);
assertThat(config10DurationUs).isEqualTo(80_000);
assertThat(config11DurationUs).isEqualTo(120_000);
assertThat(config12DurationUs).isEqualTo(20_000);
assertThat(config13DurationUs).isEqualTo(40_000);
assertThat(config14DurationUs).isEqualTo(20_000);
assertThat(config15DurationUs).isEqualTo(40_000);
assertThat(config16DurationUs).isEqualTo(5_000);
assertThat(config17DurationUs).isEqualTo(10_000);
assertThat(config18DurationUs).isEqualTo(20_000);
assertThat(config19DurationUs).isEqualTo(40_000);
assertThat(config20DurationUs).isEqualTo(5_000);
assertThat(config21DurationUs).isEqualTo(10_000);
assertThat(config22DurationUs).isEqualTo(20_000);
assertThat(config23DurationUs).isEqualTo(40_000);
assertThat(config24DurationUs).isEqualTo(5_000);
assertThat(config25DurationUs).isEqualTo(10_000);
assertThat(config26DurationUs).isEqualTo(20_000);
assertThat(config27DurationUs).isEqualTo(40_000);
assertThat(config28DurationUs).isEqualTo(5_000);
assertThat(config29DurationUs).isEqualTo(10_000);
assertThat(config30DurationUs).isEqualTo(20_000);
assertThat(config31DurationUs).isEqualTo(40_000);
}
@Test
public void getPacketDurationUs_code3_returnsExpectedDuration() {
// max possible frame count to reach 120ms duration
long config0DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("078C"));
long config1DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("0F86"));
long config2DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("1783"));
long config3DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("1F82"));
// frame count of 2
long config4DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("2782"));
long config5DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("2F82"));
long config6DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("3782"));
long config7DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("3F82"));
long config8DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("4782"));
long config9DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("4F82"));
long config10DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("5782"));
long config11DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("5F82"));
// max possible frame count to reach 120ms duration
long config12DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("678C"));
long config13DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("6F86"));
// frame count of 2
long config14DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("7782"));
long config15DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("7F82"));
// max possible frame count to reach 120ms duration
long config16DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("87B0"));
long config17DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("8F98"));
long config18DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("978C"));
long config19DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("9F86"));
// frame count of 2
long config20DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("A782"));
long config21DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("AF82"));
long config22DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("B782"));
long config23DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("BF82"));
long config24DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("C782"));
long config25DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("CF82"));
long config26DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("D782"));
long config27DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("DF82"));
long config28DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("E782"));
long config29DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("EF82"));
long config30DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("F782"));
long config31DurationUs = OpusUtil.getPacketDurationUs(getBytesFromHexString("FF82"));
assertThat(config0DurationUs).isEqualTo(120_000);
assertThat(config1DurationUs).isEqualTo(120_000);
assertThat(config2DurationUs).isEqualTo(120_000);
assertThat(config3DurationUs).isEqualTo(120_000);
assertThat(config4DurationUs).isEqualTo(20_000);
assertThat(config5DurationUs).isEqualTo(40_000);
assertThat(config6DurationUs).isEqualTo(80_000);
assertThat(config7DurationUs).isEqualTo(120_000);
assertThat(config8DurationUs).isEqualTo(20_000);
assertThat(config9DurationUs).isEqualTo(40_000);
assertThat(config10DurationUs).isEqualTo(80_000);
assertThat(config11DurationUs).isEqualTo(120_000);
assertThat(config12DurationUs).isEqualTo(120_000);
assertThat(config13DurationUs).isEqualTo(120_000);
assertThat(config14DurationUs).isEqualTo(20_000);
assertThat(config15DurationUs).isEqualTo(40_000);
assertThat(config16DurationUs).isEqualTo(120_000);
assertThat(config17DurationUs).isEqualTo(120_000);
assertThat(config18DurationUs).isEqualTo(120_000);
assertThat(config19DurationUs).isEqualTo(120_000);
assertThat(config20DurationUs).isEqualTo(5_000);
assertThat(config21DurationUs).isEqualTo(10_000);
assertThat(config22DurationUs).isEqualTo(20_000);
assertThat(config23DurationUs).isEqualTo(40_000);
assertThat(config24DurationUs).isEqualTo(5_000);
assertThat(config25DurationUs).isEqualTo(10_000);
assertThat(config26DurationUs).isEqualTo(20_000);
assertThat(config27DurationUs).isEqualTo(40_000);
assertThat(config28DurationUs).isEqualTo(5_000);
assertThat(config29DurationUs).isEqualTo(10_000);
assertThat(config30DurationUs).isEqualTo(20_000);
assertThat(config31DurationUs).isEqualTo(40_000);
}
@Test
public void getPacketAudioSampleCount_code0_returnsExpectedDuration() {
int config0SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("04"));
int config1SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("0C"));
int config2SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("14"));
int config3SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("1C"));
int config4SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("24"));
int config5SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("2C"));
int config6SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("34"));
int config7SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("3C"));
int config8SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("44"));
int config9SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("4C"));
int config10SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("54"));
int config11SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("5C"));
int config12SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("64"));
int config13SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("6C"));
int config14SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("74"));
int config15SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("7C"));
int config16SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("84"));
int config17SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("8C"));
int config18SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("94"));
int config19SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("9C"));
int config20SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("A4"));
int config21SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("AC"));
int config22SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("B4"));
int config23SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("BC"));
int config24SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("C4"));
int config25SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("CC"));
int config26SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("D4"));
int config27SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("DC"));
int config28SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("E4"));
int config29SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("EC"));
int config30SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("F4"));
int config31SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("FC"));
assertThat(config0SampleCount).isEqualTo(480);
assertThat(config1SampleCount).isEqualTo(960);
assertThat(config2SampleCount).isEqualTo(1920);
assertThat(config3SampleCount).isEqualTo(2880);
assertThat(config4SampleCount).isEqualTo(480);
assertThat(config5SampleCount).isEqualTo(960);
assertThat(config6SampleCount).isEqualTo(1920);
assertThat(config7SampleCount).isEqualTo(2880);
assertThat(config8SampleCount).isEqualTo(480);
assertThat(config9SampleCount).isEqualTo(960);
assertThat(config10SampleCount).isEqualTo(1920);
assertThat(config11SampleCount).isEqualTo(2880);
assertThat(config12SampleCount).isEqualTo(480);
assertThat(config13SampleCount).isEqualTo(960);
assertThat(config14SampleCount).isEqualTo(480);
assertThat(config15SampleCount).isEqualTo(960);
assertThat(config16SampleCount).isEqualTo(120);
assertThat(config17SampleCount).isEqualTo(240);
assertThat(config18SampleCount).isEqualTo(480);
assertThat(config19SampleCount).isEqualTo(960);
assertThat(config20SampleCount).isEqualTo(120);
assertThat(config21SampleCount).isEqualTo(240);
assertThat(config22SampleCount).isEqualTo(480);
assertThat(config23SampleCount).isEqualTo(960);
assertThat(config24SampleCount).isEqualTo(120);
assertThat(config25SampleCount).isEqualTo(240);
assertThat(config26SampleCount).isEqualTo(480);
assertThat(config27SampleCount).isEqualTo(960);
assertThat(config28SampleCount).isEqualTo(120);
assertThat(config29SampleCount).isEqualTo(240);
assertThat(config30SampleCount).isEqualTo(480);
assertThat(config31SampleCount).isEqualTo(960);
}
@Test
public void getPacketAudioSampleCount_code1_returnsExpectedDuration() {
int config0SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("05"));
int config1SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("0D"));
int config2SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("15"));
int config3SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("1D"));
int config4SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("25"));
int config5SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("2D"));
int config6SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("35"));
int config7SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("3D"));
int config8SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("45"));
int config9SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("4D"));
int config10SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("55"));
int config11SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("5D"));
int config12SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("65"));
int config13SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("6D"));
int config14SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("75"));
int config15SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("7D"));
int config16SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("85"));
int config17SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("8D"));
int config18SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("95"));
int config19SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("9D"));
int config20SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("A5"));
int config21SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("AD"));
int config22SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("B5"));
int config23SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("BD"));
int config24SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("C5"));
int config25SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("CD"));
int config26SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("D5"));
int config27SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("DD"));
int config28SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("E5"));
int config29SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("ED"));
int config30SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("F5"));
int config31SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("FD"));
assertThat(config0SampleCount).isEqualTo(960);
assertThat(config1SampleCount).isEqualTo(1920);
assertThat(config2SampleCount).isEqualTo(3840);
assertThat(config3SampleCount).isEqualTo(5760);
assertThat(config4SampleCount).isEqualTo(960);
assertThat(config5SampleCount).isEqualTo(1920);
assertThat(config6SampleCount).isEqualTo(3840);
assertThat(config7SampleCount).isEqualTo(5760);
assertThat(config8SampleCount).isEqualTo(960);
assertThat(config9SampleCount).isEqualTo(1920);
assertThat(config10SampleCount).isEqualTo(3840);
assertThat(config11SampleCount).isEqualTo(5760);
assertThat(config12SampleCount).isEqualTo(960);
assertThat(config13SampleCount).isEqualTo(1920);
assertThat(config14SampleCount).isEqualTo(960);
assertThat(config15SampleCount).isEqualTo(1920);
assertThat(config16SampleCount).isEqualTo(240);
assertThat(config17SampleCount).isEqualTo(480);
assertThat(config18SampleCount).isEqualTo(960);
assertThat(config19SampleCount).isEqualTo(1920);
assertThat(config20SampleCount).isEqualTo(240);
assertThat(config21SampleCount).isEqualTo(480);
assertThat(config22SampleCount).isEqualTo(960);
assertThat(config23SampleCount).isEqualTo(1920);
assertThat(config24SampleCount).isEqualTo(240);
assertThat(config25SampleCount).isEqualTo(480);
assertThat(config26SampleCount).isEqualTo(960);
assertThat(config27SampleCount).isEqualTo(1920);
assertThat(config28SampleCount).isEqualTo(240);
assertThat(config29SampleCount).isEqualTo(480);
assertThat(config30SampleCount).isEqualTo(960);
assertThat(config31SampleCount).isEqualTo(1920);
}
@Test
public void getPacketAudioSampleCount_code2_returnsExpectedDuration() {
int config0SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("06"));
int config1SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("0E"));
int config2SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("16"));
int config3SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("1E"));
int config4SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("26"));
int config5SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("2E"));
int config6SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("36"));
int config7SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("3E"));
int config8SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("46"));
int config9SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("4E"));
int config10SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("56"));
int config11SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("5E"));
int config12SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("66"));
int config13SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("6E"));
int config14SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("76"));
int config15SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("7E"));
int config16SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("86"));
int config17SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("8E"));
int config18SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("96"));
int config19SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("9E"));
int config20SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("A6"));
int config21SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("AE"));
int config22SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("B6"));
int config23SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("BE"));
int config24SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("C6"));
int config25SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("CE"));
int config26SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("D6"));
int config27SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("DE"));
int config28SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("E6"));
int config29SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("EE"));
int config30SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("F6"));
int config31SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("FE"));
assertThat(config0SampleCount).isEqualTo(960);
assertThat(config1SampleCount).isEqualTo(1920);
assertThat(config2SampleCount).isEqualTo(3840);
assertThat(config3SampleCount).isEqualTo(5760);
assertThat(config4SampleCount).isEqualTo(960);
assertThat(config5SampleCount).isEqualTo(1920);
assertThat(config6SampleCount).isEqualTo(3840);
assertThat(config7SampleCount).isEqualTo(5760);
assertThat(config8SampleCount).isEqualTo(960);
assertThat(config9SampleCount).isEqualTo(1920);
assertThat(config10SampleCount).isEqualTo(3840);
assertThat(config11SampleCount).isEqualTo(5760);
assertThat(config12SampleCount).isEqualTo(960);
assertThat(config13SampleCount).isEqualTo(1920);
assertThat(config14SampleCount).isEqualTo(960);
assertThat(config15SampleCount).isEqualTo(1920);
assertThat(config16SampleCount).isEqualTo(240);
assertThat(config17SampleCount).isEqualTo(480);
assertThat(config18SampleCount).isEqualTo(960);
assertThat(config19SampleCount).isEqualTo(1920);
assertThat(config20SampleCount).isEqualTo(240);
assertThat(config21SampleCount).isEqualTo(480);
assertThat(config22SampleCount).isEqualTo(960);
assertThat(config23SampleCount).isEqualTo(1920);
assertThat(config24SampleCount).isEqualTo(240);
assertThat(config25SampleCount).isEqualTo(480);
assertThat(config26SampleCount).isEqualTo(960);
assertThat(config27SampleCount).isEqualTo(1920);
assertThat(config28SampleCount).isEqualTo(240);
assertThat(config29SampleCount).isEqualTo(480);
assertThat(config30SampleCount).isEqualTo(960);
assertThat(config31SampleCount).isEqualTo(1920);
}
@Test
public void getPacketAudioSampleCount_code3_returnsExpectedDuration() {
// max possible frame count to reach 120ms duration
int config0SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("078C"));
int config1SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("0F86"));
int config2SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("1783"));
int config3SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("1F82"));
// frame count of 2
int config4SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("2782"));
int config5SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("2F82"));
int config6SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("3782"));
int config7SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("3F82"));
int config8SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("4782"));
int config9SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("4F82"));
int config10SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("5782"));
int config11SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("5F82"));
// max possible frame count to reach 120ms duration
int config12SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("678C"));
int config13SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("6F86"));
// frame count of 2
int config14SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("7782"));
int config15SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("7F82"));
// max possible frame count to reach 120ms duration
int config16SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("87B0"));
int config17SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("8F98"));
int config18SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("978C"));
int config19SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("9F86"));
// frame count of 2
int config20SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("A782"));
int config21SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("AF82"));
int config22SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("B782"));
int config23SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("BF82"));
int config24SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("C782"));
int config25SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("CF82"));
int config26SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("D782"));
int config27SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("DF82"));
int config28SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("E782"));
int config29SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("EF82"));
int config30SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("F782"));
int config31SampleCount = OpusUtil.parsePacketAudioSampleCount(getByteBuffer("FF82"));
assertThat(config0SampleCount).isEqualTo(5760);
assertThat(config1SampleCount).isEqualTo(5760);
assertThat(config2SampleCount).isEqualTo(5760);
assertThat(config3SampleCount).isEqualTo(5760);
assertThat(config4SampleCount).isEqualTo(960);
assertThat(config5SampleCount).isEqualTo(1920);
assertThat(config6SampleCount).isEqualTo(3840);
assertThat(config7SampleCount).isEqualTo(5760);
assertThat(config8SampleCount).isEqualTo(960);
assertThat(config9SampleCount).isEqualTo(1920);
assertThat(config10SampleCount).isEqualTo(3840);
assertThat(config11SampleCount).isEqualTo(5760);
assertThat(config12SampleCount).isEqualTo(5760);
assertThat(config13SampleCount).isEqualTo(5760);
assertThat(config14SampleCount).isEqualTo(960);
assertThat(config15SampleCount).isEqualTo(1920);
assertThat(config16SampleCount).isEqualTo(5760);
assertThat(config17SampleCount).isEqualTo(5760);
assertThat(config18SampleCount).isEqualTo(5760);
assertThat(config19SampleCount).isEqualTo(5760);
assertThat(config20SampleCount).isEqualTo(240);
assertThat(config21SampleCount).isEqualTo(480);
assertThat(config22SampleCount).isEqualTo(960);
assertThat(config23SampleCount).isEqualTo(1920);
assertThat(config24SampleCount).isEqualTo(240);
assertThat(config25SampleCount).isEqualTo(480);
assertThat(config26SampleCount).isEqualTo(960);
assertThat(config27SampleCount).isEqualTo(1920);
assertThat(config28SampleCount).isEqualTo(240);
assertThat(config29SampleCount).isEqualTo(480);
assertThat(config30SampleCount).isEqualTo(960);
assertThat(config31SampleCount).isEqualTo(1920);
}
private static long sampleCountToNanoseconds(long sampleCount) {
return (sampleCount * C.NANOS_PER_SECOND) / OpusUtil.SAMPLE_RATE;
}
@ -62,4 +629,8 @@ public final class OpusUtilTest {
private static byte[] buildNativeOrderByteArray(long value) {
return ByteBuffer.allocate(8).order(ByteOrder.nativeOrder()).putLong(value).array();
}
private static ByteBuffer getByteBuffer(String hexString) {
return ByteBuffer.wrap(getBytesFromHexString(hexString));
}
}