162 lines
5 KiB
ReStructuredText
162 lines
5 KiB
ReStructuredText
|
.. -*- coding: utf-8; mode: rst -*-
|
||
|
|
||
|
.. _VIDIOC_ENCODER_CMD:
|
||
|
|
||
|
************************************************
|
||
|
ioctl VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD
|
||
|
************************************************
|
||
|
|
||
|
Name
|
||
|
====
|
||
|
|
||
|
VIDIOC_ENCODER_CMD - VIDIOC_TRY_ENCODER_CMD - Execute an encoder command
|
||
|
|
||
|
|
||
|
Synopsis
|
||
|
========
|
||
|
|
||
|
.. c:function:: int ioctl( int fd, VIDIOC_ENCODER_CMD, struct v4l2_encoder_cmd *argp )
|
||
|
:name: VIDIOC_ENCODER_CMD
|
||
|
|
||
|
.. c:function:: int ioctl( int fd, VIDIOC_TRY_ENCODER_CMD, struct v4l2_encoder_cmd *argp )
|
||
|
:name: VIDIOC_TRY_ENCODER_CMD
|
||
|
|
||
|
|
||
|
Arguments
|
||
|
=========
|
||
|
|
||
|
``fd``
|
||
|
File descriptor returned by :ref:`open() <func-open>`.
|
||
|
|
||
|
``argp``
|
||
|
Pointer to struct :c:type:`v4l2_encoder_cmd`.
|
||
|
|
||
|
Description
|
||
|
===========
|
||
|
|
||
|
These ioctls control an audio/video (usually MPEG-) encoder.
|
||
|
``VIDIOC_ENCODER_CMD`` sends a command to the encoder,
|
||
|
``VIDIOC_TRY_ENCODER_CMD`` can be used to try a command without actually
|
||
|
executing it.
|
||
|
|
||
|
To send a command applications must initialize all fields of a struct
|
||
|
:c:type:`v4l2_encoder_cmd` and call
|
||
|
``VIDIOC_ENCODER_CMD`` or ``VIDIOC_TRY_ENCODER_CMD`` with a pointer to
|
||
|
this structure.
|
||
|
|
||
|
The ``cmd`` field must contain the command code. The ``flags`` field is
|
||
|
currently only used by the STOP command and contains one bit: If the
|
||
|
``V4L2_ENC_CMD_STOP_AT_GOP_END`` flag is set, encoding will continue
|
||
|
until the end of the current *Group Of Pictures*, otherwise it will stop
|
||
|
immediately.
|
||
|
|
||
|
A :ref:`read() <func-read>` or :ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>`
|
||
|
call sends an implicit START command to the encoder if it has not been
|
||
|
started yet. After a STOP command, :ref:`read() <func-read>` calls will read
|
||
|
the remaining data buffered by the driver. When the buffer is empty,
|
||
|
:ref:`read() <func-read>` will return zero and the next :ref:`read() <func-read>`
|
||
|
call will restart the encoder.
|
||
|
|
||
|
A :ref:`close() <func-close>` or :ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>`
|
||
|
call of a streaming file descriptor sends an implicit immediate STOP to
|
||
|
the encoder, and all buffered data is discarded.
|
||
|
|
||
|
These ioctls are optional, not all drivers may support them. They were
|
||
|
introduced in Linux 2.6.21.
|
||
|
|
||
|
|
||
|
.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
|
||
|
|
||
|
.. c:type:: v4l2_encoder_cmd
|
||
|
|
||
|
.. flat-table:: struct v4l2_encoder_cmd
|
||
|
:header-rows: 0
|
||
|
:stub-columns: 0
|
||
|
:widths: 1 1 2
|
||
|
|
||
|
* - __u32
|
||
|
- ``cmd``
|
||
|
- The encoder command, see :ref:`encoder-cmds`.
|
||
|
* - __u32
|
||
|
- ``flags``
|
||
|
- Flags to go with the command, see :ref:`encoder-flags`. If no
|
||
|
flags are defined for this command, drivers and applications must
|
||
|
set this field to zero.
|
||
|
* - __u32
|
||
|
- ``data``\ [8]
|
||
|
- Reserved for future extensions. Drivers and applications must set
|
||
|
the array to zero.
|
||
|
|
||
|
|
||
|
|
||
|
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||
|
|
||
|
.. _encoder-cmds:
|
||
|
|
||
|
.. flat-table:: Encoder Commands
|
||
|
:header-rows: 0
|
||
|
:stub-columns: 0
|
||
|
:widths: 3 1 4
|
||
|
|
||
|
* - ``V4L2_ENC_CMD_START``
|
||
|
- 0
|
||
|
- Start the encoder. When the encoder is already running or paused,
|
||
|
this command does nothing. No flags are defined for this command.
|
||
|
* - ``V4L2_ENC_CMD_STOP``
|
||
|
- 1
|
||
|
- Stop the encoder. When the ``V4L2_ENC_CMD_STOP_AT_GOP_END`` flag
|
||
|
is set, encoding will continue until the end of the current *Group
|
||
|
Of Pictures*, otherwise encoding will stop immediately. When the
|
||
|
encoder is already stopped, this command does nothing. mem2mem
|
||
|
encoders will send a ``V4L2_EVENT_EOS`` event when the last frame
|
||
|
has been encoded and all frames are ready to be dequeued and will
|
||
|
set the ``V4L2_BUF_FLAG_LAST`` buffer flag on the last buffer of
|
||
|
the capture queue to indicate there will be no new buffers
|
||
|
produced to dequeue. This buffer may be empty, indicated by the
|
||
|
driver setting the ``bytesused`` field to 0. Once the
|
||
|
``V4L2_BUF_FLAG_LAST`` flag was set, the
|
||
|
:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl will not block anymore,
|
||
|
but return an ``EPIPE`` error code.
|
||
|
* - ``V4L2_ENC_CMD_PAUSE``
|
||
|
- 2
|
||
|
- Pause the encoder. When the encoder has not been started yet, the
|
||
|
driver will return an ``EPERM`` error code. When the encoder is
|
||
|
already paused, this command does nothing. No flags are defined
|
||
|
for this command.
|
||
|
* - ``V4L2_ENC_CMD_RESUME``
|
||
|
- 3
|
||
|
- Resume encoding after a PAUSE command. When the encoder has not
|
||
|
been started yet, the driver will return an ``EPERM`` error code. When
|
||
|
the encoder is already running, this command does nothing. No
|
||
|
flags are defined for this command.
|
||
|
|
||
|
|
||
|
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||
|
|
||
|
.. _encoder-flags:
|
||
|
|
||
|
.. flat-table:: Encoder Command Flags
|
||
|
:header-rows: 0
|
||
|
:stub-columns: 0
|
||
|
:widths: 3 1 4
|
||
|
|
||
|
* - ``V4L2_ENC_CMD_STOP_AT_GOP_END``
|
||
|
- 0x0001
|
||
|
- Stop encoding at the end of the current *Group Of Pictures*,
|
||
|
rather than immediately.
|
||
|
|
||
|
|
||
|
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
|
||
|
The ``cmd`` field is invalid.
|
||
|
|
||
|
EPERM
|
||
|
The application sent a PAUSE or RESUME command when the encoder was
|
||
|
not running.
|