[media] docs-rst: fix cross-references for videodev2.h
[linux-2.6-block.git] / Documentation / media / uapi / v4l / vidioc-expbuf.rst
CommitLineData
5377d91f
MH
1.. -*- coding: utf-8; mode: rst -*-
2
af4a4d0d 3.. _VIDIOC_EXPBUF:
5377d91f
MH
4
5*******************
6ioctl VIDIOC_EXPBUF
7*******************
8
15e7d615 9Name
586027ce 10====
5377d91f 11
586027ce 12VIDIOC_EXPBUF - Export a buffer as a DMABUF file descriptor.
5377d91f 13
15e7d615
MCC
14
15Synopsis
5377d91f
MH
16========
17
41d80465
MCC
18.. c:function:: int ioctl( int fd, VIDIOC_EXPBUF, struct v4l2_exportbuffer *argp )
19 :name: VIDIOC_EXPBUF
5377d91f 20
586027ce 21
15e7d615 22Arguments
5377d91f
MH
23=========
24
25``fd``
26 File descriptor returned by :ref:`open() <func-open>`.
27
5377d91f
MH
28``argp``
29
30
15e7d615 31Description
5377d91f
MH
32===========
33
34This ioctl is an extension to the :ref:`memory mapping <mmap>` I/O
35method, therefore it is available only for ``V4L2_MEMORY_MMAP`` buffers.
36It can be used to export a buffer as a DMABUF file at any time after
37buffers have been allocated with the
7347081e 38:ref:`VIDIOC_REQBUFS` ioctl.
5377d91f
MH
39
40To export a buffer, applications fill struct
e8be7e97 41:c:type:`v4l2_exportbuffer`. The ``type`` field is
5377d91f 42set to the same buffer type as was previously used with struct
e8be7e97 43:c:type:`v4l2_requestbuffers` ``type``.
5377d91f
MH
44Applications must also set the ``index`` field. Valid index numbers
45range from zero to the number of buffers allocated with
7347081e 46:ref:`VIDIOC_REQBUFS` (struct
e8be7e97 47:c:type:`v4l2_requestbuffers` ``count``) minus
5377d91f
MH
48one. For the multi-planar API, applications set the ``plane`` field to
49the index of the plane to be exported. Valid planes range from zero to
50the maximal number of valid planes for the currently active format. For
51the single-planar API, applications must set ``plane`` to zero.
52Additional flags may be posted in the ``flags`` field. Refer to a manual
53for open() for details. Currently only O_CLOEXEC, O_RDONLY, O_WRONLY,
54and O_RDWR are supported. All other fields must be set to zero. In the
55case of multi-planar API, every plane is exported separately using
2212ff25 56multiple :ref:`VIDIOC_EXPBUF` calls.
5377d91f 57
2212ff25 58After calling :ref:`VIDIOC_EXPBUF` the ``fd`` field will be set by a
5377d91f
MH
59driver. This is a DMABUF file descriptor. The application may pass it to
60other DMABUF-aware devices. Refer to :ref:`DMABUF importing <dmabuf>`
61for details about importing DMABUF files into V4L2 nodes. It is
62recommended to close a DMABUF file when it is no longer used to allow
63the associated memory to be reclaimed.
64
65
66Examples
67========
68
69
70.. code-block:: c
71
72 int buffer_export(int v4lfd, enum v4l2_buf_type bt, int index, int *dmafd)
73 {
0579e6e3 74 struct v4l2_exportbuffer expbuf;
5377d91f 75
0579e6e3
MCC
76 memset(&expbuf, 0, sizeof(expbuf));
77 expbuf.type = bt;
78 expbuf.index = index;
79 if (ioctl(v4lfd, VIDIOC_EXPBUF, &expbuf) == -1) {
80 perror("VIDIOC_EXPBUF");
81 return -1;
82 }
5377d91f 83
0579e6e3 84 *dmafd = expbuf.fd;
5377d91f 85
0579e6e3 86 return 0;
5377d91f
MH
87 }
88
89
90.. code-block:: c
91
92 int buffer_export_mp(int v4lfd, enum v4l2_buf_type bt, int index,
0579e6e3 93 int dmafd[], int n_planes)
5377d91f 94 {
0579e6e3
MCC
95 int i;
96
97 for (i = 0; i < n_planes; ++i) {
98 struct v4l2_exportbuffer expbuf;
99
100 memset(&expbuf, 0, sizeof(expbuf));
101 expbuf.type = bt;
102 expbuf.index = index;
103 expbuf.plane = i;
104 if (ioctl(v4lfd, VIDIOC_EXPBUF, &expbuf) == -1) {
105 perror("VIDIOC_EXPBUF");
106 while (i)
107 close(dmafd[--i]);
108 return -1;
109 }
110 dmafd[i] = expbuf.fd;
111 }
112
113 return 0;
5377d91f
MH
114 }
115
116
e8be7e97 117.. c:type:: v4l2_exportbuffer
5377d91f 118
5bd4bb78
MCC
119.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
120
5377d91f
MH
121.. flat-table:: struct v4l2_exportbuffer
122 :header-rows: 0
123 :stub-columns: 0
124 :widths: 1 1 2
125
126
127 - .. row 1
128
129 - __u32
130
131 - ``type``
132
133 - Type of the buffer, same as struct
e8be7e97
MCC
134 :c:type:`v4l2_format` ``type`` or struct
135 :c:type:`v4l2_requestbuffers` ``type``, set
56683d7d 136 by the application. See :c:type:`v4l2_buf_type`
5377d91f
MH
137
138 - .. row 2
139
140 - __u32
141
142 - ``index``
143
144 - Number of the buffer, set by the application. This field is only
0579e6e3
MCC
145 used for :ref:`memory mapping <mmap>` I/O and can range from
146 zero to the number of buffers allocated with the
147 :ref:`VIDIOC_REQBUFS` and/or
148 :ref:`VIDIOC_CREATE_BUFS` ioctls.
5377d91f
MH
149
150 - .. row 3
151
152 - __u32
153
154 - ``plane``
155
156 - Index of the plane to be exported when using the multi-planar API.
0579e6e3 157 Otherwise this value must be set to zero.
5377d91f
MH
158
159 - .. row 4
160
161 - __u32
162
163 - ``flags``
164
165 - Flags for the newly created file, currently only ``O_CLOEXEC``,
0579e6e3
MCC
166 ``O_RDONLY``, ``O_WRONLY``, and ``O_RDWR`` are supported, refer to
167 the manual of open() for more details.
5377d91f
MH
168
169 - .. row 5
170
171 - __s32
172
173 - ``fd``
174
175 - The DMABUF file descriptor associated with a buffer. Set by the
0579e6e3 176 driver.
5377d91f
MH
177
178 - .. row 6
179
180 - __u32
181
8968da9b 182 - ``reserved[11]``
5377d91f
MH
183
184 - Reserved field for future use. Drivers and applications must set
0579e6e3 185 the array to zero.
5377d91f
MH
186
187
15e7d615 188Return Value
5377d91f
MH
189============
190
191On success 0 is returned, on error -1 and the ``errno`` variable is set
192appropriately. The generic error codes are described at the
193:ref:`Generic Error Codes <gen-errors>` chapter.
194
195EINVAL
196 A queue is not in MMAP mode or DMABUF exporting is not supported or
197 ``flags`` or ``type`` or ``index`` or ``plane`` fields are invalid.