diff --git a/libraries/common/src/main/java/androidx/media3/common/C.java b/libraries/common/src/main/java/androidx/media3/common/C.java index 264566024f9..fb9fd6827b5 100644 --- a/libraries/common/src/main/java/androidx/media3/common/C.java +++ b/libraries/common/src/main/java/androidx/media3/common/C.java @@ -179,7 +179,8 @@ private C() {} /** * Represents an audio encoding, or an invalid or unset value. One of {@link Format#NO_VALUE}, * {@link #ENCODING_INVALID}, {@link #ENCODING_PCM_8BIT}, {@link #ENCODING_PCM_16BIT}, {@link - * #ENCODING_PCM_16BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_24BIT}, {@link + * #ENCODING_PCM_16BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_20BIT}, {@link + * #ENCODING_PCM_20BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_24BIT}, {@link * #ENCODING_PCM_24BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_32BIT}, {@link * #ENCODING_PCM_32BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_FLOAT}, {@link #ENCODING_PCM_DOUBLE}, * {@link #ENCODING_MP3}, {@link #ENCODING_AC3}, {@link #ENCODING_E_AC3}, {@link @@ -195,6 +196,8 @@ private C() {} ENCODING_PCM_8BIT, ENCODING_PCM_16BIT, ENCODING_PCM_16BIT_BIG_ENDIAN, + ENCODING_PCM_20BIT, + ENCODING_PCM_20BIT_BIG_ENDIAN, ENCODING_PCM_24BIT, ENCODING_PCM_24BIT_BIG_ENDIAN, ENCODING_PCM_32BIT, @@ -224,7 +227,8 @@ private C() {} /** * Represents a PCM audio encoding, or an invalid or unset value. One of {@link Format#NO_VALUE}, * {@link #ENCODING_INVALID}, {@link #ENCODING_PCM_8BIT}, {@link #ENCODING_PCM_16BIT}, {@link - * #ENCODING_PCM_16BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_24BIT}, {@link + * #ENCODING_PCM_16BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_20BIT}, {@link + * #ENCODING_PCM_20BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_24BIT}, {@link * #ENCODING_PCM_24BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_32BIT}, {@link * #ENCODING_PCM_32BIT_BIG_ENDIAN}, {@link #ENCODING_PCM_FLOAT}, {@link #ENCODING_PCM_DOUBLE}. */ @@ -237,6 +241,8 @@ private C() {} ENCODING_PCM_8BIT, ENCODING_PCM_16BIT, ENCODING_PCM_16BIT_BIG_ENDIAN, + ENCODING_PCM_20BIT, + ENCODING_PCM_20BIT_BIG_ENDIAN, ENCODING_PCM_24BIT, ENCODING_PCM_24BIT_BIG_ENDIAN, ENCODING_PCM_32BIT, @@ -258,6 +264,26 @@ private C() {} /** Like {@link #ENCODING_PCM_16BIT}, but with the bytes in big endian order. */ @UnstableApi public static final int ENCODING_PCM_16BIT_BIG_ENDIAN = 0x10000000; + /** + * PCM encoding with 20 bits per sample. + * + *

Note that this is not generally supported or used and just exists to signal that a + * compressed audio track contains 20-bit PCM resolution. A decoder for said track should convert + * the audio to the closest higher format (such as {@link #ENCODING_PCM_24BIT}) instead of + * attempting to output 20-bit PCM. + */ + @UnstableApi public static final int ENCODING_PCM_20BIT = 0x80000000; + + /** + * Like {@link #ENCODING_PCM_20BIT} but with the bytes in big endian order. + * + *

Note that this is not generally supported or used and just exists to signal that a + * compressed audio track contains 20-bit PCM resolution. A decoder for said track should convert + * the audio to the closest higher format (such as {@link #ENCODING_PCM_24BIT}) instead of + * attempting to output 20-bit PCM. + */ + @UnstableApi public static final int ENCODING_PCM_20BIT_BIG_ENDIAN = 0x90000000; + /** PCM encoding with 24 bits per sample. */ public static final int ENCODING_PCM_24BIT = AudioFormat.ENCODING_PCM_24BIT_PACKED; diff --git a/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java b/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java index 789956d9ae8..c49476fe20c 100644 --- a/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java +++ b/libraries/common/src/main/java/androidx/media3/common/audio/ToInt16PcmAudioProcessor.java @@ -44,15 +44,7 @@ public final class ToInt16PcmAudioProcessor extends BaseAudioProcessor { public AudioFormat onConfigure(AudioFormat inputAudioFormat) throws UnhandledAudioFormatException { @C.PcmEncoding int encoding = inputAudioFormat.encoding; - if (encoding != C.ENCODING_PCM_8BIT - && encoding != C.ENCODING_PCM_16BIT - && encoding != C.ENCODING_PCM_16BIT_BIG_ENDIAN - && encoding != C.ENCODING_PCM_24BIT - && encoding != C.ENCODING_PCM_24BIT_BIG_ENDIAN - && encoding != C.ENCODING_PCM_32BIT - && encoding != C.ENCODING_PCM_32BIT_BIG_ENDIAN - && encoding != C.ENCODING_PCM_FLOAT - && encoding != C.ENCODING_PCM_DOUBLE) { + if (!Util.isEncodingLinearPcm(encoding)) { throw new UnhandledAudioFormatException(inputAudioFormat); } return encoding != C.ENCODING_PCM_16BIT diff --git a/libraries/common/src/main/java/androidx/media3/common/util/MediaFormatUtil.java b/libraries/common/src/main/java/androidx/media3/common/util/MediaFormatUtil.java index 7fa8e8f6c38..19a0fb42eb8 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/MediaFormatUtil.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/MediaFormatUtil.java @@ -503,6 +503,8 @@ private static void maybeSetPcmEncoding( break; case Format.NO_VALUE: case C.ENCODING_PCM_16BIT_BIG_ENDIAN: + case C.ENCODING_PCM_20BIT: + case C.ENCODING_PCM_20BIT_BIG_ENDIAN: case C.ENCODING_PCM_24BIT_BIG_ENDIAN: case C.ENCODING_PCM_32BIT_BIG_ENDIAN: case C.ENCODING_PCM_DOUBLE: diff --git a/libraries/common/src/main/java/androidx/media3/common/util/Util.java b/libraries/common/src/main/java/androidx/media3/common/util/Util.java index 4641f456f88..8106e44f1d6 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/Util.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/Util.java @@ -2315,6 +2315,10 @@ public static Format getPcmFormat(AudioProcessor.AudioFormat audioFormat) { /** * Converts a sample bit depth to a corresponding little-endian integer PCM encoding constant. * + *

Note that this method does not support encodings which are not a multiple of bytes, such as + * 20-bit PCM, as those cannot be handled in the same way as linear PCM encodings which are + * multiples of bytes. It's recommended to convert such a PCM format to the closest higher format. + * * @param bitDepth The bit depth. Supported values are 8, 16, 24 and 32. * @return The corresponding encoding. One of {@link C#ENCODING_PCM_8BIT}, {@link * C#ENCODING_PCM_16BIT}, {@link C#ENCODING_PCM_24BIT} and {@link C#ENCODING_PCM_32BIT}. If @@ -2328,6 +2332,10 @@ public static Format getPcmFormat(AudioProcessor.AudioFormat audioFormat) { /** * Converts a sample bit depth and byte order to a corresponding integer PCM encoding constant. * + *

Note that this method does not support encodings which are not a multiple of bytes, such as + * 20-bit PCM, as those cannot be handled in the same way as linear PCM encodings which are + * multiples of bytes. It's recommended to convert such a PCM format to the closest higher format. + * * @param bitDepth The bit depth. Supported values are 8, 16, 24 and 32. * @param byteOrder The byte order. * @return The corresponding integer PCM encoding. If the bit depth is unsupported then {@link @@ -2356,9 +2364,32 @@ public static Format getPcmFormat(AudioProcessor.AudioFormat audioFormat) { } } + /** + * Converts a sample bit depth to a corresponding little-endian float PCM encoding constant. + * + * @param bitDepth The bit depth. Supported values are 32 and 64. + * @return The corresponding float PCM encoding. If the bit depth is unsupported then {@link + * C#ENCODING_INVALID} is returned. + */ + @UnstableApi + public static @C.PcmEncoding int getFloatPcmEncoding(int bitDepth) { + switch (bitDepth) { + case 32: + return C.ENCODING_PCM_FLOAT; + case 64: + return C.ENCODING_PCM_DOUBLE; + default: + return C.ENCODING_INVALID; + } + } + /** * Returns whether {@code encoding} is one of the linear PCM encodings. * + *

Note that this will return false for encodings which are not a multiple of bytes, such as + * 20-bit PCM, as those cannot be handled in the same way as linear PCM encodings which are + * multiples of bytes. It's recommended to convert such a PCM format to the closest higher format. + * * @param encoding The encoding of the audio data. * @return Whether the encoding is one of the PCM encodings. */ @@ -2378,6 +2409,10 @@ public static boolean isEncodingLinearPcm(@C.Encoding int encoding) { /** * Returns whether {@code encoding} is high resolution (> 16-bit) PCM. * + *

Note that this will return false for encodings which are not a multiple of bytes, such as + * 20-bit PCM, as those cannot be handled in the same way as linear PCM encodings which are + * multiples of bytes. It's recommended to convert such a PCM format to the closest higher format. + * * @param encoding The encoding of the audio data. * @return Whether the encoding is high resolution PCM. */ @@ -2551,28 +2586,31 @@ public static int getPcmFrameSize(@C.PcmEncoding int pcmEncoding, int channelCou } /** - * Returns the byte depth for audio with the specified encoding. + * Returns the bit depth for audio with the specified encoding. * * @param pcmEncoding The encoding of the audio data. - * @return The byte depth of the audio. + * @return The bit depth of the audio. */ @UnstableApi - public static int getByteDepth(@C.PcmEncoding int pcmEncoding) { + public static int getBitDepth(@C.PcmEncoding int pcmEncoding) { switch (pcmEncoding) { case C.ENCODING_PCM_8BIT: - return 1; + return 8; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_16BIT_BIG_ENDIAN: - return 2; + return 16; + case C.ENCODING_PCM_20BIT: + case C.ENCODING_PCM_20BIT_BIG_ENDIAN: + return 20; case C.ENCODING_PCM_24BIT: case C.ENCODING_PCM_24BIT_BIG_ENDIAN: - return 3; + return 24; case C.ENCODING_PCM_32BIT: case C.ENCODING_PCM_32BIT_BIG_ENDIAN: case C.ENCODING_PCM_FLOAT: - return 4; + return 32; case C.ENCODING_PCM_DOUBLE: - return 8; + return 64; case C.ENCODING_INVALID: case Format.NO_VALUE: default: @@ -2580,6 +2618,28 @@ public static int getByteDepth(@C.PcmEncoding int pcmEncoding) { } } + /** + * Returns the byte depth for audio with the specified encoding. + * + *

This will throw for encodings which are not a multiple of bytes, such as 20-bit PCM. + * + * @param pcmEncoding The encoding of the audio data. + * @return The byte depth of the audio. + * @see #getBitDepth(int) + */ + @UnstableApi + public static int getByteDepth(@C.PcmEncoding int pcmEncoding) { + int bitDepth = getBitDepth(pcmEncoding); + if ((bitDepth % C.BITS_PER_BYTE) != 0) { + throw new IllegalArgumentException( + "Bit depth " + + bitDepth + + " cannot be represented as byte" + + " depth. Use getBitDepth() instead."); + } + return bitDepth / C.BITS_PER_BYTE; + } + /** Returns the {@link C.AudioUsage} corresponding to the specified {@link C.StreamType}. */ @UnstableApi public static @C.AudioUsage int getAudioUsageForStreamType(@C.StreamType int streamType) { diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java index 49bfa9774b7..198baaf09f1 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java @@ -1815,6 +1815,8 @@ private FormatConfig getFormatConfig(Format format, int preferredBufferSize) { return OpusUtil.parseOggPacketAudioSampleCount(buffer); case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_16BIT_BIG_ENDIAN: + case C.ENCODING_PCM_20BIT: + case C.ENCODING_PCM_20BIT_BIG_ENDIAN: case C.ENCODING_PCM_24BIT: case C.ENCODING_PCM_24BIT_BIG_ENDIAN: case C.ENCODING_PCM_32BIT: diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/ToFloatPcmAudioProcessor.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/ToFloatPcmAudioProcessor.java index 1f5f6069915..281874147ea 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/ToFloatPcmAudioProcessor.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/ToFloatPcmAudioProcessor.java @@ -28,7 +28,9 @@ * encodings are supported as input: * *

*/ - @TestParameter({"2", "22", "21", "1610612736", "1342177280", "1879048192"}) + @TestParameter({"2", "22", "21", "3", "1610612736", "1342177280", "268435456", "1879048192"}) private int pcmEncoding; @Test @@ -87,7 +89,10 @@ public void configure_returnsFloatPcmEncoding() throws Exception { private static float getToleranceForEncoding(int pcmEncoding) { switch (pcmEncoding) { + case C.ENCODING_PCM_8BIT: + return 1f / 0x80; case C.ENCODING_PCM_16BIT: + case C.ENCODING_PCM_16BIT_BIG_ENDIAN: return 1f / 0x8000; case C.ENCODING_PCM_32BIT: case C.ENCODING_PCM_32BIT_BIG_ENDIAN: @@ -107,9 +112,20 @@ private static float getToleranceForEncoding(int pcmEncoding) { */ private static ByteBuffer getTestSamplesForEncoding(int pcmEncoding) { switch (pcmEncoding) { + case C.ENCODING_PCM_8BIT: + return createByteBuffer( + new short[] {Byte.MAX_VALUE, Byte.MIN_VALUE, Byte.MAX_VALUE / 2, Byte.MIN_VALUE / 2}); case C.ENCODING_PCM_16BIT: return createByteBuffer( new short[] {Short.MAX_VALUE, Short.MIN_VALUE, 0x4000, (short) 0xC000}); + case C.ENCODING_PCM_16BIT_BIG_ENDIAN: + return createByteBuffer( + new short[] { + Short.reverseBytes(Short.MAX_VALUE), + Short.reverseBytes(Short.MIN_VALUE), + Short.reverseBytes((short) 0x4000), + Short.reverseBytes((short) 0xC000) + }); case C.ENCODING_PCM_32BIT: return createByteBuffer( new int[] { diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp4PlaybackTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp4PlaybackTest.java index fbf364167fc..41ba36aa56b 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp4PlaybackTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp4PlaybackTest.java @@ -70,6 +70,7 @@ public static ImmutableList mediaSamples() { Sample.forFile("sample_opus_fragmented.mp4"), Sample.forFile("sample_opus.mp4"), Sample.forFile("sample_alac.mp4"), + Sample.forFile("sample_fpcm_64le.mp4"), Sample.forFile("sample_partially_fragmented.mp4"), Sample.withSubtitles("sample_with_vobsub.mp4", "eng"), Sample.forFile("testvid_1022ms.mp4"), diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ExtractorUtil.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ExtractorUtil.java index a5b29baf1f5..3925227f24f 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ExtractorUtil.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ExtractorUtil.java @@ -163,6 +163,8 @@ public static int getMaximumEncodedRateBytesPerSecond(@C.Encoding int encoding) return OpusUtil.MAX_BYTES_PER_SECOND; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_16BIT_BIG_ENDIAN: + case C.ENCODING_PCM_20BIT: + case C.ENCODING_PCM_20BIT_BIG_ENDIAN: case C.ENCODING_PCM_24BIT: case C.ENCODING_PCM_24BIT_BIG_ENDIAN: case C.ENCODING_PCM_32BIT: diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/WavUtil.java b/libraries/extractor/src/main/java/androidx/media3/extractor/WavUtil.java index 169a20f2346..11168dae8ab 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/WavUtil.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/WavUtil.java @@ -72,13 +72,16 @@ public static int getTypeForPcmEncoding(@C.PcmEncoding int pcmEncoding) { switch (pcmEncoding) { case C.ENCODING_PCM_8BIT: case C.ENCODING_PCM_16BIT: + case C.ENCODING_PCM_20BIT: case C.ENCODING_PCM_24BIT: case C.ENCODING_PCM_32BIT: return TYPE_PCM; case C.ENCODING_PCM_FLOAT: + case C.ENCODING_PCM_DOUBLE: return TYPE_FLOAT; // TYPE_PCM is little endian so big endian formats don't match. case C.ENCODING_PCM_16BIT_BIG_ENDIAN: + case C.ENCODING_PCM_20BIT_BIG_ENDIAN: case C.ENCODING_PCM_24BIT_BIG_ENDIAN: case C.ENCODING_PCM_32BIT_BIG_ENDIAN: case C.ENCODING_INVALID: @@ -98,7 +101,7 @@ public static int getTypeForPcmEncoding(@C.PcmEncoding int pcmEncoding) { case TYPE_WAVE_FORMAT_EXTENSIBLE: return Util.getPcmEncoding(bitsPerSample); case TYPE_FLOAT: - return bitsPerSample == 32 ? C.ENCODING_PCM_FLOAT : C.ENCODING_INVALID; + return Util.getFloatPcmEncoding(bitsPerSample); default: return C.ENCODING_INVALID; } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java index 4569259631e..3e839a80b04 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java @@ -2437,15 +2437,8 @@ public void initializeFormat(int trackId) throws ParserException { break; case CODEC_ID_PCM_INT_BIG: mimeType = MimeTypes.AUDIO_RAW; - if (audioBitDepth == 8) { - pcmEncoding = C.ENCODING_PCM_8BIT; - } else if (audioBitDepth == 16) { - pcmEncoding = C.ENCODING_PCM_16BIT_BIG_ENDIAN; - } else if (audioBitDepth == 24) { - pcmEncoding = C.ENCODING_PCM_24BIT_BIG_ENDIAN; - } else if (audioBitDepth == 32) { - pcmEncoding = C.ENCODING_PCM_32BIT_BIG_ENDIAN; - } else { + pcmEncoding = Util.getPcmEncoding(audioBitDepth, ByteOrder.BIG_ENDIAN); + if (pcmEncoding == C.ENCODING_INVALID) { pcmEncoding = Format.NO_VALUE; mimeType = MimeTypes.AUDIO_UNKNOWN; Log.w( @@ -2458,9 +2451,8 @@ public void initializeFormat(int trackId) throws ParserException { break; case CODEC_ID_PCM_FLOAT: mimeType = MimeTypes.AUDIO_RAW; - if (audioBitDepth == 32) { - pcmEncoding = C.ENCODING_PCM_FLOAT; - } else { + pcmEncoding = Util.getFloatPcmEncoding(audioBitDepth); + if (pcmEncoding == C.ENCODING_INVALID) { pcmEncoding = Format.NO_VALUE; mimeType = MimeTypes.AUDIO_UNKNOWN; Log.w( diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java index a969deccf0c..b77369b85b9 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java @@ -2129,17 +2129,12 @@ private static void parseAudioSampleEntry( boolean isFloat = (formatSpecificFlags & 1) != 0; boolean isBigEndian = (formatSpecificFlags & (1 << 1)) != 0; if (!isFloat) { - if (bitsPerSample == 8) { - pcmEncoding = C.ENCODING_PCM_8BIT; - } else if (bitsPerSample == 16) { - pcmEncoding = isBigEndian ? C.ENCODING_PCM_16BIT_BIG_ENDIAN : C.ENCODING_PCM_16BIT; - } else if (bitsPerSample == 24) { - pcmEncoding = isBigEndian ? C.ENCODING_PCM_24BIT_BIG_ENDIAN : C.ENCODING_PCM_24BIT; - } else if (bitsPerSample == 32) { - pcmEncoding = isBigEndian ? C.ENCODING_PCM_32BIT_BIG_ENDIAN : C.ENCODING_PCM_32BIT; - } - } else if (bitsPerSample == 32) { - pcmEncoding = C.ENCODING_PCM_FLOAT; + pcmEncoding = Util.getPcmEncoding(bitsPerSample, isBigEndian ? BIG_ENDIAN : LITTLE_ENDIAN); + } else if (!isBigEndian) { + pcmEncoding = Util.getFloatPcmEncoding(bitsPerSample); + } + if (pcmEncoding == C.ENCODING_INVALID) { + pcmEncoding = Format.NO_VALUE; } parent.skipBytes(8); // constBytesPerAudioPacket, constLPCMFramesPerAudioPacket } else { @@ -2375,7 +2370,13 @@ private static void parseAudioSampleEntry( sampleRate = parsedAlacConfig[0]; channelCount = parsedAlacConfig[1]; int bitDepth = parsedAlacConfig[2]; - pcmEncoding = Util.getPcmEncoding(bitDepth); + // getPcmEncoding() does not support encodings which are not a multiple of bytes, such as + // 20-bit PCM, as those cannot be handled in the same way as linear PCM encodings which are + // multiples of bytes. These formats are also not supported by any part of media3's PCM + // handling pipeline. The reason this constant exists is to be able to signal that the + // compressed audio (in this case, ALAC) has 20-bit PCM precision, but a decoder is expected + // to output a supported format such as 24-bit PCM instead. + pcmEncoding = bitDepth == 20 ? C.ENCODING_PCM_20BIT : Util.getPcmEncoding(bitDepth); initializationData = ImmutableList.of(initializationDataBytes); } else if (childAtomType == Mp4Box.TYPE_iacb) { parent.setPosition( @@ -2393,11 +2394,9 @@ private static void parseAudioSampleEntry( int sampleSize = parent.readUnsignedByte(); if (atomType == Mp4Box.TYPE_ipcm) { pcmEncoding = Util.getPcmEncoding(sampleSize, byteOrder); - } else if (atomType == Mp4Box.TYPE_fpcm - && sampleSize == 32 - && byteOrder.equals(LITTLE_ENDIAN)) { - // Only single-width little-endian floating point PCM is supported. - pcmEncoding = C.ENCODING_PCM_FLOAT; + } else if (atomType == Mp4Box.TYPE_fpcm && byteOrder.equals(LITTLE_ENDIAN)) { + // Only little-endian floating point PCM is supported. + pcmEncoding = Util.getFloatPcmEncoding(sampleSize); } if (pcmEncoding != Format.NO_VALUE) { mimeType = MimeTypes.AUDIO_RAW; diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mkv/MatroskaExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mkv/MatroskaExtractorTest.java index b7c08eedc18..77a070744a3 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mkv/MatroskaExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mkv/MatroskaExtractorTest.java @@ -243,6 +243,14 @@ public void mkvSample_withDtsX() throws Exception { simulationConfig); } + @Test + public void mkaSample_withFpcm64le() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/mka/bear-pcm-f64le.mka", + simulationConfig); + } + private static ExtractorAsserts.ExtractorFactory getExtractorFactory( boolean subtitlesParsedDuringExtraction) { SubtitleParser.Factory subtitleParserFactory; diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java index f3b5078cb1f..c8c475f3ada 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java @@ -296,6 +296,11 @@ public void mp4SampleWith32leFpcm() throws Exception { assertExtractorBehavior("media/mp4/sample_fpcm_32le.mp4", /* peekLimit= */ 50); } + @Test + public void mp4SampleWith64leFpcm() throws Exception { + assertExtractorBehavior("media/mp4/sample_fpcm_64le.mp4", /* peekLimit= */ 50); + } + // Only the rotation part of the transformation matrix is resolved (b/390422593 tracks supporting // reflection too). @Test @@ -308,6 +313,11 @@ public void mp4SampleWithAlac() throws Exception { assertExtractorBehavior("media/mp4/sample_alac.mp4", /* peekLimit= */ 50); } + @Test + public void mp4SampleWithAlac20Bit() throws Exception { + assertExtractorBehavior("media/mp4/sample_alac_20bit.mp4", /* peekLimit= */ 4096); + } + @Test public void mp4SampleWithFixedRechunkAndNoElst() throws Exception { assertExtractorBehavior("media/mp4/sample_fixed_rechunk_no_elst.mp4", /* peekLimit= */ 44); diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/wav/WavExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/wav/WavExtractorTest.java index 22629ecafd6..83ee307976f 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/wav/WavExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/wav/WavExtractorTest.java @@ -74,4 +74,10 @@ public void sample_wav_format_extensible() throws Exception { ExtractorAsserts.assertBehavior( WavExtractor::new, "media/wav/sample_wav_format_extensible.wav", simulationConfig); } + + @Test + public void sample_float64() throws Exception { + ExtractorAsserts.assertBehavior( + WavExtractor::new, "media/wav/sample_float64.wav", simulationConfig); + } } diff --git a/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.0.dump b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.0.dump new file mode 100644 index 00000000000..4468743e83a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.0.dump @@ -0,0 +1,137 @@ +seekMap: + isSeekable = true + duration = 2740000 + getPosition(0) = [[timeUs=0, position=517]] + getPosition(1) = [[timeUs=0, position=517]] + getPosition(1370000) = [[timeUs=0, position=517]] + getPosition(2740000) = [[timeUs=0, position=517]] +numberOfTracks = 1 +track 1: + total output bytes = 2104320 + sample count = 29 + format 0: + id = 1 + containerMimeType = video/x-matroska + sampleMimeType = audio/raw + channelCount = 2 + sampleRate = 48000 + pcmEncoding = 1879048192 + selectionFlags = [default] + language = und + sample 0: + time = 0 + flags = 1 + data = length 73728, hash 2996BA53 + sample 1: + time = 96000 + flags = 1 + data = length 73728, hash AD09C69 + sample 2: + time = 192000 + flags = 1 + data = length 73728, hash EFF0EB35 + sample 3: + time = 288000 + flags = 1 + data = length 73728, hash 37139E5 + sample 4: + time = 384000 + flags = 1 + data = length 73728, hash 45490039 + sample 5: + time = 480000 + flags = 1 + data = length 73728, hash B17D13CD + sample 6: + time = 576000 + flags = 1 + data = length 73728, hash 7EC01A5F + sample 7: + time = 672000 + flags = 1 + data = length 73728, hash 8F6D115F + sample 8: + time = 768000 + flags = 1 + data = length 73728, hash 938D8753 + sample 9: + time = 864000 + flags = 1 + data = length 73728, hash 15F052F5 + sample 10: + time = 960000 + flags = 1 + data = length 73728, hash 859E73FD + sample 11: + time = 1056000 + flags = 1 + data = length 73728, hash D7382BED + sample 12: + time = 1152000 + flags = 1 + data = length 73728, hash FB136FDD + sample 13: + time = 1248000 + flags = 1 + data = length 73728, hash 26DC3CD9 + sample 14: + time = 1344000 + flags = 1 + data = length 73728, hash 7935274D + sample 15: + time = 1440000 + flags = 1 + data = length 73728, hash 90EBEB55 + sample 16: + time = 1536000 + flags = 1 + data = length 73728, hash 4C9C2FDD + sample 17: + time = 1632000 + flags = 1 + data = length 73728, hash A686C633 + sample 18: + time = 1728000 + flags = 1 + data = length 73728, hash D555EFBF + sample 19: + time = 1824000 + flags = 1 + data = length 73728, hash 2082D5C5 + sample 20: + time = 1920000 + flags = 1 + data = length 73728, hash D0A9421D + sample 21: + time = 2016000 + flags = 1 + data = length 73728, hash 6625DD21 + sample 22: + time = 2112000 + flags = 1 + data = length 73728, hash E05A3C81 + sample 23: + time = 2208000 + flags = 1 + data = length 73728, hash 25191701 + sample 24: + time = 2304000 + flags = 1 + data = length 73728, hash 65E0F955 + sample 25: + time = 2400000 + flags = 1 + data = length 73728, hash 335038B5 + sample 26: + time = 2496000 + flags = 1 + data = length 73728, hash 3DBF4769 + sample 27: + time = 2592000 + flags = 1 + data = length 73728, hash 3032129C + sample 28: + time = 2688000 + flags = 1 + data = length 39936, hash 63D01025 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.1.dump b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.1.dump new file mode 100644 index 00000000000..4468743e83a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.1.dump @@ -0,0 +1,137 @@ +seekMap: + isSeekable = true + duration = 2740000 + getPosition(0) = [[timeUs=0, position=517]] + getPosition(1) = [[timeUs=0, position=517]] + getPosition(1370000) = [[timeUs=0, position=517]] + getPosition(2740000) = [[timeUs=0, position=517]] +numberOfTracks = 1 +track 1: + total output bytes = 2104320 + sample count = 29 + format 0: + id = 1 + containerMimeType = video/x-matroska + sampleMimeType = audio/raw + channelCount = 2 + sampleRate = 48000 + pcmEncoding = 1879048192 + selectionFlags = [default] + language = und + sample 0: + time = 0 + flags = 1 + data = length 73728, hash 2996BA53 + sample 1: + time = 96000 + flags = 1 + data = length 73728, hash AD09C69 + sample 2: + time = 192000 + flags = 1 + data = length 73728, hash EFF0EB35 + sample 3: + time = 288000 + flags = 1 + data = length 73728, hash 37139E5 + sample 4: + time = 384000 + flags = 1 + data = length 73728, hash 45490039 + sample 5: + time = 480000 + flags = 1 + data = length 73728, hash B17D13CD + sample 6: + time = 576000 + flags = 1 + data = length 73728, hash 7EC01A5F + sample 7: + time = 672000 + flags = 1 + data = length 73728, hash 8F6D115F + sample 8: + time = 768000 + flags = 1 + data = length 73728, hash 938D8753 + sample 9: + time = 864000 + flags = 1 + data = length 73728, hash 15F052F5 + sample 10: + time = 960000 + flags = 1 + data = length 73728, hash 859E73FD + sample 11: + time = 1056000 + flags = 1 + data = length 73728, hash D7382BED + sample 12: + time = 1152000 + flags = 1 + data = length 73728, hash FB136FDD + sample 13: + time = 1248000 + flags = 1 + data = length 73728, hash 26DC3CD9 + sample 14: + time = 1344000 + flags = 1 + data = length 73728, hash 7935274D + sample 15: + time = 1440000 + flags = 1 + data = length 73728, hash 90EBEB55 + sample 16: + time = 1536000 + flags = 1 + data = length 73728, hash 4C9C2FDD + sample 17: + time = 1632000 + flags = 1 + data = length 73728, hash A686C633 + sample 18: + time = 1728000 + flags = 1 + data = length 73728, hash D555EFBF + sample 19: + time = 1824000 + flags = 1 + data = length 73728, hash 2082D5C5 + sample 20: + time = 1920000 + flags = 1 + data = length 73728, hash D0A9421D + sample 21: + time = 2016000 + flags = 1 + data = length 73728, hash 6625DD21 + sample 22: + time = 2112000 + flags = 1 + data = length 73728, hash E05A3C81 + sample 23: + time = 2208000 + flags = 1 + data = length 73728, hash 25191701 + sample 24: + time = 2304000 + flags = 1 + data = length 73728, hash 65E0F955 + sample 25: + time = 2400000 + flags = 1 + data = length 73728, hash 335038B5 + sample 26: + time = 2496000 + flags = 1 + data = length 73728, hash 3DBF4769 + sample 27: + time = 2592000 + flags = 1 + data = length 73728, hash 3032129C + sample 28: + time = 2688000 + flags = 1 + data = length 39936, hash 63D01025 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.2.dump b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.2.dump new file mode 100644 index 00000000000..4468743e83a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.2.dump @@ -0,0 +1,137 @@ +seekMap: + isSeekable = true + duration = 2740000 + getPosition(0) = [[timeUs=0, position=517]] + getPosition(1) = [[timeUs=0, position=517]] + getPosition(1370000) = [[timeUs=0, position=517]] + getPosition(2740000) = [[timeUs=0, position=517]] +numberOfTracks = 1 +track 1: + total output bytes = 2104320 + sample count = 29 + format 0: + id = 1 + containerMimeType = video/x-matroska + sampleMimeType = audio/raw + channelCount = 2 + sampleRate = 48000 + pcmEncoding = 1879048192 + selectionFlags = [default] + language = und + sample 0: + time = 0 + flags = 1 + data = length 73728, hash 2996BA53 + sample 1: + time = 96000 + flags = 1 + data = length 73728, hash AD09C69 + sample 2: + time = 192000 + flags = 1 + data = length 73728, hash EFF0EB35 + sample 3: + time = 288000 + flags = 1 + data = length 73728, hash 37139E5 + sample 4: + time = 384000 + flags = 1 + data = length 73728, hash 45490039 + sample 5: + time = 480000 + flags = 1 + data = length 73728, hash B17D13CD + sample 6: + time = 576000 + flags = 1 + data = length 73728, hash 7EC01A5F + sample 7: + time = 672000 + flags = 1 + data = length 73728, hash 8F6D115F + sample 8: + time = 768000 + flags = 1 + data = length 73728, hash 938D8753 + sample 9: + time = 864000 + flags = 1 + data = length 73728, hash 15F052F5 + sample 10: + time = 960000 + flags = 1 + data = length 73728, hash 859E73FD + sample 11: + time = 1056000 + flags = 1 + data = length 73728, hash D7382BED + sample 12: + time = 1152000 + flags = 1 + data = length 73728, hash FB136FDD + sample 13: + time = 1248000 + flags = 1 + data = length 73728, hash 26DC3CD9 + sample 14: + time = 1344000 + flags = 1 + data = length 73728, hash 7935274D + sample 15: + time = 1440000 + flags = 1 + data = length 73728, hash 90EBEB55 + sample 16: + time = 1536000 + flags = 1 + data = length 73728, hash 4C9C2FDD + sample 17: + time = 1632000 + flags = 1 + data = length 73728, hash A686C633 + sample 18: + time = 1728000 + flags = 1 + data = length 73728, hash D555EFBF + sample 19: + time = 1824000 + flags = 1 + data = length 73728, hash 2082D5C5 + sample 20: + time = 1920000 + flags = 1 + data = length 73728, hash D0A9421D + sample 21: + time = 2016000 + flags = 1 + data = length 73728, hash 6625DD21 + sample 22: + time = 2112000 + flags = 1 + data = length 73728, hash E05A3C81 + sample 23: + time = 2208000 + flags = 1 + data = length 73728, hash 25191701 + sample 24: + time = 2304000 + flags = 1 + data = length 73728, hash 65E0F955 + sample 25: + time = 2400000 + flags = 1 + data = length 73728, hash 335038B5 + sample 26: + time = 2496000 + flags = 1 + data = length 73728, hash 3DBF4769 + sample 27: + time = 2592000 + flags = 1 + data = length 73728, hash 3032129C + sample 28: + time = 2688000 + flags = 1 + data = length 39936, hash 63D01025 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.3.dump b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.3.dump new file mode 100644 index 00000000000..4468743e83a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.3.dump @@ -0,0 +1,137 @@ +seekMap: + isSeekable = true + duration = 2740000 + getPosition(0) = [[timeUs=0, position=517]] + getPosition(1) = [[timeUs=0, position=517]] + getPosition(1370000) = [[timeUs=0, position=517]] + getPosition(2740000) = [[timeUs=0, position=517]] +numberOfTracks = 1 +track 1: + total output bytes = 2104320 + sample count = 29 + format 0: + id = 1 + containerMimeType = video/x-matroska + sampleMimeType = audio/raw + channelCount = 2 + sampleRate = 48000 + pcmEncoding = 1879048192 + selectionFlags = [default] + language = und + sample 0: + time = 0 + flags = 1 + data = length 73728, hash 2996BA53 + sample 1: + time = 96000 + flags = 1 + data = length 73728, hash AD09C69 + sample 2: + time = 192000 + flags = 1 + data = length 73728, hash EFF0EB35 + sample 3: + time = 288000 + flags = 1 + data = length 73728, hash 37139E5 + sample 4: + time = 384000 + flags = 1 + data = length 73728, hash 45490039 + sample 5: + time = 480000 + flags = 1 + data = length 73728, hash B17D13CD + sample 6: + time = 576000 + flags = 1 + data = length 73728, hash 7EC01A5F + sample 7: + time = 672000 + flags = 1 + data = length 73728, hash 8F6D115F + sample 8: + time = 768000 + flags = 1 + data = length 73728, hash 938D8753 + sample 9: + time = 864000 + flags = 1 + data = length 73728, hash 15F052F5 + sample 10: + time = 960000 + flags = 1 + data = length 73728, hash 859E73FD + sample 11: + time = 1056000 + flags = 1 + data = length 73728, hash D7382BED + sample 12: + time = 1152000 + flags = 1 + data = length 73728, hash FB136FDD + sample 13: + time = 1248000 + flags = 1 + data = length 73728, hash 26DC3CD9 + sample 14: + time = 1344000 + flags = 1 + data = length 73728, hash 7935274D + sample 15: + time = 1440000 + flags = 1 + data = length 73728, hash 90EBEB55 + sample 16: + time = 1536000 + flags = 1 + data = length 73728, hash 4C9C2FDD + sample 17: + time = 1632000 + flags = 1 + data = length 73728, hash A686C633 + sample 18: + time = 1728000 + flags = 1 + data = length 73728, hash D555EFBF + sample 19: + time = 1824000 + flags = 1 + data = length 73728, hash 2082D5C5 + sample 20: + time = 1920000 + flags = 1 + data = length 73728, hash D0A9421D + sample 21: + time = 2016000 + flags = 1 + data = length 73728, hash 6625DD21 + sample 22: + time = 2112000 + flags = 1 + data = length 73728, hash E05A3C81 + sample 23: + time = 2208000 + flags = 1 + data = length 73728, hash 25191701 + sample 24: + time = 2304000 + flags = 1 + data = length 73728, hash 65E0F955 + sample 25: + time = 2400000 + flags = 1 + data = length 73728, hash 335038B5 + sample 26: + time = 2496000 + flags = 1 + data = length 73728, hash 3DBF4769 + sample 27: + time = 2592000 + flags = 1 + data = length 73728, hash 3032129C + sample 28: + time = 2688000 + flags = 1 + data = length 39936, hash 63D01025 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.unknown_length.dump new file mode 100644 index 00000000000..4468743e83a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mka/bear-pcm-f64le.mka.unknown_length.dump @@ -0,0 +1,137 @@ +seekMap: + isSeekable = true + duration = 2740000 + getPosition(0) = [[timeUs=0, position=517]] + getPosition(1) = [[timeUs=0, position=517]] + getPosition(1370000) = [[timeUs=0, position=517]] + getPosition(2740000) = [[timeUs=0, position=517]] +numberOfTracks = 1 +track 1: + total output bytes = 2104320 + sample count = 29 + format 0: + id = 1 + containerMimeType = video/x-matroska + sampleMimeType = audio/raw + channelCount = 2 + sampleRate = 48000 + pcmEncoding = 1879048192 + selectionFlags = [default] + language = und + sample 0: + time = 0 + flags = 1 + data = length 73728, hash 2996BA53 + sample 1: + time = 96000 + flags = 1 + data = length 73728, hash AD09C69 + sample 2: + time = 192000 + flags = 1 + data = length 73728, hash EFF0EB35 + sample 3: + time = 288000 + flags = 1 + data = length 73728, hash 37139E5 + sample 4: + time = 384000 + flags = 1 + data = length 73728, hash 45490039 + sample 5: + time = 480000 + flags = 1 + data = length 73728, hash B17D13CD + sample 6: + time = 576000 + flags = 1 + data = length 73728, hash 7EC01A5F + sample 7: + time = 672000 + flags = 1 + data = length 73728, hash 8F6D115F + sample 8: + time = 768000 + flags = 1 + data = length 73728, hash 938D8753 + sample 9: + time = 864000 + flags = 1 + data = length 73728, hash 15F052F5 + sample 10: + time = 960000 + flags = 1 + data = length 73728, hash 859E73FD + sample 11: + time = 1056000 + flags = 1 + data = length 73728, hash D7382BED + sample 12: + time = 1152000 + flags = 1 + data = length 73728, hash FB136FDD + sample 13: + time = 1248000 + flags = 1 + data = length 73728, hash 26DC3CD9 + sample 14: + time = 1344000 + flags = 1 + data = length 73728, hash 7935274D + sample 15: + time = 1440000 + flags = 1 + data = length 73728, hash 90EBEB55 + sample 16: + time = 1536000 + flags = 1 + data = length 73728, hash 4C9C2FDD + sample 17: + time = 1632000 + flags = 1 + data = length 73728, hash A686C633 + sample 18: + time = 1728000 + flags = 1 + data = length 73728, hash D555EFBF + sample 19: + time = 1824000 + flags = 1 + data = length 73728, hash 2082D5C5 + sample 20: + time = 1920000 + flags = 1 + data = length 73728, hash D0A9421D + sample 21: + time = 2016000 + flags = 1 + data = length 73728, hash 6625DD21 + sample 22: + time = 2112000 + flags = 1 + data = length 73728, hash E05A3C81 + sample 23: + time = 2208000 + flags = 1 + data = length 73728, hash 25191701 + sample 24: + time = 2304000 + flags = 1 + data = length 73728, hash 65E0F955 + sample 25: + time = 2400000 + flags = 1 + data = length 73728, hash 335038B5 + sample 26: + time = 2496000 + flags = 1 + data = length 73728, hash 3DBF4769 + sample 27: + time = 2592000 + flags = 1 + data = length 73728, hash 3032129C + sample 28: + time = 2688000 + flags = 1 + data = length 39936, hash 63D01025 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.0.dump new file mode 100644 index 00000000000..372b96033b0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.0.dump @@ -0,0 +1,74 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 40135 + sample count = 12 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 0 + flags = 1 + data = length 1952, hash 298B8810 + sample 1: + time = 92879 + flags = 1 + data = length 3898, hash 7734D643 + sample 2: + time = 185759 + flags = 1 + data = length 3923, hash 8AAC13A1 + sample 3: + time = 278639 + flags = 1 + data = length 3917, hash CFEBDF3E + sample 4: + time = 371519 + flags = 1 + data = length 3880, hash CCDB7EB5 + sample 5: + time = 464399 + flags = 1 + data = length 3830, hash 7FB90D6E + sample 6: + time = 557278 + flags = 1 + data = length 3845, hash 4481CE0F + sample 7: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 8: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 9: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 10: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 11: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.1.dump new file mode 100644 index 00000000000..441cc5d4c4c --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.1.dump @@ -0,0 +1,62 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 30362 + sample count = 9 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 278639 + flags = 1 + data = length 3917, hash CFEBDF3E + sample 1: + time = 371519 + flags = 1 + data = length 3880, hash CCDB7EB5 + sample 2: + time = 464399 + flags = 1 + data = length 3830, hash 7FB90D6E + sample 3: + time = 557278 + flags = 1 + data = length 3845, hash 4481CE0F + sample 4: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 5: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 6: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 7: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 8: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.2.dump new file mode 100644 index 00000000000..0c388563b68 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.2.dump @@ -0,0 +1,46 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 14890 + sample count = 5 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 1: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 2: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 3: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 4: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.3.dump new file mode 100644 index 00000000000..7494147e8b9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.3.dump @@ -0,0 +1,30 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 8 + sample count = 1 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.0.dump new file mode 100644 index 00000000000..372b96033b0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.0.dump @@ -0,0 +1,74 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 40135 + sample count = 12 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 0 + flags = 1 + data = length 1952, hash 298B8810 + sample 1: + time = 92879 + flags = 1 + data = length 3898, hash 7734D643 + sample 2: + time = 185759 + flags = 1 + data = length 3923, hash 8AAC13A1 + sample 3: + time = 278639 + flags = 1 + data = length 3917, hash CFEBDF3E + sample 4: + time = 371519 + flags = 1 + data = length 3880, hash CCDB7EB5 + sample 5: + time = 464399 + flags = 1 + data = length 3830, hash 7FB90D6E + sample 6: + time = 557278 + flags = 1 + data = length 3845, hash 4481CE0F + sample 7: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 8: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 9: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 10: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 11: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.1.dump new file mode 100644 index 00000000000..441cc5d4c4c --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.1.dump @@ -0,0 +1,62 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 30362 + sample count = 9 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 278639 + flags = 1 + data = length 3917, hash CFEBDF3E + sample 1: + time = 371519 + flags = 1 + data = length 3880, hash CCDB7EB5 + sample 2: + time = 464399 + flags = 1 + data = length 3830, hash 7FB90D6E + sample 3: + time = 557278 + flags = 1 + data = length 3845, hash 4481CE0F + sample 4: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 5: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 6: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 7: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 8: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.2.dump new file mode 100644 index 00000000000..0c388563b68 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.2.dump @@ -0,0 +1,46 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 14890 + sample count = 5 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 1: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 2: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 3: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 4: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.3.dump new file mode 100644 index 00000000000..7494147e8b9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.3.dump @@ -0,0 +1,30 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 8 + sample count = 1 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.unknown_length.dump new file mode 100644 index 00000000000..372b96033b0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -0,0 +1,74 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 40135 + sample count = 12 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 0 + flags = 1 + data = length 1952, hash 298B8810 + sample 1: + time = 92879 + flags = 1 + data = length 3898, hash 7734D643 + sample 2: + time = 185759 + flags = 1 + data = length 3923, hash 8AAC13A1 + sample 3: + time = 278639 + flags = 1 + data = length 3917, hash CFEBDF3E + sample 4: + time = 371519 + flags = 1 + data = length 3880, hash CCDB7EB5 + sample 5: + time = 464399 + flags = 1 + data = length 3830, hash 7FB90D6E + sample 6: + time = 557278 + flags = 1 + data = length 3845, hash 4481CE0F + sample 7: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 8: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 9: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 10: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 11: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.unknown_length.dump new file mode 100644 index 00000000000..372b96033b0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_alac_20bit.mp4.unknown_length.dump @@ -0,0 +1,74 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=4096]] + getPosition(1) = [[timeUs=1, position=4096]] + getPosition(510839) = [[timeUs=510839, position=21666]] + getPosition(1021678) = [[timeUs=1021678, position=44223]] +numberOfTracks = 1 +track 0: + total output bytes = 40135 + sample count = 12 + track duration = 1021678 + format 0: + averageBitrate = 288079 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/alac + maxInputSize = 4105 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = -2147483648 + encoderPadding = 4096 + metadata = entries=[Mp4Timestamp: creation time=3853596544, modification time=3853596544, timescale=44100] + initializationData: + data = length 24, hash 478A29BA + sample 0: + time = 0 + flags = 1 + data = length 1952, hash 298B8810 + sample 1: + time = 92879 + flags = 1 + data = length 3898, hash 7734D643 + sample 2: + time = 185759 + flags = 1 + data = length 3923, hash 8AAC13A1 + sample 3: + time = 278639 + flags = 1 + data = length 3917, hash CFEBDF3E + sample 4: + time = 371519 + flags = 1 + data = length 3880, hash CCDB7EB5 + sample 5: + time = 464399 + flags = 1 + data = length 3830, hash 7FB90D6E + sample 6: + time = 557278 + flags = 1 + data = length 3845, hash 4481CE0F + sample 7: + time = 650158 + flags = 1 + data = length 3850, hash 29F6A218 + sample 8: + time = 743038 + flags = 1 + data = length 3906, hash A1084987 + sample 9: + time = 835918 + flags = 1 + data = length 4075, hash 2D7C7AA4 + sample 10: + time = 928798 + flags = 1 + data = length 3051, hash 5D47B269 + sample 11: + time = 1021678 + flags = 536870913 + data = length 8, hash B2FBAA0E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.0.dump new file mode 100644 index 00000000000..b173ab0b369 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.0.dump @@ -0,0 +1,201 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 360448 + sample count = 44 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 67000 + flags = 1 + data = length 8192, hash CFBC0001 + sample 1: + time = 90219 + flags = 1 + data = length 8192, hash A6B12CEF + sample 2: + time = 113439 + flags = 1 + data = length 8192, hash DF5EEAD2 + sample 3: + time = 136659 + flags = 1 + data = length 8192, hash DFB40AB0 + sample 4: + time = 159879 + flags = 1 + data = length 8192, hash DB747051 + sample 5: + time = 183099 + flags = 1 + data = length 8192, hash 2BA5AB54 + sample 6: + time = 206319 + flags = 1 + data = length 8192, hash 8F97BEDC + sample 7: + time = 229539 + flags = 1 + data = length 8192, hash 2D54AACB + sample 8: + time = 252759 + flags = 1 + data = length 8192, hash 4F538BBA + sample 9: + time = 275979 + flags = 1 + data = length 8192, hash 5B76AAD0 + sample 10: + time = 299199 + flags = 1 + data = length 8192, hash 138C0A77 + sample 11: + time = 322419 + flags = 1 + data = length 8192, hash C62D660C + sample 12: + time = 345639 + flags = 1 + data = length 8192, hash C77F31A7 + sample 13: + time = 368859 + flags = 1 + data = length 8192, hash BE23EECE + sample 14: + time = 392079 + flags = 1 + data = length 8192, hash 8D6FE487 + sample 15: + time = 415299 + flags = 1 + data = length 8192, hash F44ABBFD + sample 16: + time = 438519 + flags = 1 + data = length 8192, hash 36557553 + sample 17: + time = 461739 + flags = 1 + data = length 8192, hash 6E816339 + sample 18: + time = 484959 + flags = 1 + data = length 8192, hash FDEFEE14 + sample 19: + time = 508179 + flags = 1 + data = length 8192, hash 916A9B1A + sample 20: + time = 531399 + flags = 1 + data = length 8192, hash 2403D6E3 + sample 21: + time = 554619 + flags = 1 + data = length 8192, hash 165A8025 + sample 22: + time = 577839 + flags = 1 + data = length 8192, hash 6ACE6B9B + sample 23: + time = 601058 + flags = 1 + data = length 8192, hash 83C609EF + sample 24: + time = 624278 + flags = 1 + data = length 8192, hash 15193B22 + sample 25: + time = 647498 + flags = 1 + data = length 8192, hash 67FE968E + sample 26: + time = 670718 + flags = 1 + data = length 8192, hash 3F1A9A8A + sample 27: + time = 693938 + flags = 1 + data = length 8192, hash F4EB109F + sample 28: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 29: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 30: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 31: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 32: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 33: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 34: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 35: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 36: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 37: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 38: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 39: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 40: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 41: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 42: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 43: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.1.dump new file mode 100644 index 00000000000..b1c96275ab5 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.1.dump @@ -0,0 +1,153 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 262144 + sample count = 32 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 345639 + flags = 1 + data = length 8192, hash C77F31A7 + sample 1: + time = 368859 + flags = 1 + data = length 8192, hash BE23EECE + sample 2: + time = 392079 + flags = 1 + data = length 8192, hash 8D6FE487 + sample 3: + time = 415299 + flags = 1 + data = length 8192, hash F44ABBFD + sample 4: + time = 438519 + flags = 1 + data = length 8192, hash 36557553 + sample 5: + time = 461739 + flags = 1 + data = length 8192, hash 6E816339 + sample 6: + time = 484959 + flags = 1 + data = length 8192, hash FDEFEE14 + sample 7: + time = 508179 + flags = 1 + data = length 8192, hash 916A9B1A + sample 8: + time = 531399 + flags = 1 + data = length 8192, hash 2403D6E3 + sample 9: + time = 554619 + flags = 1 + data = length 8192, hash 165A8025 + sample 10: + time = 577839 + flags = 1 + data = length 8192, hash 6ACE6B9B + sample 11: + time = 601058 + flags = 1 + data = length 8192, hash 83C609EF + sample 12: + time = 624278 + flags = 1 + data = length 8192, hash 15193B22 + sample 13: + time = 647498 + flags = 1 + data = length 8192, hash 67FE968E + sample 14: + time = 670718 + flags = 1 + data = length 8192, hash 3F1A9A8A + sample 15: + time = 693938 + flags = 1 + data = length 8192, hash F4EB109F + sample 16: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 17: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 18: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 19: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 20: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 21: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 22: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 23: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 24: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 25: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 26: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 27: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 28: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 29: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 30: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 31: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.2.dump new file mode 100644 index 00000000000..029f8e7e3e4 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.2.dump @@ -0,0 +1,89 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 131072 + sample count = 16 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 1: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 2: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 3: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 4: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 5: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 6: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 7: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 8: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 9: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 10: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 11: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 12: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 13: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 14: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 15: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.3.dump new file mode 100644 index 00000000000..c735e4d2726 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.3.dump @@ -0,0 +1,29 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 8192 + sample count = 1 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.0.dump new file mode 100644 index 00000000000..b173ab0b369 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.0.dump @@ -0,0 +1,201 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 360448 + sample count = 44 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 67000 + flags = 1 + data = length 8192, hash CFBC0001 + sample 1: + time = 90219 + flags = 1 + data = length 8192, hash A6B12CEF + sample 2: + time = 113439 + flags = 1 + data = length 8192, hash DF5EEAD2 + sample 3: + time = 136659 + flags = 1 + data = length 8192, hash DFB40AB0 + sample 4: + time = 159879 + flags = 1 + data = length 8192, hash DB747051 + sample 5: + time = 183099 + flags = 1 + data = length 8192, hash 2BA5AB54 + sample 6: + time = 206319 + flags = 1 + data = length 8192, hash 8F97BEDC + sample 7: + time = 229539 + flags = 1 + data = length 8192, hash 2D54AACB + sample 8: + time = 252759 + flags = 1 + data = length 8192, hash 4F538BBA + sample 9: + time = 275979 + flags = 1 + data = length 8192, hash 5B76AAD0 + sample 10: + time = 299199 + flags = 1 + data = length 8192, hash 138C0A77 + sample 11: + time = 322419 + flags = 1 + data = length 8192, hash C62D660C + sample 12: + time = 345639 + flags = 1 + data = length 8192, hash C77F31A7 + sample 13: + time = 368859 + flags = 1 + data = length 8192, hash BE23EECE + sample 14: + time = 392079 + flags = 1 + data = length 8192, hash 8D6FE487 + sample 15: + time = 415299 + flags = 1 + data = length 8192, hash F44ABBFD + sample 16: + time = 438519 + flags = 1 + data = length 8192, hash 36557553 + sample 17: + time = 461739 + flags = 1 + data = length 8192, hash 6E816339 + sample 18: + time = 484959 + flags = 1 + data = length 8192, hash FDEFEE14 + sample 19: + time = 508179 + flags = 1 + data = length 8192, hash 916A9B1A + sample 20: + time = 531399 + flags = 1 + data = length 8192, hash 2403D6E3 + sample 21: + time = 554619 + flags = 1 + data = length 8192, hash 165A8025 + sample 22: + time = 577839 + flags = 1 + data = length 8192, hash 6ACE6B9B + sample 23: + time = 601058 + flags = 1 + data = length 8192, hash 83C609EF + sample 24: + time = 624278 + flags = 1 + data = length 8192, hash 15193B22 + sample 25: + time = 647498 + flags = 1 + data = length 8192, hash 67FE968E + sample 26: + time = 670718 + flags = 1 + data = length 8192, hash 3F1A9A8A + sample 27: + time = 693938 + flags = 1 + data = length 8192, hash F4EB109F + sample 28: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 29: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 30: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 31: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 32: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 33: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 34: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 35: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 36: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 37: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 38: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 39: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 40: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 41: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 42: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 43: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.1.dump new file mode 100644 index 00000000000..b1c96275ab5 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.1.dump @@ -0,0 +1,153 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 262144 + sample count = 32 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 345639 + flags = 1 + data = length 8192, hash C77F31A7 + sample 1: + time = 368859 + flags = 1 + data = length 8192, hash BE23EECE + sample 2: + time = 392079 + flags = 1 + data = length 8192, hash 8D6FE487 + sample 3: + time = 415299 + flags = 1 + data = length 8192, hash F44ABBFD + sample 4: + time = 438519 + flags = 1 + data = length 8192, hash 36557553 + sample 5: + time = 461739 + flags = 1 + data = length 8192, hash 6E816339 + sample 6: + time = 484959 + flags = 1 + data = length 8192, hash FDEFEE14 + sample 7: + time = 508179 + flags = 1 + data = length 8192, hash 916A9B1A + sample 8: + time = 531399 + flags = 1 + data = length 8192, hash 2403D6E3 + sample 9: + time = 554619 + flags = 1 + data = length 8192, hash 165A8025 + sample 10: + time = 577839 + flags = 1 + data = length 8192, hash 6ACE6B9B + sample 11: + time = 601058 + flags = 1 + data = length 8192, hash 83C609EF + sample 12: + time = 624278 + flags = 1 + data = length 8192, hash 15193B22 + sample 13: + time = 647498 + flags = 1 + data = length 8192, hash 67FE968E + sample 14: + time = 670718 + flags = 1 + data = length 8192, hash 3F1A9A8A + sample 15: + time = 693938 + flags = 1 + data = length 8192, hash F4EB109F + sample 16: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 17: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 18: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 19: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 20: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 21: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 22: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 23: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 24: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 25: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 26: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 27: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 28: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 29: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 30: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 31: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.2.dump new file mode 100644 index 00000000000..029f8e7e3e4 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.2.dump @@ -0,0 +1,89 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 131072 + sample count = 16 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 1: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 2: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 3: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 4: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 5: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 6: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 7: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 8: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 9: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 10: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 11: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 12: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 13: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 14: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 15: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.3.dump new file mode 100644 index 00000000000..c735e4d2726 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.3.dump @@ -0,0 +1,29 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 8192 + sample count = 1 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.unknown_length.dump new file mode 100644 index 00000000000..b173ab0b369 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -0,0 +1,201 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 360448 + sample count = 44 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 67000 + flags = 1 + data = length 8192, hash CFBC0001 + sample 1: + time = 90219 + flags = 1 + data = length 8192, hash A6B12CEF + sample 2: + time = 113439 + flags = 1 + data = length 8192, hash DF5EEAD2 + sample 3: + time = 136659 + flags = 1 + data = length 8192, hash DFB40AB0 + sample 4: + time = 159879 + flags = 1 + data = length 8192, hash DB747051 + sample 5: + time = 183099 + flags = 1 + data = length 8192, hash 2BA5AB54 + sample 6: + time = 206319 + flags = 1 + data = length 8192, hash 8F97BEDC + sample 7: + time = 229539 + flags = 1 + data = length 8192, hash 2D54AACB + sample 8: + time = 252759 + flags = 1 + data = length 8192, hash 4F538BBA + sample 9: + time = 275979 + flags = 1 + data = length 8192, hash 5B76AAD0 + sample 10: + time = 299199 + flags = 1 + data = length 8192, hash 138C0A77 + sample 11: + time = 322419 + flags = 1 + data = length 8192, hash C62D660C + sample 12: + time = 345639 + flags = 1 + data = length 8192, hash C77F31A7 + sample 13: + time = 368859 + flags = 1 + data = length 8192, hash BE23EECE + sample 14: + time = 392079 + flags = 1 + data = length 8192, hash 8D6FE487 + sample 15: + time = 415299 + flags = 1 + data = length 8192, hash F44ABBFD + sample 16: + time = 438519 + flags = 1 + data = length 8192, hash 36557553 + sample 17: + time = 461739 + flags = 1 + data = length 8192, hash 6E816339 + sample 18: + time = 484959 + flags = 1 + data = length 8192, hash FDEFEE14 + sample 19: + time = 508179 + flags = 1 + data = length 8192, hash 916A9B1A + sample 20: + time = 531399 + flags = 1 + data = length 8192, hash 2403D6E3 + sample 21: + time = 554619 + flags = 1 + data = length 8192, hash 165A8025 + sample 22: + time = 577839 + flags = 1 + data = length 8192, hash 6ACE6B9B + sample 23: + time = 601058 + flags = 1 + data = length 8192, hash 83C609EF + sample 24: + time = 624278 + flags = 1 + data = length 8192, hash 15193B22 + sample 25: + time = 647498 + flags = 1 + data = length 8192, hash 67FE968E + sample 26: + time = 670718 + flags = 1 + data = length 8192, hash 3F1A9A8A + sample 27: + time = 693938 + flags = 1 + data = length 8192, hash F4EB109F + sample 28: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 29: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 30: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 31: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 32: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 33: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 34: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 35: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 36: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 37: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 38: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 39: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 40: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 41: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 42: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 43: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.unknown_length.dump new file mode 100644 index 00000000000..b173ab0b369 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fpcm_64le.mp4.unknown_length.dump @@ -0,0 +1,201 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=44]] + getPosition(1) = [[timeUs=1, position=44]] + getPosition(544500) = [[timeUs=544500, position=163884]] + getPosition(1089000) = [[timeUs=1089000, position=352300]] +numberOfTracks = 1 +track 0: + total output bytes = 360448 + sample count = 44 + track duration = 1089000 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/raw + maxInputSize = 8222 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + language = und + metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf62.3.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + sample 0: + time = 67000 + flags = 1 + data = length 8192, hash CFBC0001 + sample 1: + time = 90219 + flags = 1 + data = length 8192, hash A6B12CEF + sample 2: + time = 113439 + flags = 1 + data = length 8192, hash DF5EEAD2 + sample 3: + time = 136659 + flags = 1 + data = length 8192, hash DFB40AB0 + sample 4: + time = 159879 + flags = 1 + data = length 8192, hash DB747051 + sample 5: + time = 183099 + flags = 1 + data = length 8192, hash 2BA5AB54 + sample 6: + time = 206319 + flags = 1 + data = length 8192, hash 8F97BEDC + sample 7: + time = 229539 + flags = 1 + data = length 8192, hash 2D54AACB + sample 8: + time = 252759 + flags = 1 + data = length 8192, hash 4F538BBA + sample 9: + time = 275979 + flags = 1 + data = length 8192, hash 5B76AAD0 + sample 10: + time = 299199 + flags = 1 + data = length 8192, hash 138C0A77 + sample 11: + time = 322419 + flags = 1 + data = length 8192, hash C62D660C + sample 12: + time = 345639 + flags = 1 + data = length 8192, hash C77F31A7 + sample 13: + time = 368859 + flags = 1 + data = length 8192, hash BE23EECE + sample 14: + time = 392079 + flags = 1 + data = length 8192, hash 8D6FE487 + sample 15: + time = 415299 + flags = 1 + data = length 8192, hash F44ABBFD + sample 16: + time = 438519 + flags = 1 + data = length 8192, hash 36557553 + sample 17: + time = 461739 + flags = 1 + data = length 8192, hash 6E816339 + sample 18: + time = 484959 + flags = 1 + data = length 8192, hash FDEFEE14 + sample 19: + time = 508179 + flags = 1 + data = length 8192, hash 916A9B1A + sample 20: + time = 531399 + flags = 1 + data = length 8192, hash 2403D6E3 + sample 21: + time = 554619 + flags = 1 + data = length 8192, hash 165A8025 + sample 22: + time = 577839 + flags = 1 + data = length 8192, hash 6ACE6B9B + sample 23: + time = 601058 + flags = 1 + data = length 8192, hash 83C609EF + sample 24: + time = 624278 + flags = 1 + data = length 8192, hash 15193B22 + sample 25: + time = 647498 + flags = 1 + data = length 8192, hash 67FE968E + sample 26: + time = 670718 + flags = 1 + data = length 8192, hash 3F1A9A8A + sample 27: + time = 693938 + flags = 1 + data = length 8192, hash F4EB109F + sample 28: + time = 717158 + flags = 1 + data = length 8192, hash EF515DE3 + sample 29: + time = 740378 + flags = 1 + data = length 8192, hash 4DE6846F + sample 30: + time = 763598 + flags = 1 + data = length 8192, hash 8C13C8B3 + sample 31: + time = 786818 + flags = 1 + data = length 8192, hash 57822FA2 + sample 32: + time = 810038 + flags = 1 + data = length 8192, hash DABB85A3 + sample 33: + time = 833258 + flags = 1 + data = length 8192, hash D8566A9A + sample 34: + time = 856478 + flags = 1 + data = length 8192, hash AB7B22AF + sample 35: + time = 879698 + flags = 1 + data = length 8192, hash 2565FDE8 + sample 36: + time = 902918 + flags = 1 + data = length 8192, hash 12AF9FC4 + sample 37: + time = 926138 + flags = 1 + data = length 8192, hash CB6F5F65 + sample 38: + time = 949358 + flags = 1 + data = length 8192, hash DA5C3383 + sample 39: + time = 972578 + flags = 1 + data = length 8192, hash E3DF2275 + sample 40: + time = 995798 + flags = 1 + data = length 8192, hash 4C0E05AC + sample 41: + time = 1019018 + flags = 1 + data = length 8192, hash 938A9CAF + sample 42: + time = 1042238 + flags = 1 + data = length 8192, hash 6BA1EFFE + sample 43: + time = 1065458 + flags = 536870913 + data = length 8192, hash 3AA8A24B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.0.dump b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.0.dump new file mode 100644 index 00000000000..d62fec5bc37 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.0.dump @@ -0,0 +1,66 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=92]] + getPosition(1) = [[timeUs=0, position=92], [timeUs=22, position=100]] + getPosition(510839) = [[timeUs=510816, position=180308], [timeUs=510839, position=180316]] + getPosition(1021678) = [[timeUs=1021655, position=360532]] +numberOfTracks = 1 +track 0: + total output bytes = 360448 + sample count = 11 + track duration = 1021678 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + containerMimeType = audio/wav + sampleMimeType = audio/raw + maxInputSize = 35280 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + sample 0: + time = 0 + flags = 1 + data = length 35280, hash 471C2691 + sample 1: + time = 100000 + flags = 1 + data = length 35280, hash 4B597483 + sample 2: + time = 200000 + flags = 1 + data = length 35280, hash 7B445D23 + sample 3: + time = 300000 + flags = 1 + data = length 35280, hash CAF1511B + sample 4: + time = 400000 + flags = 1 + data = length 35280, hash 5E2297E0 + sample 5: + time = 500000 + flags = 1 + data = length 35280, hash ACC37FD5 + sample 6: + time = 600000 + flags = 1 + data = length 35280, hash 9237F6D9 + sample 7: + time = 700000 + flags = 1 + data = length 35280, hash D06EF2A2 + sample 8: + time = 800000 + flags = 1 + data = length 35280, hash F7AA1BD3 + sample 9: + time = 900000 + flags = 1 + data = length 35280, hash A9226B43 + sample 10: + time = 1000000 + flags = 1 + data = length 7648, hash E0776070 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.1.dump b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.1.dump new file mode 100644 index 00000000000..f3b8c222ff3 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.1.dump @@ -0,0 +1,50 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=92]] + getPosition(1) = [[timeUs=0, position=92], [timeUs=22, position=100]] + getPosition(510839) = [[timeUs=510816, position=180308], [timeUs=510839, position=180316]] + getPosition(1021678) = [[timeUs=1021655, position=360532]] +numberOfTracks = 1 +track 0: + total output bytes = 240304 + sample count = 7 + track duration = 1021678 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + containerMimeType = audio/wav + sampleMimeType = audio/raw + maxInputSize = 35280 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + sample 0: + time = 340559 + flags = 1 + data = length 35280, hash B1987630 + sample 1: + time = 440559 + flags = 1 + data = length 35280, hash 379DA203 + sample 2: + time = 540559 + flags = 1 + data = length 35280, hash 301D9B7A + sample 3: + time = 640559 + flags = 1 + data = length 35280, hash 9B82400D + sample 4: + time = 740559 + flags = 1 + data = length 35280, hash CE71EA95 + sample 5: + time = 840559 + flags = 1 + data = length 35280, hash 8ECA1902 + sample 6: + time = 940559 + flags = 1 + data = length 28624, hash A7823237 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.2.dump b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.2.dump new file mode 100644 index 00000000000..ca0b07a97f0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.2.dump @@ -0,0 +1,38 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=92]] + getPosition(1) = [[timeUs=0, position=92], [timeUs=22, position=100]] + getPosition(510839) = [[timeUs=510816, position=180308], [timeUs=510839, position=180316]] + getPosition(1021678) = [[timeUs=1021655, position=360532]] +numberOfTracks = 1 +track 0: + total output bytes = 120152 + sample count = 4 + track duration = 1021678 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + containerMimeType = audio/wav + sampleMimeType = audio/raw + maxInputSize = 35280 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + sample 0: + time = 681118 + flags = 1 + data = length 35280, hash 1C74CB9D + sample 1: + time = 781118 + flags = 1 + data = length 35280, hash B9B755CF + sample 2: + time = 881118 + flags = 1 + data = length 35280, hash 3FB3C8A5 + sample 3: + time = 981118 + flags = 1 + data = length 14312, hash 7447907F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.3.dump b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.3.dump new file mode 100644 index 00000000000..66651263720 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.3.dump @@ -0,0 +1,26 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=92]] + getPosition(1) = [[timeUs=0, position=92], [timeUs=22, position=100]] + getPosition(510839) = [[timeUs=510816, position=180308], [timeUs=510839, position=180316]] + getPosition(1021678) = [[timeUs=1021655, position=360532]] +numberOfTracks = 1 +track 0: + total output bytes = 8 + sample count = 1 + track duration = 1021678 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + containerMimeType = audio/wav + sampleMimeType = audio/raw + maxInputSize = 35280 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + sample 0: + time = 1021678 + flags = 1 + data = length 8, hash 94446F01 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.unknown_length.dump new file mode 100644 index 00000000000..d62fec5bc37 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/wav/sample_float64.wav.unknown_length.dump @@ -0,0 +1,66 @@ +seekMap: + isSeekable = true + duration = 1021678 + getPosition(0) = [[timeUs=0, position=92]] + getPosition(1) = [[timeUs=0, position=92], [timeUs=22, position=100]] + getPosition(510839) = [[timeUs=510816, position=180308], [timeUs=510839, position=180316]] + getPosition(1021678) = [[timeUs=1021655, position=360532]] +numberOfTracks = 1 +track 0: + total output bytes = 360448 + sample count = 11 + track duration = 1021678 + format 0: + averageBitrate = 2822400 + peakBitrate = 2822400 + containerMimeType = audio/wav + sampleMimeType = audio/raw + maxInputSize = 35280 + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 1879048192 + sample 0: + time = 0 + flags = 1 + data = length 35280, hash 471C2691 + sample 1: + time = 100000 + flags = 1 + data = length 35280, hash 4B597483 + sample 2: + time = 200000 + flags = 1 + data = length 35280, hash 7B445D23 + sample 3: + time = 300000 + flags = 1 + data = length 35280, hash CAF1511B + sample 4: + time = 400000 + flags = 1 + data = length 35280, hash 5E2297E0 + sample 5: + time = 500000 + flags = 1 + data = length 35280, hash ACC37FD5 + sample 6: + time = 600000 + flags = 1 + data = length 35280, hash 9237F6D9 + sample 7: + time = 700000 + flags = 1 + data = length 35280, hash D06EF2A2 + sample 8: + time = 800000 + flags = 1 + data = length 35280, hash F7AA1BD3 + sample 9: + time = 900000 + flags = 1 + data = length 35280, hash A9226B43 + sample 10: + time = 1000000 + flags = 1 + data = length 7648, hash E0776070 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mka/bear-pcm-f64le.mka b/libraries/test_data/src/test/assets/media/mka/bear-pcm-f64le.mka new file mode 100644 index 00000000000..cd70e74a8b3 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mka/bear-pcm-f64le.mka differ diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_alac_20bit.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_alac_20bit.mp4 new file mode 100644 index 00000000000..1d1c0fa91fd Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mp4/sample_alac_20bit.mp4 differ diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_fpcm_64le.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_fpcm_64le.mp4 new file mode 100644 index 00000000000..b5450d1414e Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mp4/sample_fpcm_64le.mp4 differ diff --git a/libraries/test_data/src/test/assets/media/wav/sample_float64.wav b/libraries/test_data/src/test/assets/media/wav/sample_float64.wav new file mode 100644 index 00000000000..7bde9e03952 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/wav/sample_float64.wav differ diff --git a/libraries/test_data/src/test/assets/playbackdumps/mp4/sample_fpcm_64le.mp4.dump b/libraries/test_data/src/test/assets/playbackdumps/mp4/sample_fpcm_64le.mp4.dump new file mode 100644 index 00000000000..725428c1568 --- /dev/null +++ b/libraries/test_data/src/test/assets/playbackdumps/mp4/sample_fpcm_64le.mp4.dump @@ -0,0 +1,138 @@ +AudioSink: + buffer count = 44 + config: + pcmEncoding = 1879048192 + channelCount = 1 + sampleRate = 44100 + buffer #0: + time = 1000000067000 + data = 2048 zeroes + buffer #1: + time = 1000000090219 + channel[0] = 712913944 + buffer #2: + time = 1000000113439 + channel[0] = -273845430 + buffer #3: + time = 1000000136659 + channel[0] = 371371140 + buffer #4: + time = 1000000159879 + channel[0] = -1104125525 + buffer #5: + time = 1000000183099 + channel[0] = 836441073 + buffer #6: + time = 1000000206319 + channel[0] = -1236976902 + buffer #7: + time = 1000000229539 + channel[0] = 2115096101 + buffer #8: + time = 1000000252759 + channel[0] = 275976269 + buffer #9: + time = 1000000275979 + channel[0] = -432741431 + buffer #10: + time = 1000000299199 + channel[0] = -288351510 + buffer #11: + time = 1000000322419 + channel[0] = -252700686 + buffer #12: + time = 1000000345639 + channel[0] = 1782735782 + buffer #13: + time = 1000000368859 + channel[0] = 277643819 + buffer #14: + time = 1000000392079 + channel[0] = 1516898647 + buffer #15: + time = 1000000415299 + channel[0] = 1558073017 + buffer #16: + time = 1000000438519 + channel[0] = -267655129 + buffer #17: + time = 1000000461739 + channel[0] = -1166036937 + buffer #18: + time = 1000000484959 + channel[0] = 2024292061 + buffer #19: + time = 1000000508179 + channel[0] = -446864231 + buffer #20: + time = 1000000531399 + channel[0] = -134723581 + buffer #21: + time = 1000000554619 + channel[0] = -344072283 + buffer #22: + time = 1000000577839 + channel[0] = -1281212481 + buffer #23: + time = 1000000601058 + channel[0] = 1507666376 + buffer #24: + time = 1000000624278 + channel[0] = -1516805654 + buffer #25: + time = 1000000647498 + channel[0] = -1871043921 + buffer #26: + time = 1000000670718 + channel[0] = 207412927 + buffer #27: + time = 1000000693938 + channel[0] = -1713561244 + buffer #28: + time = 1000000717158 + channel[0] = -411081057 + buffer #29: + time = 1000000740378 + channel[0] = 808375157 + buffer #30: + time = 1000000763598 + channel[0] = -565623569 + buffer #31: + time = 1000000786818 + channel[0] = -467468940 + buffer #32: + time = 1000000810038 + channel[0] = 2054722641 + buffer #33: + time = 1000000833258 + channel[0] = -215954900 + buffer #34: + time = 1000000856478 + channel[0] = -891371567 + buffer #35: + time = 1000000879698 + channel[0] = -1773679713 + buffer #36: + time = 1000000902918 + channel[0] = -1113811764 + buffer #37: + time = 1000000926138 + channel[0] = -1104182902 + buffer #38: + time = 1000000949358 + channel[0] = 1502141077 + buffer #39: + time = 1000000972578 + channel[0] = -1966969551 + buffer #40: + time = 1000000995798 + channel[0] = 36035469 + buffer #41: + time = 1000001019018 + channel[0] = -871166167 + buffer #42: + time = 1000001042238 + channel[0] = 1174748352 + buffer #43: + time = 1000001065458 + channel[0] = 1799981753