Skip to content

Commit

Permalink
mod include::dav1d::headers: Deduplicate Section 3 consts (#601)
Browse files Browse the repository at this point in the history
  • Loading branch information
kkysen authored Dec 8, 2023
2 parents e1901bd + 96f7feb commit f39ce95
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 31 deletions.
70 changes: 43 additions & 27 deletions include/dav1d/headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,27 @@ where
}
}

// Constants from Section 3. "Symbols and abbreviated terms"
pub const DAV1D_MAX_CDEF_STRENGTHS: usize = 8;
pub const DAV1D_MAX_OPERATING_POINTS: usize = 32;
pub const DAV1D_MAX_TILE_COLS: usize = 64;
pub const DAV1D_MAX_TILE_ROWS: usize = 64;
pub const DAV1D_MAX_SEGMENTS: u8 = 8;
pub const DAV1D_NUM_REF_FRAMES: usize = 8;
pub const DAV1D_PRIMARY_REF_NONE: c_int = 7;
pub const DAV1D_REFS_PER_FRAME: usize = 7;
pub const DAV1D_TOTAL_REFS_PER_FRAME: usize = DAV1D_REFS_PER_FRAME + 1;

pub(crate) const RAV1D_MAX_CDEF_STRENGTHS: usize = DAV1D_MAX_CDEF_STRENGTHS;
pub(crate) const RAV1D_MAX_OPERATING_POINTS: usize = DAV1D_MAX_OPERATING_POINTS;
pub(crate) const RAV1D_MAX_TILE_COLS: usize = DAV1D_MAX_TILE_COLS;
pub(crate) const RAV1D_MAX_TILE_ROWS: usize = DAV1D_MAX_TILE_ROWS;
pub(crate) const RAV1D_MAX_SEGMENTS: u8 = DAV1D_MAX_SEGMENTS;
pub(crate) const _RAV1D_NUM_REF_FRAMES: usize = DAV1D_NUM_REF_FRAMES;
pub(crate) const RAV1D_PRIMARY_REF_NONE: c_int = DAV1D_PRIMARY_REF_NONE;
pub(crate) const RAV1D_REFS_PER_FRAME: usize = DAV1D_REFS_PER_FRAME;
pub(crate) const RAV1D_TOTAL_REFS_PER_FRAME: usize = DAV1D_TOTAL_REFS_PER_FRAME;

pub type Dav1dObuType = c_uint;
pub const DAV1D_OBU_PADDING: Dav1dObuType = 15;
pub const DAV1D_OBU_REDUNDANT_FRAME_HDR: Dav1dObuType = 7;
Expand Down Expand Up @@ -419,13 +440,6 @@ pub(crate) const _RAV1D_CHR_COLOCATED: Rav1dChromaSamplePosition = DAV1D_CHR_COL
pub(crate) const _RAV1D_CHR_VERTICAL: Rav1dChromaSamplePosition = DAV1D_CHR_VERTICAL;
pub(crate) const RAV1D_CHR_UNKNOWN: Rav1dChromaSamplePosition = DAV1D_CHR_UNKNOWN;

// Constants from Section 3. "Symbols and abbreviated terms"
pub const DAV1D_MAX_SEGMENTS: u8 = 8;
pub const DAV1D_PRIMARY_REF_NONE: c_int = 7;

pub(crate) const RAV1D_MAX_SEGMENTS: u8 = DAV1D_MAX_SEGMENTS;
pub(crate) const RAV1D_PRIMARY_REF_NONE: c_int = DAV1D_PRIMARY_REF_NONE;

