~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/uapi/linux/v4l2-subdev.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2 /*
  3  * V4L2 subdev userspace API
  4  *
  5  * Copyright (C) 2010 Nokia Corporation
  6  *
  7  * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  8  *           Sakari Ailus <sakari.ailus@iki.fi>
  9  */
 10 
 11 #ifndef __LINUX_V4L2_SUBDEV_H
 12 #define __LINUX_V4L2_SUBDEV_H
 13 
 14 #include <linux/const.h>
 15 #include <linux/ioctl.h>
 16 #include <linux/types.h>
 17 #include <linux/v4l2-common.h>
 18 #include <linux/v4l2-mediabus.h>
 19 
 20 /**
 21  * enum v4l2_subdev_format_whence - Media bus format type
 22  * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only
 23  * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device
 24  */
 25 enum v4l2_subdev_format_whence {
 26         V4L2_SUBDEV_FORMAT_TRY = 0,
 27         V4L2_SUBDEV_FORMAT_ACTIVE = 1,
 28 };
 29 
 30 /**
 31  * struct v4l2_subdev_format - Pad-level media bus format
 32  * @which: format type (from enum v4l2_subdev_format_whence)
 33  * @pad: pad number, as reported by the media API
 34  * @format: media bus format (format code and frame size)
 35  * @stream: stream number, defined in subdev routing
 36  * @reserved: drivers and applications must zero this array
 37  */
 38 struct v4l2_subdev_format {
 39         __u32 which;
 40         __u32 pad;
 41         struct v4l2_mbus_framefmt format;
 42         __u32 stream;
 43         __u32 reserved[7];
 44 };
 45 
 46 /**
 47  * struct v4l2_subdev_crop - Pad-level crop settings
 48  * @which: format type (from enum v4l2_subdev_format_whence)
 49  * @pad: pad number, as reported by the media API
 50  * @rect: pad crop rectangle boundaries
 51  * @stream: stream number, defined in subdev routing
 52  * @reserved: drivers and applications must zero this array
 53  *
 54  * The subdev crop API is an obsolete interface and may be removed in the
 55  * future. It is superseded by the selection API. No new extensions to this
 56  * structure will be accepted.
 57  */
 58 struct v4l2_subdev_crop {
 59         __u32 which;
 60         __u32 pad;
 61         struct v4l2_rect rect;
 62         __u32 stream;
 63         __u32 reserved[7];
 64 };
 65 
 66 #define V4L2_SUBDEV_MBUS_CODE_CSC_COLORSPACE    0x00000001
 67 #define V4L2_SUBDEV_MBUS_CODE_CSC_XFER_FUNC     0x00000002
 68 #define V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC     0x00000004
 69 #define V4L2_SUBDEV_MBUS_CODE_CSC_HSV_ENC       V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC
 70 #define V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION  0x00000008
 71 
 72 /**
 73  * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
 74  * @pad: pad number, as reported by the media API
 75  * @index: format index during enumeration
 76  * @code: format code (MEDIA_BUS_FMT_ definitions)
 77  * @which: format type (from enum v4l2_subdev_format_whence)
 78  * @flags: flags set by the driver, (V4L2_SUBDEV_MBUS_CODE_*)
 79  * @stream: stream number, defined in subdev routing
 80  * @reserved: drivers and applications must zero this array
 81  */
 82 struct v4l2_subdev_mbus_code_enum {
 83         __u32 pad;
 84         __u32 index;
 85         __u32 code;
 86         __u32 which;
 87         __u32 flags;
 88         __u32 stream;
 89         __u32 reserved[6];
 90 };
 91 
 92 /**
 93  * struct v4l2_subdev_frame_size_enum - Media bus format enumeration
 94  * @index: format index during enumeration
 95  * @pad: pad number, as reported by the media API
 96  * @code: format code (MEDIA_BUS_FMT_ definitions)
 97  * @min_width: minimum frame width, in pixels
 98  * @max_width: maximum frame width, in pixels
 99  * @min_height: minimum frame height, in pixels
100  * @max_height: maximum frame height, in pixels
101  * @which: format type (from enum v4l2_subdev_format_whence)
102  * @stream: stream number, defined in subdev routing
103  * @reserved: drivers and applications must zero this array
104  */
105 struct v4l2_subdev_frame_size_enum {
106         __u32 index;
107         __u32 pad;
108         __u32 code;
109         __u32 min_width;
110         __u32 max_width;
111         __u32 min_height;
112         __u32 max_height;
113         __u32 which;
114         __u32 stream;
115         __u32 reserved[7];
116 };
117 
118 /**
119  * struct v4l2_subdev_frame_interval - Pad-level frame rate
120  * @pad: pad number, as reported by the media API
121  * @interval: frame interval in seconds
122  * @stream: stream number, defined in subdev routing
123  * @which: interval type (from enum v4l2_subdev_format_whence)
124  * @reserved: drivers and applications must zero this array
125  */
126 struct v4l2_subdev_frame_interval {
127         __u32 pad;
128         struct v4l2_fract interval;
129         __u32 stream;
130         __u32 which;
131         __u32 reserved[7];
132 };
133 
134 /**
135  * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration
136  * @pad: pad number, as reported by the media API
137  * @index: frame interval index during enumeration
138  * @code: format code (MEDIA_BUS_FMT_ definitions)
139  * @width: frame width in pixels
140  * @height: frame height in pixels
141  * @interval: frame interval in seconds
142  * @which: interval type (from enum v4l2_subdev_format_whence)
143  * @stream: stream number, defined in subdev routing
144  * @reserved: drivers and applications must zero this array
145  */
146 struct v4l2_subdev_frame_interval_enum {
147         __u32 index;
148         __u32 pad;
149         __u32 code;
150         __u32 width;
151         __u32 height;
152         struct v4l2_fract interval;
153         __u32 which;
154         __u32 stream;
155         __u32 reserved[7];
156 };
157 
158 /**
159  * struct v4l2_subdev_selection - selection info
160  *
161  * @which: either V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY
162  * @pad: pad number, as reported by the media API
163  * @target: Selection target, used to choose one of possible rectangles,
164  *          defined in v4l2-common.h; V4L2_SEL_TGT_* .
165  * @flags: constraint flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
166  * @r: coordinates of the selection window
167  * @stream: stream number, defined in subdev routing
168  * @reserved: for future use, set to zero for now
169  *
170  * Hardware may use multiple helper windows to process a video stream.
171  * The structure is used to exchange this selection areas between
172  * an application and a driver.
173  */
174 struct v4l2_subdev_selection {
175         __u32 which;
176         __u32 pad;
177         __u32 target;
178         __u32 flags;
179         struct v4l2_rect r;
180         __u32 stream;
181         __u32 reserved[7];
182 };
183 
184 /**
185  * struct v4l2_subdev_capability - subdev capabilities
186  * @version: the driver versioning number
187  * @capabilities: the subdev capabilities, see V4L2_SUBDEV_CAP_*
188  * @reserved: for future use, set to zero for now
189  */
190 struct v4l2_subdev_capability {
191         __u32 version;
192         __u32 capabilities;
193         __u32 reserved[14];
194 };
195 
196 /* The v4l2 sub-device video device node is registered in read-only mode. */
197 #define V4L2_SUBDEV_CAP_RO_SUBDEV               0x00000001
198 
199 /* The v4l2 sub-device supports routing and multiplexed streams. */
200 #define V4L2_SUBDEV_CAP_STREAMS                 0x00000002
201 
202 /*
203  * Is the route active? An active route will start when streaming is enabled
204  * on a video node.
205  */
206 #define V4L2_SUBDEV_ROUTE_FL_ACTIVE             (1U << 0)
207 
208 /**
209  * struct v4l2_subdev_route - A route inside a subdev
210  *
211  * @sink_pad: the sink pad index
212  * @sink_stream: the sink stream identifier
213  * @source_pad: the source pad index
214  * @source_stream: the source stream identifier
215  * @flags: route flags V4L2_SUBDEV_ROUTE_FL_*
216  * @reserved: drivers and applications must zero this array
217  */
218 struct v4l2_subdev_route {
219         __u32 sink_pad;
220         __u32 sink_stream;
221         __u32 source_pad;
222         __u32 source_stream;
223         __u32 flags;
224         __u32 reserved[5];
225 };
226 
227 /**
228  * struct v4l2_subdev_routing - Subdev routing information
229  *
230  * @which: configuration type (from enum v4l2_subdev_format_whence)
231  * @len_routes: the length of the routes array, in routes; set by the user, not
232  *              modified by the kernel
233  * @routes: pointer to the routes array
234  * @num_routes: the total number of routes, possibly more than fits in the
235  *              routes array
236  * @reserved: drivers and applications must zero this array
237  */
238 struct v4l2_subdev_routing {
239         __u32 which;
240         __u32 len_routes;
241         __u64 routes;
242         __u32 num_routes;
243         __u32 reserved[11];
244 };
245 
246 /*
247  * The client is aware of streams. Setting this flag enables the use of 'stream'
248  * fields (referring to the stream number) with various ioctls. If this is not
249  * set (which is the default), the 'stream' fields will be forced to 0 by the
250  * kernel.
251  */
252 #define V4L2_SUBDEV_CLIENT_CAP_STREAMS                  (1ULL << 0)
253 
254 /*
255  * The client is aware of the struct v4l2_subdev_frame_interval which field. If
256  * this is not set (which is the default), the which field is forced to
257  * V4L2_SUBDEV_FORMAT_ACTIVE by the kernel.
258  */
259 #define V4L2_SUBDEV_CLIENT_CAP_INTERVAL_USES_WHICH      (1ULL << 1)
260 
261 /**
262  * struct v4l2_subdev_client_capability - Capabilities of the client accessing
263  *                                        the subdev
264  *
265  * @capabilities: A bitmask of V4L2_SUBDEV_CLIENT_CAP_* flags.
266  */
267 struct v4l2_subdev_client_capability {
268         __u64 capabilities;
269 };
270 
271 /* Backwards compatibility define --- to be removed */
272 #define v4l2_subdev_edid v4l2_edid
273 
274 #define VIDIOC_SUBDEV_QUERYCAP                  _IOR('V',  0, struct v4l2_subdev_capability)
275 #define VIDIOC_SUBDEV_G_FMT                     _IOWR('V',  4, struct v4l2_subdev_format)
276 #define VIDIOC_SUBDEV_S_FMT                     _IOWR('V',  5, struct v4l2_subdev_format)
277 #define VIDIOC_SUBDEV_G_FRAME_INTERVAL          _IOWR('V', 21, struct v4l2_subdev_frame_interval)
278 #define VIDIOC_SUBDEV_S_FRAME_INTERVAL          _IOWR('V', 22, struct v4l2_subdev_frame_interval)
279 #define VIDIOC_SUBDEV_ENUM_MBUS_CODE            _IOWR('V',  2, struct v4l2_subdev_mbus_code_enum)
280 #define VIDIOC_SUBDEV_ENUM_FRAME_SIZE           _IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
281 #define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL       _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
282 #define VIDIOC_SUBDEV_G_CROP                    _IOWR('V', 59, struct v4l2_subdev_crop)
283 #define VIDIOC_SUBDEV_S_CROP                    _IOWR('V', 60, struct v4l2_subdev_crop)
284 #define VIDIOC_SUBDEV_G_SELECTION               _IOWR('V', 61, struct v4l2_subdev_selection)
285 #define VIDIOC_SUBDEV_S_SELECTION               _IOWR('V', 62, struct v4l2_subdev_selection)
286 #define VIDIOC_SUBDEV_G_ROUTING                 _IOWR('V', 38, struct v4l2_subdev_routing)
287 #define VIDIOC_SUBDEV_S_ROUTING                 _IOWR('V', 39, struct v4l2_subdev_routing)
288 #define VIDIOC_SUBDEV_G_CLIENT_CAP              _IOR('V',  101, struct v4l2_subdev_client_capability)
289 #define VIDIOC_SUBDEV_S_CLIENT_CAP              _IOWR('V',  102, struct v4l2_subdev_client_capability)
290 
291 /* The following ioctls are identical to the ioctls in videodev2.h */
292 #define VIDIOC_SUBDEV_G_STD                     _IOR('V', 23, v4l2_std_id)
293 #define VIDIOC_SUBDEV_S_STD                     _IOW('V', 24, v4l2_std_id)
294 #define VIDIOC_SUBDEV_ENUMSTD                   _IOWR('V', 25, struct v4l2_standard)
295 #define VIDIOC_SUBDEV_G_EDID                    _IOWR('V', 40, struct v4l2_edid)
296 #define VIDIOC_SUBDEV_S_EDID                    _IOWR('V', 41, struct v4l2_edid)
297 #define VIDIOC_SUBDEV_QUERYSTD                  _IOR('V', 63, v4l2_std_id)
298 #define VIDIOC_SUBDEV_S_DV_TIMINGS              _IOWR('V', 87, struct v4l2_dv_timings)
299 #define VIDIOC_SUBDEV_G_DV_TIMINGS              _IOWR('V', 88, struct v4l2_dv_timings)
300 #define VIDIOC_SUBDEV_ENUM_DV_TIMINGS           _IOWR('V', 98, struct v4l2_enum_dv_timings)
301 #define VIDIOC_SUBDEV_QUERY_DV_TIMINGS          _IOR('V', 99, struct v4l2_dv_timings)
302 #define VIDIOC_SUBDEV_DV_TIMINGS_CAP            _IOWR('V', 100, struct v4l2_dv_timings_cap)
303 
304 #endif
305 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php