Rename to singular BoxParser for consistency with other types like ColorParser
This commit is contained in:
parent
77f3ef9b25
commit
2e49e91c84
@ -64,7 +64,7 @@ import java.util.Objects;
|
|||||||
/** Utility methods for parsing MP4 format box payloads according to ISO/IEC 14496-12. */
|
/** Utility methods for parsing MP4 format box payloads according to ISO/IEC 14496-12. */
|
||||||
@SuppressWarnings("ConstantField")
|
@SuppressWarnings("ConstantField")
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public final class BoxParsers {
|
public final class BoxParser {
|
||||||
|
|
||||||
private static final String TAG = "BoxParsers";
|
private static final String TAG = "BoxParsers";
|
||||||
|
|
||||||
@ -2276,7 +2276,7 @@ public final class BoxParsers {
|
|||||||
&& editEndTime <= duration;
|
&& editEndTime <= duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BoxParsers() {
|
private BoxParser() {
|
||||||
// Prevent instantiation.
|
// Prevent instantiation.
|
||||||
}
|
}
|
||||||
|
|
@ -19,7 +19,7 @@ import static androidx.media3.common.util.Assertions.checkNotNull;
|
|||||||
import static androidx.media3.common.util.Assertions.checkState;
|
import static androidx.media3.common.util.Assertions.checkState;
|
||||||
import static androidx.media3.common.util.Util.castNonNull;
|
import static androidx.media3.common.util.Util.castNonNull;
|
||||||
import static androidx.media3.common.util.Util.nullSafeArrayCopy;
|
import static androidx.media3.common.util.Util.nullSafeArrayCopy;
|
||||||
import static androidx.media3.extractor.mp4.BoxParsers.parseTraks;
|
import static androidx.media3.extractor.mp4.BoxParser.parseTraks;
|
||||||
import static java.lang.Math.max;
|
import static java.lang.Math.max;
|
||||||
import static java.lang.annotation.ElementType.TYPE_USE;
|
import static java.lang.annotation.ElementType.TYPE_USE;
|
||||||
|
|
||||||
@ -778,7 +778,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
}
|
}
|
||||||
atom.setPosition(Mp4Box.HEADER_SIZE);
|
atom.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = atom.readInt();
|
int fullAtom = atom.readInt();
|
||||||
int version = BoxParsers.parseFullBoxVersion(fullAtom);
|
int version = BoxParser.parseFullBoxVersion(fullAtom);
|
||||||
String schemeIdUri;
|
String schemeIdUri;
|
||||||
String value;
|
String value;
|
||||||
long timescale;
|
long timescale;
|
||||||
@ -884,7 +884,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
private static long parseMehd(ParsableByteArray mehd) {
|
private static long parseMehd(ParsableByteArray mehd) {
|
||||||
mehd.setPosition(Mp4Box.HEADER_SIZE);
|
mehd.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = mehd.readInt();
|
int fullAtom = mehd.readInt();
|
||||||
int version = BoxParsers.parseFullBoxVersion(fullAtom);
|
int version = BoxParser.parseFullBoxVersion(fullAtom);
|
||||||
return version == 0 ? mehd.readUnsignedInt() : mehd.readUnsignedLongToLong();
|
return version == 0 ? mehd.readUnsignedInt() : mehd.readUnsignedLongToLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1006,7 +1006,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
int vectorSize = encryptionBox.perSampleIvSize;
|
int vectorSize = encryptionBox.perSampleIvSize;
|
||||||
saiz.setPosition(Mp4Box.HEADER_SIZE);
|
saiz.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = saiz.readInt();
|
int fullAtom = saiz.readInt();
|
||||||
int flags = BoxParsers.parseFullBoxFlags(fullAtom);
|
int flags = BoxParser.parseFullBoxFlags(fullAtom);
|
||||||
if ((flags & 0x01) == 1) {
|
if ((flags & 0x01) == 1) {
|
||||||
saiz.skipBytes(8);
|
saiz.skipBytes(8);
|
||||||
}
|
}
|
||||||
@ -1050,7 +1050,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
private static void parseSaio(ParsableByteArray saio, TrackFragment out) throws ParserException {
|
private static void parseSaio(ParsableByteArray saio, TrackFragment out) throws ParserException {
|
||||||
saio.setPosition(Mp4Box.HEADER_SIZE);
|
saio.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = saio.readInt();
|
int fullAtom = saio.readInt();
|
||||||
int flags = BoxParsers.parseFullBoxFlags(fullAtom);
|
int flags = BoxParser.parseFullBoxFlags(fullAtom);
|
||||||
if ((flags & 0x01) == 1) {
|
if ((flags & 0x01) == 1) {
|
||||||
saio.skipBytes(8);
|
saio.skipBytes(8);
|
||||||
}
|
}
|
||||||
@ -1062,7 +1062,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
"Unexpected saio entry count: " + entryCount, /* cause= */ null);
|
"Unexpected saio entry count: " + entryCount, /* cause= */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
int version = BoxParsers.parseFullBoxVersion(fullAtom);
|
int version = BoxParser.parseFullBoxVersion(fullAtom);
|
||||||
out.auxiliaryDataPosition +=
|
out.auxiliaryDataPosition +=
|
||||||
version == 0 ? saio.readUnsignedInt() : saio.readUnsignedLongToLong();
|
version == 0 ? saio.readUnsignedInt() : saio.readUnsignedLongToLong();
|
||||||
}
|
}
|
||||||
@ -1084,7 +1084,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
ParsableByteArray tfhd, SparseArray<TrackBundle> trackBundles, boolean haveSideloadedTrack) {
|
ParsableByteArray tfhd, SparseArray<TrackBundle> trackBundles, boolean haveSideloadedTrack) {
|
||||||
tfhd.setPosition(Mp4Box.HEADER_SIZE);
|
tfhd.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = tfhd.readInt();
|
int fullAtom = tfhd.readInt();
|
||||||
int atomFlags = BoxParsers.parseFullBoxFlags(fullAtom);
|
int atomFlags = BoxParser.parseFullBoxFlags(fullAtom);
|
||||||
int trackId = tfhd.readInt();
|
int trackId = tfhd.readInt();
|
||||||
@Nullable
|
@Nullable
|
||||||
TrackBundle trackBundle =
|
TrackBundle trackBundle =
|
||||||
@ -1133,7 +1133,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
private static long parseTfdt(ParsableByteArray tfdt) {
|
private static long parseTfdt(ParsableByteArray tfdt) {
|
||||||
tfdt.setPosition(Mp4Box.HEADER_SIZE);
|
tfdt.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = tfdt.readInt();
|
int fullAtom = tfdt.readInt();
|
||||||
int version = BoxParsers.parseFullBoxVersion(fullAtom);
|
int version = BoxParser.parseFullBoxVersion(fullAtom);
|
||||||
return version == 1 ? tfdt.readUnsignedLongToLong() : tfdt.readUnsignedInt();
|
return version == 1 ? tfdt.readUnsignedLongToLong() : tfdt.readUnsignedInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1176,7 +1176,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
throws ParserException {
|
throws ParserException {
|
||||||
trun.setPosition(Mp4Box.HEADER_SIZE);
|
trun.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = trun.readInt();
|
int fullAtom = trun.readInt();
|
||||||
int atomFlags = BoxParsers.parseFullBoxFlags(fullAtom);
|
int atomFlags = BoxParser.parseFullBoxFlags(fullAtom);
|
||||||
|
|
||||||
Track track = trackBundle.moovSampleTable.track;
|
Track track = trackBundle.moovSampleTable.track;
|
||||||
TrackFragment fragment = trackBundle.fragment;
|
TrackFragment fragment = trackBundle.fragment;
|
||||||
@ -1287,7 +1287,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
throws ParserException {
|
throws ParserException {
|
||||||
senc.setPosition(Mp4Box.HEADER_SIZE + offset);
|
senc.setPosition(Mp4Box.HEADER_SIZE + offset);
|
||||||
int fullAtom = senc.readInt();
|
int fullAtom = senc.readInt();
|
||||||
int flags = BoxParsers.parseFullBoxFlags(fullAtom);
|
int flags = BoxParser.parseFullBoxFlags(fullAtom);
|
||||||
|
|
||||||
if ((flags & 0x01 /* override_track_encryption_box_parameters */) != 0) {
|
if ((flags & 0x01 /* override_track_encryption_box_parameters */) != 0) {
|
||||||
// TODO: Implement this.
|
// TODO: Implement this.
|
||||||
@ -1340,7 +1340,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sbgp.setPosition(Mp4Box.HEADER_SIZE);
|
sbgp.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int sbgpVersion = BoxParsers.parseFullBoxVersion(sbgp.readInt());
|
int sbgpVersion = BoxParser.parseFullBoxVersion(sbgp.readInt());
|
||||||
sbgp.skipBytes(4); // grouping_type == seig.
|
sbgp.skipBytes(4); // grouping_type == seig.
|
||||||
if (sbgpVersion == 1) {
|
if (sbgpVersion == 1) {
|
||||||
sbgp.skipBytes(4); // grouping_type_parameter.
|
sbgp.skipBytes(4); // grouping_type_parameter.
|
||||||
@ -1351,7 +1351,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sgpd.setPosition(Mp4Box.HEADER_SIZE);
|
sgpd.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int sgpdVersion = BoxParsers.parseFullBoxVersion(sgpd.readInt());
|
int sgpdVersion = BoxParser.parseFullBoxVersion(sgpd.readInt());
|
||||||
sgpd.skipBytes(4); // grouping_type == seig.
|
sgpd.skipBytes(4); // grouping_type == seig.
|
||||||
if (sgpdVersion == 1) {
|
if (sgpdVersion == 1) {
|
||||||
if (sgpd.readUnsignedInt() == 0) {
|
if (sgpd.readUnsignedInt() == 0) {
|
||||||
@ -1408,7 +1408,7 @@ public class FragmentedMp4Extractor implements Extractor {
|
|||||||
throws ParserException {
|
throws ParserException {
|
||||||
atom.setPosition(Mp4Box.HEADER_SIZE);
|
atom.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = atom.readInt();
|
int fullAtom = atom.readInt();
|
||||||
int version = BoxParsers.parseFullBoxVersion(fullAtom);
|
int version = BoxParser.parseFullBoxVersion(fullAtom);
|
||||||
|
|
||||||
atom.skipBytes(4);
|
atom.skipBytes(4);
|
||||||
long timescale = atom.readUnsignedInt();
|
long timescale = atom.readUnsignedInt();
|
||||||
|
@ -372,7 +372,7 @@ import com.google.common.collect.ImmutableList;
|
|||||||
int atomType = data.readInt();
|
int atomType = data.readInt();
|
||||||
if (atomType == Mp4Box.TYPE_data) {
|
if (atomType == Mp4Box.TYPE_data) {
|
||||||
int fullVersionInt = data.readInt();
|
int fullVersionInt = data.readInt();
|
||||||
int flags = BoxParsers.parseFullBoxFlags(fullVersionInt);
|
int flags = BoxParser.parseFullBoxFlags(fullVersionInt);
|
||||||
@Nullable String mimeType = flags == 13 ? "image/jpeg" : flags == 14 ? "image/png" : null;
|
@Nullable String mimeType = flags == 13 ? "image/jpeg" : flags == 14 ? "image/png" : null;
|
||||||
if (mimeType == null) {
|
if (mimeType == null) {
|
||||||
Log.w(TAG, "Unrecognized cover art flags: " + flags);
|
Log.w(TAG, "Unrecognized cover art flags: " + flags);
|
||||||
|
@ -28,7 +28,7 @@ import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_INVERS
|
|||||||
import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_LINEAR;
|
import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_LINEAR;
|
||||||
import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_METADATA;
|
import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_DEPTH_METADATA;
|
||||||
import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_SHARP;
|
import static androidx.media3.container.Mp4Util.EDITABLE_TRACK_TYPE_SHARP;
|
||||||
import static androidx.media3.extractor.mp4.BoxParsers.parseTraks;
|
import static androidx.media3.extractor.mp4.BoxParser.parseTraks;
|
||||||
import static androidx.media3.extractor.mp4.MetadataUtil.findMdtaMetadataEntryWithKey;
|
import static androidx.media3.extractor.mp4.MetadataUtil.findMdtaMetadataEntryWithKey;
|
||||||
import static androidx.media3.extractor.mp4.Sniffer.BRAND_HEIC;
|
import static androidx.media3.extractor.mp4.Sniffer.BRAND_HEIC;
|
||||||
import static androidx.media3.extractor.mp4.Sniffer.BRAND_QUICKTIME;
|
import static androidx.media3.extractor.mp4.Sniffer.BRAND_QUICKTIME;
|
||||||
@ -657,7 +657,7 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
|||||||
List<@C.AuxiliaryTrackType Integer> auxiliaryTrackTypesForEditableVideoTracks =
|
List<@C.AuxiliaryTrackType Integer> auxiliaryTrackTypesForEditableVideoTracks =
|
||||||
new ArrayList<>();
|
new ArrayList<>();
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
mdtaMetadata = BoxParsers.parseMdtaFromMeta(meta);
|
mdtaMetadata = BoxParser.parseMdtaFromMeta(meta);
|
||||||
if (readingEditableVideoTracks) {
|
if (readingEditableVideoTracks) {
|
||||||
checkStateNotNull(mdtaMetadata);
|
checkStateNotNull(mdtaMetadata);
|
||||||
maybeSetDefaultSampleOffsetForEditableVideoTracks(mdtaMetadata);
|
maybeSetDefaultSampleOffsetForEditableVideoTracks(mdtaMetadata);
|
||||||
@ -678,13 +678,13 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
|||||||
@Nullable Metadata udtaMetadata = null;
|
@Nullable Metadata udtaMetadata = null;
|
||||||
@Nullable Mp4Box.LeafBox udta = moov.getLeafBoxOfType(Mp4Box.TYPE_udta);
|
@Nullable Mp4Box.LeafBox udta = moov.getLeafBoxOfType(Mp4Box.TYPE_udta);
|
||||||
if (udta != null) {
|
if (udta != null) {
|
||||||
udtaMetadata = BoxParsers.parseUdta(udta);
|
udtaMetadata = BoxParser.parseUdta(udta);
|
||||||
gaplessInfoHolder.setFromMetadata(udtaMetadata);
|
gaplessInfoHolder.setFromMetadata(udtaMetadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
Metadata mvhdMetadata =
|
Metadata mvhdMetadata =
|
||||||
new Metadata(
|
new Metadata(
|
||||||
BoxParsers.parseMvhd(checkNotNull(moov.getLeafBoxOfType(Mp4Box.TYPE_mvhd)).data));
|
BoxParser.parseMvhd(checkNotNull(moov.getLeafBoxOfType(Mp4Box.TYPE_mvhd)).data));
|
||||||
|
|
||||||
boolean ignoreEditLists = (flags & FLAG_WORKAROUND_IGNORE_EDIT_LISTS) != 0;
|
boolean ignoreEditLists = (flags & FLAG_WORKAROUND_IGNORE_EDIT_LISTS) != 0;
|
||||||
List<TrackSampleTable> trackSampleTables =
|
List<TrackSampleTable> trackSampleTables =
|
||||||
@ -1056,7 +1056,7 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
|||||||
private void maybeSkipRemainingMetaAtomHeaderBytes(ExtractorInput input) throws IOException {
|
private void maybeSkipRemainingMetaAtomHeaderBytes(ExtractorInput input) throws IOException {
|
||||||
scratch.reset(8);
|
scratch.reset(8);
|
||||||
input.peekFully(scratch.getData(), 0, 8);
|
input.peekFully(scratch.getData(), 0, 8);
|
||||||
BoxParsers.maybeSkipRemainingMetaBoxHeaderBytes(scratch);
|
BoxParser.maybeSkipRemainingMetaBoxHeaderBytes(scratch);
|
||||||
input.skipFully(scratch.getPosition());
|
input.skipFully(scratch.getPosition());
|
||||||
input.resetPeekPosition();
|
input.resetPeekPosition();
|
||||||
}
|
}
|
||||||
|
@ -176,7 +176,7 @@ public final class PsshAtomUtil {
|
|||||||
Log.w(TAG, "Atom type is not pssh: " + atomType);
|
Log.w(TAG, "Atom type is not pssh: " + atomType);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
int atomVersion = BoxParsers.parseFullBoxVersion(atomData.readInt());
|
int atomVersion = BoxParser.parseFullBoxVersion(atomData.readInt());
|
||||||
if (atomVersion > 1) {
|
if (atomVersion > 1) {
|
||||||
Log.w(TAG, "Unsupported pssh version: " + atomVersion);
|
Log.w(TAG, "Unsupported pssh version: " + atomVersion);
|
||||||
return null;
|
return null;
|
||||||
|
@ -26,9 +26,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
/** Tests for {@link BoxParsers}. */
|
/** Tests for {@link BoxParser}. */
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
public final class BoxParsersTest {
|
public final class BoxParserTest {
|
||||||
|
|
||||||
private static final String ATOM_HEADER = "000000000000000000000000";
|
private static final String ATOM_HEADER = "000000000000000000000000";
|
||||||
private static final String SAMPLE_COUNT = "00000004";
|
private static final String SAMPLE_COUNT = "00000004";
|
||||||
@ -248,7 +248,7 @@ public final class BoxParsersTest {
|
|||||||
0, 0, 0, 0, 88, 88, 88, 88
|
0, 0, 0, 0, 88, 88, 88, 88
|
||||||
}; // version (1), flags (3), 'xxxx' (4)
|
}; // version (1), flags (3), 'xxxx' (4)
|
||||||
assertThat(
|
assertThat(
|
||||||
BoxParsers.parseCommonEncryptionSinfFromParent(
|
BoxParser.parseCommonEncryptionSinfFromParent(
|
||||||
new ParsableByteArray(cencSinf), 0, cencSinf.length))
|
new ParsableByteArray(cencSinf), 0, cencSinf.length))
|
||||||
.isNull();
|
.isNull();
|
||||||
}
|
}
|
||||||
@ -271,17 +271,17 @@ public final class BoxParsersTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void vexuParsings() throws ParserException {
|
public void vexuParsings() throws ParserException {
|
||||||
BoxParsers.VexuData vexuData = null;
|
BoxParser.VexuData vexuData = null;
|
||||||
assertThat(
|
assertThat(
|
||||||
vexuData =
|
vexuData =
|
||||||
BoxParsers.parseVideoExtendedUsageBox(
|
BoxParser.parseVideoExtendedUsageBox(
|
||||||
new ParsableByteArray(VEXU_DATA0), 0, VEXU_DATA0.length))
|
new ParsableByteArray(VEXU_DATA0), 0, VEXU_DATA0.length))
|
||||||
.isNotNull();
|
.isNotNull();
|
||||||
assertThat(vexuData).isNotNull();
|
assertThat(vexuData).isNotNull();
|
||||||
assertThat(vexuData.hasBothEyeViews()).isTrue();
|
assertThat(vexuData.hasBothEyeViews()).isTrue();
|
||||||
assertThat(
|
assertThat(
|
||||||
vexuData =
|
vexuData =
|
||||||
BoxParsers.parseVideoExtendedUsageBox(
|
BoxParser.parseVideoExtendedUsageBox(
|
||||||
new ParsableByteArray(VEXU_DATA1), 0, VEXU_DATA1.length))
|
new ParsableByteArray(VEXU_DATA1), 0, VEXU_DATA1.length))
|
||||||
.isNotNull();
|
.isNotNull();
|
||||||
assertThat(vexuData).isNotNull();
|
assertThat(vexuData).isNotNull();
|
||||||
@ -289,7 +289,7 @@ public final class BoxParsersTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void verifyStz2Parsing(Mp4Box.LeafBox stz2Atom) {
|
private static void verifyStz2Parsing(Mp4Box.LeafBox stz2Atom) {
|
||||||
BoxParsers.Stz2SampleSizeBox box = new BoxParsers.Stz2SampleSizeBox(stz2Atom);
|
BoxParser.Stz2SampleSizeBox box = new BoxParser.Stz2SampleSizeBox(stz2Atom);
|
||||||
assertThat(box.getSampleCount()).isEqualTo(4);
|
assertThat(box.getSampleCount()).isEqualTo(4);
|
||||||
assertThat(box.getFixedSampleSize()).isEqualTo(C.LENGTH_UNSET);
|
assertThat(box.getFixedSampleSize()).isEqualTo(C.LENGTH_UNSET);
|
||||||
for (int i = 0; i < box.getSampleCount(); i++) {
|
for (int i = 0; i < box.getSampleCount(); i++) {
|
@ -17,8 +17,8 @@ package androidx.media3.extractor.mp4;
|
|||||||
|
|
||||||
import static androidx.media3.common.C.WIDEVINE_UUID;
|
import static androidx.media3.common.C.WIDEVINE_UUID;
|
||||||
import static androidx.media3.container.Mp4Box.TYPE_pssh;
|
import static androidx.media3.container.Mp4Box.TYPE_pssh;
|
||||||
import static androidx.media3.extractor.mp4.BoxParsers.parseFullBoxFlags;
|
import static androidx.media3.extractor.mp4.BoxParser.parseFullBoxFlags;
|
||||||
import static androidx.media3.extractor.mp4.BoxParsers.parseFullBoxVersion;
|
import static androidx.media3.extractor.mp4.BoxParser.parseFullBoxVersion;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user