Skip to content

Commit

Permalink
enum Rav1dTransferCharacteristics: make a real enum
Browse files Browse the repository at this point in the history
  • Loading branch information
folkertdev committed Mar 10, 2024
1 parent bb32e3f commit 7e595f3
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 45 deletions.
114 changes: 74 additions & 40 deletions include/dav1d/headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -517,44 +517,78 @@ impl TryFrom<Dav1dColorPrimaries> 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<Rav1dTransferCharacteristics> for Dav1dTransferCharacteristics {
fn from(value: Rav1dTransferCharacteristics) -> Self {
value as Dav1dTransferCharacteristics
}
}

impl TryFrom<Dav1dTransferCharacteristics> for Rav1dTransferCharacteristics {
type Error = ();

fn try_from(value: Dav1dTransferCharacteristics) -> Result<Self, Self::Error> {
Self::from_repr(value as usize).ok_or(())
}
}

pub type Dav1dMatrixCoefficients = c_uint;
pub const DAV1D_MC_IDENTITY: Dav1dMatrixCoefficients =
Expand Down Expand Up @@ -1116,7 +1150,7 @@ impl From<Dav1dSequenceHeader> 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,
Expand Down Expand Up @@ -1231,7 +1265,7 @@ impl From<Rav1dSequenceHeader> for Dav1dSequenceHeader {
max_height,
layout: layout.into(),
pri: pri.into(),
trc,
trc: trc.into(),
mtrx: mtrx.into(),
chr: chr.into(),
hbd,
Expand Down
8 changes: 3 additions & 5 deletions src/obu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -393,11 +391,11 @@ fn parse_seq_hdr(c: &mut Rav1dContext, gb: &mut GetBits) -> Rav1dResult<Rav1dSeq
let mtrx;
if color_description_present != 0 {
pri = Rav1dColorPrimaries::from_repr(gb.get_bits(8) as usize).unwrap();
trc = gb.get_bits(8) as Rav1dTransferCharacteristics;
trc = Rav1dTransferCharacteristics::from_repr(gb.get_bits(8) as usize).unwrap();
mtrx = Rav1dMatrixCoefficients::from_repr(gb.get_bits(8) as usize).unwrap();
} else {
pri = Rav1dColorPrimaries::Unknown;
trc = RAV1D_TRC_UNKNOWN;
trc = Rav1dTransferCharacteristics::Unknown;
mtrx = Rav1dMatrixCoefficients::Unknown;
}
let color_range;
Expand All @@ -412,7 +410,7 @@ fn parse_seq_hdr(c: &mut Rav1dContext, gb: &mut GetBits) -> Rav1dResult<Rav1dSeq
ss_hor = ss_ver;
chr = Rav1dChromaSamplePosition::Unknown;
} else if pri == Rav1dColorPrimaries::Bt709
&& trc == RAV1D_TRC_SRGB
&& trc == Rav1dTransferCharacteristics::Srgb
&& mtrx == Rav1dMatrixCoefficients::Identity
{
layout = Rav1dPixelLayout::I444;
Expand Down

0 comments on commit 7e595f3

Please sign in to comment.