Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[cascardo/linux.git] / Documentation / media / uapi / v4l / vidioc-create-bufs.rst
1 .. -*- coding: utf-8; mode: rst -*-
2
3 .. _VIDIOC_CREATE_BUFS:
4
5 ************************
6 ioctl VIDIOC_CREATE_BUFS
7 ************************
8
9 Name
10 ====
11
12 VIDIOC_CREATE_BUFS - Create buffers for Memory Mapped or User Pointer or DMA Buffer I/O
13
14
15 Synopsis
16 ========
17
18 .. c:function:: int ioctl( int fd, VIDIOC_CREATE_BUFS, struct v4l2_create_buffers *argp )
19     :name: VIDIOC_CREATE_BUFS
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 is used to create buffers for :ref:`memory mapped <mmap>`
35 or :ref:`user pointer <userp>` or :ref:`DMA buffer <dmabuf>` I/O. It
36 can be used as an alternative or in addition to the
37 :ref:`VIDIOC_REQBUFS` ioctl, when a tighter control
38 over buffers is required. This ioctl can be called multiple times to
39 create buffers of different sizes.
40
41 To allocate the device buffers applications must initialize the relevant
42 fields of the struct :c:type:`v4l2_create_buffers` structure. The
43 ``count`` field must be set to the number of requested buffers, the
44 ``memory`` field specifies the requested I/O method and the ``reserved``
45 array must be zeroed.
46
47 The ``format`` field specifies the image format that the buffers must be
48 able to handle. The application has to fill in this struct
49 :c:type:`v4l2_format`. Usually this will be done using the
50 :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` or
51 :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` ioctls to ensure that the
52 requested format is supported by the driver. Based on the format's
53 ``type`` field the requested buffer size (for single-planar) or plane
54 sizes (for multi-planar formats) will be used for the allocated buffers.
55 The driver may return an error if the size(s) are not supported by the
56 hardware (usually because they are too small).
57
58 The buffers created by this ioctl will have as minimum size the size
59 defined by the ``format.pix.sizeimage`` field (or the corresponding
60 fields for other format types). Usually if the ``format.pix.sizeimage``
61 field is less than the minimum required for the given format, then an
62 error will be returned since drivers will typically not allow this. If
63 it is larger, then the value will be used as-is. In other words, the
64 driver may reject the requested size, but if it is accepted the driver
65 will use it unchanged.
66
67 When the ioctl is called with a pointer to this structure the driver
68 will attempt to allocate up to the requested number of buffers and store
69 the actual number allocated and the starting index in the ``count`` and
70 the ``index`` fields respectively. On return ``count`` can be smaller
71 than the number requested.
72
73
74 .. c:type:: v4l2_create_buffers
75
76 .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
77
78 .. flat-table:: struct v4l2_create_buffers
79     :header-rows:  0
80     :stub-columns: 0
81     :widths:       1 1 2
82
83     * - __u32
84       - ``index``
85       - The starting buffer index, returned by the driver.
86     * - __u32
87       - ``count``
88       - The number of buffers requested or granted. If count == 0, then
89         :ref:`VIDIOC_CREATE_BUFS` will set ``index`` to the current number of
90         created buffers, and it will check the validity of ``memory`` and
91         ``format.type``. If those are invalid -1 is returned and errno is
92         set to ``EINVAL`` error code, otherwise :ref:`VIDIOC_CREATE_BUFS` returns
93         0. It will never set errno to ``EBUSY`` error code in this particular
94         case.
95     * - __u32
96       - ``memory``
97       - Applications set this field to ``V4L2_MEMORY_MMAP``,
98         ``V4L2_MEMORY_DMABUF`` or ``V4L2_MEMORY_USERPTR``. See
99         :c:type:`v4l2_memory`
100     * - struct :c:type:`v4l2_format`
101       - ``format``
102       - Filled in by the application, preserved by the driver.
103     * - __u32
104       - ``reserved``\ [8]
105       - A place holder for future extensions. Drivers and applications
106         must set the array to zero.
107
108
109 Return Value
110 ============
111
112 On success 0 is returned, on error -1 and the ``errno`` variable is set
113 appropriately. The generic error codes are described at the
114 :ref:`Generic Error Codes <gen-errors>` chapter.
115
116 ENOMEM
117     No memory to allocate buffers for :ref:`memory mapped <mmap>` I/O.
118
119 EINVAL
120     The buffer type (``format.type`` field), requested I/O method
121     (``memory``) or format (``format`` field) is not valid.