mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
media: vicodec: add V4L2_CID_MIN_BUFFERS_FOR_* controls
Stateful codecs must support the V4L2_CID_MIN_BUFFERS_FOR_OUTPUT and V4L2_CID_MIN_BUFFERS_FOR_CAPTURE controls. The vicodec driver was missing support for these controls. Add them. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
This commit is contained in:
parent
ed61c59139
commit
0503440f84
@ -43,6 +43,8 @@ MODULE_PARM_DESC(debug, " activates debug info");
|
||||
#define MIN_WIDTH 640U
|
||||
#define MAX_HEIGHT 2160U
|
||||
#define MIN_HEIGHT 360U
|
||||
/* Recommended number of buffers for the stateful codecs */
|
||||
#define VICODEC_REC_BUFS 2
|
||||
|
||||
#define dprintk(dev, fmt, arg...) \
|
||||
v4l2_dbg(1, debug, &dev->v4l2_dev, "%s: " fmt, __func__, ## arg)
|
||||
@ -1705,12 +1707,14 @@ static int queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
src_vq->ops = &vicodec_qops;
|
||||
src_vq->mem_ops = &vb2_vmalloc_memops;
|
||||
src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
|
||||
if (ctx->is_enc)
|
||||
if (ctx->is_enc) {
|
||||
src_vq->lock = &ctx->dev->stateful_enc.mutex;
|
||||
else if (ctx->is_stateless)
|
||||
src_vq->min_reqbufs_allocation = VICODEC_REC_BUFS;
|
||||
} else if (ctx->is_stateless) {
|
||||
src_vq->lock = &ctx->dev->stateless_dec.mutex;
|
||||
else
|
||||
} else {
|
||||
src_vq->lock = &ctx->dev->stateful_dec.mutex;
|
||||
}
|
||||
src_vq->supports_requests = ctx->is_stateless;
|
||||
src_vq->requires_requests = ctx->is_stateless;
|
||||
ret = vb2_queue_init(src_vq);
|
||||
@ -1728,6 +1732,8 @@ static int queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
dst_vq->mem_ops = &vb2_vmalloc_memops;
|
||||
dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
|
||||
dst_vq->lock = src_vq->lock;
|
||||
if (!ctx->is_stateless && !ctx->is_enc)
|
||||
dst_vq->min_reqbufs_allocation = VICODEC_REC_BUFS;
|
||||
|
||||
return vb2_queue_init(dst_vq);
|
||||
}
|
||||
@ -1852,11 +1858,16 @@ static int vicodec_open(struct file *file)
|
||||
1, 31, 1, 20);
|
||||
v4l2_ctrl_new_std(hdl, &vicodec_ctrl_ops, V4L2_CID_FWHT_P_FRAME_QP,
|
||||
1, 31, 1, 20);
|
||||
if (ctx->is_enc)
|
||||
v4l2_ctrl_new_std(hdl, &vicodec_ctrl_ops,
|
||||
V4L2_CID_MIN_BUFFERS_FOR_OUTPUT, 1, 1, 1, 1);
|
||||
|
||||
if (ctx->is_stateless)
|
||||
v4l2_ctrl_new_custom(hdl, &vicodec_ctrl_stateless_state, NULL);
|
||||
else
|
||||
v4l2_ctrl_new_std(hdl, &vicodec_ctrl_ops, ctx->is_enc ?
|
||||
V4L2_CID_MIN_BUFFERS_FOR_OUTPUT :
|
||||
V4L2_CID_MIN_BUFFERS_FOR_CAPTURE,
|
||||
VICODEC_REC_BUFS, VICODEC_REC_BUFS, 1,
|
||||
VICODEC_REC_BUFS);
|
||||
|
||||
if (hdl->error) {
|
||||
rc = hdl->error;
|
||||
v4l2_ctrl_handler_free(hdl);
|
||||
|
Loading…
Reference in New Issue
Block a user