diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java index 3a9cedf98a7..f1ed8260cb1 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java @@ -1173,6 +1173,17 @@ private static void parseVideoSampleEntry( } else if (childAtomType == Atom.TYPE_vpcC) { ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null); mimeType = (atomType == Atom.TYPE_vp08) ? MimeTypes.VIDEO_VP8 : MimeTypes.VIDEO_VP9; + // See vpcC atom syntax: https://www.webmproject.org/vp9/mp4/#syntax_1 + // Skip FullBox header, and profile and level fields + parent.setPosition(childStartPosition + Atom.FULL_HEADER_SIZE); + parent.skipBytes(2); + boolean fullRangeFlag = (parent.readUnsignedByte() & 1) != 0; + int colorPrimaries = parent.readUnsignedByte(); + int transferCharacteristics = parent.readUnsignedByte(); + colorSpace = ColorInfo.isoColorPrimariesToColorSpace(colorPrimaries); + colorRange = fullRangeFlag ? C.COLOR_RANGE_FULL : C.COLOR_RANGE_LIMITED; + colorTransfer = + ColorInfo.isoTransferCharacteristicsToColorTransfer(transferCharacteristics); } else if (childAtomType == Atom.TYPE_av1C) { ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null); mimeType = MimeTypes.VIDEO_AV1;