blob: efd9629e099e3436f778901c301b7c85782d8bc5 [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- coding: utf-8; mode: rst -*-
2
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -03003.. _VIDIOC_CREATE_BUFS:
Markus Heiser5377d912016-06-30 15:18:56 +02004
5************************
6ioctl VIDIOC_CREATE_BUFS
7************************
8
9*man VIDIOC_CREATE_BUFS(2)*
10
11Create buffers for Memory Mapped or User Pointer or DMA Buffer I/O
12
13
14Synopsis
15========
16
Mauro Carvalho Chehabb7e67f62016-07-02 09:49:16 -030017.. cpp:function:: int ioctl( int fd, int request, struct v4l2_create_buffers *argp )
Markus Heiser5377d912016-06-30 15:18:56 +020018
19Arguments
20=========
21
22``fd``
23 File descriptor returned by :ref:`open() <func-open>`.
24
25``request``
26 VIDIOC_CREATE_BUFS
27
28``argp``
29
30
31Description
32===========
33
34This ioctl is used to create buffers for :ref:`memory mapped <mmap>`
35or :ref:`user pointer <userp>` or :ref:`DMA buffer <dmabuf>` I/O. It
36can be used as an alternative or in addition to the
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030037:ref:`VIDIOC_REQBUFS` ioctl, when a tighter control
Markus Heiser5377d912016-06-30 15:18:56 +020038over buffers is required. This ioctl can be called multiple times to
39create buffers of different sizes.
40
41To allocate the device buffers applications must initialize the relevant
Mauro Carvalho Chehabacf309a2016-07-03 13:28:28 -030042fields of the :ref:`struct v4l2_create_buffers <v4l2-create-buffers>` structure. The
Markus Heiser5377d912016-06-30 15:18:56 +020043``count`` field must be set to the number of requested buffers, the
44``memory`` field specifies the requested I/O method and the ``reserved``
45array must be zeroed.
46
47The ``format`` field specifies the image format that the buffers must be
48able to handle. The application has to fill in this struct
49:ref:`v4l2_format <v4l2-format>`. Usually this will be done using the
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -030050:ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` or
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030051:ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` ioctls to ensure that the
Markus Heiser5377d912016-06-30 15:18:56 +020052requested format is supported by the driver. Based on the format's
53``type`` field the requested buffer size (for single-planar) or plane
54sizes (for multi-planar formats) will be used for the allocated buffers.
55The driver may return an error if the size(s) are not supported by the
56hardware (usually because they are too small).
57
58The buffers created by this ioctl will have as minimum size the size
59defined by the ``format.pix.sizeimage`` field (or the corresponding
60fields for other format types). Usually if the ``format.pix.sizeimage``
61field is less than the minimum required for the given format, then an
62error will be returned since drivers will typically not allow this. If
63it is larger, then the value will be used as-is. In other words, the
64driver may reject the requested size, but if it is accepted the driver
65will use it unchanged.
66
67When the ioctl is called with a pointer to this structure the driver
68will attempt to allocate up to the requested number of buffers and store
69the actual number allocated and the starting index in the ``count`` and
70the ``index`` fields respectively. On return ``count`` can be smaller
71than the number requested.
72
73
74.. _v4l2-create-buffers:
75
76.. flat-table:: struct v4l2_create_buffers
77 :header-rows: 0
78 :stub-columns: 0
79 :widths: 1 1 2
80
81
82 - .. row 1
83
84 - __u32
85
86 - ``index``
87
88 - The starting buffer index, returned by the driver.
89
90 - .. row 2
91
92 - __u32
93
94 - ``count``
95
96 - The number of buffers requested or granted. If count == 0, then
Mauro Carvalho Chehab2212ff22016-07-01 14:33:56 -030097 :ref:`VIDIOC_CREATE_BUFS` will set ``index`` to the current number of
Markus Heiser5377d912016-06-30 15:18:56 +020098 created buffers, and it will check the validity of ``memory`` and
99 ``format.type``. If those are invalid -1 is returned and errno is
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -0300100 set to ``EINVAL`` error code, otherwise :ref:`VIDIOC_CREATE_BUFS` returns
101 0. It will never set errno to ``EBUSY`` error code in this particular
Markus Heiser5377d912016-06-30 15:18:56 +0200102 case.
103
104 - .. row 3
105
106 - __u32
107
108 - ``memory``
109
110 - Applications set this field to ``V4L2_MEMORY_MMAP``,
111 ``V4L2_MEMORY_DMABUF`` or ``V4L2_MEMORY_USERPTR``. See
112 :ref:`v4l2-memory`
113
114 - .. row 4
115
116 - struct :ref:`v4l2_format <v4l2-format>`
117
118 - ``format``
119
120 - Filled in by the application, preserved by the driver.
121
122 - .. row 5
123
124 - __u32
125
126 - ``reserved``\ [8]
127
128 - A place holder for future extensions. Drivers and applications
129 must set the array to zero.
130
131
132
133Return Value
134============
135
136On success 0 is returned, on error -1 and the ``errno`` variable is set
137appropriately. The generic error codes are described at the
138:ref:`Generic Error Codes <gen-errors>` chapter.
139
140ENOMEM
141 No memory to allocate buffers for :ref:`memory mapped <mmap>` I/O.
142
143EINVAL
144 The buffer type (``format.type`` field), requested I/O method
145 (``memory``) or format (``format`` field) is not valid.
146
147
148.. ------------------------------------------------------------------------------
149.. This file was automatically converted from DocBook-XML with the dbxml
150.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
151.. from the linux kernel, refer to:
152..
153.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
154.. ------------------------------------------------------------------------------