#[repr(C)]
pub struct Rav1dContentLightLevel {
pub max_content_light_level: c_int,
Expand Down Expand Up @@ -626,7 +640,7 @@ pub struct Dav1dSequenceHeader {
pub hbd: c_int,
pub color_range: c_int,
pub num_operating_points: c_int,
pub operating_points: [Dav1dSequenceHeaderOperatingPoint; 32],
pub operating_points: [Dav1dSequenceHeaderOperatingPoint; DAV1D_MAX_OPERATING_POINTS],
pub still_picture: c_int,
pub reduced_still_picture_header: c_int,
pub timing_info_present: c_int,
Expand Down Expand Up @@ -667,7 +681,8 @@ pub struct Dav1dSequenceHeader {
pub color_description_present: c_int,
pub separate_uv_delta_q: c_int,
pub film_grain_present: c_int,
pub operating_parameter_info: [Dav1dSequenceHeaderOperatingParameterInfo; 32],
pub operating_parameter_info:
[Dav1dSequenceHeaderOperatingParameterInfo; DAV1D_MAX_OPERATING_POINTS],
}

#[derive(Clone)]
Expand All @@ -684,7 +699,7 @@ pub(crate) struct Rav1dSequenceHeader {
pub hbd: c_int,
pub color_range: c_int,
pub num_operating_points: c_int,
pub operating_points: [Rav1dSequenceHeaderOperatingPoint; 32],
pub operating_points: [Rav1dSequenceHeaderOperatingPoint; RAV1D_MAX_OPERATING_POINTS],
pub still_picture: c_int,
pub reduced_still_picture_header: c_int,
pub timing_info_present: c_int,
Expand Down Expand Up @@ -725,7 +740,8 @@ pub(crate) struct Rav1dSequenceHeader {
pub color_description_present: c_int,
pub separate_uv_delta_q: c_int,
pub film_grain_present: c_int,
pub operating_parameter_info: [Rav1dSequenceHeaderOperatingParameterInfo; 32],
pub operating_parameter_info:
[Rav1dSequenceHeaderOperatingParameterInfo; RAV1D_MAX_OPERATING_POINTS],
}

impl From<Dav1dSequenceHeader> for Rav1dSequenceHeader {
Expand Down Expand Up @@ -1084,14 +1100,14 @@ impl From<Rav1dSegmentationDataSet> for Dav1dSegmentationDataSet {
#[repr(C)]
pub struct Dav1dLoopfilterModeRefDeltas {
pub mode_delta: [c_int; 2],
pub ref_delta: [c_int; 8],
pub ref_delta: [c_int; DAV1D_TOTAL_REFS_PER_FRAME],
}

#[derive(Clone)]
#[repr(C)]
pub(crate) struct Rav1dLoopfilterModeRefDeltas {
pub mode_delta: [c_int; 2],
pub ref_delta: [c_int; 8],
pub ref_delta: [c_int; RAV1D_TOTAL_REFS_PER_FRAME],
}

impl From<Dav1dLoopfilterModeRefDeltas> for Rav1dLoopfilterModeRefDeltas {
Expand Down Expand Up @@ -1420,8 +1436,8 @@ pub struct Dav1dFrameHeader_tiling {
pub max_log2_rows: c_int,
pub log2_rows: c_int,
pub rows: c_int,
pub col_start_sb: [u16; 65],
pub row_start_sb: [u16; 65],
pub col_start_sb: [u16; DAV1D_MAX_TILE_COLS + 1],
pub row_start_sb: [u16; DAV1D_MAX_TILE_ROWS + 1],
pub update: c_int,
}

Expand All @@ -1438,8 +1454,8 @@ pub(crate) struct Rav1dFrameHeader_tiling {
pub max_log2_rows: c_int,
pub log2_rows: c_int,
pub rows: c_int,
pub col_start_sb: [u16; 65],
pub row_start_sb: [u16; 65],
pub col_start_sb: [u16; RAV1D_MAX_TILE_COLS + 1],
pub row_start_sb: [u16; RAV1D_MAX_TILE_ROWS + 1],
pub update: c_int,
}

Expand Down Expand Up @@ -1854,17 +1870,17 @@ impl From<Rav1dFrameHeader_loopfilter> for Dav1dFrameHeader_loopfilter {
pub struct Dav1dFrameHeader_cdef {
pub damping: c_int,
pub n_bits: c_int,
pub y_strength: [c_int; 8],
pub uv_strength: [c_int; 8],
pub y_strength: [c_int; DAV1D_MAX_CDEF_STRENGTHS],
pub uv_strength: [c_int; DAV1D_MAX_CDEF_STRENGTHS],
}

#[derive(Clone)]
#[repr(C)]
pub(crate) struct Rav1dFrameHeader_cdef {
pub damping: c_int,
pub n_bits: c_int,
pub y_strength: [c_int; 8],
pub uv_strength: [c_int; 8],
pub y_strength: [c_int; RAV1D_MAX_CDEF_STRENGTHS],
pub uv_strength: [c_int; RAV1D_MAX_CDEF_STRENGTHS],
}

impl From<Dav1dFrameHeader_cdef> for Rav1dFrameHeader_cdef {
Expand Down Expand Up @@ -1952,15 +1968,15 @@ pub struct Dav1dFrameHeader {
pub frame_size_override: c_int,
pub primary_ref_frame: c_int,
pub buffer_removal_time_present: c_int,
pub operating_points: [Dav1dFrameHeaderOperatingPoint; 32],
pub operating_points: [Dav1dFrameHeaderOperatingPoint; DAV1D_MAX_OPERATING_POINTS],
pub refresh_frame_flags: c_int,
pub render_width: c_int,
pub render_height: c_int,
pub super_res: Dav1dFrameHeader_super_res,
pub have_render_size: c_int,
pub allow_intrabc: c_int,
pub frame_ref_short_signaling: c_int,
pub refidx: [c_int; 7],
pub refidx: [c_int; DAV1D_REFS_PER_FRAME],
pub hp: c_int,
pub subpel_filter_mode: Dav1dFilterMode,
pub switchable_motion_mode: c_int,
Expand All @@ -1981,7 +1997,7 @@ pub struct Dav1dFrameHeader {
pub skip_mode_refs: [c_int; 2],
pub warp_motion: c_int,
pub reduced_txtp_set: c_int,
pub gmv: [Dav1dWarpedMotionParams; 7],
pub gmv: [Dav1dWarpedMotionParams; DAV1D_REFS_PER_FRAME],
}

#[derive(Clone)]
Expand All @@ -2007,15 +2023,15 @@ pub(crate) struct Rav1dFrameHeader {
pub frame_size_override: c_int,
pub primary_ref_frame: c_int,
pub buffer_removal_time_present: c_int,
pub operating_points: [Rav1dFrameHeaderOperatingPoint; 32],
pub operating_points: [Rav1dFrameHeaderOperatingPoint; RAV1D_MAX_OPERATING_POINTS],
pub refresh_frame_flags: c_int,
pub render_width: c_int,
pub render_height: c_int,
pub super_res: Rav1dFrameHeader_super_res,
pub have_render_size: c_int,
pub allow_intrabc: c_int,
pub frame_ref_short_signaling: c_int,
pub refidx: [c_int; 7],
pub refidx: [c_int; RAV1D_REFS_PER_FRAME],
pub hp: c_int,
pub subpel_filter_mode: Rav1dFilterMode,
pub switchable_motion_mode: c_int,
Expand All @@ -2036,7 +2052,7 @@ pub(crate) struct Rav1dFrameHeader {
pub skip_mode_refs: [c_int; 2],
pub warp_motion: c_int,
pub reduced_txtp_set: c_int,
pub gmv: [Rav1dWarpedMotionParams; 7],
pub gmv: [Rav1dWarpedMotionParams; RAV1D_REFS_PER_FRAME],
}

impl From<Dav1dFrameHeader> for Rav1dFrameHeader {
Expand Down
10 changes: 6 additions & 4 deletions src/obu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ use crate::include::dav1d::headers::RAV1D_FRAME_TYPE_INTRA;
use crate::include::dav1d::headers::RAV1D_FRAME_TYPE_KEY;
use crate::include::dav1d::headers::RAV1D_FRAME_TYPE_SWITCH;
use crate::include::dav1d::headers::RAV1D_MAX_SEGMENTS;
use crate::include::dav1d::headers::RAV1D_MAX_TILE_COLS;
use crate::include::dav1d::headers::RAV1D_MAX_TILE_ROWS;
use crate::include::dav1d::headers::RAV1D_MC_IDENTITY;
use crate::include::dav1d::headers::RAV1D_MC_UNKNOWN;
use crate::include::dav1d::headers::RAV1D_OBU_FRAME;
Expand Down Expand Up @@ -856,8 +858,8 @@ unsafe fn parse_frame_hdr(c: &mut Rav1dContext, gb: &mut GetBits) -> Rav1dResult
let max_tile_width_sb = 4096 >> sbsz_log2;
let max_tile_area_sb = 4096 * 2304 >> 2 * sbsz_log2;
hdr.tiling.min_log2_cols = tile_log2(max_tile_width_sb, sbw);
hdr.tiling.max_log2_cols = tile_log2(1, cmp::min(sbw, 64));
hdr.tiling.max_log2_rows = tile_log2(1, cmp::min(sbh, 64));
hdr.tiling.max_log2_cols = tile_log2(1, cmp::min(sbw, RAV1D_MAX_TILE_COLS as c_int));
hdr.tiling.max_log2_rows = tile_log2(1, cmp::min(sbh, RAV1D_MAX_TILE_ROWS as c_int));
let min_log2_tiles = cmp::max(
tile_log2(max_tile_area_sb, sbw * sbh),
hdr.tiling.min_log2_cols,
Expand Down Expand Up @@ -894,7 +896,7 @@ unsafe fn parse_frame_hdr(c: &mut Rav1dContext, gb: &mut GetBits) -> Rav1dResult
let mut widest_tile = 0;
let mut max_tile_area_sb = sbw * sbh;
let mut sbx = 0;
while sbx < sbw && hdr.tiling.cols < 64 {
while sbx < sbw && hdr.tiling.cols < RAV1D_MAX_TILE_COLS as c_int {
let tile_width_sb = cmp::min(sbw - sbx, max_tile_width_sb);
let tile_w = if tile_width_sb > 1 {
1 + rav1d_get_uniform(gb, tile_width_sb as c_uint) as c_int
Expand All @@ -914,7 +916,7 @@ unsafe fn parse_frame_hdr(c: &mut Rav1dContext, gb: &mut GetBits) -> Rav1dResult

hdr.tiling.rows = 0;
let mut sby = 0;
while sby < sbh && hdr.tiling.rows < 64 {
while sby < sbh && hdr.tiling.rows < RAV1D_MAX_TILE_ROWS as c_int {
let tile_height_sb = cmp::min(sbh - sby, max_tile_height_sb);
let tile_h = if tile_height_sb > 1 {
1 + rav1d_get_uniform(gb, tile_height_sb as c_uint) as c_int
Expand Down

0 comments on commit f39ce95

Please sign in to comment.