dmx-expbuf.rst 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. .. _DMX_EXPBUF:
  2. ****************
  3. ioctl DMX_EXPBUF
  4. ****************
  5. Name
  6. ====
  7. DMX_EXPBUF - Export a buffer as a DMABUF file descriptor.
  8. .. warning:: this API is still experimental
  9. Synopsis
  10. ========
  11. .. c:function:: int ioctl( int fd, DMX_EXPBUF, struct dmx_exportbuffer *argp )
  12. :name: DMX_EXPBUF
  13. Arguments
  14. =========
  15. ``fd``
  16. File descriptor returned by :ref:`open() <dmx_fopen>`.
  17. ``argp``
  18. Pointer to struct :c:type:`dmx_exportbuffer`.
  19. Description
  20. ===========
  21. This ioctl is an extension to the memory mapping I/O method.
  22. It can be used to export a buffer as a DMABUF file at any time after
  23. buffers have been allocated with the :ref:`DMX_REQBUFS` ioctl.
  24. To export a buffer, applications fill struct :c:type:`dmx_exportbuffer`.
  25. Applications must set the ``index`` field. Valid index numbers
  26. range from zero to the number of buffers allocated with :ref:`DMX_REQBUFS`
  27. (struct :c:type:`dmx_requestbuffers` ``count``) minus one.
  28. Additional flags may be posted in the ``flags`` field. Refer to a manual
  29. for open() for details. Currently only O_CLOEXEC, O_RDONLY, O_WRONLY,
  30. and O_RDWR are supported.
  31. All other fields must be set to zero. In the
  32. case of multi-planar API, every plane is exported separately using
  33. multiple :ref:`DMX_EXPBUF` calls.
  34. After calling :ref:`DMX_EXPBUF` the ``fd`` field will be set by a
  35. driver, on success. This is a DMABUF file descriptor. The application may
  36. pass it to other DMABUF-aware devices. It is recommended to close a DMABUF
  37. file when it is no longer used to allow the associated memory to be reclaimed.
  38. Examples
  39. ========
  40. .. code-block:: c
  41. int buffer_export(int v4lfd, enum dmx_buf_type bt, int index, int *dmafd)
  42. {
  43. struct dmx_exportbuffer expbuf;
  44. memset(&expbuf, 0, sizeof(expbuf));
  45. expbuf.type = bt;
  46. expbuf.index = index;
  47. if (ioctl(v4lfd, DMX_EXPBUF, &expbuf) == -1) {
  48. perror("DMX_EXPBUF");
  49. return -1;
  50. }
  51. *dmafd = expbuf.fd;
  52. return 0;
  53. }
  54. Return Value
  55. ============
  56. On success 0 is returned, on error -1 and the ``errno`` variable is set
  57. appropriately. The generic error codes are described at the
  58. :ref:`Generic Error Codes <gen-errors>` chapter.
  59. EINVAL
  60. A queue is not in MMAP mode or DMABUF exporting is not supported or
  61. ``flags`` or ``index`` fields are invalid.