Commit 64ba40ac authored by Philipp Zabel's avatar Philipp Zabel Committed by Mauro Carvalho Chehab

[media] coda: v4l2-compliance fix: implement try_decoder_cmd

Implement try_decoder_cmd to let userspace determine available commands
and flags.
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarKamil Debski <k.debski@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 57625593
...@@ -835,23 +835,34 @@ static int coda_streamoff(struct file *file, void *priv, ...@@ -835,23 +835,34 @@ static int coda_streamoff(struct file *file, void *priv,
return ret; return ret;
} }
static int coda_decoder_cmd(struct file *file, void *fh, static int coda_try_decoder_cmd(struct file *file, void *fh,
struct v4l2_decoder_cmd *dc) struct v4l2_decoder_cmd *dc)
{ {
struct coda_ctx *ctx = fh_to_ctx(fh);
if (dc->cmd != V4L2_DEC_CMD_STOP) if (dc->cmd != V4L2_DEC_CMD_STOP)
return -EINVAL; return -EINVAL;
if ((dc->flags & V4L2_DEC_CMD_STOP_TO_BLACK) || if (dc->flags & V4L2_DEC_CMD_STOP_TO_BLACK)
(dc->flags & V4L2_DEC_CMD_STOP_IMMEDIATELY))
return -EINVAL; return -EINVAL;
if (dc->stop.pts != 0) if (!(dc->flags & V4L2_DEC_CMD_STOP_IMMEDIATELY) && (dc->stop.pts != 0))
return -EINVAL; return -EINVAL;
return 0;
}
static int coda_decoder_cmd(struct file *file, void *fh,
struct v4l2_decoder_cmd *dc)
{
struct coda_ctx *ctx = fh_to_ctx(fh);
int ret;
ret = coda_try_decoder_cmd(file, fh, dc);
if (ret < 0)
return ret;
/* Ignore decoder stop command silently in encoder context */
if (ctx->inst_type != CODA_INST_DECODER) if (ctx->inst_type != CODA_INST_DECODER)
return -EINVAL; return 0;
/* Set the strem-end flag on this context */ /* Set the strem-end flag on this context */
ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG; ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;
...@@ -894,6 +905,7 @@ static const struct v4l2_ioctl_ops coda_ioctl_ops = { ...@@ -894,6 +905,7 @@ static const struct v4l2_ioctl_ops coda_ioctl_ops = {
.vidioc_streamon = coda_streamon, .vidioc_streamon = coda_streamon,
.vidioc_streamoff = coda_streamoff, .vidioc_streamoff = coda_streamoff,
.vidioc_try_decoder_cmd = coda_try_decoder_cmd,
.vidioc_decoder_cmd = coda_decoder_cmd, .vidioc_decoder_cmd = coda_decoder_cmd,
.vidioc_subscribe_event = coda_subscribe_event, .vidioc_subscribe_event = coda_subscribe_event,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment