On Mon, Apr 7, 2014 at 10:11 PM, Hans Verkuil <hverkuil@xxxxxxxxx> wrote: > From: Hans Verkuil <hans.verkuil@xxxxxxxxx> > > This is not allowed by the spec and does in fact not make any sense. > Return -EINVAL if this is the case. > > Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> Acked-by: Pawel Osciak <pawel@xxxxxxxxxx> > --- > drivers/media/v4l2-core/videobuf2-core.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c > index b7de6be..c662ad9 100644 > --- a/drivers/media/v4l2-core/videobuf2-core.c > +++ b/drivers/media/v4l2-core/videobuf2-core.c > @@ -1511,6 +1511,19 @@ static int __buf_prepare(struct vb2_buffer *vb, const struct v4l2_buffer *b) > dprintk(1, "plane parameters verification failed: %d\n", ret); > return ret; > } > + if (b->field == V4L2_FIELD_ALTERNATE && V4L2_TYPE_IS_OUTPUT(q->type)) { > + /* > + * If the format's field is ALTERNATE, then the buffer's field > + * should be either TOP or BOTTOM, not ALTERNATE since that > + * makes no sense. The driver has to know whether the > + * buffer represents a top or a bottom field in order to > + * program any DMA correctly. Using ALTERNATE is wrong, since > + * that just says that it is either a top or a bottom field, > + * but not which of the two it is. > + */ > + dprintk(1, "the field is incorrectly set to ALTERNATE for an output buffer\n"); > + return -EINVAL; > + } > > vb->state = VB2_BUF_STATE_PREPARING; > vb->v4l2_buf.timestamp.tv_sec = 0; > -- > 1.9.1 > -- Best regards, Pawel Osciak -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html