Laurent,
Could you explain the probe and active usage using an example such as
below?
Link1 Link2
input sensor -> ccdc -> video node.
Assume Link2 we can have either format 1 or format 2 for capture.
Thanks.
Murali Karicheri
Software Design Engineer
Texas Instruments Inc.
Germantown, MD 20874
email: [email protected]
>-----Original Message-----
>From: [email protected] [mailto:linux-media-
>[email protected]] On Behalf Of Laurent Pinchart
>Sent: Wednesday, July 21, 2010 10:42 AM
>To: [email protected]
>Cc: [email protected]
>Subject: [SAMPLE v2 04/12] v4l-subdev: Add pads operations
>
>Add a v4l2_subdev_pad_ops structure for the operations that need to be
>performed at the pad level such as format-related operations.
>
>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 probed 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 'probe' or 'active' format.
>
>The probe format is used when probing the subdev. Setting the probe
>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.
>
>Pad format-related operations use v4l2_mbus_framefmt instead of
>v4l2_format.
>
>Signed-off-by: Laurent Pinchart <[email protected]>
>---
> include/media/v4l2-subdev.h | 21 +++++++++++++++++++++
> 1 files changed, 21 insertions(+), 0 deletions(-)
>
>diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
>index 01b4135..684ab60 100644
>--- a/include/media/v4l2-subdev.h
>+++ b/include/media/v4l2-subdev.h
>@@ -41,6 +41,7 @@ struct v4l2_device;
> struct v4l2_event_subscription;
> struct v4l2_fh;
> struct v4l2_subdev;
>+struct v4l2_subdev_fh;
> struct tuner_setup;
>
> /* decode_vbi_line */
>@@ -398,6 +399,25 @@ struct v4l2_subdev_ir_ops {
> struct v4l2_subdev_ir_parameters *params);
> };
>
>+enum v4l2_subdev_format {
>+ V4L2_SUBDEV_FORMAT_PROBE = 0,
>+ V4L2_SUBDEV_FORMAT_ACTIVE = 1,
>+};
>+
>+struct v4l2_subdev_pad_ops {
>+ int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh
>*fh,
>+ struct v4l2_subdev_pad_mbus_code_enum *code);
>+ int (*enum_frame_size)(struct v4l2_subdev *sd,
>+ struct v4l2_subdev_fh *fh,
>+ struct v4l2_subdev_frame_size_enum *fse);
>+ int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
>+ unsigned int pad, struct v4l2_mbus_framefmt *fmt,
>+ enum v4l2_subdev_format which);
>+ int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
>+ unsigned int pad, struct v4l2_mbus_framefmt *fmt,
>+ enum v4l2_subdev_format which);
>+};
>+
> struct v4l2_subdev_ops {
> const struct v4l2_subdev_core_ops *core;
> const struct v4l2_subdev_tuner_ops *tuner;
>@@ -406,6 +426,7 @@ struct v4l2_subdev_ops {
> const struct v4l2_subdev_vbi_ops *vbi;
> const struct v4l2_subdev_ir_ops *ir;
> const struct v4l2_subdev_sensor_ops *sensor;
>+ const struct v4l2_subdev_pad_ops *pad;
> };
>
> #define V4L2_SUBDEV_NAME_SIZE 32
>--
>1.7.1
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-media" in
>the body of a message to [email protected]
>More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html