[media] coda: v4l2-compliance fix: implement try_decoder_cmd
Implement try_decoder_cmd to let userspace determine available commands and flags. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Kamil Debski <k.debski@samsung.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
5762559358
commit
64ba40accc
|
@ -835,23 +835,34 @@ static int coda_streamoff(struct file *file, void *priv,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int coda_try_decoder_cmd(struct file *file, void *fh,
|
||||||
|
struct v4l2_decoder_cmd *dc)
|
||||||
|
{
|
||||||
|
if (dc->cmd != V4L2_DEC_CMD_STOP)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (dc->flags & V4L2_DEC_CMD_STOP_TO_BLACK)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (!(dc->flags & V4L2_DEC_CMD_STOP_IMMEDIATELY) && (dc->stop.pts != 0))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int coda_decoder_cmd(struct file *file, void *fh,
|
static int coda_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);
|
struct coda_ctx *ctx = fh_to_ctx(fh);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (dc->cmd != V4L2_DEC_CMD_STOP)
|
ret = coda_try_decoder_cmd(file, fh, dc);
|
||||||
return -EINVAL;
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
if ((dc->flags & V4L2_DEC_CMD_STOP_TO_BLACK) ||
|
|
||||||
(dc->flags & V4L2_DEC_CMD_STOP_IMMEDIATELY))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (dc->stop.pts != 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
|
/* 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 = {
|
||||||
.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,
|
||||||
|
|
Loading…
Reference in New Issue