On 2/15/19 2:05 PM, Dafna Hirschfeld wrote: > Add structs and definitions needed to implement stateless > decoder for fwht. > > Signed-off-by: Dafna Hirschfeld <dafna3@xxxxxxxxx> > --- > drivers/media/platform/vicodec/vicodec-core.c | 12 ++++++++++++ > drivers/media/v4l2-core/v4l2-ctrls.c | 6 ++++++ > include/uapi/linux/v4l2-controls.h | 13 +++++++++++++ > include/uapi/linux/videodev2.h | 1 + > 4 files changed, 32 insertions(+) > > diff --git a/drivers/media/platform/vicodec/vicodec-core.c b/drivers/media/platform/vicodec/vicodec-core.c > index 5e5bbc99a8bb..79b69faf3983 100644 > --- a/drivers/media/platform/vicodec/vicodec-core.c > +++ b/drivers/media/platform/vicodec/vicodec-core.c > @@ -64,6 +64,10 @@ static const struct v4l2_fwht_pixfmt_info pixfmt_fwht = { > V4L2_PIX_FMT_FWHT, 0, 3, 1, 1, 1, 1, 1, 0, 1 > }; > > +static const struct v4l2_fwht_pixfmt_info pixfmt_stateless_fwht = { > + V4L2_PIX_FMT_FWHT_STATELESS, 0, 3, 1, 1, 1, 1, 1, 0, 1 > +}; > + > static void vicodec_dev_release(struct device *dev) > { > } > @@ -1480,6 +1484,7 @@ static int queue_init(void *priv, struct vb2_queue *src_vq, > #define VICODEC_CID_CUSTOM_BASE (V4L2_CID_MPEG_BASE | 0xf000) > #define VICODEC_CID_I_FRAME_QP (VICODEC_CID_CUSTOM_BASE + 0) > #define VICODEC_CID_P_FRAME_QP (VICODEC_CID_CUSTOM_BASE + 1) > +#define VICODEC_CID_STATELESS_FWHT (VICODEC_CID_CUSTOM_BASE + 2) > > static int vicodec_s_ctrl(struct v4l2_ctrl *ctrl) > { > @@ -1526,6 +1531,13 @@ static const struct v4l2_ctrl_config vicodec_ctrl_p_frame = { > .step = 1, > }; > > +static const struct v4l2_ctrl_config vicodec_ctrl_stateless_state = { > + .id = VICODEC_CID_STATELESS_FWHT, > + .elem_size = sizeof(struct v4l2_ctrl_fwht_params), > + .name = "FWHT-Stateless State Params", > + .type = V4L2_CTRL_TYPE_FWHT_PARAMS, > +}; > + > /* > * File operations > */ > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c > index ff75f84011f8..5f2382f3a1a2 100644 > --- a/drivers/media/v4l2-core/v4l2-ctrls.c > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c > @@ -1671,6 +1671,9 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx, > case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION: > return 0; > > + case V4L2_CTRL_TYPE_FWHT_PARAMS: > + return 0; > + > default: > return -EINVAL; > } > @@ -2251,6 +2254,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl, > case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION: > elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantization); > break; > + case V4L2_CTRL_TYPE_FWHT_PARAMS: > + elem_size = sizeof(struct v4l2_ctrl_fwht_params); > + break; > default: > if (type < V4L2_CTRL_COMPOUND_TYPES) > elem_size = sizeof(s32); You also need to fill in the name for this control and fill in the type. Just search for V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS and everywhere there is a 'case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS' you also need to add a case for VICODEC_CID_STATELESS_FWHT. > diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h > index 06479f2fb3ae..0358a3b22391 100644 > --- a/include/uapi/linux/v4l2-controls.h > +++ b/include/uapi/linux/v4l2-controls.h > @@ -52,6 +52,7 @@ > > #include <linux/types.h> > > +#define V4L2_CTRL_TYPE_FWHT_PARAMS 0x0105 > /* Control classes */ > #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ > #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ > @@ -1096,4 +1097,16 @@ enum v4l2_detect_md_mode { > #define V4L2_CID_DETECT_MD_THRESHOLD_GRID (V4L2_CID_DETECT_CLASS_BASE + 3) > #define V4L2_CID_DETECT_MD_REGION_GRID (V4L2_CID_DETECT_CLASS_BASE + 4) > > +struct v4l2_ctrl_fwht_params { > + __u64 backward_ref_ts; > + __u32 width; > + __u32 height; > + __u32 flags; > + __u32 colorspace; > + __u32 xfer_func; > + __u32 ycbcr_enc; > + __u32 quantization; > + __u32 comp_frame_size; > +}; > + Hmm, let's do this the same as the cedrus driver does: don't add this to the public header, instead create an include/media/fwht-ctrls.h header where the fwht state control and type is defined. Eventually this will move to the public v4l2-controls.h header, but stateless codec support is still 'staging quality' and it is a little bit too soon to make it all public. > #endif > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index a78bfdc1df97..6a692114e989 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -665,6 +665,7 @@ struct v4l2_pix_format { > #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */ > #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */ > #define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */ > +#define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */ > > /* Vendor-specific formats */ > #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ > Regards, Hans