From 7e595f3e7d2fd1bc70b86f4198c1bb43bf51dc8c Mon Sep 17 00:00:00 2001 From: Folkert Date: Wed, 6 Mar 2024 20:52:31 +0100 Subject: [PATCH] `enum Rav1dTransferCharacteristics`: make a real enum --- include/dav1d/headers.rs | 114 +++++++++++++++++++++++++-------------- src/obu.rs | 8 ++- 2 files changed, 77 insertions(+), 45 deletions(-) diff --git a/include/dav1d/headers.rs b/include/dav1d/headers.rs index 5edcd8476..9eaabc811 100644 --- a/include/dav1d/headers.rs +++ b/include/dav1d/headers.rs @@ -517,44 +517,78 @@ impl TryFrom for Rav1dColorPrimaries { } pub type Dav1dTransferCharacteristics = c_uint; -pub const DAV1D_TRC_RESERVED: Dav1dTransferCharacteristics = 255; -pub const DAV1D_TRC_HLG: Dav1dTransferCharacteristics = 18; -pub const DAV1D_TRC_SMPTE428: Dav1dTransferCharacteristics = 17; -pub const DAV1D_TRC_SMPTE2084: Dav1dTransferCharacteristics = 16; -pub const DAV1D_TRC_BT2020_12BIT: Dav1dTransferCharacteristics = 15; -pub const DAV1D_TRC_BT2020_10BIT: Dav1dTransferCharacteristics = 14; -pub const DAV1D_TRC_SRGB: Dav1dTransferCharacteristics = 13; -pub const DAV1D_TRC_BT1361: Dav1dTransferCharacteristics = 12; -pub const DAV1D_TRC_IEC61966: Dav1dTransferCharacteristics = 11; -pub const DAV1D_TRC_LOG100_SQRT10: Dav1dTransferCharacteristics = 10; -pub const DAV1D_TRC_LOG100: Dav1dTransferCharacteristics = 9; -pub const DAV1D_TRC_LINEAR: Dav1dTransferCharacteristics = 8; -pub const DAV1D_TRC_SMPTE240: Dav1dTransferCharacteristics = 7; -pub const DAV1D_TRC_BT601: Dav1dTransferCharacteristics = 6; -pub const DAV1D_TRC_BT470BG: Dav1dTransferCharacteristics = 5; -pub const DAV1D_TRC_BT470M: Dav1dTransferCharacteristics = 4; -pub const DAV1D_TRC_UNKNOWN: Dav1dTransferCharacteristics = 2; -pub const DAV1D_TRC_BT709: Dav1dTransferCharacteristics = 1; - -pub(crate) type Rav1dTransferCharacteristics = c_uint; -pub(crate) const _RAV1D_TRC_RESERVED: Rav1dTransferCharacteristics = DAV1D_TRC_RESERVED; -pub(crate) const _RAV1D_TRC_HLG: Rav1dTransferCharacteristics = DAV1D_TRC_HLG; -pub(crate) const _RAV1D_TRC_SMPTE428: Rav1dTransferCharacteristics = DAV1D_TRC_SMPTE428; -pub(crate) const _RAV1D_TRC_SMPTE2084: Rav1dTransferCharacteristics = DAV1D_TRC_SMPTE2084; -pub(crate) const _RAV1D_TRC_BT2020_12BIT: Rav1dTransferCharacteristics = DAV1D_TRC_BT2020_12BIT; -pub(crate) const _RAV1D_TRC_BT2020_10BIT: Rav1dTransferCharacteristics = DAV1D_TRC_BT2020_10BIT; -pub(crate) const RAV1D_TRC_SRGB: Rav1dTransferCharacteristics = DAV1D_TRC_SRGB; -pub(crate) const _RAV1D_TRC_BT1361: Rav1dTransferCharacteristics = DAV1D_TRC_BT1361; -pub(crate) const _RAV1D_TRC_IEC61966: Rav1dTransferCharacteristics = DAV1D_TRC_IEC61966; -pub(crate) const _RAV1D_TRC_LOG100_SQRT10: Rav1dTransferCharacteristics = DAV1D_TRC_LOG100_SQRT10; -pub(crate) const _RAV1D_TRC_LOG100: Rav1dTransferCharacteristics = DAV1D_TRC_LOG100; -pub(crate) const _RAV1D_TRC_LINEAR: Rav1dTransferCharacteristics = DAV1D_TRC_LINEAR; -pub(crate) const _RAV1D_TRC_SMPTE240: Rav1dTransferCharacteristics = DAV1D_TRC_SMPTE240; -pub(crate) const _RAV1D_TRC_BT601: Rav1dTransferCharacteristics = DAV1D_TRC_BT601; -pub(crate) const _RAV1D_TRC_BT470BG: Rav1dTransferCharacteristics = DAV1D_TRC_BT470BG; -pub(crate) const _RAV1D_TRC_BT470M: Rav1dTransferCharacteristics = DAV1D_TRC_BT470M; -pub(crate) const RAV1D_TRC_UNKNOWN: Rav1dTransferCharacteristics = DAV1D_TRC_UNKNOWN; -pub(crate) const _RAV1D_TRC_BT709: Rav1dTransferCharacteristics = DAV1D_TRC_BT709; +pub const DAV1D_TRC_BT709: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Bt709 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_UNKNOWN: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::Unknown as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_BT470M: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Bt470m as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_BT470BG: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Bt470bg as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_BT601: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Bt601 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_SMPTE240: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Smpte240 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_LINEAR: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Linear as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_LOG100: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Log100 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_LOG100_SQRT10: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Log100_sqrt10 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_IEC61966: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Iec61966 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_BT1361: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Bt1361 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_SRGB: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::Srgb as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_BT2020_10BIT: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Bt2020_10bit as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_BT2020_12BIT: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Bt2020_12bit as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_SMPTE2084: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Smpte2084 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_SMPTE428: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Smpte428 as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_HLG: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Hlg as Dav1dTransferCharacteristics; +pub const DAV1D_TRC_RESERVED: Dav1dTransferCharacteristics = + Rav1dTransferCharacteristics::_Reserved as Dav1dTransferCharacteristics; + +#[derive(Clone, Copy, PartialEq, Eq, FromRepr)] +pub enum Rav1dTransferCharacteristics { + _Bt709 = 1, + Unknown = 2, + _Bt470m = 4, + _Bt470bg = 5, + _Bt601 = 6, + _Smpte240 = 7, + _Linear = 8, + _Log100 = 9, + _Log100_sqrt10 = 10, + _Iec61966 = 11, + _Bt1361 = 12, + Srgb = 13, + _Bt2020_10bit = 14, + _Bt2020_12bit = 15, + _Smpte2084 = 16, + _Smpte428 = 17, + _Hlg = 18, + _Reserved = 255, +} + +impl From for Dav1dTransferCharacteristics { + fn from(value: Rav1dTransferCharacteristics) -> Self { + value as Dav1dTransferCharacteristics + } +} + +impl TryFrom for Rav1dTransferCharacteristics { + type Error = (); + + fn try_from(value: Dav1dTransferCharacteristics) -> Result { + Self::from_repr(value as usize).ok_or(()) + } +} pub type Dav1dMatrixCoefficients = c_uint; pub const DAV1D_MC_IDENTITY: Dav1dMatrixCoefficients = @@ -1116,7 +1150,7 @@ impl From for Rav1dSequenceHeader { max_height, layout: layout.try_into().unwrap(), pri: pri.try_into().unwrap(), - trc, + trc: trc.try_into().unwrap(), mtrx: mtrx.try_into().unwrap(), chr: chr.try_into().unwrap(), hbd, @@ -1231,7 +1265,7 @@ impl From for Dav1dSequenceHeader { max_height, layout: layout.into(), pri: pri.into(), - trc, + trc: trc.into(), mtrx: mtrx.into(), chr: chr.into(), hbd, diff --git a/src/obu.rs b/src/obu.rs index c4979adf2..d2c87e5ce 100644 --- a/src/obu.rs +++ b/src/obu.rs @@ -48,8 +48,6 @@ use crate::include::dav1d::headers::RAV1D_MAX_TILE_ROWS; use crate::include::dav1d::headers::RAV1D_PRIMARY_REF_NONE; use crate::include::dav1d::headers::RAV1D_REFS_PER_FRAME; use crate::include::dav1d::headers::RAV1D_RESTORATION_NONE; -use crate::include::dav1d::headers::RAV1D_TRC_SRGB; -use crate::include::dav1d::headers::RAV1D_TRC_UNKNOWN; use crate::include::dav1d::headers::RAV1D_WM_TYPE_AFFINE; use crate::include::dav1d::headers::RAV1D_WM_TYPE_IDENTITY; use crate::include::dav1d::headers::RAV1D_WM_TYPE_ROT_ZOOM; @@ -393,11 +391,11 @@ fn parse_seq_hdr(c: &mut Rav1dContext, gb: &mut GetBits) -> Rav1dResult Rav1dResult