Skip to content

Commit

Permalink
struct Rav1dInloopFilterType: Turn into bitflags! (#755)
Browse files Browse the repository at this point in the history
  • Loading branch information
kkysen authored Feb 22, 2024
2 parents 48b5909 + 3f401e3 commit 7deb552
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 32 deletions.
48 changes: 33 additions & 15 deletions include/dav1d/dav1d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,37 @@ pub type Dav1dContext = Rav1dContext;
pub type Dav1dRef = Rav1dRef;

pub type Dav1dInloopFilterType = c_uint;
pub const DAV1D_INLOOPFILTER_ALL: Dav1dInloopFilterType = 7;
pub const DAV1D_INLOOPFILTER_RESTORATION: Dav1dInloopFilterType = 4;
pub const DAV1D_INLOOPFILTER_CDEF: Dav1dInloopFilterType = 2;
pub const DAV1D_INLOOPFILTER_DEBLOCK: Dav1dInloopFilterType = 1;
pub const DAV1D_INLOOPFILTER_NONE: Dav1dInloopFilterType = 0;

pub(crate) type Rav1dInloopFilterType = c_uint;
pub(crate) const RAV1D_INLOOPFILTER_ALL: Rav1dInloopFilterType = DAV1D_INLOOPFILTER_ALL;
pub(crate) const RAV1D_INLOOPFILTER_RESTORATION: Rav1dInloopFilterType =
DAV1D_INLOOPFILTER_RESTORATION;
pub(crate) const RAV1D_INLOOPFILTER_CDEF: Rav1dInloopFilterType = DAV1D_INLOOPFILTER_CDEF;
pub(crate) const RAV1D_INLOOPFILTER_DEBLOCK: Rav1dInloopFilterType = DAV1D_INLOOPFILTER_DEBLOCK;
pub(crate) const _RAV1D_INLOOPFILTER_NONE: Rav1dInloopFilterType = DAV1D_INLOOPFILTER_NONE;
pub const DAV1D_INLOOPFILTER_ALL: Dav1dInloopFilterType =
Rav1dInloopFilterType::all().bits() as Dav1dInloopFilterType;
pub const DAV1D_INLOOPFILTER_NONE: Dav1dInloopFilterType =
Rav1dInloopFilterType::empty().bits() as Dav1dInloopFilterType;
pub const DAV1D_INLOOPFILTER_DEBLOCK: Dav1dInloopFilterType =
Rav1dInloopFilterType::DEBLOCK.bits() as Dav1dInloopFilterType;
pub const DAV1D_INLOOPFILTER_CDEF: Dav1dInloopFilterType =
Rav1dInloopFilterType::CDEF.bits() as Dav1dInloopFilterType;
pub const DAV1D_INLOOPFILTER_RESTORATION: Dav1dInloopFilterType =
Rav1dInloopFilterType::RESTORATION.bits() as Dav1dInloopFilterType;

bitflags! {
#[derive(Clone, Copy, PartialEq, Eq, Hash, Default)]
pub(crate) struct Rav1dInloopFilterType: u8 {
const DEBLOCK = 1 << 1;
const CDEF = 1 << 2;
const RESTORATION = 1 << 3;
}
}

impl From<Rav1dInloopFilterType> for Dav1dInloopFilterType {
fn from(value: Rav1dInloopFilterType) -> Self {
value.bits().into()
}
}

impl From<Dav1dInloopFilterType> for Rav1dInloopFilterType {
fn from(value: Dav1dInloopFilterType) -> Self {
Self::from_bits_retain(value as u8)
}
}

pub type Dav1dDecodeFrameType = c_uint;
pub const DAV1D_DECODEFRAMETYPE_KEY: Dav1dDecodeFrameType = 3;
Expand Down Expand Up @@ -142,7 +160,7 @@ impl TryFrom<Dav1dSettings> for Rav1dSettings {
logger: logger.into(),
strict_std_compliance: strict_std_compliance != 0,
output_invisible_frames: output_invisible_frames != 0,
inloop_filters,
inloop_filters: inloop_filters.into(),
decode_frame_type,
})
}
Expand Down Expand Up @@ -175,7 +193,7 @@ impl From<Rav1dSettings> for Dav1dSettings {
logger: logger.into(),
strict_std_compliance: strict_std_compliance as c_int,
output_invisible_frames: output_invisible_frames as c_int,
inloop_filters,
inloop_filters: inloop_filters.into(),
decode_frame_type,
reserved: Default::default(),
}
Expand Down
4 changes: 2 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ use crate::include::dav1d::data::Rav1dData;
use crate::include::dav1d::dav1d::Dav1dContext;
use crate::include::dav1d::dav1d::Dav1dEventFlags;
use crate::include::dav1d::dav1d::Dav1dSettings;
use crate::include::dav1d::dav1d::Rav1dInloopFilterType;
use crate::include::dav1d::dav1d::Rav1dSettings;
use crate::include::dav1d::dav1d::RAV1D_DECODEFRAMETYPE_ALL;
use crate::include::dav1d::dav1d::RAV1D_DECODEFRAMETYPE_KEY;
use crate::include::dav1d::dav1d::RAV1D_INLOOPFILTER_ALL;
use crate::include::dav1d::headers::DRav1d;
use crate::include::dav1d::headers::Dav1dSequenceHeader;
use crate::include::dav1d::headers::Rav1dFilmGrainData;
Expand Down Expand Up @@ -133,7 +133,7 @@ impl Default for Rav1dSettings {
logger: Default::default(),
strict_std_compliance: false,
output_invisible_frames: false,
inloop_filters: RAV1D_INLOOPFILTER_ALL,
inloop_filters: Rav1dInloopFilterType::all(),
decode_frame_type: RAV1D_DECODEFRAMETYPE_ALL,
}
}
Expand Down
28 changes: 13 additions & 15 deletions src/recon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@ use crate::include::common::dump::coef_dump;
use crate::include::common::dump::hex_dump;
use crate::include::common::intops::apply_sign64;
use crate::include::common::intops::iclip;
use crate::include::dav1d::dav1d::RAV1D_INLOOPFILTER_CDEF;
use crate::include::dav1d::dav1d::RAV1D_INLOOPFILTER_DEBLOCK;
use crate::include::dav1d::dav1d::RAV1D_INLOOPFILTER_RESTORATION;
use crate::include::dav1d::dav1d::Rav1dInloopFilterType;
use crate::include::dav1d::headers::Rav1dPixelLayout;
use crate::include::dav1d::headers::Rav1dWarpedMotionParams;
use crate::include::dav1d::headers::RAV1D_WM_TYPE_TRANSLATION;
Expand Down Expand Up @@ -4523,7 +4521,7 @@ pub(crate) unsafe fn rav1d_filter_sbrow_deblock_cols<BD: BitDepth>(
sby: c_int,
) {
let frame_hdr = &***f.frame_hdr.as_ref().unwrap();
if c.inloop_filters as c_uint & RAV1D_INLOOPFILTER_DEBLOCK as c_int as c_uint == 0
if !c.inloop_filters.contains(Rav1dInloopFilterType::DEBLOCK)
|| frame_hdr.loopfilter.level_y[0] == 0 && frame_hdr.loopfilter.level_y[1] == 0
{
return;
Expand Down Expand Up @@ -4574,7 +4572,7 @@ pub(crate) unsafe fn rav1d_filter_sbrow_deblock_rows<BD: BitDepth>(
let mask: *mut Av1Filter =
(f.lf.mask).offset(((sby >> (seq_hdr.sb128 == 0) as c_int) * f.sb128w) as isize);
let frame_hdr = &***f.frame_hdr.as_ref().unwrap();
if c.inloop_filters as c_uint & RAV1D_INLOOPFILTER_DEBLOCK as c_int as c_uint != 0
if c.inloop_filters.contains(Rav1dInloopFilterType::DEBLOCK)
&& (frame_hdr.loopfilter.level_y[0] != 0 || frame_hdr.loopfilter.level_y[1] != 0)
{
rav1d_loopfilter_sbrow_rows::<BD>(f, &p, mask, sby);
Expand All @@ -4590,7 +4588,7 @@ pub(crate) unsafe fn rav1d_filter_sbrow_cdef<BD: BitDepth>(
tc: &mut Rav1dTaskContext,
sby: c_int,
) {
if c.inloop_filters as c_uint & RAV1D_INLOOPFILTER_CDEF as c_int as c_uint == 0 {
if !c.inloop_filters.contains(Rav1dInloopFilterType::CDEF) {
return;
}
let sbsz = f.sb_step;
Expand Down Expand Up @@ -4642,14 +4640,11 @@ pub(crate) unsafe fn rav1d_filter_sbrow_resize<BD: BitDepth>(
let ss_ver = (f.cur.p.layout as c_uint == Rav1dPixelLayout::I420 as c_int as c_uint) as c_int;
let p: [*const BD::Pixel; 3] = [
(f.lf.p[0] as *mut BD::Pixel)
.offset((y as isize * BD::pxstride(f.cur.stride[0] as usize) as isize) as isize)
as *const BD::Pixel,
(f.lf.p[1] as *mut BD::Pixel).offset(
(y as isize * BD::pxstride(f.cur.stride[1] as usize) as isize >> ss_ver) as isize,
) as *const BD::Pixel,
(f.lf.p[2] as *mut BD::Pixel).offset(
(y as isize * BD::pxstride(f.cur.stride[1] as usize) as isize >> ss_ver) as isize,
) as *const BD::Pixel,
.offset(y as isize * BD::pxstride(f.cur.stride[0] as usize) as isize),
(f.lf.p[1] as *mut BD::Pixel)
.offset(y as isize * BD::pxstride(f.cur.stride[1] as usize) as isize >> ss_ver),
(f.lf.p[2] as *mut BD::Pixel)
.offset(y as isize * BD::pxstride(f.cur.stride[1] as usize) as isize >> ss_ver),
];
let sr_p: [*mut BD::Pixel; 3] = [
(f.lf.sr_p[0] as *mut BD::Pixel)
Expand Down Expand Up @@ -4704,7 +4699,10 @@ pub(crate) unsafe fn rav1d_filter_sbrow_lr<BD: BitDepth>(
_t: &mut Rav1dTaskContext,
sby: c_int,
) {
if c.inloop_filters as c_uint & RAV1D_INLOOPFILTER_RESTORATION as c_int as c_uint == 0 {
if !c
.inloop_filters
.contains(Rav1dInloopFilterType::RESTORATION)
{
return;
}
let y = sby * f.sb_step * 4;
Expand Down

0 comments on commit 7deb552

Please sign in to comment.