Just to show how it would look like...

Regards,

        Hans

Signed-off-by: Hans Verkuil <[email protected]>
---
 drivers/media/usb/cpia2/cpia2_v4l.c           |  2 +-
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c |  4 +-
 drivers/media/v4l2-core/videobuf2-core.c      |  2 +-
 include/uapi/linux/v4l2-controls.h            | 15 ++++++
 include/uapi/linux/videodev2.h                | 69 +++++++++++++++++++++++++--
 5 files changed, 83 insertions(+), 9 deletions(-)

diff --git a/drivers/media/usb/cpia2/cpia2_v4l.c 
b/drivers/media/usb/cpia2/cpia2_v4l.c
index d5d42b6..51b7759 100644
--- a/drivers/media/usb/cpia2/cpia2_v4l.c
+++ b/drivers/media/usb/cpia2/cpia2_v4l.c
@@ -952,7 +952,7 @@ static int cpia2_dqbuf(struct file *file, void *fh, struct 
v4l2_buffer *buf)
        buf->sequence = cam->buffers[buf->index].seq;
        buf->m.offset = cam->buffers[buf->index].data - cam->frame_buffer;
        buf->length = cam->frame_size;
-       buf->reserved2 = 0;
+       buf->config_store = 0;
        buf->reserved = 0;
        memset(&buf->timecode, 0, sizeof(buf->timecode));
 
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c 
b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 8f7a6a4..829eed0 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -322,7 +322,7 @@ struct v4l2_buffer32 {
                __s32           fd;
        } m;
        __u32                   length;
-       __u32                   reserved2;
+       __u32                   config_store;
        __u32                   reserved;
 };
 
@@ -487,7 +487,7 @@ static int put_v4l2_buffer32(struct v4l2_buffer *kp, struct 
v4l2_buffer32 __user
                put_user(kp->timestamp.tv_usec, &up->timestamp.tv_usec) ||
                copy_to_user(&up->timecode, &kp->timecode, sizeof(struct 
v4l2_timecode)) ||
                put_user(kp->sequence, &up->sequence) ||
-               put_user(kp->reserved2, &up->reserved2) ||
+               put_user(kp->config_store, &up->config_store) ||
                put_user(kp->reserved, &up->reserved))
                        return -EFAULT;
 
diff --git a/drivers/media/v4l2-core/videobuf2-core.c 
b/drivers/media/v4l2-core/videobuf2-core.c
index 91412d4..4021b39 100644
--- a/drivers/media/v4l2-core/videobuf2-core.c
+++ b/drivers/media/v4l2-core/videobuf2-core.c
@@ -414,7 +414,7 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, 
struct v4l2_buffer *b)
 
        /* Copy back data such as timestamp, flags, etc. */
        memcpy(b, &vb->v4l2_buf, offsetof(struct v4l2_buffer, m));
