media: vicodec: Introducing stateless fwht defs and structs
Add structs and definitions needed to implement stateless decoder for fwht and add I/P-frames QP controls to the public api. Signed-off-by: Dafna Hirschfeld <dafna3@gmail.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
ee3963c492
commit
2495f39ce1
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
@ -1524,10 +1528,6 @@ static int queue_init(void *priv, struct vb2_queue *src_vq,
|
|||
return vb2_queue_init(dst_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)
|
||||
|
||||
static int vicodec_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct vicodec_ctx *ctx = container_of(ctrl->handler,
|
||||
|
@ -1537,10 +1537,10 @@ static int vicodec_s_ctrl(struct v4l2_ctrl *ctrl)
|
|||
case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
|
||||
ctx->state.gop_size = ctrl->val;
|
||||
return 0;
|
||||
case VICODEC_CID_I_FRAME_QP:
|
||||
case V4L2_CID_FWHT_I_FRAME_QP:
|
||||
ctx->state.i_frame_qp = ctrl->val;
|
||||
return 0;
|
||||
case VICODEC_CID_P_FRAME_QP:
|
||||
case V4L2_CID_FWHT_P_FRAME_QP:
|
||||
ctx->state.p_frame_qp = ctrl->val;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1551,26 +1551,9 @@ static const struct v4l2_ctrl_ops vicodec_ctrl_ops = {
|
|||
.s_ctrl = vicodec_s_ctrl,
|
||||
};
|
||||
|
||||
static const struct v4l2_ctrl_config vicodec_ctrl_i_frame = {
|
||||
.ops = &vicodec_ctrl_ops,
|
||||
.id = VICODEC_CID_I_FRAME_QP,
|
||||
.name = "FWHT I-Frame QP Value",
|
||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.min = 1,
|
||||
.max = 31,
|
||||
.def = 20,
|
||||
.step = 1,
|
||||
};
|
||||
|
||||
static const struct v4l2_ctrl_config vicodec_ctrl_p_frame = {
|
||||
.ops = &vicodec_ctrl_ops,
|
||||
.id = VICODEC_CID_P_FRAME_QP,
|
||||
.name = "FWHT P-Frame QP Value",
|
||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.min = 1,
|
||||
.max = 31,
|
||||
.def = 20,
|
||||
.step = 1,
|
||||
static const struct v4l2_ctrl_config vicodec_ctrl_stateless_state = {
|
||||
.id = V4L2_CID_MPEG_VIDEO_FWHT_PARAMS,
|
||||
.elem_size = sizeof(struct v4l2_ctrl_fwht_params),
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -1603,8 +1586,10 @@ static int vicodec_open(struct file *file)
|
|||
v4l2_ctrl_handler_init(hdl, 4);
|
||||
v4l2_ctrl_new_std(hdl, &vicodec_ctrl_ops, V4L2_CID_MPEG_VIDEO_GOP_SIZE,
|
||||
1, 16, 1, 10);
|
||||
v4l2_ctrl_new_custom(hdl, &vicodec_ctrl_i_frame, NULL);
|
||||
v4l2_ctrl_new_custom(hdl, &vicodec_ctrl_p_frame, NULL);
|
||||
v4l2_ctrl_new_std(hdl, &vicodec_ctrl_ops, V4L2_CID_FWHT_I_FRAME_QP,
|
||||
1, 31, 1, 20);
|
||||
v4l2_ctrl_new_std(hdl, &vicodec_ctrl_ops, V4L2_CID_FWHT_P_FRAME_QP,
|
||||
1, 31, 1, 20);
|
||||
if (hdl->error) {
|
||||
rc = hdl->error;
|
||||
v4l2_ctrl_handler_free(hdl);
|
||||
|
|
|
@ -849,6 +849,9 @@ const char *v4l2_ctrl_get_name(u32 id)
|
|||
case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME: return "Force Key Frame";
|
||||
case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS: return "MPEG-2 Slice Parameters";
|
||||
case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION: return "MPEG-2 Quantization Matrices";
|
||||
case V4L2_CID_MPEG_VIDEO_FWHT_PARAMS: return "FWHT Stateless Parameters";
|
||||
case V4L2_CID_FWHT_I_FRAME_QP: return "FWHT I-Frame QP Value";
|
||||
case V4L2_CID_FWHT_P_FRAME_QP: return "FWHT P-Frame QP Value";
|
||||
|
||||
/* VPX controls */
|
||||
case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS: return "VPX Number of Partitions";
|
||||
|
@ -1303,6 +1306,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
|
|||
case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION:
|
||||
*type = V4L2_CTRL_TYPE_MPEG2_QUANTIZATION;
|
||||
break;
|
||||
case V4L2_CID_MPEG_VIDEO_FWHT_PARAMS:
|
||||
*type = V4L2_CTRL_TYPE_FWHT_PARAMS;
|
||||
break;
|
||||
default:
|
||||
*type = V4L2_CTRL_TYPE_INTEGER;
|
||||
break;
|
||||
|
@ -1669,6 +1675,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;
|
||||
}
|
||||
|
@ -2249,6 +2258,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);
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* These are the FWHT state controls for use with stateless FWHT
|
||||
* codec drivers.
|
||||
*
|
||||
* It turns out that these structs are not stable yet and will undergo
|
||||
* more changes. So keep them private until they are stable and ready to
|
||||
* become part of the official public API.
|
||||
*/
|
||||
|
||||
#ifndef _FWHT_CTRLS_H_
|
||||
#define _FWHT_CTRLS_H_
|
||||
|
||||
#define V4L2_CTRL_TYPE_FWHT_PARAMS 0x0105
|
||||
|
||||
#define V4L2_CID_MPEG_VIDEO_FWHT_PARAMS (V4L2_CID_MPEG_BASE + 292)
|
||||
|
||||
struct v4l2_ctrl_fwht_params {
|
||||
__u64 backward_ref_ts;
|
||||
__u32 version;
|
||||
__u32 width;
|
||||
__u32 height;
|
||||
__u32 flags;
|
||||
__u32 colorspace;
|
||||
__u32 xfer_func;
|
||||
__u32 ycbcr_enc;
|
||||
__u32 quantization;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -23,10 +23,11 @@
|
|||
#include <media/media-request.h>
|
||||
|
||||
/*
|
||||
* Include the mpeg2 stateless codec compound control definitions.
|
||||
* Include the mpeg2 and fwht stateless codec compound control definitions.
|
||||
* This will move to the public headers once this API is fully stable.
|
||||
*/
|
||||
#include <media/mpeg2-ctrls.h>
|
||||
#include <media/fwht-ctrls.h>
|
||||
|
||||
/* forward references */
|
||||
struct file;
|
||||
|
@ -49,6 +50,7 @@ struct poll_table_struct;
|
|||
* @p_char: Pointer to a string.
|
||||
* @p_mpeg2_slice_params: Pointer to a MPEG2 slice parameters structure.
|
||||
* @p_mpeg2_quantization: Pointer to a MPEG2 quantization data structure.
|
||||
* @p_fwht_params: Pointer to a FWHT stateless parameters structure.
|
||||
* @p: Pointer to a compound value.
|
||||
*/
|
||||
union v4l2_ctrl_ptr {
|
||||
|
@ -60,6 +62,7 @@ union v4l2_ctrl_ptr {
|
|||
char *p_char;
|
||||
struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
|
||||
struct v4l2_ctrl_mpeg2_quantization *p_mpeg2_quantization;
|
||||
struct v4l2_ctrl_fwht_params *p_fwht_params;
|
||||
void *p;
|
||||
};
|
||||
|
||||
|
|
|
@ -404,6 +404,10 @@ enum v4l2_mpeg_video_multi_slice_mode {
|
|||
#define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE (V4L2_CID_MPEG_BASE+228)
|
||||
#define V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME (V4L2_CID_MPEG_BASE+229)
|
||||
|
||||
/* CIDs for the FWHT codec as used by the vicodec driver. */
|
||||
#define V4L2_CID_FWHT_I_FRAME_QP (V4L2_CID_MPEG_BASE + 290)
|
||||
#define V4L2_CID_FWHT_P_FRAME_QP (V4L2_CID_MPEG_BASE + 291)
|
||||
|
||||
#define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP (V4L2_CID_MPEG_BASE+300)
|
||||
#define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP (V4L2_CID_MPEG_BASE+301)
|
||||
#define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP (V4L2_CID_MPEG_BASE+302)
|
||||
|
|
|
@ -669,6 +669,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 */
|
||||
|
|
Loading…
Reference in New Issue