From 2e8d4c91104c2b805bbc1ac1317c859bd090a482 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Tue, 25 May 2021 16:01:53 +0100 Subject: [PATCH] Extract function for mapping ColorInfo-related constants PiperOrigin-RevId: 375705247 --- .../android/exoplayer2/video/ColorInfo.java | 46 +++++++++++++++++++ .../extractor/mkv/MatroskaExtractor.java | 35 +++----------- 2 files changed, 52 insertions(+), 29 deletions(-) diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java b/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java index 4afa4d6f91..38fe968668 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java @@ -22,10 +22,56 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.util.Util; import java.util.Arrays; +import org.checkerframework.dataflow.qual.Pure; /** Stores color info. */ public final class ColorInfo implements Parcelable { + /** + * Returns the {@link C.ColorSpace} corresponding to the given ISO color primary code, as per + * table A.7.21.1 in Rec. ITU-T T.832 (03/2009), or {@link Format#NO_VALUE} if no mapping can be + * made. + */ + @Pure + @C.ColorSpace + public static int isoColorPrimariesToColorSpace(int isoColorPrimaries) { + switch (isoColorPrimaries) { + case 1: + return C.COLOR_SPACE_BT709; + case 4: // BT.470M. + case 5: // BT.470BG. + case 6: // SMPTE 170M. + case 7: // SMPTE 240M. + return C.COLOR_SPACE_BT601; + case 9: + return C.COLOR_SPACE_BT2020; + default: + return Format.NO_VALUE; + } + } + + /** + * Returns the {@link C.ColorTransfer} corresponding to the given ISO transfer characteristics + * code, as per table A.7.21.2 in Rec. ITU-T T.832 (03/2009), or {@link Format#NO_VALUE} if no + * mapping can be made. + */ + @Pure + @C.ColorTransfer + public static int isoTransferCharacteristicsToColorTransfer(int isoTransferCharacteristics) { + switch (isoTransferCharacteristics) { + case 1: // BT.709. + case 6: // SMPTE 170M. + case 7: // SMPTE 240M. + return C.COLOR_TRANSFER_SDR; + case 16: + return C.COLOR_TRANSFER_ST2084; + case 18: + return C.COLOR_TRANSFER_HLG; + default: + return Format.NO_VALUE; + } + } + /** * The color space of the video. Valid values are {@link C#COLOR_SPACE_BT601}, {@link * C#COLOR_SPACE_BT709}, {@link C#COLOR_SPACE_BT2020} or {@link Format#NO_VALUE} if unknown. diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java index 54e27088ca..6da428a42c 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java @@ -931,39 +931,16 @@ public class MatroskaExtractor implements Extractor { case ID_COLOUR_PRIMARIES: assertInTrackEntry(id); currentTrack.hasColorInfo = true; - switch ((int) value) { - case 1: - currentTrack.colorSpace = C.COLOR_SPACE_BT709; - break; - case 4: // BT.470M. - case 5: // BT.470BG. - case 6: // SMPTE 170M. - case 7: // SMPTE 240M. - currentTrack.colorSpace = C.COLOR_SPACE_BT601; - break; - case 9: - currentTrack.colorSpace = C.COLOR_SPACE_BT2020; - break; - default: - break; + int colorSpace = ColorInfo.isoColorPrimariesToColorSpace((int) value); + if (colorSpace != Format.NO_VALUE) { + currentTrack.colorSpace = colorSpace; } break; case ID_COLOUR_TRANSFER: assertInTrackEntry(id); - switch ((int) value) { - case 1: // BT.709. - case 6: // SMPTE 170M. - case 7: // SMPTE 240M. - currentTrack.colorTransfer = C.COLOR_TRANSFER_SDR; - break; - case 16: - currentTrack.colorTransfer = C.COLOR_TRANSFER_ST2084; - break; - case 18: - currentTrack.colorTransfer = C.COLOR_TRANSFER_HLG; - break; - default: - break; + int colorTransfer = ColorInfo.isoTransferCharacteristicsToColorTransfer((int) value); + if (colorTransfer != Format.NO_VALUE) { + currentTrack.colorTransfer = colorTransfer; } break; case ID_COLOUR_RANGE: