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: m-karicheri2@xxxxxx >-----Original Message----- >From: linux-media-owner@xxxxxxxxxxxxxxx [mailto:linux-media- >owner@xxxxxxxxxxxxxxx] On Behalf Of Laurent Pinchart >Sent: Wednesday, July 21, 2010 10:42 AM >To: linux-media@xxxxxxxxxxxxxxx >Cc: sakari.ailus@xxxxxxxxxxxxxxxxxxxxxxxxxx >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 <laurent.pinchart@xxxxxxxxxxxxxxxx> >--- > 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 majordomo@xxxxxxxxxxxxxxx >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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html