Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[cascardo/linux.git] / Documentation / media / uapi / v4l / vidioc-subdev-enum-frame-size.rst
1 .. -*- coding: utf-8; mode: rst -*-
2
3 .. _VIDIOC_SUBDEV_ENUM_FRAME_SIZE:
4
5 ***********************************
6 ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE
7 ***********************************
8
9 Name
10 ====
11
12 VIDIOC_SUBDEV_ENUM_FRAME_SIZE - Enumerate media bus frame sizes
13
14
15 Synopsis
16 ========
17
18 .. c:function:: int ioctl( int fd, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, struct v4l2_subdev_frame_size_enum * argp )
19     :name: VIDIOC_SUBDEV_ENUM_FRAME_SIZE
20
21
22 Arguments
23 =========
24
25 ``fd``
26     File descriptor returned by :ref:`open() <func-open>`.
27
28 ``argp``
29
30
31 Description
32 ===========
33
34 This ioctl allows applications to enumerate all frame sizes supported by
35 a sub-device on the given pad for the given media bus format. Supported
36 formats can be retrieved with the
37 :ref:`VIDIOC_SUBDEV_ENUM_MBUS_CODE`
38 ioctl.
39
40 To enumerate frame sizes applications initialize the ``pad``, ``which``
41 , ``code`` and ``index`` fields of the struct
42 :c:type:`v4l2_subdev_mbus_code_enum` and
43 call the :ref:`VIDIOC_SUBDEV_ENUM_FRAME_SIZE` ioctl with a pointer to the
44 structure. Drivers fill the minimum and maximum frame sizes or return an
45 EINVAL error code if one of the input parameters is invalid.
46
47 Sub-devices that only support discrete frame sizes (such as most
48 sensors) will return one or more frame sizes with identical minimum and
49 maximum values.
50
51 Not all possible sizes in given [minimum, maximum] ranges need to be
52 supported. For instance, a scaler that uses a fixed-point scaling ratio
53 might not be able to produce every frame size between the minimum and
54 maximum values. Applications must use the
55 :ref:`VIDIOC_SUBDEV_S_FMT <VIDIOC_SUBDEV_G_FMT>` ioctl to try the
56 sub-device for an exact supported frame size.
57
58 Available frame sizes may depend on the current 'try' formats at other
59 pads of the sub-device, as well as on the current active links and the
60 current values of V4L2 controls. See
61 :ref:`VIDIOC_SUBDEV_G_FMT` for more
62 information about try formats.
63
64
65 .. c:type:: v4l2_subdev_frame_size_enum
66
67 .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
68
69 .. flat-table:: struct v4l2_subdev_frame_size_enum
70     :header-rows:  0
71     :stub-columns: 0
72     :widths:       1 1 2
73
74     * - __u32
75       - ``index``
76       - Number of the format in the enumeration, set by the application.
77     * - __u32
78       - ``pad``
79       - Pad number as reported by the media controller API.
80     * - __u32
81       - ``code``
82       - The media bus format code, as defined in
83         :ref:`v4l2-mbus-format`.
84     * - __u32
85       - ``min_width``
86       - Minimum frame width, in pixels.
87     * - __u32
88       - ``max_width``
89       - Maximum frame width, in pixels.
90     * - __u32
91       - ``min_height``
92       - Minimum frame height, in pixels.
93     * - __u32
94       - ``max_height``
95       - Maximum frame height, in pixels.
96     * - __u32
97       - ``which``
98       - Frame sizes to be enumerated, from enum
99         :ref:`v4l2_subdev_format_whence <v4l2-subdev-format-whence>`.
100     * - __u32
101       - ``reserved``\ [8]
102       - Reserved for future extensions. Applications and drivers must set
103         the array to zero.
104
105
106 Return Value
107 ============
108
109 On success 0 is returned, on error -1 and the ``errno`` variable is set
110 appropriately. The generic error codes are described at the
111 :ref:`Generic Error Codes <gen-errors>` chapter.
112
113 EINVAL
114     The struct
115     :c:type:`v4l2_subdev_frame_size_enum`
116     ``pad`` references a non-existing pad, the ``code`` is invalid for
117     the given pad or the ``index`` field is out of bounds.