dmx-qbuf.rst 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. .. _DMX_QBUF:
  2. *************************
  3. ioctl DMX_QBUF, DMX_DQBUF
  4. *************************
  5. Name
  6. ====
  7. DMX_QBUF - DMX_DQBUF - Exchange a buffer with the driver
  8. .. warning:: this API is still experimental
  9. Synopsis
  10. ========
  11. .. c:function:: int ioctl( int fd, DMX_QBUF, struct dmx_buffer *argp )
  12. :name: DMX_QBUF
  13. .. c:function:: int ioctl( int fd, DMX_DQBUF, struct dmx_buffer *argp )
  14. :name: DMX_DQBUF
  15. Arguments
  16. =========
  17. ``fd``
  18. File descriptor returned by :ref:`open() <dmx_fopen>`.
  19. ``argp``
  20. Pointer to struct :c:type:`dmx_buffer`.
  21. Description
  22. ===========
  23. Applications call the ``DMX_QBUF`` ioctl to enqueue an empty
  24. (capturing) or filled (output) buffer in the driver's incoming queue.
  25. The semantics depend on the selected I/O method.
  26. To enqueue a buffer applications set the ``index`` field. Valid index
  27. numbers range from zero to the number of buffers allocated with
  28. :ref:`DMX_REQBUFS` (struct :c:type:`dmx_requestbuffers` ``count``) minus
  29. one. The contents of the struct :c:type:`dmx_buffer` returned
  30. by a :ref:`DMX_QUERYBUF` ioctl will do as well.
  31. When ``DMX_QBUF`` is called with a pointer to this structure, it locks the
  32. memory pages of the buffer in physical memory, so they cannot be swapped
  33. out to disk. Buffers remain locked until dequeued, until the
  34. the device is closed.
  35. Applications call the ``DMX_DQBUF`` ioctl to dequeue a filled
  36. (capturing) buffer from the driver's outgoing queue.
  37. They just set the ``index`` field withe the buffer ID to be queued.
  38. When ``DMX_DQBUF`` is called with a pointer to struct :c:type:`dmx_buffer`,
  39. the driver fills the remaining fields or returns an error code.
  40. By default ``DMX_DQBUF`` blocks when no buffer is in the outgoing
  41. queue. When the ``O_NONBLOCK`` flag was given to the
  42. :ref:`open() <dmx_fopen>` function, ``DMX_DQBUF`` returns
  43. immediately with an ``EAGAIN`` error code when no buffer is available.
  44. The struct :c:type:`dmx_buffer` structure is specified in
  45. :ref:`buffer`.
  46. Return Value
  47. ============
  48. On success 0 is returned, on error -1 and the ``errno`` variable is set
  49. appropriately. The generic error codes are described at the
  50. :ref:`Generic Error Codes <gen-errors>` chapter.
  51. EAGAIN
  52. Non-blocking I/O has been selected using ``O_NONBLOCK`` and no
  53. buffer was in the outgoing queue.
  54. EINVAL
  55. The ``index`` is out of bounds, or no buffers have been allocated yet.
  56. EIO
  57. ``DMX_DQBUF`` failed due to an internal error. Can also indicate
  58. temporary problems like signal loss or CRC errors.