media: rkvdec: Add the VP9 backend
The Rockchip VDEC supports VP9 profile 0 up to 4096x2304@30fps. Add a backend for this new format. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Co-developed-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
3e3b1fb0e5
commit
f25709c4ff
|
@ -9,6 +9,7 @@ config VIDEO_ROCKCHIP_VDEC
|
|||
select VIDEOBUF2_VMALLOC
|
||||
select V4L2_MEM2MEM_DEV
|
||||
select V4L2_H264
|
||||
select V4L2_VP9
|
||||
help
|
||||
Support for the Rockchip Video Decoder IP present on Rockchip SoCs,
|
||||
which accelerates video decoding.
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
obj-$(CONFIG_VIDEO_ROCKCHIP_VDEC) += rockchip-vdec.o
|
||||
|
||||
rockchip-vdec-y += rkvdec.o rkvdec-h264.o
|
||||
rockchip-vdec-y += rkvdec.o rkvdec-h264.o rkvdec-vp9.o
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -99,10 +99,30 @@ static const struct rkvdec_ctrls rkvdec_h264_ctrls = {
|
|||
.num_ctrls = ARRAY_SIZE(rkvdec_h264_ctrl_descs),
|
||||
};
|
||||
|
||||
static const u32 rkvdec_h264_decoded_fmts[] = {
|
||||
static const u32 rkvdec_h264_vp9_decoded_fmts[] = {
|
||||
V4L2_PIX_FMT_NV12,
|
||||
};
|
||||
|
||||
static const struct rkvdec_ctrl_desc rkvdec_vp9_ctrl_descs[] = {
|
||||
{
|
||||
.cfg.id = V4L2_CID_STATELESS_VP9_FRAME,
|
||||
},
|
||||
{
|
||||
.cfg.id = V4L2_CID_STATELESS_VP9_COMPRESSED_HDR,
|
||||
},
|
||||
{
|
||||
.cfg.id = V4L2_CID_MPEG_VIDEO_VP9_PROFILE,
|
||||
.cfg.min = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
|
||||
.cfg.max = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
|
||||
.cfg.def = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct rkvdec_ctrls rkvdec_vp9_ctrls = {
|
||||
.ctrls = rkvdec_vp9_ctrl_descs,
|
||||
.num_ctrls = ARRAY_SIZE(rkvdec_vp9_ctrl_descs),
|
||||
};
|
||||
|
||||
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||
{
|
||||
.fourcc = V4L2_PIX_FMT_H264_SLICE,
|
||||
|
@ -116,8 +136,23 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
|||
},
|
||||
.ctrls = &rkvdec_h264_ctrls,
|
||||
.ops = &rkvdec_h264_fmt_ops,
|
||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
||||
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_vp9_decoded_fmts),
|
||||
.decoded_fmts = rkvdec_h264_vp9_decoded_fmts,
|
||||
},
|
||||
{
|
||||
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
||||
.frmsize = {
|
||||
.min_width = 64,
|
||||
.max_width = 4096,
|
||||
.step_width = 64,
|
||||
.min_height = 64,
|
||||
.max_height = 2304,
|
||||
.step_height = 64,
|
||||
},
|
||||
.ctrls = &rkvdec_vp9_ctrls,
|
||||
.ops = &rkvdec_vp9_fmt_ops,
|
||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_vp9_decoded_fmts),
|
||||
.decoded_fmts = rkvdec_h264_vp9_decoded_fmts,
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -42,14 +42,18 @@ struct rkvdec_run {
|
|||
|
||||
struct rkvdec_vp9_decoded_buffer_info {
|
||||
/* Info needed when the decoded frame serves as a reference frame. */
|
||||
u16 width;
|
||||
u16 height;
|
||||
u32 bit_depth : 4;
|
||||
unsigned short width;
|
||||
unsigned short height;
|
||||
unsigned int bit_depth : 4;
|
||||
};
|
||||
|
||||
struct rkvdec_decoded_buffer {
|
||||
/* Must be the first field in this struct. */
|
||||
struct v4l2_m2m_buffer base;
|
||||
|
||||
union {
|
||||
struct rkvdec_vp9_decoded_buffer_info vp9;
|
||||
};
|
||||
};
|
||||
|
||||
static inline struct rkvdec_decoded_buffer *
|
||||
|
@ -116,4 +120,6 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
|||
void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||
|
||||
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
||||
extern const struct rkvdec_coded_fmt_ops rkvdec_vp9_fmt_ops;
|
||||
|
||||
#endif /* RKVDEC_H_ */
|
||||
|
|
Loading…
Reference in New Issue