.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later .. c:namespace:: DTV.dmx .. _DMX_EXPBUF: **************** ioctl DMX_EXPBUF **************** Name ==== DMX_EXPBUF - Export a buffer as a DMABUF file descriptor. .. warning:: this API is still experimental Synopsis ======== .. c:macro:: DMX_EXPBUF ``int ioctl(int fd, DMX_EXPBUF, struct dmx_exportbuffer *argp)`` Arguments ========= ``fd`` File descriptor returned by :c:func:`open()`. ``argp`` Pointer to struct :c:type:`dmx_exportbuffer`. Description =========== This ioctl is an extension to the memory mapping I/O method. It can be used to export a buffer as a DMABUF file at any time after buffers have been allocated with the :ref:`DMX_REQBUFS` ioctl. To export a buffer, applications fill struct :c:type:`dmx_exportbuffer`. Applications must set the ``index`` field. Valid index numbers range from zero to the number of buffers allocated with :ref:`DMX_REQBUFS` (struct :c:type:`dmx_requestbuffers` ``count``) minus one. Additional flags may be posted in the ``flags`` field. Refer to a manual for open() for details. Currently only O_CLOEXEC, O_RDONLY, O_WRONLY, and O_RDWR are supported. All other fields must be set to zero. In the case of multi-planar API, every plane is exported separately using multiple :ref:`DMX_EXPBUF` calls. After calling :ref:`DMX_EXPBUF` the ``fd`` field will be set by a driver, on success. This is a DMABUF file descriptor. The application may pass it to other DMABUF-aware devices. It is recommended to close a DMABUF file when it is no longer used to allow the associated memory to be reclaimed. Examples ======== .. code-block:: c int buffer_export(int v4lfd, enum dmx_buf_type bt, int index, int *dmafd) { struct dmx_exportbuffer expbuf; memset(&expbuf, 0, sizeof(expbuf)); expbuf.type = bt; expbuf.index = index; if (ioctl(v4lfd, DMX_EXPBUF, &expbuf) == -1) { perror("DMX_EXPBUF"); return -1; } *dmafd = expbuf.fd; return 0; } Return Value ============ On success 0 is returned, on error -1 and the ``errno`` variable is set appropriately. The generic error codes are described at the :ref:`Generic Error Codes <gen-errors>` chapter. EINVAL A queue is not in MMAP mode or DMABUF exporting is not supported or ``flags`` or ``index`` fields are invalid.