diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2010-03-15 19:26:04 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-03-22 03:53:31 -0400 |
commit | 333c8b97785d5afd5085ba3720b4d259623290f6 (patch) | |
tree | 3cba92af1765957c68f74042dea1873481554ede /include/media | |
parent | d3a7ed99759b18e4fd19b8ddd226f8085b8bd975 (diff) |
[media] v4l: v4l2_subdev userspace format API
Add a userspace API to get, set and enumerate the media format on a
subdev pad.
The format at the output of a subdev usually depends on the format at
its input(s). The try format operation is thus not suitable for probing
format at individual pads, as it can't modify the device state and thus
can't remember the format tried at the input to compute the output
format.
To fix the problem, pass an extra argument to the get/set format
operations to select the 'try' or 'active' format.
The try format is used when probing the subdev. Setting the try format
must not change the device configuration but can store data for later
reuse. Data storage is provided at the file-handle level so applications
probing the subdev concurently won't interfere with each other.
The active format is used when configuring the subdev. It's identical to
the format handled by the usual get/set operations.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Stanimir Varbanov <svarbanov@mm-sol.com>
Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
Acked-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include/media')
-rw-r--r-- | include/media/v4l2-subdev.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index d4d3653426a9..4215650151be 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #ifndef _V4L2_SUBDEV_H | 21 | #ifndef _V4L2_SUBDEV_H |
22 | #define _V4L2_SUBDEV_H | 22 | #define _V4L2_SUBDEV_H |
23 | 23 | ||
24 | #include <linux/v4l2-subdev.h> | ||
24 | #include <media/media-entity.h> | 25 | #include <media/media-entity.h> |
25 | #include <media/v4l2-common.h> | 26 | #include <media/v4l2-common.h> |
26 | #include <media/v4l2-dev.h> | 27 | #include <media/v4l2-dev.h> |
@@ -414,6 +415,15 @@ struct v4l2_subdev_ir_ops { | |||
414 | }; | 415 | }; |
415 | 416 | ||
416 | struct v4l2_subdev_pad_ops { | 417 | struct v4l2_subdev_pad_ops { |
418 | int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | ||
419 | struct v4l2_subdev_mbus_code_enum *code); | ||
420 | int (*enum_frame_size)(struct v4l2_subdev *sd, | ||
421 | struct v4l2_subdev_fh *fh, | ||
422 | struct v4l2_subdev_frame_size_enum *fse); | ||
423 | int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | ||
424 | struct v4l2_subdev_format *format); | ||
425 | int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | ||
426 | struct v4l2_subdev_format *format); | ||
417 | }; | 427 | }; |
418 | 428 | ||
419 | struct v4l2_subdev_ops { | 429 | struct v4l2_subdev_ops { |