162306a36Sopenharmony_ci.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 262306a36Sopenharmony_ci.. c:namespace:: DTV.dmx 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci.. _DMX_EXPBUF: 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci**************** 762306a36Sopenharmony_ciioctl DMX_EXPBUF 862306a36Sopenharmony_ci**************** 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciName 1162306a36Sopenharmony_ci==== 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciDMX_EXPBUF - Export a buffer as a DMABUF file descriptor. 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci.. warning:: this API is still experimental 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciSynopsis 1862306a36Sopenharmony_ci======== 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci.. c:macro:: DMX_EXPBUF 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci``int ioctl(int fd, DMX_EXPBUF, struct dmx_exportbuffer *argp)`` 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciArguments 2562306a36Sopenharmony_ci========= 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci``fd`` 2862306a36Sopenharmony_ci File descriptor returned by :c:func:`open()`. 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci``argp`` 3162306a36Sopenharmony_ci Pointer to struct :c:type:`dmx_exportbuffer`. 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciDescription 3462306a36Sopenharmony_ci=========== 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciThis ioctl is an extension to the memory mapping I/O method. 3762306a36Sopenharmony_ciIt can be used to export a buffer as a DMABUF file at any time after 3862306a36Sopenharmony_cibuffers have been allocated with the :ref:`DMX_REQBUFS` ioctl. 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ciTo export a buffer, applications fill struct :c:type:`dmx_exportbuffer`. 4162306a36Sopenharmony_ciApplications must set the ``index`` field. Valid index numbers 4262306a36Sopenharmony_cirange from zero to the number of buffers allocated with :ref:`DMX_REQBUFS` 4362306a36Sopenharmony_ci(struct :c:type:`dmx_requestbuffers` ``count``) minus one. 4462306a36Sopenharmony_ciAdditional flags may be posted in the ``flags`` field. Refer to a manual 4562306a36Sopenharmony_cifor open() for details. Currently only O_CLOEXEC, O_RDONLY, O_WRONLY, 4662306a36Sopenharmony_ciand O_RDWR are supported. 4762306a36Sopenharmony_ciAll other fields must be set to zero. In the 4862306a36Sopenharmony_cicase of multi-planar API, every plane is exported separately using 4962306a36Sopenharmony_cimultiple :ref:`DMX_EXPBUF` calls. 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciAfter calling :ref:`DMX_EXPBUF` the ``fd`` field will be set by a 5262306a36Sopenharmony_cidriver, on success. This is a DMABUF file descriptor. The application may 5362306a36Sopenharmony_cipass it to other DMABUF-aware devices. It is recommended to close a DMABUF 5462306a36Sopenharmony_cifile when it is no longer used to allow the associated memory to be reclaimed. 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ciExamples 5762306a36Sopenharmony_ci======== 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci.. code-block:: c 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci int buffer_export(int v4lfd, enum dmx_buf_type bt, int index, int *dmafd) 6262306a36Sopenharmony_ci { 6362306a36Sopenharmony_ci struct dmx_exportbuffer expbuf; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci memset(&expbuf, 0, sizeof(expbuf)); 6662306a36Sopenharmony_ci expbuf.type = bt; 6762306a36Sopenharmony_ci expbuf.index = index; 6862306a36Sopenharmony_ci if (ioctl(v4lfd, DMX_EXPBUF, &expbuf) == -1) { 6962306a36Sopenharmony_ci perror("DMX_EXPBUF"); 7062306a36Sopenharmony_ci return -1; 7162306a36Sopenharmony_ci } 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci *dmafd = expbuf.fd; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci return 0; 7662306a36Sopenharmony_ci } 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciReturn Value 7962306a36Sopenharmony_ci============ 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ciOn success 0 is returned, on error -1 and the ``errno`` variable is set 8262306a36Sopenharmony_ciappropriately. The generic error codes are described at the 8362306a36Sopenharmony_ci:ref:`Generic Error Codes <gen-errors>` chapter. 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciEINVAL 8662306a36Sopenharmony_ci A queue is not in MMAP mode or DMABUF exporting is not supported or 8762306a36Sopenharmony_ci ``flags`` or ``index`` fields are invalid. 88