From 43f098da0f097ab9384710a27a2c1701a43bda37 Mon Sep 17 00:00:00 2001 From: Rohit Kumar Singh <32570096+rohitjoins@users.noreply.github.com> Date: Mon, 29 Apr 2024 11:31:05 -0700 Subject: [PATCH] Merge Issue: androidx/media#882: Extend MPEG2TS implementation with MPEG-H support Imported from GitHub PR https://github.com/androidx/media/pull/882 Merge 27a4c43de6294a5482b85ff8e2b4501057f3e946 into a49b625cc585970843f27410b614c6470924e7e5 COPYBARA_INTEGRATE_REVIEW=https://github.com/androidx/media/pull/882 from androidx:ts_mpegh_reader_patch 27a4c43de6294a5482b85ff8e2b4501057f3e946 PiperOrigin-RevId: 629132035 --- .../ts/DefaultTsPayloadReaderFactory.java | 2 + .../media3/extractor/ts/MpeghReader.java | 380 +++++++++ .../media3/extractor/ts/MpeghUtil.java | 741 ++++++++++++++++++ .../media3/extractor/ts/TsExtractor.java | 1 + .../media3/extractor/ts/TsExtractorTest.java | 112 +++ .../ts/sample_mpegh_bl_cicp1_cont.ts.0.dump | 133 ++++ .../ts/sample_mpegh_bl_cicp1_cont.ts.1.dump | 37 + .../ts/sample_mpegh_bl_cicp1_cont.ts.2.dump | 37 + .../ts/sample_mpegh_bl_cicp1_cont.ts.3.dump | 17 + ...mpegh_bl_cicp1_cont.ts.unknown_length.dump | 130 +++ ...gh_bl_cicp1_cont_setrai_unsetdai.ts.0.dump | 133 ++++ ...gh_bl_cicp1_cont_setrai_unsetdai.ts.1.dump | 17 + ...gh_bl_cicp1_cont_setrai_unsetdai.ts.2.dump | 17 + ...gh_bl_cicp1_cont_setrai_unsetdai.ts.3.dump | 17 + ...ont_setrai_unsetdai.ts.unknown_length.dump | 130 +++ ..._mpegh_bl_cicp1_cont_splitheader.ts.0.dump | 133 ++++ ..._mpegh_bl_cicp1_cont_splitheader.ts.1.dump | 37 + ..._mpegh_bl_cicp1_cont_splitheader.ts.2.dump | 37 + ..._mpegh_bl_cicp1_cont_splitheader.ts.3.dump | 17 + ...p1_cont_splitheader.ts.unknown_length.dump | 130 +++ .../ts/sample_mpegh_bl_cicp1_multi.ts.0.dump | 133 ++++ .../ts/sample_mpegh_bl_cicp1_multi.ts.1.dump | 37 + .../ts/sample_mpegh_bl_cicp1_multi.ts.2.dump | 37 + .../ts/sample_mpegh_bl_cicp1_multi.ts.3.dump | 17 + ...pegh_bl_cicp1_multi.ts.unknown_length.dump | 130 +++ .../ts/sample_mpegh_bl_cicp1_single.ts.0.dump | 133 ++++ .../ts/sample_mpegh_bl_cicp1_single.ts.1.dump | 37 + .../ts/sample_mpegh_bl_cicp1_single.ts.2.dump | 37 + .../ts/sample_mpegh_bl_cicp1_single.ts.3.dump | 17 + ...egh_bl_cicp1_single.ts.unknown_length.dump | 130 +++ ...ample_mpegh_bl_configchange_cont.ts.0.dump | 375 +++++++++ ...ample_mpegh_bl_configchange_cont.ts.1.dump | 254 ++++++ ...ample_mpegh_bl_configchange_cont.ts.2.dump | 133 ++++ ...ample_mpegh_bl_configchange_cont.ts.3.dump | 17 + ...l_configchange_cont.ts.unknown_length.dump | 372 +++++++++ ...mple_mpegh_bl_configchange_multi.ts.0.dump | 375 +++++++++ ...mple_mpegh_bl_configchange_multi.ts.1.dump | 254 ++++++ ...mple_mpegh_bl_configchange_multi.ts.2.dump | 133 ++++ ...mple_mpegh_bl_configchange_multi.ts.3.dump | 17 + ..._configchange_multi.ts.unknown_length.dump | 372 +++++++++ ...ple_mpegh_bl_configchange_single.ts.0.dump | 375 +++++++++ ...ple_mpegh_bl_configchange_single.ts.1.dump | 254 ++++++ ...ple_mpegh_bl_configchange_single.ts.2.dump | 133 ++++ ...ple_mpegh_bl_configchange_single.ts.3.dump | 17 + ...configchange_single.ts.unknown_length.dump | 372 +++++++++ .../ts/sample_mpegh_lcbl_cicp1_cont.ts.0.dump | 136 ++++ .../ts/sample_mpegh_lcbl_cicp1_cont.ts.1.dump | 40 + .../ts/sample_mpegh_lcbl_cicp1_cont.ts.2.dump | 40 + .../ts/sample_mpegh_lcbl_cicp1_cont.ts.3.dump | 20 + ...egh_lcbl_cicp1_cont.ts.unknown_length.dump | 133 ++++ .../sample_mpegh_lcbl_cicp1_multi.ts.0.dump | 136 ++++ .../sample_mpegh_lcbl_cicp1_multi.ts.1.dump | 40 + .../sample_mpegh_lcbl_cicp1_multi.ts.2.dump | 40 + .../sample_mpegh_lcbl_cicp1_multi.ts.3.dump | 20 + ...gh_lcbl_cicp1_multi.ts.unknown_length.dump | 133 ++++ .../sample_mpegh_lcbl_cicp1_single.ts.0.dump | 136 ++++ .../sample_mpegh_lcbl_cicp1_single.ts.1.dump | 40 + .../sample_mpegh_lcbl_cicp1_single.ts.2.dump | 40 + .../sample_mpegh_lcbl_cicp1_single.ts.3.dump | 20 + ...h_lcbl_cicp1_single.ts.unknown_length.dump | 133 ++++ ...ple_mpegh_lcbl_configchange_cont.ts.0.dump | 384 +++++++++ ...ple_mpegh_lcbl_configchange_cont.ts.1.dump | 260 ++++++ ...ple_mpegh_lcbl_configchange_cont.ts.2.dump | 136 ++++ ...ple_mpegh_lcbl_configchange_cont.ts.3.dump | 20 + ...l_configchange_cont.ts.unknown_length.dump | 381 +++++++++ ...le_mpegh_lcbl_configchange_multi.ts.0.dump | 384 +++++++++ ...le_mpegh_lcbl_configchange_multi.ts.1.dump | 260 ++++++ ...le_mpegh_lcbl_configchange_multi.ts.2.dump | 136 ++++ ...le_mpegh_lcbl_configchange_multi.ts.3.dump | 20 + ..._configchange_multi.ts.unknown_length.dump | 381 +++++++++ ...e_mpegh_lcbl_configchange_single.ts.0.dump | 384 +++++++++ ...e_mpegh_lcbl_configchange_single.ts.1.dump | 260 ++++++ ...e_mpegh_lcbl_configchange_single.ts.2.dump | 136 ++++ ...e_mpegh_lcbl_configchange_single.ts.3.dump | 20 + ...configchange_single.ts.unknown_length.dump | 381 +++++++++ .../media/ts/sample_mpegh_bl_cicp1_cont.ts | Bin 0 -> 74636 bytes ...ple_mpegh_bl_cicp1_cont_setrai_unsetdai.ts | Bin 0 -> 74636 bytes .../sample_mpegh_bl_cicp1_cont_splitheader.ts | Bin 0 -> 74824 bytes .../media/ts/sample_mpegh_bl_cicp1_multi.ts | Bin 0 -> 74824 bytes .../media/ts/sample_mpegh_bl_cicp1_single.ts | Bin 0 -> 74824 bytes .../ts/sample_mpegh_bl_configchange_cont.ts | Bin 0 -> 224848 bytes .../ts/sample_mpegh_bl_configchange_multi.ts | Bin 0 -> 224848 bytes .../ts/sample_mpegh_bl_configchange_single.ts | Bin 0 -> 224848 bytes .../media/ts/sample_mpegh_lcbl_cicp1_cont.ts | Bin 0 -> 74636 bytes .../media/ts/sample_mpegh_lcbl_cicp1_multi.ts | Bin 0 -> 74824 bytes .../ts/sample_mpegh_lcbl_cicp1_single.ts | Bin 0 -> 74824 bytes .../ts/sample_mpegh_lcbl_configchange_cont.ts | Bin 0 -> 224848 bytes .../sample_mpegh_lcbl_configchange_multi.ts | Bin 0 -> 224848 bytes .../sample_mpegh_lcbl_configchange_single.ts | Bin 0 -> 224848 bytes 89 files changed, 11069 insertions(+) create mode 100644 libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java create mode 100644 libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghUtil.java create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_multi.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_single.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_configchange_cont.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_configchange_multi.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_configchange_single.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_cicp1_cont.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_cicp1_multi.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_cicp1_single.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_configchange_cont.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_configchange_multi.ts create mode 100644 libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_configchange_single.ts diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java index 1ae810fab7..75d3b24af6 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java @@ -202,6 +202,8 @@ public final class DefaultTsPayloadReaderFactory implements TsPayloadReader.Fact return new PesReader(new DvbSubtitleReader(esInfo.dvbSubtitleInfos)); case TsExtractor.TS_STREAM_TYPE_AIT: return new SectionReader(new PassthroughSectionPayloadReader(MimeTypes.APPLICATION_AIT)); + case TsExtractor.TS_STREAM_TYPE_MHAS: + return new PesReader(new MpeghReader()); default: return null; } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java new file mode 100644 index 0000000000..8851cc8348 --- /dev/null +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java @@ -0,0 +1,380 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.media3.extractor.ts; + +import static androidx.media3.extractor.ts.TsPayloadReader.FLAG_DATA_ALIGNMENT_INDICATOR; +import static androidx.media3.extractor.ts.TsPayloadReader.FLAG_RANDOM_ACCESS_INDICATOR; +import static java.lang.Math.min; +import static java.lang.annotation.ElementType.TYPE_USE; + +import androidx.annotation.IntDef; +import androidx.annotation.Nullable; +import androidx.media3.common.C; +import androidx.media3.common.Format; +import androidx.media3.common.MimeTypes; +import androidx.media3.common.ParserException; +import androidx.media3.common.util.Assertions; +import androidx.media3.common.util.ParsableBitArray; +import androidx.media3.common.util.ParsableByteArray; +import androidx.media3.common.util.UnstableApi; +import androidx.media3.common.util.Util; +import androidx.media3.extractor.ExtractorOutput; +import androidx.media3.extractor.TrackOutput; +import com.google.common.collect.ImmutableList; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.List; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + +/** Parses a continuous MPEG-H audio byte stream and extracts MPEG-H frames. */ +@UnstableApi +public final class MpeghReader implements ElementaryStreamReader { + + @Documented + @Retention(RetentionPolicy.SOURCE) + @Target(TYPE_USE) + @IntDef({STATE_FINDING_SYNC, STATE_READING_PACKET_HEADER, STATE_READING_PACKET_PAYLOAD}) + private @interface State {} + + private static final int STATE_FINDING_SYNC = 0; + private static final int STATE_READING_PACKET_HEADER = 1; + private static final int STATE_READING_PACKET_PAYLOAD = 2; + + private static final int MHAS_SYNC_WORD_LENGTH = 3; + private static final int MIN_MHAS_PACKET_HEADER_SIZE = 2; + private static final int MAX_MHAS_PACKET_HEADER_SIZE = 15; + + private final ParsableByteArray headerScratchBytes; + private final ParsableBitArray headerScratchBits; + private final ParsableByteArray dataScratchBytes; + + private @State int state; + + private @MonotonicNonNull String formatId; + private @MonotonicNonNull TrackOutput output; + + // The timestamp to attach to the next sample in the current packet. + private double timeUs; + private double timeUsPending; + private boolean dataPending; + private boolean rapPending; + private @TsPayloadReader.Flags int flags; + + private int syncBytes; + + private boolean headerDataFinished; + private int payloadBytesRead; + private int frameBytes; + + private MpeghUtil.MhasPacketHeader header; + private int samplingRate; + private int standardFrameLength; + private int truncationSamples; + private long mainStreamLabel; + private boolean configFound; + + /** Constructs a new reader for MPEG-H elementary streams. */ + public MpeghReader() { + state = STATE_FINDING_SYNC; + headerScratchBytes = + new ParsableByteArray(new byte[MAX_MHAS_PACKET_HEADER_SIZE], MIN_MHAS_PACKET_HEADER_SIZE); + headerScratchBits = new ParsableBitArray(); + dataScratchBytes = new ParsableByteArray(); + header = new MpeghUtil.MhasPacketHeader(); + samplingRate = C.RATE_UNSET_INT; + standardFrameLength = C.LENGTH_UNSET; + mainStreamLabel = C.INDEX_UNSET; + rapPending = true; + headerDataFinished = true; + timeUs = C.TIME_UNSET; + timeUsPending = C.TIME_UNSET; + } + + @Override + public void seek() { + state = STATE_FINDING_SYNC; + syncBytes = 0; + headerScratchBytes.reset(MIN_MHAS_PACKET_HEADER_SIZE); + payloadBytesRead = 0; + frameBytes = 0; + samplingRate = C.RATE_UNSET_INT; + standardFrameLength = C.LENGTH_UNSET; + truncationSamples = 0; + mainStreamLabel = C.INDEX_UNSET; + configFound = false; + dataPending = false; + headerDataFinished = true; + rapPending = true; + timeUs = C.TIME_UNSET; + timeUsPending = C.TIME_UNSET; + } + + @Override + public void createTracks( + ExtractorOutput extractorOutput, TsPayloadReader.TrackIdGenerator idGenerator) { + idGenerator.generateNewId(); + formatId = idGenerator.getFormatId(); + output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_AUDIO); + } + + @Override + public void packetStarted(long pesTimeUs, @TsPayloadReader.Flags int flags) { + this.flags = flags; + + // check if data is pending (an MPEG-H frame could not be completed) + if (!rapPending && (frameBytes != 0 || !headerDataFinished)) { + dataPending = true; + } + + if (pesTimeUs != C.TIME_UNSET) { + if (dataPending) { + timeUsPending = pesTimeUs; + } else { + timeUs = pesTimeUs; + } + } + } + + @Override + public void consume(ParsableByteArray data) throws ParserException { + Assertions.checkStateNotNull(output); // Asserts that createTracks has been called. + + while (data.bytesLeft() > 0) { + switch (state) { + case STATE_FINDING_SYNC: + if (skipToNextSync(data)) { + state = STATE_READING_PACKET_HEADER; + } + break; + case STATE_READING_PACKET_HEADER: + copyData(data, headerScratchBytes, /* resetSourcePosition= */ false); + if (headerScratchBytes.bytesLeft() == 0) { + if (parseHeader()) { + // write the MHAS packet header to output + headerScratchBytes.setPosition(0); + output.sampleData(headerScratchBytes, headerScratchBytes.limit()); + + // Prepare headerScratchBytes to read next header in the stream + headerScratchBytes.reset(MIN_MHAS_PACKET_HEADER_SIZE); + + // Prepare dataScratchBytes to read new MHAS packet + dataScratchBytes.reset(header.packetLength); + + headerDataFinished = true; + + // MHAS packet header finished -> obtain the packet payload + state = STATE_READING_PACKET_PAYLOAD; + } else if (headerScratchBytes.limit() < MAX_MHAS_PACKET_HEADER_SIZE) { + headerScratchBytes.setLimit(headerScratchBytes.limit() + 1); + headerDataFinished = false; + } + } else { + headerDataFinished = false; + } + break; + case STATE_READING_PACKET_PAYLOAD: + if (shouldParsePacket(header.packetType)) { + copyData(data, dataScratchBytes, /* resetSourcePosition= */ true); + } + writeSampleData(data); + if (payloadBytesRead == header.packetLength) { + if (header.packetType == MpeghUtil.MhasPacketHeader.PACTYP_MPEGH3DACFG) { + parseConfig(new ParsableBitArray(dataScratchBytes.getData())); + } else if (header.packetType == MpeghUtil.MhasPacketHeader.PACTYP_AUDIOTRUNCATION) { + truncationSamples = + MpeghUtil.parseAudioTruncationInfo( + new ParsableBitArray(dataScratchBytes.getData())); + } else if (header.packetType == MpeghUtil.MhasPacketHeader.PACTYP_MPEGH3DAFRAME) { + finalizeFrame(); + } + // MHAS packet payload finished -> obtain a new packet header + state = STATE_READING_PACKET_HEADER; + } + break; + default: + throw new IllegalStateException(); + } + } + } + + @Override + public void packetFinished() { + // Do nothing. + } + + /** + * Copies data from the provided {@code source} into a given {@code target}, attempting to fill + * the target buffer up to its limit. + * + * @param source The source from which to read. + * @param target The target into which data is to be read. + * @param resetSourcePosition Whether to reset the source position to its original value + */ + private void copyData( + ParsableByteArray source, ParsableByteArray target, boolean resetSourcePosition) { + int sourcePosition = source.getPosition(); + int bytesToRead = min(source.bytesLeft(), target.bytesLeft()); + source.readBytes(target.getData(), target.getPosition(), bytesToRead); + target.skipBytes(bytesToRead); + if (resetSourcePosition) { + source.setPosition(sourcePosition); + } + } + + /** + * Locates the next SYNC value in the buffer, advancing the position to the byte starting with the + * SYNC value. If SYNC was not located, the position is advanced to the limit. + * + * @param pesBuffer The buffer whose position should be advanced. + * @return Whether SYNC was found. + */ + private boolean skipToNextSync(ParsableByteArray pesBuffer) { + if ((flags & FLAG_RANDOM_ACCESS_INDICATOR) == 0) { + // RAI is not signalled -> drop the PES data + pesBuffer.setPosition(pesBuffer.limit()); + return false; + } + + if ((flags & FLAG_DATA_ALIGNMENT_INDICATOR) == 0) { + // if RAI is signalled but the data is not aligned we need to find the sync packet + while (pesBuffer.bytesLeft() > 0) { + syncBytes <<= C.BITS_PER_BYTE; + syncBytes |= pesBuffer.readUnsignedByte(); + if (MpeghUtil.isSyncWord(syncBytes)) { + pesBuffer.setPosition(pesBuffer.getPosition() - MHAS_SYNC_WORD_LENGTH); + syncBytes = 0; + return true; + } + } + } else { + return true; + } + return false; + } + + /** + * Parses the MHAS packet header. + * + * @return {@code true} if the parsing is successful, {@code false} otherwise. + * @throws ParserException if an error occurred during parsing {@link MpeghUtil.MhasPacketHeader}. + */ + private boolean parseHeader() throws ParserException { + int headerLength = headerScratchBytes.limit(); + headerScratchBits.reset(headerScratchBytes.getData(), headerLength); + + // parse the MHAS packet header + boolean result = MpeghUtil.parseMhasPacketHeader(headerScratchBits, header); + + if (result) { + payloadBytesRead = 0; + frameBytes += header.packetLength + headerLength; + } + + return result; + } + + /** + * Determines whether a packet should be parsed based on its type. + * + * @param packetType The {@link MpeghUtil.MhasPacketHeader.Type} of the MHAS packet header. + * @return {@code true} if the packet type is either {@link + * MpeghUtil.MhasPacketHeader#PACTYP_MPEGH3DACFG} or {@link + * MpeghUtil.MhasPacketHeader#PACTYP_AUDIOTRUNCATION}, {@code false} otherwise. + */ + private boolean shouldParsePacket(@MpeghUtil.MhasPacketHeader.Type int packetType) { + return packetType == MpeghUtil.MhasPacketHeader.PACTYP_MPEGH3DACFG + || packetType == MpeghUtil.MhasPacketHeader.PACTYP_AUDIOTRUNCATION; + } + + /** + * Writes sample data to the output. + * + * @param data A {@link ParsableByteArray} from which to read the sample data. + */ + @RequiresNonNull("output") + private void writeSampleData(ParsableByteArray data) { + // read bytes from input data and write them into the output + int bytesToRead = min(data.bytesLeft(), header.packetLength - payloadBytesRead); + output.sampleData(data, bytesToRead); + payloadBytesRead += bytesToRead; + } + + /** + * Parses the config and sets the output format. + * + * @param bitArray The data to parse, positioned at the start of the {@link + * MpeghUtil.Mpegh3daConfig} field. Must be byte-aligned. + * @throws ParserException if a valid {@link MpeghUtil.Mpegh3daConfig} cannot be parsed. + */ + @RequiresNonNull("output") + private void parseConfig(ParsableBitArray bitArray) throws ParserException { + MpeghUtil.Mpegh3daConfig config = MpeghUtil.parseMpegh3daConfig(bitArray); + samplingRate = config.samplingFrequency; + standardFrameLength = config.standardFrameLength; + if (mainStreamLabel != header.packetLabel) { + mainStreamLabel = header.packetLabel; + // set the output format + String codecs = "mhm1"; + if (config.profileLevelIndication != C.INDEX_UNSET) { + codecs += String.format(".%02X", config.profileLevelIndication); + } + @Nullable List initializationData = null; + if (config.compatibleProfileLevelSet != null && config.compatibleProfileLevelSet.length > 0) { + // The first entry in initializationData is reserved for the audio specific + // config. + initializationData = + ImmutableList.of(Util.EMPTY_BYTE_ARRAY, config.compatibleProfileLevelSet); + } + Format format = + new Format.Builder() + .setId(formatId) + .setSampleMimeType(MimeTypes.AUDIO_MPEGH_MHM1) + .setSampleRate(samplingRate) + .setCodecs(codecs) + .setInitializationData(initializationData) + .build(); + output.format(format); + } + configFound = true; + } + + /** Finalizes an MPEG-H frame. */ + @RequiresNonNull("output") + private void finalizeFrame() { + @C.BufferFlags int flag = 0; + // if we have a frame with an mpegh3daConfig, set the obtained AU to a key frame + if (configFound) { + flag = C.BUFFER_FLAG_KEY_FRAME; + rapPending = false; + } + double sampleDurationUs = + (double) C.MICROS_PER_SECOND * (standardFrameLength - truncationSamples) / samplingRate; + long pts = Math.round(timeUs); + if (dataPending) { + dataPending = false; + timeUs = timeUsPending; + } else { + timeUs += sampleDurationUs; + } + output.sampleMetadata(pts, flag, frameBytes, 0, null); + configFound = false; + truncationSamples = 0; + frameBytes = 0; + } +} diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghUtil.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghUtil.java new file mode 100644 index 0000000000..7a8b80d0d8 --- /dev/null +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghUtil.java @@ -0,0 +1,741 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.media3.extractor.ts; + +import static androidx.media3.common.util.Assertions.checkArgument; +import static java.lang.annotation.ElementType.TYPE_USE; + +import androidx.annotation.IntDef; +import androidx.annotation.Nullable; +import androidx.media3.common.C; +import androidx.media3.common.ParserException; +import androidx.media3.common.util.ParsableBitArray; +import androidx.media3.common.util.UnstableApi; +import com.google.common.math.IntMath; +import com.google.common.math.LongMath; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** Utility methods for parsing MPEG-H frames, which are access units in MPEG-H bitstreams. */ +@UnstableApi +/* package */ final class MpeghUtil { + + /** See ISO_IEC_23003-8;2022, 14.4.4. */ + private static final int MHAS_SYNC_WORD = 0xC001A5; + + /** + * Returns whether the lower 3 bytes of the given integer matches an MHAS sync word. See + * ISO_IEC_23008-3;2022, 14.4.4. + */ + public static boolean isSyncWord(int word) { + return (word & 0xFFFFFF) == MHAS_SYNC_WORD; + } + + /** + * Parses an MHAS packet header. See ISO_IEC_23008-3;2022, 14.2.1, Table 222. The reading position + * of {@code data} will be modified to be just after the end of the MHAS packet header. + * + * @param data The data to parse, positioned at the start of the MHAS packet header. Must be + * byte-aligned. + * @param header An instance of {@link MhasPacketHeader} that will be updated with the parsed + * information. + * @return {@code true} if the parsing is successful, {@code false} otherwise. + * @throws ParserException if an error occurred during parsing {@link MhasPacketHeader}. + */ + public static boolean parseMhasPacketHeader(ParsableBitArray data, MhasPacketHeader header) + throws ParserException { + int dataStartPos = data.getBytePosition(); + header.packetType = readEscapedIntValue(data, 3, 8, 8); + if (header.packetType == -1) { + return false; + } + + header.packetLabel = readEscapedLongValue(data, 2, 8, 32); + if (header.packetLabel == -1) { + return false; + } + + if (header.packetLabel > 0x10) { + throw ParserException.createForUnsupportedContainerFeature( + "Contains sub-stream with an invalid packet label " + header.packetLabel); + } + + if (header.packetLabel == 0) { + switch (header.packetType) { + case MhasPacketHeader.PACTYP_MPEGH3DACFG: + throw ParserException.createForMalformedContainer( + "Mpegh3daConfig packet with invalid packet label 0", /* cause= */ null); + case MhasPacketHeader.PACTYP_AUDIOTRUNCATION: + throw ParserException.createForMalformedContainer( + "AudioTruncation packet with invalid packet label 0", /* cause= */ null); + case MhasPacketHeader.PACTYP_MPEGH3DAFRAME: + throw ParserException.createForMalformedContainer( + "Mpegh3daFrame packet with invalid packet label 0", /* cause= */ null); + default: + break; + } + } + + header.packetLength = readEscapedIntValue(data, 11, 24, 24); + return header.packetLength != -1; + } + + /** + * Obtains the output frame length of the current MPEG-H frame. See ISO_IEC_23003-3;2020, 6.1.1.1, + * Table 75. + * + * @param index The coreSbrFrameLengthIndex which determines the output frame length. + * @return The output frame length. + * @throws ParserException if output frame length could not be obtained. + */ + private static int getOutputFrameLength(int index) throws ParserException { + switch (index) { + case 0: + return 768; + case 1: + return 1_024; + case 2: + case 3: + return 2_048; + case 4: + return 4_096; + default: + throw ParserException.createForUnsupportedContainerFeature( + "Unsupported coreSbrFrameLengthIndex " + index); + } + } + + /** + * Obtains the sbrRatioIndex of the current MPEG-H frame. See ISO_IEC_23003-3;2020, 6.1.1.1, Table + * 75. + * + * @param index The coreSbrFrameLengthIndex which determines the output frame length. + * @return The sbrRatioIndex. + * @throws ParserException if sbrRatioIndex could not be obtained. + */ + private static int getSbrRatioIndex(int index) throws ParserException { + switch (index) { + case 0: + case 1: + return 0; + case 2: + return 2; + case 3: + return 3; + case 4: + return 1; + default: + throw ParserException.createForUnsupportedContainerFeature( + "Unsupported coreSbrFrameLengthIndex " + index); + } + } + + /** + * Obtains the resampling ratio according to the provided sampling frequency. See + * ISO_IEC_23008-3;2022, 4.8.2, Table 10. + * + * @param usacSamplingFrequency The USAC sampling frequency. + * @return The resampling ratio. + * @throws ParserException if USAC sampling frequency is not supported. + */ + private static double getResamplingRatio(int usacSamplingFrequency) throws ParserException { + switch (usacSamplingFrequency) { + case 96_000: + case 88_200: + case 48_000: + case 44_100: + return 1; + case 64_000: + case 58_800: + case 32_000: + case 29_400: + return 1.5; + case 24_000: + case 22_050: + return 2; + case 16_000: + case 14_700: + return 3; + default: + throw ParserException.createForUnsupportedContainerFeature( + "Unsupported sampling rate " + usacSamplingFrequency); + } + } + + /** + * Obtains the necessary info of the Mpegh3daConfig from an MPEG-H bit stream. See + * ISO_IEC_23008-3;2022, 5.2.2.1, Table 15. The reading position of {@code data} will be modified + * to be just after the end of the payload of an Mpegh3daConfig packet. + * + * @param data The data to parse, positioned at the start of the payload of an Mpegh3daConfig + * packet. Must be byte-aligned. + * @return The {@link Mpegh3daConfig}. + * @throws ParserException if a valid {@link Mpegh3daConfig} cannot be parsed. + */ + public static Mpegh3daConfig parseMpegh3daConfig(ParsableBitArray data) throws ParserException { + @Nullable byte[] compatibleProfileLevelSet = null; + int profileLevelIndication = data.readBits(8); + + int usacSamplingFrequency; + int samplingFrequencyIndex = data.readBits(5); + if (samplingFrequencyIndex == 0x1F) { + usacSamplingFrequency = data.readBits(24); + } else { + usacSamplingFrequency = getSamplingFrequency(samplingFrequencyIndex); + } + + int coreSbrFrameLengthIndex = data.readBits(3); + int outputFrameLength = getOutputFrameLength(coreSbrFrameLengthIndex); + int sbrRatioIndex = getSbrRatioIndex(coreSbrFrameLengthIndex); + + data.skipBits(2); // cfg_reserved(1), receiverDelayCompensation(1) + + skipSpeakerConfig3d(data); // referenceLayout + int numSignals = parseSignals3d(data); // frameworkConfig3d + skipMpegh3daDecoderConfig(data, numSignals, sbrRatioIndex); // decoderConfig + + if (data.readBit()) { // usacConfigExtensionPresent + // Mpegh3daConfigExtension + int numConfigExtensions = readEscapedIntValue(data, 2, 4, 8) + 1; + for (int confExtIdx = 0; confExtIdx < numConfigExtensions; confExtIdx++) { + int usacConfigExtType = readEscapedIntValue(data, 4, 8, 16); + int usacConfigExtLength = readEscapedIntValue(data, 4, 8, 16); + + if (usacConfigExtType == 7 /* ID_CONFIG_EXT_COMPATIBLE_PROFILELVL_SET */) { + int numCompatibleSets = data.readBits(4) + 1; + data.skipBits(4); // reserved + compatibleProfileLevelSet = new byte[numCompatibleSets]; + for (int idx = 0; idx < numCompatibleSets; idx++) { + compatibleProfileLevelSet[idx] = (byte) data.readBits(8); + } + } else { + data.skipBits(C.BITS_PER_BYTE * usacConfigExtLength); + } + } + } + + // Get the resampling ratio and adjust the samplingFrequency and the standardFrameSamples + // accordingly. + double resamplingRatio = getResamplingRatio(usacSamplingFrequency); + int samplingFrequency = (int) (usacSamplingFrequency * resamplingRatio); + int standardFrameLength = (int) (outputFrameLength * resamplingRatio); + + return new Mpegh3daConfig( + profileLevelIndication, samplingFrequency, standardFrameLength, compatibleProfileLevelSet); + } + + /** + * Obtains the sampling rate of the current MPEG-H frame. See ISO_IEC_23003-3;2020, 6.1.1.1, Table + * 72. + * + * @param index The samplingFrequencyIndex which determines the sampling frequency. + * @return The sampling frequency. + * @throws ParserException if sampling frequency could not be obtained. + */ + private static int getSamplingFrequency(int index) throws ParserException { + switch (index) { + case 0: + return 96_000; + case 1: + return 88_200; + case 2: + return 64_000; + case 3: + return 48_000; + case 4: + return 44_100; + case 5: + return 32_000; + case 6: + return 24_000; + case 7: + return 22_050; + case 8: + return 16_000; + case 9: + return 12_000; + case 10: + return 11_025; + case 11: + return 8_000; + case 12: + return 7350; + case 15: + return 57_600; + case 16: + return 51_200; + case 17: + return 40_000; + case 18: + return 38_400; + case 19: + return 34_150; + case 20: + return 28_800; + case 21: + return 25_600; + case 22: + return 20_000; + case 23: + return 19_200; + case 24: + return 17_075; + case 25: + return 14_400; + case 26: + return 12_800; + case 27: + return 9_600; + default: + throw ParserException.createForUnsupportedContainerFeature( + "Unsupported sampling rate index " + index); + } + } + + /** + * Obtains the number of truncated samples of the AudioTruncationInfo from an MPEG-H bit stream. + * See ISO_IEC_23008-3;2022, 14.2.2, Table 225. The reading position of {@code data} will be + * modified to be just after the end of the AudioTruncation packet payload. + * + * @param data The data to parse, positioned at the start of the payload of an AudioTruncation + * packet. + * @return The number of truncated samples. + */ + public static int parseAudioTruncationInfo(ParsableBitArray data) { + if (data.readBit()) { // isActive + data.skipBits(2); // reserved(1), truncFromBegin(1) + return data.readBits(13); + } + return 0; + } + + /** + * Skips the SpeakerConfig3d from an MPEG-H bit stream. See ISO_IEC_23008-3;2022, 5.2.2.2, Table + * 18. The reading position of {@code data} will be modified to be just after the end of the + * SpeakerConfig3d field. + * + * @param data The data to parse, positioned at the start of the SpeakerConfig3d field. + */ + private static void skipSpeakerConfig3d(ParsableBitArray data) { + int speakerLayoutType = data.readBits(2); + if (speakerLayoutType == 0) { + data.skipBits(6); // cicpSpeakerLayoutIdx + return; + } + + int numberOfSpeakers = readEscapedIntValue(data, 5, 8, 16) + 1; + if (speakerLayoutType == 1) { + data.skipBits(7 * numberOfSpeakers); // cicpSpeakerIdx per speaker + } else if (speakerLayoutType == 2) { + skipMpegh3daFlexibleSpeakerConfig(data, numberOfSpeakers); + } + } + + /** + * Skips the mpegh3daFlexibleSpeakerConfig from an MPEG-H bit stream. See ISO_IEC_23008-3;2022, + * 5.2.2.2, Table 19. The reading position of {@code data} will be modified to be just after the + * end of the Mpegh3daFlexibleSpeakerConfig field. + * + * @param data The data to parse, positioned at the start of the Mpegh3daFlexibleSpeakerConfig + * field. + */ + private static void skipMpegh3daFlexibleSpeakerConfig( + ParsableBitArray data, int numberOfSpeakers) { + boolean angularPrecision = data.readBit(); + int angularPrecisionDegrees = angularPrecision ? 1 : 5; + int elevationAngleBits = angularPrecision ? 7 : 5; + int azimuthAngleBits = angularPrecision ? 8 : 6; + + // Mpegh3daSpeakerDescription array + for (int i = 0; i < numberOfSpeakers; i++) { + int azimuthAngle = 0; + if (data.readBit()) { // isCICPspeakerIdx + data.skipBits(7); // cicpSpeakerIdx + } else { + int elevationClass = data.readBits(2); + if (elevationClass == 3) { + int elevationAngleIdx = data.readBits(elevationAngleBits); + int elevationAngle = elevationAngleIdx * angularPrecisionDegrees; + if (elevationAngle != 0) { + data.skipBit(); // elevationDirection + } + } + int azimuthAngleIdx = data.readBits(azimuthAngleBits); + azimuthAngle = azimuthAngleIdx * angularPrecisionDegrees; + if ((azimuthAngle != 0) && (azimuthAngle != 180)) { + data.skipBit(); // azimuthDirection + } + data.skipBit(); // isLFE + } + + if ((azimuthAngle != 0) && (azimuthAngle != 180)) { + if (data.readBit()) { // alsoAddSymmetricPair + i++; + } + } + } + } + + /** + * Obtains the necessary info of Signals3d from an MPEG-H bit stream. See ISO_IEC_23008-3;2022, + * 5.2.2.1, Table 17. The reading position of {@code data} will be modified to be just after the + * end of the Signals3d field. + * + * @param data The data to parse, positioned at the start of the Signals3d field. + * @return The number of overall signals in the bit stream. + */ + private static int parseSignals3d(ParsableBitArray data) { + int numberOfSignals = 0; + int numberOfSignalGroupsInBitstream = data.readBits(5); + + for (int grp = 0; grp < numberOfSignalGroupsInBitstream + 1; grp++) { + int signalGroupType = data.readBits(3); + int bsNumberOfSignals = readEscapedIntValue(data, 5, 8, 16); + + numberOfSignals += bsNumberOfSignals + 1; + if (signalGroupType == 0 /*SignalGroupTypeChannels*/ + || signalGroupType == 2 /*SignalGroupTypeSAOC*/) { + if (data.readBit()) { // differsFromReferenceLayout OR saocDmxLayoutPresent + skipSpeakerConfig3d(data); // audioChannelLayout[grp] OR saocDmxChannelLayout + } + } + } + return numberOfSignals; + } + + /** + * Skips the Mpegh3daDecoderConfig from an MPEG-H bit stream. See ISO_IEC_23008-3;2022, 5.2.2.3, + * Table 21. The reading position of {@code data} will be modified to be just after the end of the + * Mpegh3daDecoderConfig field. + * + * @param data The data to parse, positioned at the start of the Mpegh3daDecoderConfig field. + * @param numSignals The number of overall signals. + * @param sbrRatioIndex The SBR ration index. + */ + private static void skipMpegh3daDecoderConfig( + ParsableBitArray data, int numSignals, int sbrRatioIndex) { + + int numElements = readEscapedIntValue(data, 4, 8, 16) + 1; + data.skipBit(); // elementLengthPresent + + for (int elemIdx = 0; elemIdx < numElements; elemIdx++) { + int usacElementType = data.readBits(2); + + switch (usacElementType) { + case 0 /*ID_USAC_SCE*/: + parseMpegh3daCoreConfig(data); // coreConfig + if (sbrRatioIndex > 0) { + skipSbrConfig(data); // sbrConfig + } + break; + case 1 /*ID_USAC_CPE*/: + boolean enhancedNoiseFilling = parseMpegh3daCoreConfig(data); // coreConfig + if (enhancedNoiseFilling) { + data.skipBit(); // igfIndependentTiling + } + int stereoConfigIndex = 0; + if (sbrRatioIndex > 0) { + skipSbrConfig(data); // sbrConfig + stereoConfigIndex = data.readBits(2); + } + if (stereoConfigIndex > 0) { + // mps212Config + data.skipBits(6); // bsFreqRes(3), bsFixedGainDMX(3), + int bsTempShapeConfig = data.readBits(2); + data.skipBits(4); // bsDecorrConfig(2), bsHighRateMode(1), bsPhaseCoding(1) + if (data.readBit()) { // bsOttBandsPhasePresent + data.skipBits(5); // bsOttBandsPhase + } + if (stereoConfigIndex == 2 || stereoConfigIndex == 3) { + data.skipBits(6); // bsResidualBands(5), bsPseudoLr(1) + } + if (bsTempShapeConfig == 2) { + data.skipBit(); // bsEnvQuantMode + } + } + + int nBits = (int) Math.floor(Math.log(numSignals - 1) / Math.log(2.0)) + 1; + int qceIndex = data.readBits(2); + if (qceIndex > 0) { + if (data.readBit()) { // shiftIndex0 + data.skipBits(nBits); // shiftChannel0 + } + } + if (data.readBit()) { // shiftIndex1 + data.skipBits(nBits); // shiftChannel1 + } + if (sbrRatioIndex == 0 && qceIndex == 0) { + data.skipBit(); // lpdStereoIndex + } + break; + case 3 /*ID_USAC_EXT*/: + readEscapedIntValue(data, 4, 8, 16); // usacExtElementType + int usacExtElementConfigLength = readEscapedIntValue(data, 4, 8, 16); + + if (data.readBit()) { // usacExtElementDefaultLengthPresent + readEscapedIntValue(data, 8, 16, 0) /* +1 */; // usacExtElementDefaultLength + } + data.skipBit(); // usacExtElementPayloadFrag + + if (usacExtElementConfigLength > 0) { + data.skipBits(8 * usacExtElementConfigLength); + } + break; + default: + break; + } + } + } + + /** + * Obtains the necessary info of the Mpegh3daCoreConfig from an MPEG-H bit stream. See + * ISO_IEC_23008-3;2022, 5.2.2.3, Table 24. The reading position of {@code data} will be modified + * to be just after the end of the Mpegh3daCoreConfig field. + * + * @param data The data to parse, positioned at the start of the Mpegh3daCoreConfig field. + * @return The enhanced noise filling flag. + */ + private static boolean parseMpegh3daCoreConfig(ParsableBitArray data) { + data.skipBits(3); // tw_mdct(1), fullbandLpd(1), noiseFilling(1) + boolean enhancedNoiseFilling = data.readBit(); + if (enhancedNoiseFilling) { + // igfUseEnf(1), igfUseHighRes(1), igfUseWhitening(1), igfAfterTnsSynth(1), igfStartIndex(5), + // igfStopIndex(4) + data.skipBits(13); + } + return enhancedNoiseFilling; + } + + /** + * Skips the SbrConfig from an MPEG-H bit stream. See ISO_IEC_23003-3;2020, 5.2, Table 14. The + * reading position of {@code data} will be modified. + * + * @param data The data to parse, positioned at the start of the SbrConfig field. + */ + private static void skipSbrConfig(ParsableBitArray data) { + data.skipBits(3); // harmonicSBR(1), bs_interTes(1), bs_pvc(1) + data.skipBits(8); // dflt_start_freq(4), dflt_stop_freq(4) + boolean dfltHeaderExtra1 = data.readBit(); + boolean dfltHeaderExtra2 = data.readBit(); + if (dfltHeaderExtra1) { + data.skipBits(5); // dflt_freq_scale(2), dflt_alter_scale(1), dflt_noise_bands(2) + } + if (dfltHeaderExtra2) { + // dflt_limiter_bands(2), dflt_limiter_gains(2), dflt_interpol_freq(1), dflt_smoothing_mode(1) + data.skipBits(6); + } + } + + /** + * Obtains an escaped value (up to {@link Integer#MAX_VALUE}) from an MPEG-H bit stream. + * + *

