Message ID | 20220331193726.289559-18-nicolas.dufresne@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,01/23] media: doc: Document dual use of H.264 pic_num/frame_num | expand |
On Thu, Mar 31, 2022 at 03:37:19PM -0400, Nicolas Dufresne wrote: > In order to support interlaced video decoding, the driver must > allow holding the capture buffer so that the second field can > be decoded into it. > > Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> > Reviewed-by: Sebastian Fricke <sebastian.fricke@collabora.com> IMO, this patch (and the similar one for Hantro) should come after interlaced support is added. Thanks, Ezequiel > --- > drivers/staging/media/rkvdec/rkvdec.c | 4 ++++ > drivers/staging/media/rkvdec/rkvdec.h | 1 + > 2 files changed, 5 insertions(+) > > diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c > index 1b805710e195..b6376eaa92d7 100644 > --- a/drivers/staging/media/rkvdec/rkvdec.c > +++ b/drivers/staging/media/rkvdec/rkvdec.c > @@ -148,6 +148,7 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = { > .ops = &rkvdec_h264_fmt_ops, > .num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_vp9_decoded_fmts), > .decoded_fmts = rkvdec_h264_vp9_decoded_fmts, > + .subsystem_flags = VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF, > }, > { > .fourcc = V4L2_PIX_FMT_VP9_FRAME, > @@ -404,6 +405,9 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv, > cap_fmt->fmt.pix_mp.ycbcr_enc = f->fmt.pix_mp.ycbcr_enc; > cap_fmt->fmt.pix_mp.quantization = f->fmt.pix_mp.quantization; > > + /* Enable format specific queue features */ > + vq->subsystem_flags |= desc->subsystem_flags; > + > return 0; > } > > diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h > index 2f4ea1786b93..e37f1a015fa0 100644 > --- a/drivers/staging/media/rkvdec/rkvdec.h > +++ b/drivers/staging/media/rkvdec/rkvdec.h > @@ -81,6 +81,7 @@ struct rkvdec_coded_fmt_desc { > const struct rkvdec_coded_fmt_ops *ops; > unsigned int num_decoded_fmts; > const u32 *decoded_fmts; > + u32 subsystem_flags; > }; > > struct rkvdec_dev { > -- > 2.34.1 >
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c index 1b805710e195..b6376eaa92d7 100644 --- a/drivers/staging/media/rkvdec/rkvdec.c +++ b/drivers/staging/media/rkvdec/rkvdec.c @@ -148,6 +148,7 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = { .ops = &rkvdec_h264_fmt_ops, .num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_vp9_decoded_fmts), .decoded_fmts = rkvdec_h264_vp9_decoded_fmts, + .subsystem_flags = VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF, }, { .fourcc = V4L2_PIX_FMT_VP9_FRAME, @@ -404,6 +405,9 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv, cap_fmt->fmt.pix_mp.ycbcr_enc = f->fmt.pix_mp.ycbcr_enc; cap_fmt->fmt.pix_mp.quantization = f->fmt.pix_mp.quantization; + /* Enable format specific queue features */ + vq->subsystem_flags |= desc->subsystem_flags; + return 0; } diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h index 2f4ea1786b93..e37f1a015fa0 100644 --- a/drivers/staging/media/rkvdec/rkvdec.h +++ b/drivers/staging/media/rkvdec/rkvdec.h @@ -81,6 +81,7 @@ struct rkvdec_coded_fmt_desc { const struct rkvdec_coded_fmt_ops *ops; unsigned int num_decoded_fmts; const u32 *decoded_fmts; + u32 subsystem_flags; }; struct rkvdec_dev {