From 4aa5467f65b883bce3574f2d66b4f92ffbd38f31 Mon Sep 17 00:00:00 2001 From: Andrew Lewis Date: Tue, 14 Mar 2023 10:19:30 +0000 Subject: [PATCH 1/3] Shorten labels to fix transformer demo UI --- demos/transformer/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/transformer/src/main/res/values/strings.xml b/demos/transformer/src/main/res/values/strings.xml index 6f26949a59..cae40d8b3b 100644 --- a/demos/transformer/src/main/res/values/strings.xml +++ b/demos/transformer/src/main/res/values/strings.xml @@ -31,8 +31,8 @@ Enable debug preview Trim Request SDR tone-mapping (API 31+) - [Experimental] Force interpret HDR video as SDR (API 29+) - [Experimental] HDR editing (API 31+) + Interpret HDR as SDR (API 29+) + HDR editing (API 31+) Add demo effects Periodic vignette options Failed to load MediaPipe processor. Check the README for instructions. From 614dbd1cfc6cceff2fd9de7772bd088771c113ef Mon Sep 17 00:00:00 2001 From: Haixia Shi Date: Tue, 14 Mar 2023 17:02:22 -0700 Subject: [PATCH 2/3] Fix VP9 color space parsing in MP4 atom parser This adds vpcC atom parsing based on the open-source FFmpeg implementation (https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/vpcc.c#L213) This fix is needed to have correct color space parsing in vpcC atom because Instagram serves HDR VP9 encodings in MP4 containers. --- .../android/exoplayer2/extractor/mp4/AtomParsers.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 3a9cedf98a..cd2f8e5b20 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 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; } else if (childAtomType == Atom.TYPE_vpcC) { ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null); mimeType = (atomType == Atom.TYPE_vp08) ? MimeTypes.VIDEO_VP8 : MimeTypes.VIDEO_VP9; + parent.setPosition(childStartPosition + Atom.HEADER_SIZE); + // vpcC atom parsing based on FFmpeg implementation + // see https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/vpcc.c + parent.skipBytes(6); + 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; From e7b1c021a56eda79d4edf8c363f59a9ae485036d Mon Sep 17 00:00:00 2001 From: Haixia Shi Date: Wed, 15 Mar 2023 07:07:26 -0700 Subject: [PATCH 3/3] Replace ffmpeg specific link with generic VP9/MP4 atom syntax spec. --- .../android/exoplayer2/extractor/mp4/AtomParsers.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 cd2f8e5b20..f1ed8260cb 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,10 +1173,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; } else if (childAtomType == Atom.TYPE_vpcC) { ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null); mimeType = (atomType == Atom.TYPE_vp08) ? MimeTypes.VIDEO_VP8 : MimeTypes.VIDEO_VP9; - parent.setPosition(childStartPosition + Atom.HEADER_SIZE); - // vpcC atom parsing based on FFmpeg implementation - // see https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/vpcc.c - parent.skipBytes(6); + // 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();