See ISO_IEC_23003-3;2020, 5.2, Table 19. + * + *

The reading position of {@code data} will be modified to be just after the end of the + * escaped value. + * + * @param data The data to parse, positioned at the start of the escaped value. + * @param bits1 number of bits to be parsed. + * @param bits2 number of bits to be parsed. + * @param bits3 number of bits to be parsed. + * @return The escaped integer value or -1 if end of the {@code data} is reached before fully + * reading the value. + * @throws IllegalArgumentException if {@code bits1}, {@code bits2} and {@code bits3} could result + * in reading a value greater than {@link Integer#MAX_VALUE}. + */ + private static int readEscapedIntValue(ParsableBitArray data, int bits1, int bits2, int bits3) { + // Ensure that the calculated value will fit within the range of a Java {@code int}. + int maxBitCount = Math.max(Math.max(bits1, bits2), bits3); + checkArgument(maxBitCount <= Integer.SIZE - 1); + // Result is intentionally unused, checking if the operation causes overflow + int unused = + IntMath.checkedAdd(IntMath.checkedAdd((1 << bits1) - 1, (1 << bits2) - 1), (1 << bits3)); + + if (data.bitsLeft() < bits1) { + return -1; + } + + int value = data.readBits(bits1); + if (value == (1 << bits1) - 1) { + if (data.bitsLeft() < bits2) { + return -1; + } + int valueAdd = data.readBits(bits2); + value += valueAdd; + + if (valueAdd == (1 << bits2) - 1) { + if (data.bitsLeft() < bits3) { + return -1; + } + valueAdd = data.readBits(bits3); + value += valueAdd; + } + } + return value; + } + + /** + * Obtains an escaped value (up to {@link Long#MAX_VALUE}) from an MPEG-H bit stream. + * + *

See ISO_IEC_23003-3;2020, 5.2, Table 19. + * + *

The reading position of {@code data} will be modified to be just after the end of the + * escaped value. + * + * @param data The data to parse, positioned at the start of the escaped value. + * @param bits1 number of bits to be parsed. + * @param bits2 number of bits to be parsed. + * @param bits3 number of bits to be parsed. + * @return The escaped long value or -1 if end of the {@code data} is reached before fully reading + * the value. + * @throws IllegalArgumentException if {@code bits1}, {@code bits2} and {@code bits3} could result + * in reading a value greater than {@link Long#MAX_VALUE}. + */ + private static long readEscapedLongValue(ParsableBitArray data, int bits1, int bits2, int bits3) { + // Ensure that the calculated value will fit within the range of a Java {@code long}. + int maxBitCount = Math.max(Math.max(bits1, bits2), bits3); + checkArgument(maxBitCount <= Long.SIZE - 1); + // Result is intentionally unused, checking if the operation causes overflow + long unused = + LongMath.checkedAdd( + LongMath.checkedAdd((1L << bits1) - 1, (1L << bits2) - 1), (1L << bits3)); + + if (data.bitsLeft() < bits1) { + return -1; + } + + long value = data.readBitsToLong(bits1); + if (value == (1L << bits1) - 1) { + if (data.bitsLeft() < bits2) { + return -1; + } + + long valueAdd = data.readBitsToLong(bits2); + value += valueAdd; + + if (valueAdd == (1L << bits2) - 1) { + if (data.bitsLeft() < bits3) { + return -1; + } + + valueAdd = data.readBitsToLong(bits3); + value += valueAdd; + } + } + return value; + } + + private MpeghUtil() {} + + /** + * Represents the header of an MHAS (MPEG-H 3D Audio System) packet. This header provides + * essential information to identify and parse the packet's contents. + */ + public static class MhasPacketHeader { + + /** MHAS packet types. See ISO_IEC_23008-3;2022, 14.4. */ + @Documented + @Retention(RetentionPolicy.SOURCE) + @Target(TYPE_USE) + @IntDef({ + PACTYP_FILLDATA, + PACTYP_MPEGH3DACFG, + PACTYP_MPEGH3DAFRAME, + PACTYP_AUDIOSCENEINFO, + PACTYP_SYNC, + PACTYP_SYNCGAP, + PACTYP_MARKER, + PACTYP_CRC16, + PACTYP_CRC32, + PACTYP_DESCRIPTOR, + PACTYP_USERINTERACTION, + PACTYP_LOUDNESS_DRC, + PACTYP_BUFFERINFO, + PACTYP_GLOBAL_CRC16, + PACTYP_GLOBAL_CRC32, + PACTYP_AUDIOTRUNCATION, + PACTYP_GENDATA, + PACTYPE_EARCON, + PACTYPE_PCMCONFIG, + PACTYPE_PCMDATA, + PACTYP_LOUDNESS + }) + public @interface Type {} + + public static final int PACTYP_FILLDATA = 0; + public static final int PACTYP_MPEGH3DACFG = 1; + public static final int PACTYP_MPEGH3DAFRAME = 2; + public static final int PACTYP_AUDIOSCENEINFO = 3; + public static final int PACTYP_SYNC = 6; + public static final int PACTYP_SYNCGAP = 7; + public static final int PACTYP_MARKER = 8; + public static final int PACTYP_CRC16 = 9; + public static final int PACTYP_CRC32 = 10; + public static final int PACTYP_DESCRIPTOR = 11; + public static final int PACTYP_USERINTERACTION = 12; + public static final int PACTYP_LOUDNESS_DRC = 13; + public static final int PACTYP_BUFFERINFO = 14; + public static final int PACTYP_GLOBAL_CRC16 = 15; + public static final int PACTYP_GLOBAL_CRC32 = 16; + public static final int PACTYP_AUDIOTRUNCATION = 17; + public static final int PACTYP_GENDATA = 18; + public static final int PACTYPE_EARCON = 19; + public static final int PACTYPE_PCMCONFIG = 20; + public static final int PACTYPE_PCMDATA = 21; + public static final int PACTYP_LOUDNESS = 22; + + /** The payload type in the actual packet. */ + public @Type int packetType; + + /** A label indicating which packets belong together. */ + public long packetLabel; + + /** The length of MHAS packet payload in bytes. */ + public int packetLength; + } + + /** Represents an MPEG-H 3D audio configuration. */ + public static class Mpegh3daConfig { + + /** The MPEG-H 3D audio profile and level indication. */ + public final int profileLevelIndication; + + /** The sampling frequency of the MPEG-H 3D Audio stream. */ + public final int samplingFrequency; + + /** The standard frame length in samples. */ + public final int standardFrameLength; + + /** + * A list of MPEG-H 3D audio profile-level set that are compatible with the current + * configuration. + */ + @Nullable public final byte[] compatibleProfileLevelSet; + + private Mpegh3daConfig( + int profileLevelIndication, + int samplingFrequency, + int standardFrameLength, + @Nullable byte[] compatibleProfileLevelSet) { + this.profileLevelIndication = profileLevelIndication; + this.samplingFrequency = samplingFrequency; + this.standardFrameLength = standardFrameLength; + this.compatibleProfileLevelSet = compatibleProfileLevelSet; + } + } +} diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java index b4dbd033d6..53cea741cd 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java @@ -135,6 +135,7 @@ public final class TsExtractor implements Extractor { public static final int TS_STREAM_TYPE_H263 = 0x10; // MPEG-4 Part 2 and H.263 public static final int TS_STREAM_TYPE_H264 = 0x1B; public static final int TS_STREAM_TYPE_H265 = 0x24; + public static final int TS_STREAM_TYPE_MHAS = 0x2D; public static final int TS_STREAM_TYPE_ID3 = 0x15; public static final int TS_STREAM_TYPE_SPLICE_INFO = 0x86; public static final int TS_STREAM_TYPE_DVBSUBS = 0x59; diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java index 1b30c3f412..2c1655f22a 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/ts/TsExtractorTest.java @@ -253,6 +253,118 @@ public final class TsExtractorTest { simulationConfig); } + @Test + public void sampleWithMpeghBlCicp1Single() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_cicp1_single.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghLcBlCicp1Single() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_lcbl_cicp1_single.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghBlConfigChangeSingle() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_configchange_single.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghLcBlConfigChangeSingle() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_lcbl_configchange_single.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghBlCicp1Multi() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_cicp1_multi.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghLcBlCicp1Multi() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_lcbl_cicp1_multi.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghBlConfigChangeMulti() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_configchange_multi.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghLcBlConfigChangeMulti() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_lcbl_configchange_multi.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghBlCicp1Cont() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_cicp1_cont.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghLcBlCicp1Cont() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_lcbl_cicp1_cont.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghBlConfigChangeCont() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_configchange_cont.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghLcBlConfigChangeCont() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_lcbl_configchange_cont.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghBlContSetRaiUnsetDai() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts", + simulationConfig); + } + + @Test + public void sampleWithMpeghBlContSplitHeader() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(subtitlesParsedDuringExtraction), + "media/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts", + simulationConfig); + } + @Test public void customPesReader() throws Exception { CustomTsPayloadReaderFactory factory = new CustomTsPayloadReaderFactory(true, false); diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.0.dump new file mode 100644 index 0000000000..26777c7a16 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.0.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106667 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170667 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234667 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298667 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426667 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 448000 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.1.dump new file mode 100644 index 0000000000..5fdd308537 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.1.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.2.dump new file mode 100644 index 0000000000..5fdd308537 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.2.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.3.dump new file mode 100644 index 0000000000..18dc3d7ebb --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.unknown_length.dump new file mode 100644 index 0000000000..03b5c58259 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont.ts.unknown_length.dump @@ -0,0 +1,130 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106667 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170667 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234667 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298667 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426667 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 448000 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.0.dump new file mode 100644 index 0000000000..039faf8cff --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.0.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 567011 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(283505) = [[timeUs=283505, position=35264]] + getPosition(567011) = [[timeUs=567011, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 2717 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 337, hash 84E728C1 + sample 1: + time = 21333 + flags = 0 + data = length 89, hash 64104580 + sample 2: + time = 42666 + flags = 0 + data = length 102, hash 845EBE43 + sample 3: + time = 64000 + flags = 0 + data = length 110, hash 38545FDF + sample 4: + time = 85333 + flags = 0 + data = length 101, hash D3216774 + sample 5: + time = 106666 + flags = 0 + data = length 96, hash E5096A84 + sample 6: + time = 127999 + flags = 0 + data = length 95, hash 514E63BF + sample 7: + time = 149333 + flags = 0 + data = length 90, hash F45706D3 + sample 8: + time = 170666 + flags = 0 + data = length 89, hash B219E93F + sample 9: + time = 191999 + flags = 0 + data = length 89, hash 9D90394 + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 9D7A1584 + sample 11: + time = 234666 + flags = 0 + data = length 83, hash 6E0457B0 + sample 12: + time = 256000 + flags = 0 + data = length 82, hash 5972B44D + sample 13: + time = 277333 + flags = 0 + data = length 82, hash 6639E113 + sample 14: + time = 298667 + flags = 0 + data = length 80, hash B550B518 + sample 15: + time = 320000 + flags = 0 + data = length 82, hash 73F61B02 + sample 16: + time = 341333 + flags = 0 + data = length 81, hash CA4029EB + sample 17: + time = 362666 + flags = 0 + data = length 78, hash 6C216053 + sample 18: + time = 383999 + flags = 0 + data = length 79, hash 25933965 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 5057B59B + sample 20: + time = 426666 + flags = 0 + data = length 77, hash 1209F544 + sample 21: + time = 447999 + flags = 0 + data = length 79, hash 8F79706F + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 5057B592 + sample 23: + time = 490666 + flags = 0 + data = length 77, hash 1209F545 + sample 24: + time = 512000 + flags = 0 + data = length 79, hash 8F79705D + sample 25: + time = 533333 + flags = 0 + data = length 81, hash D05E7A84 + sample 26: + time = 554666 + flags = 0 + data = length 76, hash 7C69C79 + sample 27: + time = 576000 + flags = 0 + data = length 85, hash 968BAF7A + sample 28: + time = 597333 + flags = 0 + data = length 75, hash 69A79E91 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.1.dump new file mode 100644 index 0000000000..27c35eb1c2 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.1.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 567011 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(283505) = [[timeUs=283505, position=35264]] + getPosition(567011) = [[timeUs=567011, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.2.dump new file mode 100644 index 0000000000..27c35eb1c2 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.2.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 567011 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(283505) = [[timeUs=283505, position=35264]] + getPosition(567011) = [[timeUs=567011, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.3.dump new file mode 100644 index 0000000000..27c35eb1c2 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 567011 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(283505) = [[timeUs=283505, position=35264]] + getPosition(567011) = [[timeUs=567011, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.unknown_length.dump new file mode 100644 index 0000000000..5b9588c73f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts.unknown_length.dump @@ -0,0 +1,130 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2717 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 337, hash 84E728C1 + sample 1: + time = 21333 + flags = 0 + data = length 89, hash 64104580 + sample 2: + time = 42666 + flags = 0 + data = length 102, hash 845EBE43 + sample 3: + time = 64000 + flags = 0 + data = length 110, hash 38545FDF + sample 4: + time = 85333 + flags = 0 + data = length 101, hash D3216774 + sample 5: + time = 106666 + flags = 0 + data = length 96, hash E5096A84 + sample 6: + time = 127999 + flags = 0 + data = length 95, hash 514E63BF + sample 7: + time = 149333 + flags = 0 + data = length 90, hash F45706D3 + sample 8: + time = 170666 + flags = 0 + data = length 89, hash B219E93F + sample 9: + time = 191999 + flags = 0 + data = length 89, hash 9D90394 + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 9D7A1584 + sample 11: + time = 234666 + flags = 0 + data = length 83, hash 6E0457B0 + sample 12: + time = 256000 + flags = 0 + data = length 82, hash 5972B44D + sample 13: + time = 277333 + flags = 0 + data = length 82, hash 6639E113 + sample 14: + time = 298667 + flags = 0 + data = length 80, hash B550B518 + sample 15: + time = 320000 + flags = 0 + data = length 82, hash 73F61B02 + sample 16: + time = 341333 + flags = 0 + data = length 81, hash CA4029EB + sample 17: + time = 362666 + flags = 0 + data = length 78, hash 6C216053 + sample 18: + time = 383999 + flags = 0 + data = length 79, hash 25933965 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 5057B59B + sample 20: + time = 426666 + flags = 0 + data = length 77, hash 1209F544 + sample 21: + time = 447999 + flags = 0 + data = length 79, hash 8F79706F + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 5057B592 + sample 23: + time = 490666 + flags = 0 + data = length 77, hash 1209F545 + sample 24: + time = 512000 + flags = 0 + data = length 79, hash 8F79705D + sample 25: + time = 533333 + flags = 0 + data = length 81, hash D05E7A84 + sample 26: + time = 554666 + flags = 0 + data = length 76, hash 7C69C79 + sample 27: + time = 576000 + flags = 0 + data = length 85, hash 968BAF7A + sample 28: + time = 597333 + flags = 0 + data = length 75, hash 69A79E91 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.0.dump new file mode 100644 index 0000000000..b4f62bba30 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.0.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42666 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362666 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 448000 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.1.dump new file mode 100644 index 0000000000..cba6c772ec --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.1.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.2.dump new file mode 100644 index 0000000000..cba6c772ec --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.2.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.3.dump new file mode 100644 index 0000000000..1de3d72dbc --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.unknown_length.dump new file mode 100644 index 0000000000..5946cf31c1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts.unknown_length.dump @@ -0,0 +1,130 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42666 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362666 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 448000 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.0.dump new file mode 100644 index 0000000000..3eb50b4910 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.0.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 127999 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 191999 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 447999 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.1.dump new file mode 100644 index 0000000000..eceb3380e1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.1.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.2.dump new file mode 100644 index 0000000000..eceb3380e1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.2.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.3.dump new file mode 100644 index 0000000000..cf1b4867de --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.unknown_length.dump new file mode 100644 index 0000000000..2b3e089279 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_multi.ts.unknown_length.dump @@ -0,0 +1,130 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 127999 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 191999 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 447999 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554667 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.0.dump new file mode 100644 index 0000000000..b4f62bba30 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.0.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42666 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362666 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 448000 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.1.dump new file mode 100644 index 0000000000..cba6c772ec --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.1.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.2.dump new file mode 100644 index 0000000000..cba6c772ec --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.2.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 609 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 2: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.3.dump new file mode 100644 index 0000000000..1de3d72dbc --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.unknown_length.dump new file mode 100644 index 0000000000..5946cf31c1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_cicp1_single.ts.unknown_length.dump @@ -0,0 +1,130 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 335, hash E6334A80 + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42666 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash FB7243AF + sample 13: + time = 277333 + flags = 0 + data = length 80, hash 284BFE1 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash CB614574 + sample 17: + time = 362666 + flags = 0 + data = length 76, hash F97A6A30 + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB636 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C7 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0CD + sample 21: + time = 448000 + flags = 0 + data = length 78, hash 8BA25136 + sample 22: + time = 469333 + flags = 0 + data = length 79, hash 4FEDABA0 + sample 23: + time = 490666 + flags = 0 + data = length 82, hash 7C80BC82 + sample 24: + time = 512000 + flags = 1 + data = length 320, hash 58EEA8F6 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash 7349D247 + sample 26: + time = 554666 + flags = 0 + data = length 77, hash 73C5B274 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1A8 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash E441B6B8 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.0.dump new file mode 100644 index 0000000000..6331d45623 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.0.dump @@ -0,0 +1,375 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 485, hash 8E663C03 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106667 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170667 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 255999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 319999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 383999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 153, hash CC86912D + sample 22: + time = 469333 + flags = 0 + data = length 162, hash 577737FF + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 490, hash FD29BE27 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF637D + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A762E + sample 27: + time = 576000 + flags = 0 + data = length 154, hash E4D1CE2 + sample 28: + time = 597333 + flags = 0 + data = length 143, hash C1C83A77 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 30: + time = 618667 + flags = 0 + data = length 611, hash 4D115F94 + sample 31: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD544 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 36: + time = 746666 + flags = 0 + data = length 616, hash B059E5F3 + sample 37: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480782F + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 42: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash ABB26E68 + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 50: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE83 + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130667 + flags = 0 + data = length 496, hash 7D75AE90 + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 57: + time = 1194667 + flags = 0 + data = length 733, hash 5199F868 + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 58: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.1.dump new file mode 100644 index 0000000000..80a270d4a8 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.1.dump @@ -0,0 +1,254 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 33598 + sample count = 58 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 0: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 1: + time = 618667 + flags = 0 + data = length 611, hash 4D115F94 + sample 2: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 3: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 4: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD544 + sample 5: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 6: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 7: + time = 746666 + flags = 0 + data = length 616, hash B059E5F3 + sample 8: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 9: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 10: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 11: + time = 832000 + flags = 0 + data = length 658, hash D480782F + sample 12: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 13: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 14: + time = 896000 + flags = 0 + data = length 657, hash ABB26E68 + sample 15: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 16: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 17: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 18: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 19: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 20: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 21: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 22: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE83 + sample 23: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 24: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 25: + time = 1130667 + flags = 0 + data = length 496, hash 7D75AE90 + sample 26: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 27: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 28: + time = 1194667 + flags = 0 + data = length 733, hash 5199F868 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 30: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 31: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 32: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 33: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 34: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 35: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 36: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 37: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 38: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 39: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 40: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 41: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 42: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 43: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 44: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 45: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 46: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 47: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 48: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 49: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 50: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 51: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 52: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 53: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 54: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 55: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 56: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 57: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.2.dump new file mode 100644 index 0000000000..640cb9f9da --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.2.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 13976 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 0: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 1: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 2: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 3: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 4: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 5: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 6: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 7: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 8: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 9: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 10: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 11: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 12: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 13: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 14: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 15: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 16: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 17: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 18: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 19: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 20: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 21: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 22: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 23: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 24: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 25: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 26: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 27: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 28: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.3.dump new file mode 100644 index 0000000000..d3b657ed0d --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.unknown_length.dump new file mode 100644 index 0000000000..6968e9c75a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_cont.ts.unknown_length.dump @@ -0,0 +1,372 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 485, hash 8E663C03 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106667 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170667 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 255999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 319999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 383999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 153, hash CC86912D + sample 22: + time = 469333 + flags = 0 + data = length 162, hash 577737FF + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 490, hash FD29BE27 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF637D + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A762E + sample 27: + time = 576000 + flags = 0 + data = length 154, hash E4D1CE2 + sample 28: + time = 597333 + flags = 0 + data = length 143, hash C1C83A77 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 30: + time = 618667 + flags = 0 + data = length 611, hash 4D115F94 + sample 31: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD544 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 36: + time = 746666 + flags = 0 + data = length 616, hash B059E5F3 + sample 37: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480782F + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 42: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash ABB26E68 + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 50: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE83 + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130667 + flags = 0 + data = length 496, hash 7D75AE90 + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 57: + time = 1194667 + flags = 0 + data = length 733, hash 5199F868 + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 58: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.0.dump new file mode 100644 index 0000000000..184a2b6a8d --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.0.dump @@ -0,0 +1,375 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 485, hash 8E663C03 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 127999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 191999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362667 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 153, hash CC86912D + sample 22: + time = 469333 + flags = 0 + data = length 162, hash 577737FF + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 490, hash FD29BE27 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF637D + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A762E + sample 27: + time = 576000 + flags = 0 + data = length 154, hash E4D1CE2 + sample 28: + time = 597333 + flags = 0 + data = length 143, hash C1C83A77 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 30: + time = 618667 + flags = 0 + data = length 611, hash 4D115F94 + sample 31: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 33: + time = 682667 + flags = 0 + data = length 609, hash 5B7AD544 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 36: + time = 746667 + flags = 0 + data = length 616, hash B059E5F3 + sample 37: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 831999 + flags = 0 + data = length 658, hash D480782F + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 42: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 43: + time = 895999 + flags = 0 + data = length 657, hash ABB26E68 + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 50: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE83 + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE90 + sample 55: + time = 1151999 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 57: + time = 1194666 + flags = 0 + data = length 733, hash 5199F868 + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 58: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.1.dump new file mode 100644 index 0000000000..61ed15edb9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.1.dump @@ -0,0 +1,254 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 33598 + sample count = 58 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 0: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 1: + time = 618667 + flags = 0 + data = length 611, hash 4D115F94 + sample 2: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 3: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 4: + time = 682667 + flags = 0 + data = length 609, hash 5B7AD544 + sample 5: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 6: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 7: + time = 746667 + flags = 0 + data = length 616, hash B059E5F3 + sample 8: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 9: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 10: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 11: + time = 831999 + flags = 0 + data = length 658, hash D480782F + sample 12: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 13: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 14: + time = 895999 + flags = 0 + data = length 657, hash ABB26E68 + sample 15: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 16: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 17: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 18: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 19: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 20: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 21: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 22: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE83 + sample 23: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 24: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 25: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE90 + sample 26: + time = 1151999 + flags = 0 + data = length 560, hash 77AD983C + sample 27: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 28: + time = 1194666 + flags = 0 + data = length 733, hash 5199F868 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 30: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 31: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 32: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 33: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 34: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 35: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 36: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 37: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 38: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 39: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 40: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 41: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 42: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 43: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 44: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 45: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 46: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 47: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 48: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 49: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 50: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 51: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 52: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 53: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 54: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 55: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 56: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 57: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.2.dump new file mode 100644 index 0000000000..1eaddbe905 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.2.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 13976 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 0: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 1: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 2: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 3: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 4: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 5: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 6: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 7: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 8: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 9: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 10: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 11: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 12: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 13: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 14: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 15: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 16: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 17: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 18: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 19: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 20: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 21: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 22: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 23: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 24: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 25: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 26: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 27: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 28: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.3.dump new file mode 100644 index 0000000000..e06e0fac83 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.unknown_length.dump new file mode 100644 index 0000000000..07eb8f0ad3 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_multi.ts.unknown_length.dump @@ -0,0 +1,372 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 485, hash 8E663C03 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 127999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 191999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362667 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 153, hash CC86912D + sample 22: + time = 469333 + flags = 0 + data = length 162, hash 577737FF + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 490, hash FD29BE27 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF637D + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A762E + sample 27: + time = 576000 + flags = 0 + data = length 154, hash E4D1CE2 + sample 28: + time = 597333 + flags = 0 + data = length 143, hash C1C83A77 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 30: + time = 618667 + flags = 0 + data = length 611, hash 4D115F94 + sample 31: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 33: + time = 682667 + flags = 0 + data = length 609, hash 5B7AD544 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 36: + time = 746667 + flags = 0 + data = length 616, hash B059E5F3 + sample 37: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 831999 + flags = 0 + data = length 658, hash D480782F + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 42: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 43: + time = 895999 + flags = 0 + data = length 657, hash ABB26E68 + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 50: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE83 + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE90 + sample 55: + time = 1151999 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 57: + time = 1194666 + flags = 0 + data = length 733, hash 5199F868 + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 58: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 423, hash 390144EE + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.0.dump new file mode 100644 index 0000000000..d78191aea8 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.0.dump @@ -0,0 +1,375 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 485, hash 8E663C03 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42666 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 448000 + flags = 0 + data = length 153, hash CC86912D + sample 22: + time = 469333 + flags = 0 + data = length 162, hash 577737FF + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 490, hash FD29BE27 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF637D + sample 26: + time = 554666 + flags = 0 + data = length 120, hash 307A762E + sample 27: + time = 576000 + flags = 0 + data = length 154, hash E4D1CE2 + sample 28: + time = 597333 + flags = 0 + data = length 143, hash C1C83A77 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 30: + time = 618666 + flags = 0 + data = length 611, hash 4D115F94 + sample 31: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD544 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 36: + time = 746666 + flags = 0 + data = length 616, hash B059E5F3 + sample 37: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480782F + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 42: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash ABB26E68 + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 50: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 51: + time = 1066666 + flags = 0 + data = length 496, hash 7D75AE83 + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE90 + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 57: + time = 1194666 + flags = 0 + data = length 733, hash 5199F868 + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 58: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578666 + flags = 0 + data = length 423, hash 390144EE + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.1.dump new file mode 100644 index 0000000000..8b6772d843 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.1.dump @@ -0,0 +1,254 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 33598 + sample count = 58 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 0: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 1: + time = 618666 + flags = 0 + data = length 611, hash 4D115F94 + sample 2: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 3: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 4: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD544 + sample 5: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 6: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 7: + time = 746666 + flags = 0 + data = length 616, hash B059E5F3 + sample 8: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 9: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 10: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 11: + time = 832000 + flags = 0 + data = length 658, hash D480782F + sample 12: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 13: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 14: + time = 896000 + flags = 0 + data = length 657, hash ABB26E68 + sample 15: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 16: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 17: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 18: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 19: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 20: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 21: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 22: + time = 1066666 + flags = 0 + data = length 496, hash 7D75AE83 + sample 23: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 24: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 25: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE90 + sample 26: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 27: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 28: + time = 1194666 + flags = 0 + data = length 733, hash 5199F868 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 30: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 31: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 32: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 33: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 34: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 35: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 36: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 37: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 38: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 39: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 40: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 41: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 42: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 43: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 44: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 45: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 46: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 47: + time = 1578666 + flags = 0 + data = length 423, hash 390144EE + sample 48: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 49: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 50: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 51: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 52: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 53: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 54: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 55: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 56: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 57: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.2.dump new file mode 100644 index 0000000000..08b70e594e --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.2.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 13976 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 0: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 1: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 2: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 3: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 4: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 5: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 6: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 7: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 8: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 9: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 10: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 11: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 12: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 13: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 14: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 15: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 16: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 17: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 18: + time = 1578666 + flags = 0 + data = length 423, hash 390144EE + sample 19: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 20: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 21: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 22: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 23: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 24: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 25: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 26: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 27: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 28: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.3.dump new file mode 100644 index 0000000000..d3b657ed0d --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.3.dump @@ -0,0 +1,17 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.unknown_length.dump new file mode 100644 index 0000000000..91883b87a9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_bl_configchange_single.ts.unknown_length.dump @@ -0,0 +1,372 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.10 + sampleRate = 48000 + sample 0: + time = 0 + flags = 1 + data = length 485, hash 8E663C03 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42666 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 448000 + flags = 0 + data = length 153, hash CC86912D + sample 22: + time = 469333 + flags = 0 + data = length 162, hash 577737FF + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 490, hash FD29BE27 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF637D + sample 26: + time = 554666 + flags = 0 + data = length 120, hash 307A762E + sample 27: + time = 576000 + flags = 0 + data = length 154, hash E4D1CE2 + sample 28: + time = 597333 + flags = 0 + data = length 143, hash C1C83A77 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 29: + time = 600000 + flags = 1 + data = length 1278, hash 281C389B + sample 30: + time = 618666 + flags = 0 + data = length 611, hash 4D115F94 + sample 31: + time = 640000 + flags = 0 + data = length 656, hash 29F0A8C8 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215B3 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD544 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA7E + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215CE + sample 36: + time = 746666 + flags = 0 + data = length 616, hash B059E5F3 + sample 37: + time = 768000 + flags = 0 + data = length 657, hash 950B636D + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215D9 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480782F + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215B2 + sample 42: + time = 874666 + flags = 0 + data = length 650, hash A2B8C618 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash ABB26E68 + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215BC + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F8B7 + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F35 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1446, hash 57251DD3 + sample 50: + time = 1045333 + flags = 0 + data = length 543, hash AC12F41B + sample 51: + time = 1066666 + flags = 0 + data = length 496, hash 7D75AE83 + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD63 + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE90 + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 774, hash 8C885DAD + sample 57: + time = 1194666 + flags = 0 + data = length 733, hash 5199F868 + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.11 + sampleRate = 48000 + sample 58: + time = 1200000 + flags = 1 + data = length 914, hash B404D154 + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 422, hash DE1E83F5 + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 814, hash 39B338CB + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578666 + flags = 0 + data = length 423, hash 390144EE + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.0.dump new file mode 100644 index 0000000000..472ff92dcf --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.0.dump @@ -0,0 +1,136 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 338, hash CF711ADC + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106667 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170667 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234667 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash A0154CE2 + sample 13: + time = 277333 + flags = 0 + data = length 80, hash E37A5065 + sample 14: + time = 298667 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash 653631D3 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash FCDBFDFB + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB637 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C8 + sample 20: + time = 426667 + flags = 0 + data = length 79, hash DFF1D0D9 + sample 21: + time = 448000 + flags = 0 + data = length 70, hash FB797ACC + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 3B32D906 + sample 23: + time = 490666 + flags = 0 + data = length 81, hash 590B7E40 + sample 24: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 26: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.1.dump new file mode 100644 index 0000000000..b74486a031 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.1.dump @@ -0,0 +1,40 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 613 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 2: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.2.dump new file mode 100644 index 0000000000..b74486a031 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.2.dump @@ -0,0 +1,40 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 613 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 2: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.3.dump new file mode 100644 index 0000000000..1fab9157ca --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.3.dump @@ -0,0 +1,20 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35264]] + getPosition(564000) = [[timeUs=564000, position=70716]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.unknown_length.dump new file mode 100644 index 0000000000..460bebafaf --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_cont.ts.unknown_length.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 338, hash CF711ADC + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106667 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170667 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234667 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash A0154CE2 + sample 13: + time = 277333 + flags = 0 + data = length 80, hash E37A5065 + sample 14: + time = 298667 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash 653631D3 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash FCDBFDFB + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB637 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C8 + sample 20: + time = 426667 + flags = 0 + data = length 79, hash DFF1D0D9 + sample 21: + time = 448000 + flags = 0 + data = length 70, hash FB797ACC + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 3B32D906 + sample 23: + time = 490666 + flags = 0 + data = length 81, hash 590B7E40 + sample 24: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 26: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.0.dump new file mode 100644 index 0000000000..4725da74ca --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.0.dump @@ -0,0 +1,136 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 338, hash CF711ADC + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 127999 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 191999 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash A0154CE2 + sample 13: + time = 277333 + flags = 0 + data = length 80, hash E37A5065 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash 653631D3 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash FCDBFDFB + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB637 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C8 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0D9 + sample 21: + time = 447999 + flags = 0 + data = length 70, hash FB797ACC + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 3B32D906 + sample 23: + time = 490666 + flags = 0 + data = length 81, hash 590B7E40 + sample 24: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 26: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.1.dump new file mode 100644 index 0000000000..0f50b41355 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.1.dump @@ -0,0 +1,40 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 613 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 2: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.2.dump new file mode 100644 index 0000000000..0f50b41355 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.2.dump @@ -0,0 +1,40 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 613 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 2: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.3.dump new file mode 100644 index 0000000000..3f9ddc6deb --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.3.dump @@ -0,0 +1,20 @@ +seekMap: + isSeekable = true + duration = 564000 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(282000) = [[timeUs=282000, position=35353]] + getPosition(564000) = [[timeUs=564000, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.unknown_length.dump new file mode 100644 index 0000000000..71b6c10397 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_multi.ts.unknown_length.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 338, hash CF711ADC + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42667 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 127999 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 191999 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash A0154CE2 + sample 13: + time = 277333 + flags = 0 + data = length 80, hash E37A5065 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash 653631D3 + sample 17: + time = 362667 + flags = 0 + data = length 76, hash FCDBFDFB + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB637 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C8 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0D9 + sample 21: + time = 447999 + flags = 0 + data = length 70, hash FB797ACC + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 3B32D906 + sample 23: + time = 490666 + flags = 0 + data = length 81, hash 590B7E40 + sample 24: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 26: + time = 554667 + flags = 0 + data = length 78, hash D9DD04A0 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.0.dump new file mode 100644 index 0000000000..f95411bdd7 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.0.dump @@ -0,0 +1,136 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 338, hash CF711ADC + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42666 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash A0154CE2 + sample 13: + time = 277333 + flags = 0 + data = length 80, hash E37A5065 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash 653631D3 + sample 17: + time = 362666 + flags = 0 + data = length 76, hash FCDBFDFB + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB637 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C8 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0D9 + sample 21: + time = 448000 + flags = 0 + data = length 70, hash FB797ACC + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 3B32D906 + sample 23: + time = 490666 + flags = 0 + data = length 81, hash 590B7E40 + sample 24: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 26: + time = 554666 + flags = 0 + data = length 78, hash D9DD04A0 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.1.dump new file mode 100644 index 0000000000..4b6dcc5c3b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.1.dump @@ -0,0 +1,40 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 613 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 2: + time = 554666 + flags = 0 + data = length 78, hash D9DD04A0 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.2.dump new file mode 100644 index 0000000000..4b6dcc5c3b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.2.dump @@ -0,0 +1,40 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 613 + sample count = 5 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 1: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 2: + time = 554666 + flags = 0 + data = length 78, hash D9DD04A0 + sample 3: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 4: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.3.dump new file mode 100644 index 0000000000..4ae27d88c6 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.3.dump @@ -0,0 +1,20 @@ +seekMap: + isSeekable = true + duration = 589566 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(294783) = [[timeUs=294783, position=35353]] + getPosition(589566) = [[timeUs=589566, position=70894]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.unknown_length.dump new file mode 100644 index 0000000000..cc6fe0abb0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_cicp1_single.ts.unknown_length.dump @@ -0,0 +1,133 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 2837 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 338, hash CF711ADC + sample 1: + time = 21333 + flags = 0 + data = length 85, hash 8EFCDF36 + sample 2: + time = 42666 + flags = 0 + data = length 98, hash BC03FE8A + sample 3: + time = 64000 + flags = 0 + data = length 105, hash 9FBA3169 + sample 4: + time = 85333 + flags = 0 + data = length 93, hash BD1CBC0E + sample 5: + time = 106666 + flags = 0 + data = length 93, hash C0B46623 + sample 6: + time = 128000 + flags = 0 + data = length 91, hash E4CA8D5 + sample 7: + time = 149333 + flags = 0 + data = length 82, hash EB64F3A8 + sample 8: + time = 170666 + flags = 0 + data = length 83, hash 97803527 + sample 9: + time = 192000 + flags = 0 + data = length 82, hash 5972B44D + sample 10: + time = 213333 + flags = 0 + data = length 81, hash 3D9C7710 + sample 11: + time = 234666 + flags = 0 + data = length 77, hash 27B26E3D + sample 12: + time = 256000 + flags = 0 + data = length 79, hash A0154CE2 + sample 13: + time = 277333 + flags = 0 + data = length 80, hash E37A5065 + sample 14: + time = 298666 + flags = 0 + data = length 78, hash 8F24DBB3 + sample 15: + time = 320000 + flags = 0 + data = length 77, hash CD76338B + sample 16: + time = 341333 + flags = 0 + data = length 78, hash 653631D3 + sample 17: + time = 362666 + flags = 0 + data = length 76, hash FCDBFDFB + sample 18: + time = 384000 + flags = 0 + data = length 56, hash E05FB637 + sample 19: + time = 405333 + flags = 0 + data = length 81, hash 2B2350C8 + sample 20: + time = 426666 + flags = 0 + data = length 79, hash DFF1D0D9 + sample 21: + time = 448000 + flags = 0 + data = length 70, hash FB797ACC + sample 22: + time = 469333 + flags = 0 + data = length 81, hash 3B32D906 + sample 23: + time = 490666 + flags = 0 + data = length 81, hash 590B7E40 + sample 24: + time = 512000 + flags = 1 + data = length 323, hash F3C25326 + sample 25: + time = 533333 + flags = 0 + data = length 77, hash F3A2DCC5 + sample 26: + time = 554666 + flags = 0 + data = length 78, hash D9DD04A0 + sample 27: + time = 576000 + flags = 0 + data = length 65, hash 622B1D3 + sample 28: + time = 597333 + flags = 0 + data = length 70, hash CE3E092E +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.0.dump new file mode 100644 index 0000000000..c370a424e9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.0.dump @@ -0,0 +1,384 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 488, hash 1ED69C37 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106667 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170667 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 255999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 319999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 383999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 151, hash 2E40B4B2 + sample 22: + time = 469333 + flags = 0 + data = length 163, hash 4E4CBFDD + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 493, hash 5CB15E73 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF6348 + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A7619 + sample 27: + time = 576000 + flags = 0 + data = length 160, hash 85B40084 + sample 28: + time = 597333 + flags = 0 + data = length 141, hash C14F9501 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 30: + time = 618667 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 31: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD547 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 36: + time = 746666 + flags = 0 + data = length 613, hash ECA1FB91 + sample 37: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480784A + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 42: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash A204D6AF + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 50: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE8C + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130667 + flags = 0 + data = length 496, hash 7D75AE8A + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 57: + time = 1194667 + flags = 0 + data = length 744, hash 6725112B + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 58: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.1.dump new file mode 100644 index 0000000000..036f9779fa --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.1.dump @@ -0,0 +1,260 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 33589 + sample count = 58 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 0: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 1: + time = 618667 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 2: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 3: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 4: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD547 + sample 5: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 6: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 7: + time = 746666 + flags = 0 + data = length 613, hash ECA1FB91 + sample 8: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 9: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 10: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 11: + time = 832000 + flags = 0 + data = length 658, hash D480784A + sample 12: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 13: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 14: + time = 896000 + flags = 0 + data = length 657, hash A204D6AF + sample 15: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 16: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 17: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 18: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 19: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 20: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 21: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 22: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE8C + sample 23: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 24: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 25: + time = 1130667 + flags = 0 + data = length 496, hash 7D75AE8A + sample 26: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 27: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 28: + time = 1194667 + flags = 0 + data = length 744, hash 6725112B + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 30: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 31: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 32: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 33: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 34: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 35: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 36: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 37: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 38: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 39: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 40: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 41: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 42: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 43: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 44: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 45: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 46: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 47: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 48: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 49: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 50: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 51: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 52: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 53: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 54: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 55: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 56: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 57: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.2.dump new file mode 100644 index 0000000000..f1fe1044bf --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.2.dump @@ -0,0 +1,136 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 13960 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 0: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 1: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 2: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 3: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 4: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 5: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 6: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 7: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 8: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 9: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 10: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 11: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 12: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 13: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 14: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 15: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 16: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 17: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 18: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 19: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 20: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 21: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 22: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 23: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 24: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 25: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 26: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 27: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 28: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.3.dump new file mode 100644 index 0000000000..af20138024 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.3.dump @@ -0,0 +1,20 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.unknown_length.dump new file mode 100644 index 0000000000..903b77201c --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_cont.ts.unknown_length.dump @@ -0,0 +1,381 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 488, hash 1ED69C37 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106667 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170667 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 255999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 319999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 383999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 151, hash 2E40B4B2 + sample 22: + time = 469333 + flags = 0 + data = length 163, hash 4E4CBFDD + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 493, hash 5CB15E73 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF6348 + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A7619 + sample 27: + time = 576000 + flags = 0 + data = length 160, hash 85B40084 + sample 28: + time = 597333 + flags = 0 + data = length 141, hash C14F9501 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 30: + time = 618667 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 31: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD547 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 36: + time = 746666 + flags = 0 + data = length 613, hash ECA1FB91 + sample 37: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480784A + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 42: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash A204D6AF + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 50: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE8C + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130667 + flags = 0 + data = length 496, hash 7D75AE8A + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 57: + time = 1194667 + flags = 0 + data = length 744, hash 6725112B + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 58: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.0.dump new file mode 100644 index 0000000000..4244b6d155 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.0.dump @@ -0,0 +1,384 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 488, hash 1ED69C37 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 127999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 191999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362667 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 151, hash 2E40B4B2 + sample 22: + time = 469333 + flags = 0 + data = length 163, hash 4E4CBFDD + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 493, hash 5CB15E73 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF6348 + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A7619 + sample 27: + time = 576000 + flags = 0 + data = length 160, hash 85B40084 + sample 28: + time = 597333 + flags = 0 + data = length 141, hash C14F9501 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 30: + time = 618667 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 31: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 33: + time = 682667 + flags = 0 + data = length 609, hash 5B7AD547 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 36: + time = 746667 + flags = 0 + data = length 613, hash ECA1FB91 + sample 37: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 831999 + flags = 0 + data = length 658, hash D480784A + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 42: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 43: + time = 895999 + flags = 0 + data = length 657, hash A204D6AF + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 50: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE8C + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE8A + sample 55: + time = 1151999 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 57: + time = 1194666 + flags = 0 + data = length 744, hash 6725112B + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 58: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.1.dump new file mode 100644 index 0000000000..b3b0cddfd5 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.1.dump @@ -0,0 +1,260 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 33589 + sample count = 58 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 0: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 1: + time = 618667 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 2: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 3: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 4: + time = 682667 + flags = 0 + data = length 609, hash 5B7AD547 + sample 5: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 6: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 7: + time = 746667 + flags = 0 + data = length 613, hash ECA1FB91 + sample 8: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 9: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 10: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 11: + time = 831999 + flags = 0 + data = length 658, hash D480784A + sample 12: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 13: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 14: + time = 895999 + flags = 0 + data = length 657, hash A204D6AF + sample 15: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 16: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 17: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 18: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 19: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 20: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 21: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 22: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE8C + sample 23: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 24: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 25: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE8A + sample 26: + time = 1151999 + flags = 0 + data = length 560, hash 77AD983C + sample 27: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 28: + time = 1194666 + flags = 0 + data = length 744, hash 6725112B + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 30: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 31: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 32: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 33: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 34: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 35: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 36: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 37: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 38: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 39: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 40: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 41: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 42: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 43: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 44: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 45: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 46: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 47: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 48: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 49: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 50: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 51: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 52: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 53: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 54: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 55: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 56: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 57: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.2.dump new file mode 100644 index 0000000000..c7f8039281 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.2.dump @@ -0,0 +1,136 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 13960 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 0: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 1: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 2: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 3: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 4: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 5: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 6: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 7: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 8: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 9: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 10: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 11: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 12: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 13: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 14: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 15: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 16: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 17: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 18: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 19: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 20: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 21: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 22: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 23: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 24: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 25: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 26: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 27: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 28: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.3.dump new file mode 100644 index 0000000000..12608b5867 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.3.dump @@ -0,0 +1,20 @@ +seekMap: + isSeekable = true + duration = 1771711 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(885855) = [[timeUs=885855, position=106614]] + getPosition(1771711) = [[timeUs=1771711, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.unknown_length.dump new file mode 100644 index 0000000000..e06c74b735 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_multi.ts.unknown_length.dump @@ -0,0 +1,381 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 488, hash 1ED69C37 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42667 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 127999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 191999 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362667 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 447999 + flags = 0 + data = length 151, hash 2E40B4B2 + sample 22: + time = 469333 + flags = 0 + data = length 163, hash 4E4CBFDD + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 493, hash 5CB15E73 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF6348 + sample 26: + time = 554667 + flags = 0 + data = length 120, hash 307A7619 + sample 27: + time = 576000 + flags = 0 + data = length 160, hash 85B40084 + sample 28: + time = 597333 + flags = 0 + data = length 141, hash C14F9501 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 30: + time = 618667 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 31: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 33: + time = 682667 + flags = 0 + data = length 609, hash 5B7AD547 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 36: + time = 746667 + flags = 0 + data = length 613, hash ECA1FB91 + sample 37: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 831999 + flags = 0 + data = length 658, hash D480784A + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 42: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 43: + time = 895999 + flags = 0 + data = length 657, hash A204D6AF + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 50: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 51: + time = 1066667 + flags = 0 + data = length 496, hash 7D75AE8C + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE8A + sample 55: + time = 1151999 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 57: + time = 1194666 + flags = 0 + data = length 744, hash 6725112B + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 58: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258667 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450667 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578667 + flags = 0 + data = length 420, hash 7C4664D7 + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1663999 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1727999 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.0.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.0.dump new file mode 100644 index 0000000000..619a5fb5e9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.0.dump @@ -0,0 +1,384 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 488, hash 1ED69C37 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42666 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 448000 + flags = 0 + data = length 151, hash 2E40B4B2 + sample 22: + time = 469333 + flags = 0 + data = length 163, hash 4E4CBFDD + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 493, hash 5CB15E73 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF6348 + sample 26: + time = 554666 + flags = 0 + data = length 120, hash 307A7619 + sample 27: + time = 576000 + flags = 0 + data = length 160, hash 85B40084 + sample 28: + time = 597333 + flags = 0 + data = length 141, hash C14F9501 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 30: + time = 618666 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 31: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD547 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 36: + time = 746666 + flags = 0 + data = length 613, hash ECA1FB91 + sample 37: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480784A + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 42: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash A204D6AF + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 50: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 51: + time = 1066666 + flags = 0 + data = length 496, hash 7D75AE8C + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE8A + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 57: + time = 1194666 + flags = 0 + data = length 744, hash 6725112B + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 58: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578666 + flags = 0 + data = length 420, hash 7C4664D7 + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.1.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.1.dump new file mode 100644 index 0000000000..7eb8d3ab7d --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.1.dump @@ -0,0 +1,260 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 33589 + sample count = 58 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 0: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 1: + time = 618666 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 2: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 3: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 4: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD547 + sample 5: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 6: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 7: + time = 746666 + flags = 0 + data = length 613, hash ECA1FB91 + sample 8: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 9: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 10: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 11: + time = 832000 + flags = 0 + data = length 658, hash D480784A + sample 12: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 13: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 14: + time = 896000 + flags = 0 + data = length 657, hash A204D6AF + sample 15: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 16: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 17: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 18: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 19: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 20: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 21: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 22: + time = 1066666 + flags = 0 + data = length 496, hash 7D75AE8C + sample 23: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 24: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 25: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE8A + sample 26: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 27: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 28: + time = 1194666 + flags = 0 + data = length 744, hash 6725112B + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 30: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 31: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 32: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 33: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 34: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 35: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 36: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 37: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 38: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 39: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 40: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 41: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 42: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 43: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 44: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 45: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 46: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 47: + time = 1578666 + flags = 0 + data = length 420, hash 7C4664D7 + sample 48: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 49: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 50: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 51: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 52: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 53: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 54: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 55: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 56: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 57: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.2.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.2.dump new file mode 100644 index 0000000000..ce3dfaef5a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.2.dump @@ -0,0 +1,136 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 13960 + sample count = 29 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 0: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 1: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 2: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 3: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 4: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 5: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 6: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 7: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 8: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 9: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 10: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 11: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 12: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 13: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 14: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 15: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 16: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 17: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 18: + time = 1578666 + flags = 0 + data = length 420, hash 7C4664D7 + sample 19: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 20: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 21: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 22: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 23: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 24: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 25: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 26: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 27: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 28: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.3.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.3.dump new file mode 100644 index 0000000000..af20138024 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.3.dump @@ -0,0 +1,20 @@ +seekMap: + isSeekable = true + duration = 1783744 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(891872) = [[timeUs=891872, position=106614]] + getPosition(1783744) = [[timeUs=1783744, position=213417]] +numberOfTracks = 1 +track 32: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.unknown_length.dump new file mode 100644 index 0000000000..5c4442490d --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ts/sample_mpegh_lcbl_configchange_single.ts.unknown_length.dump @@ -0,0 +1,381 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 32: + total output bytes = 38778 + sample count = 87 + format 0: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0B + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 2F + sample 0: + time = 0 + flags = 1 + data = length 488, hash 1ED69C37 + sample 1: + time = 21333 + flags = 0 + data = length 164, hash 136B1B66 + sample 2: + time = 42666 + flags = 0 + data = length 158, hash A9289DCD + sample 3: + time = 64000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 4: + time = 85333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 5: + time = 106666 + flags = 0 + data = length 158, hash 22E84AF0 + sample 6: + time = 128000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 7: + time = 149333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 8: + time = 170666 + flags = 0 + data = length 158, hash BA6B7094 + sample 9: + time = 192000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 10: + time = 213333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 11: + time = 234666 + flags = 0 + data = length 158, hash A9289DCC + sample 12: + time = 256000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 13: + time = 277333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 14: + time = 298666 + flags = 0 + data = length 158, hash A9289DCD + sample 15: + time = 320000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 16: + time = 341333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 17: + time = 362666 + flags = 0 + data = length 158, hash 37B039B1 + sample 18: + time = 384000 + flags = 0 + data = length 164, hash 7E2368C3 + sample 19: + time = 405333 + flags = 0 + data = length 158, hash 10AC2CD4 + sample 20: + time = 426666 + flags = 0 + data = length 126, hash 78789B9C + sample 21: + time = 448000 + flags = 0 + data = length 151, hash 2E40B4B2 + sample 22: + time = 469333 + flags = 0 + data = length 163, hash 4E4CBFDD + sample 23: + time = 490666 + flags = 0 + data = length 160, hash 3BCD3677 + sample 24: + time = 512000 + flags = 1 + data = length 493, hash 5CB15E73 + sample 25: + time = 533333 + flags = 0 + data = length 143, hash 38DF6348 + sample 26: + time = 554666 + flags = 0 + data = length 120, hash 307A7619 + sample 27: + time = 576000 + flags = 0 + data = length 160, hash 85B40084 + sample 28: + time = 597333 + flags = 0 + data = length 141, hash C14F9501 + format 1: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 29: + time = 600000 + flags = 1 + data = length 1281, hash 9131BB91 + sample 30: + time = 618666 + flags = 0 + data = length 608, hash 1F8ADAAD + sample 31: + time = 640000 + flags = 0 + data = length 656, hash BAEB035 + sample 32: + time = 661333 + flags = 0 + data = length 640, hash 432215C9 + sample 33: + time = 682666 + flags = 0 + data = length 609, hash 5B7AD547 + sample 34: + time = 704000 + flags = 0 + data = length 658, hash A173EA78 + sample 35: + time = 725333 + flags = 0 + data = length 640, hash 432215C9 + sample 36: + time = 746666 + flags = 0 + data = length 613, hash ECA1FB91 + sample 37: + time = 768000 + flags = 0 + data = length 658, hash 6EC1708C + sample 38: + time = 789333 + flags = 0 + data = length 640, hash 432215C2 + sample 39: + time = 810666 + flags = 0 + data = length 641, hash 3246CD5C + sample 40: + time = 832000 + flags = 0 + data = length 658, hash D480784A + sample 41: + time = 853333 + flags = 0 + data = length 640, hash 432215D6 + sample 42: + time = 874666 + flags = 0 + data = length 647, hash C6E3E718 + sample 43: + time = 896000 + flags = 0 + data = length 657, hash A204D6AF + sample 44: + time = 917333 + flags = 0 + data = length 640, hash 432215D4 + sample 45: + time = 938666 + flags = 0 + data = length 663, hash 8A51F88A + sample 46: + time = 960000 + flags = 0 + data = length 657, hash 51796214 + sample 47: + time = 981333 + flags = 0 + data = length 641, hash F27D0F36 + sample 48: + time = 1002666 + flags = 0 + data = length 626, hash D84D4392 + sample 49: + time = 1024000 + flags = 1 + data = length 1449, hash 773492CA + sample 50: + time = 1045333 + flags = 0 + data = length 542, hash 2689A516 + sample 51: + time = 1066666 + flags = 0 + data = length 496, hash 7D75AE8C + sample 52: + time = 1088000 + flags = 0 + data = length 559, hash B248FD5C + sample 53: + time = 1109333 + flags = 0 + data = length 537, hash 2EEC4577 + sample 54: + time = 1130666 + flags = 0 + data = length 496, hash 7D75AE8A + sample 55: + time = 1152000 + flags = 0 + data = length 560, hash 77AD983C + sample 56: + time = 1173333 + flags = 0 + data = length 773, hash 4FA8BAEF + sample 57: + time = 1194666 + flags = 0 + data = length 744, hash 6725112B + format 2: + id = 1/32 + sampleMimeType = audio/mhm1 + codecs = mhm1.0C + sampleRate = 48000 + initializationData: + data = length 0, hash 1 + data = length 1, hash 30 + sample 58: + time = 1200000 + flags = 1 + data = length 917, hash 338496EB + sample 59: + time = 1216000 + flags = 0 + data = length 301, hash B72EAA19 + sample 60: + time = 1237333 + flags = 0 + data = length 299, hash 90B92024 + sample 61: + time = 1258666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 62: + time = 1280000 + flags = 0 + data = length 295, hash E35C19E + sample 63: + time = 1301333 + flags = 0 + data = length 299, hash 90B92029 + sample 64: + time = 1322666 + flags = 0 + data = length 319, hash 5F47ED6D + sample 65: + time = 1344000 + flags = 0 + data = length 403, hash BCD6901D + sample 66: + time = 1365333 + flags = 0 + data = length 512, hash 71422ABF + sample 67: + time = 1386666 + flags = 0 + data = length 512, hash 12E1C091 + sample 68: + time = 1408000 + flags = 0 + data = length 512, hash 4C28788B + sample 69: + time = 1429333 + flags = 0 + data = length 512, hash 71422ABD + sample 70: + time = 1450666 + flags = 0 + data = length 512, hash 12E1C0B6 + sample 71: + time = 1472000 + flags = 0 + data = length 512, hash 4C287853 + sample 72: + time = 1493333 + flags = 0 + data = length 512, hash ED501288 + sample 73: + time = 1514666 + flags = 0 + data = length 512, hash 9D4174B5 + sample 74: + time = 1536000 + flags = 1 + data = length 817, hash 9C51B5E2 + sample 75: + time = 1557333 + flags = 0 + data = length 299, hash 90B92026 + sample 76: + time = 1578666 + flags = 0 + data = length 420, hash 7C4664D7 + sample 77: + time = 1600000 + flags = 0 + data = length 512, hash 4C28784A + sample 78: + time = 1621333 + flags = 0 + data = length 512, hash 71422ABB + sample 79: + time = 1642666 + flags = 0 + data = length 512, hash 12E1C07F + sample 80: + time = 1664000 + flags = 0 + data = length 512, hash 4C287884 + sample 81: + time = 1685333 + flags = 0 + data = length 512, hash 71422ABD + sample 82: + time = 1706666 + flags = 0 + data = length 512, hash 12E1C069 + sample 83: + time = 1728000 + flags = 0 + data = length 512, hash 4C287890 + sample 84: + time = 1749333 + flags = 0 + data = length 512, hash 71422AC0 + sample 85: + time = 1770666 + flags = 0 + data = length 581, hash 64B79723 + sample 86: + time = 1792000 + flags = 0 + data = length 499, hash 9C5AEB9A +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont.ts new file mode 100644 index 0000000000000000000000000000000000000000..4f012fde0949a486a880cd431cf4b11f349fa63f GIT binary patch literal 74636 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 L2kvBkxaofYopKeW literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont_setrai_unsetdai.ts new file mode 100644 index 0000000000000000000000000000000000000000..0d8f94c94ffe00a99901a726680b2ee8acb6e825 GIT binary patch literal 74636 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 Q;F`QI!8LhbQfu=61SvRD#{d8T literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_cont_splitheader.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7fe54ad92ec26f072f0d41217a09dfb7a52751a GIT binary patch literal 74824 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 Kf4z>c?D;=OZey7M literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_multi.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_cicp1_multi.ts new file mode 100644 index 0000000000000000000000000000000000000000..98abc68a92e23ee1cfc75e45835f8cca769a2325 GIT binary patch literal 74824 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 PVrjv-yj!(AdEb8n&>1f= literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_configchange_cont.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_configchange_cont.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf816fdf7bf5ac68102a7441b70809a2b061f273 GIT binary patch literal 224848 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 literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_configchange_multi.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_bl_configchange_multi.ts new file mode 100644 index 0000000000000000000000000000000000000000..9dba99cc87deb2b5c8e159960d06c6cfad68ee7a GIT binary patch literal 224848 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 Q__M}mcc`yT5RXUxACZR$wEzGB literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_cicp1_cont.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_cicp1_cont.ts new file mode 100644 index 0000000000000000000000000000000000000000..e353144cc002cfa1cdf61672675ab8cd6a0477bf GIT binary patch literal 74636 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 literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_cicp1_single.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_cicp1_single.ts new file mode 100644 index 0000000000000000000000000000000000000000..3ce606b8bb7ef39f786817a68886ee7311104b8f GIT binary patch literal 74824 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 literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_configchange_cont.ts b/libraries/test_data/src/test/assets/media/ts/sample_mpegh_lcbl_configchange_cont.ts new file mode 100644 index 0000000000000000000000000000000000000000..22119e0f3470764dad911092d7b7faa86b5b5ef8 GIT binary patch literal 224848 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
v_O?j9*G#v4@0&~Zg z7&PT!?$B_=*9t*%#{jYftjWs~uqH1{z?!@)0c-NI1gyz_Ue`R!#QW)@CQn+6#gcLZ zq|;izKNkG^IPiQot8MSQ2VEa`WL&V5GTUR?djB?Q*mQQZcoS~GaE%U;+OEegw*k%z zp z?KtC~nqOU5+bL;ZOACOakYO40!A+AX<8VnTI9xd>vQyyh&k--+%0{X)bogEx*^+=N z`+-*iPN47XsCO=i{EcB`h7rD|rSZu$85X@xJFKskMO(Y|i5y(e)k{1SEq2Dcq@WR- zV{FTjy4QN4eN|f+;t?6up5lJ?)vIr$F`uH@fO>0uzwBt%H6}z?2)2%Je+ z>R=o|L{eUpB5p+T3!NN?PCL+B`ekk?=ltxKG-g zN$-)rh^yJCpQEj*{|1J~4deUB14(%}W+1_cw-J~--pC-S z0CR@~Bi=?}?sy}EqyqSRMs#sq^PF@XBQ!rg{+ty!W*`Xxyp6!z@kRzo1(-V|81Xhj z(A+U7F>*}+xK-ml{$-4i|6+e6`5LWqM5>q$HR}#6O@XQH05=lji&8`&0V48wEE@0! z0N-0E>L(a+aJouMpb;QJ0*IsI;OcBVM^CkvcTTT0K`p)z+xI%0D5un<04T8}cJ;s@ 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 Qi&a0nqWau~;_=A;19V+{9{>OV literal 0 HcmV?d00001