-       b->reserved2 = vb->v4l2_buf.reserved2;
+       b->config_store = vb->v4l2_buf.config_store;
        b->reserved = vb->v4l2_buf.reserved;
 
        if (V4L2_TYPE_IS_MULTIPLANAR(q->type)) {
diff --git a/include/uapi/linux/v4l2-controls.h 
b/include/uapi/linux/v4l2-controls.h
index 1666aab..586467f 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -61,6 +61,9 @@
 #define V4L2_CTRL_CLASS_DV             0x00a00000      /* Digital Video 
controls */
 #define V4L2_CTRL_CLASS_FM_RX          0x00a10000      /* FM Receiver controls 
*/
 
+/* Property classes */
+#define V4L2_PROP_CLASS_USER           0x08980000      /* Generic properties */
+
 /* User-class control IDs */
 
 #define V4L2_CID_BASE                  (V4L2_CTRL_CLASS_USER | 0x900)
@@ -886,4 +889,16 @@ enum v4l2_deemphasis {
 
 #define V4L2_CID_RDS_RECEPTION                 (V4L2_CID_FM_RX_CLASS_BASE + 2)
 
+/* Generic properties */
+#define V4L2_PID_USER_BASE                     (V4L2_PROP_CLASS_USER | 0x10)
+
+#define V4L2_PID_CAPTURE_CROP                  (V4L2_PID_USER_BASE + 0)
+#define V4L2_PID_CAPTURE_COMPOSE               (V4L2_PID_USER_BASE + 1)
+#define V4L2_PID_OUTPUT_CROP                   (V4L2_PID_USER_BASE + 2)
+#define V4L2_PID_OUTPUT_COMPOSE                        (V4L2_PID_USER_BASE + 3)
+
+/* TODO: use a Motion Detection property class */
+#define V4L2_PID_MD_REGION                     (V4L2_PID_USER_BASE + 4)
+#define V4L2_PID_MD_THRESHOLD                  (V4L2_PID_USER_BASE + 5)
+
 #endif
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 437f1b0..9faba79 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -640,7 +640,7 @@ struct v4l2_plane {
  * @length:    size in bytes of the buffer (NOT its payload) for single-plane
  *             buffers (when type != *_MPLANE); number of elements in the
  *             planes array for multi-plane buffers
- * @input:     input number from which the video data has has been captured
+ * @config_store: this buffer should use this configuration store
  *
  * Contains data exchanged by application and driver using one of the Streaming
  * I/O methods.
@@ -664,7 +664,7 @@ struct v4l2_buffer {
                __s32           fd;
        } m;
        __u32                   length;
-       __u32                   reserved2;
+       __u32                   config_store;
        __u32                   reserved;
 };
 
@@ -1228,11 +1228,15 @@ struct v4l2_ext_control {
                __s32 value;
                __s64 value64;
                char *string;
+               void *prop;
        };
 } __attribute__ ((packed));
 
 struct v4l2_ext_controls {
-       __u32 ctrl_class;
+       union {
+               __u32 ctrl_class;
+               __u32 config_store;
+       };
        __u32 count;
        __u32 error_idx;
        __u32 reserved[2];
@@ -1240,6 +1244,7 @@ struct v4l2_ext_controls {
 };
 
 #define V4L2_CTRL_ID_MASK                (0x0fffffff)
+#define V4L2_CTRL_IS_PROP(id)     ((id) & 0x08000000)
 #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
 
@@ -1252,7 +1257,29 @@ enum v4l2_ctrl_type {
        V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
        V4L2_CTRL_TYPE_STRING        = 7,
        V4L2_CTRL_TYPE_BITMASK       = 8,
-       V4L2_CTRL_TYPE_INTEGER_MENU = 9,
+       V4L2_CTRL_TYPE_INTEGER_MENU  = 9,
+
+       V4l2_PROP_TYPE_MATRIX_U8     = 0x100,
+       V4l2_PROP_TYPE_MATRIX_U16    = 0x101,
+};
+
+/* Property types */
+struct v4l2_prop_selection {
+       struct v4l2_rect r;
+       __u32 flags;
+       __u32 reserved[7];
+};
+
+struct v4l2_prop_type_matrix_u8 {
+       struct v4l2_rect r;
+       __u32 reserved[4];
+       __u8 data[];
+};
+
+struct v4l2_prop_type_matrix_u16 {
+       struct v4l2_rect r;
+       __u32 reserved[4];
+       __u16 data[];
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
@@ -1268,6 +1295,34 @@ struct v4l2_queryctrl {
        __u32                reserved[2];
 };
 
+/*  Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
+struct v4l2_query_ext_ctrl {
+       __u32                config_store;
+       __u32                id;
+       __u32                type;
+       __u8                 name[32];
+       __u8                 unit[32];
+       union {
+               __s64 val;
+               __u32 reserved[8];
+       } min;
+       union {
+               __s64 val;
+               __u32 reserved[8];
+       } max;
+       union {
+               __s64 val;
+               __u32 reserved[8];
+       } step;
+       union {
+               __s64 val;
+               __u32 reserved[8];
+       } def;
+       __u32                flags;
+       __u32                width, height;
+       __u32                reserved[16];
+};
+
 /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
 struct v4l2_querymenu {
        __u32           id;
@@ -1288,9 +1343,11 @@ struct v4l2_querymenu {
 #define V4L2_CTRL_FLAG_SLIDER          0x0020
 #define V4L2_CTRL_FLAG_WRITE_ONLY      0x0040
 #define V4L2_CTRL_FLAG_VOLATILE                0x0080
+#define V4L2_CTRL_FLAG_CAN_STORE       0x0100
 
-/*  Query flag, to be ORed with the control ID */
+/*  Query flags, to be ORed with the control ID */
 #define V4L2_CTRL_FLAG_NEXT_CTRL       0x80000000
+#define V4L2_CTRL_FLAG_NEXT_PROP       0x40000000
 
 /*  User-class control IDs defined by V4L2 */
 #define V4L2_CID_MAX_CTRLS             1024
@@ -1958,6 +2015,8 @@ struct v4l2_create_buffers {
    Never use these in applications! */
 #define VIDIOC_DBG_G_CHIP_INFO  _IOWR('V', 102, struct v4l2_dbg_chip_info)
 
+#define VIDIOC_QUERY_EXT_CTRL  _IOWR('V', 103, struct v4l2_query_ext_ctrl)
+
 /* Reminder: when adding new ioctls please add support for them to
    drivers/media/video/v4l2-compat-ioctl32.c as well! */
 
-- 
1.8.4.3


--
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

Reply via email to