V4L2 AV1 cdef params
Fill out v4l2_av1_cdef for V4L2_CID_STATELESS_AV1_FRAME
Bug: 399644791
Test: none
Change-Id: I851d9fe89b735a5d1da44b07acb06db5c314e3f4
diff --git a/src/decoder/stateless/av1/v4l2.rs b/src/decoder/stateless/av1/v4l2.rs
index 0f5d631..99519f8 100644
--- a/src/decoder/stateless/av1/v4l2.rs
+++ b/src/decoder/stateless/av1/v4l2.rs
@@ -109,7 +109,8 @@
frame_params
.set_frame_params(&hdr)
.set_global_motion_params(&hdr.global_motion_params)
- .set_loop_restoration_params(&hdr.loop_restoration_params);
+ .set_loop_restoration_params(&hdr.loop_restoration_params)
+ .set_cdef_params(&hdr.cdef_params);
let mut frame_params_ctrl = Av1V4l2FrameCtrl::from(&frame_params);
let which = request.which();
diff --git a/src/device/v4l2/stateless/controls/av1.rs b/src/device/v4l2/stateless/controls/av1.rs
index 286ebd2..a97c5c4 100644
--- a/src/device/v4l2/stateless/controls/av1.rs
+++ b/src/device/v4l2/stateless/controls/av1.rs
@@ -11,6 +11,7 @@
use v4l2r::bindings::v4l2_ext_control;
use v4l2r::bindings::v4l2_ext_control__bindgen_ty_1;
use v4l2r::bindings::V4L2_AV1_AR_COEFFS_SIZE;
+use v4l2r::bindings::V4L2_AV1_CDEF_MAX;
use v4l2r::bindings::V4L2_AV1_FILM_GRAIN_FLAG_APPLY_GRAIN;
use v4l2r::bindings::V4L2_AV1_FILM_GRAIN_FLAG_CHROMA_SCALING_FROM_LUMA;
use v4l2r::bindings::V4L2_AV1_FILM_GRAIN_FLAG_CLIP_TO_RESTRICTED_RANGE;
@@ -51,6 +52,7 @@
use v4l2r::bindings::V4L2_CID_STATELESS_AV1_FRAME;
use v4l2r::controls::AsV4l2ControlSlice;
+use crate::codec::av1::parser::CdefParams;
use crate::codec::av1::parser::FrameHeaderObu;
use crate::codec::av1::parser::GlobalMotionParams;
use crate::codec::av1::parser::LoopRestorationParams;
@@ -149,6 +151,18 @@
Default::default()
}
+ pub fn set_cdef_params(&mut self, cdef: &CdefParams) -> &mut Self {
+ self.handle.cdef.damping_minus_3 = cdef.cdef_damping as u8;
+ self.handle.cdef.bits = cdef.cdef_bits as u8;
+ for i in 0..V4L2_AV1_CDEF_MAX as usize {
+ self.handle.cdef.y_pri_strength[i] = cdef.cdef_y_pri_strength[i] as u8;
+ self.handle.cdef.y_sec_strength[i] = cdef.cdef_y_sec_strength[i] as u8;
+ self.handle.cdef.uv_pri_strength[i] = cdef.cdef_uv_pri_strength[i] as u8;
+ self.handle.cdef.uv_sec_strength[i] = cdef.cdef_uv_sec_strength[i] as u8;
+ }
+ self
+ }
+
pub fn set_loop_restoration_params(
&mut self,
loop_restoration: &LoopRestorationParams,