From 761cf4a001a2d9c5b414a1bc0f07074abf4cd0b5 Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Tue, 22 Oct 2024 04:12:03 -0700 Subject: [PATCH] Fix color info conversion in vpccBox method The color space should be used to determine the color primaries and matrix coefficients, not the video range. PiperOrigin-RevId: 688489212 (cherry picked from commit 31ece8cbd2047024af243d18205cc6ce03924e31) --- .../java/androidx/media3/muxer/Boxes.java | 21 +++++++++++++------ ...e_entry_box_vp09_codec_private_as_csd.dump | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java index 158a615013..1d1b15925d 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java @@ -1530,8 +1530,11 @@ import org.checkerframework.checker.nullness.qual.PolyNull; ByteBuffer contents = ByteBuffer.allocate(MAX_FIXED_LEAF_BOX_SIZE); contents.putInt(versionAndFlags); - // Default value of videoRange is 0. - int videoRange = format.colorInfo != null ? format.colorInfo.colorRange : 0; + // Default value of videoRange is limited range (value 0). + int videoRange = + format.colorInfo != null && format.colorInfo.colorRange != Format.NO_VALUE + ? format.colorInfo.colorRange + : 0; ByteBuffer codecPrivateContent = parseVp9CodecPrivateFromCsd(csd0, videoRange); contents.put(codecPrivateContent); @@ -1542,10 +1545,16 @@ import org.checkerframework.checker.nullness.qual.PolyNull; int matrixCoefficients = 1; if (format.colorInfo != null) { - colourPrimaries = MEDIAFORMAT_STANDARD_TO_PRIMARIES_AND_MATRIX.get(videoRange).get(0); - transferCharacteristics = - MEDIAFORMAT_TRANSFER_TO_MP4_TRANSFER.get(format.colorInfo.colorTransfer); - matrixCoefficients = MEDIAFORMAT_STANDARD_TO_PRIMARIES_AND_MATRIX.get(videoRange).get(1); + ColorInfo colorInfo = format.colorInfo; + if (colorInfo.colorSpace != Format.NO_VALUE) { + colourPrimaries = + MEDIAFORMAT_STANDARD_TO_PRIMARIES_AND_MATRIX.get(colorInfo.colorSpace).get(0); + matrixCoefficients = + MEDIAFORMAT_STANDARD_TO_PRIMARIES_AND_MATRIX.get(colorInfo.colorSpace).get(1); + } + if (colorInfo.colorTransfer != Format.NO_VALUE) { + transferCharacteristics = MEDIAFORMAT_TRANSFER_TO_MP4_TRANSFER.get(colorInfo.colorTransfer); + } } contents.put((byte) colourPrimaries); diff --git a/libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_vp09_codec_private_as_csd.dump b/libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_vp09_codec_private_as_csd.dump index fed803b243..0cd8bebfef 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_vp09_codec_private_as_csd.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_vp09_codec_private_as_csd.dump @@ -1,2 +1,2 @@ vp09 (141 bytes): - Data = length 133, hash 86CBFAF0 + Data = length 133, hash 4A5066E0