mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 03:33:59 +08:00
[media] DocBook media: document codec draining flow
Document the interaction between VIDIOC_DECODER_CMD V4L2_DEC_CMD_STOP and VIDIOC_ENCODER_CMD V4L2_ENC_CMD_STOP to start the draining, the V4L2_EVENT_EOS event signalling all capture buffers are finished and ready to be dequeud, the new V4L2_BUF_FLAG_LAST buffer flag indicating the last buffer being dequeued from the capture queue, and the poll and VIDIOC_DQBUF ioctl return values once the queue is drained. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Kamil Debski <k.debski@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
6425f646ff
commit
8cee396bfa
@ -1127,6 +1127,18 @@ passed on to a DMA-capable hardware unit for further processing or output.
|
|||||||
Typically applications shall use this flag for output buffers if the data
|
Typically applications shall use this flag for output buffers if the data
|
||||||
in this buffer has not been created by the CPU but by some DMA-capable unit,
|
in this buffer has not been created by the CPU but by some DMA-capable unit,
|
||||||
in which case caches have not been used.</entry>
|
in which case caches have not been used.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_FLAG_LAST</constant></entry>
|
||||||
|
<entry>0x00100000</entry>
|
||||||
|
<entry>Last buffer produced by the hardware. mem2mem codec drivers
|
||||||
|
set this flag on the capture queue for the last buffer when the
|
||||||
|
<link linkend="vidioc-querybuf">VIDIOC_QUERYBUF</link> or
|
||||||
|
<link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl is called. Due to hardware
|
||||||
|
limitations, the last buffer may be empty. In this case the driver will set the
|
||||||
|
<structfield>bytesused</structfield> field to 0, regardless of the format. Any
|
||||||
|
Any subsequent call to the <link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl
|
||||||
|
will not block anymore, but return an &EPIPE;.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MASK</constant></entry>
|
<entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MASK</constant></entry>
|
||||||
|
@ -197,7 +197,17 @@ be muted when playing back at a non-standard speed.
|
|||||||
this command does nothing. This command has two flags:
|
this command does nothing. This command has two flags:
|
||||||
if <constant>V4L2_DEC_CMD_STOP_TO_BLACK</constant> is set, then the decoder will
|
if <constant>V4L2_DEC_CMD_STOP_TO_BLACK</constant> is set, then the decoder will
|
||||||
set the picture to black after it stopped decoding. Otherwise the last image will
|
set the picture to black after it stopped decoding. Otherwise the last image will
|
||||||
repeat. If <constant>V4L2_DEC_CMD_STOP_IMMEDIATELY</constant> is set, then the decoder
|
repeat. mem2mem decoders will stop producing new frames altogether. They will send
|
||||||
|
a <constant>V4L2_EVENT_EOS</constant> event when the last frame has been decoded
|
||||||
|
and all frames are ready to be dequeued and will set the
|
||||||
|
<constant>V4L2_BUF_FLAG_LAST</constant> 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
|
||||||
|
<structfield>bytesused</structfield> field to 0. Once the
|
||||||
|
<constant>V4L2_BUF_FLAG_LAST</constant> flag was set, the
|
||||||
|
<link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl will not block anymore,
|
||||||
|
but return an &EPIPE;.
|
||||||
|
If <constant>V4L2_DEC_CMD_STOP_IMMEDIATELY</constant> is set, then the decoder
|
||||||
stops immediately (ignoring the <structfield>pts</structfield> value), otherwise it
|
stops immediately (ignoring the <structfield>pts</structfield> value), otherwise it
|
||||||
will keep decoding until timestamp >= pts or until the last of the pending data from
|
will keep decoding until timestamp >= pts or until the last of the pending data from
|
||||||
its internal buffers was decoded.
|
its internal buffers was decoded.
|
||||||
|
@ -129,7 +129,15 @@ this command.</entry>
|
|||||||
encoding will continue until the end of the current <wordasword>Group
|
encoding will continue until the end of the current <wordasword>Group
|
||||||
Of Pictures</wordasword>, otherwise encoding will stop immediately.
|
Of Pictures</wordasword>, otherwise encoding will stop immediately.
|
||||||
When the encoder is already stopped, this command does
|
When the encoder is already stopped, this command does
|
||||||
nothing.</entry>
|
nothing. mem2mem encoders will send a <constant>V4L2_EVENT_EOS</constant> event
|
||||||
|
when the last frame has been decoded and all frames are ready to be dequeued and
|
||||||
|
will set the <constant>V4L2_BUF_FLAG_LAST</constant> 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
|
||||||
|
<structfield>bytesused</structfield> field to 0. Once the
|
||||||
|
<constant>V4L2_BUF_FLAG_LAST</constant> flag was set, the
|
||||||
|
<link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl will not block anymore,
|
||||||
|
but return an &EPIPE;.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_ENC_CMD_PAUSE</constant></entry>
|
<entry><constant>V4L2_ENC_CMD_PAUSE</constant></entry>
|
||||||
|
@ -186,6 +186,14 @@ In that case the application should be able to safely reuse the buffer and
|
|||||||
continue streaming.
|
continue streaming.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<term><errorcode>EPIPE</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para><constant>VIDIOC_DQBUF</constant> returns this on an empty
|
||||||
|
capture queue for mem2mem codecs if a buffer with the
|
||||||
|
<constant>V4L2_BUF_FLAG_LAST</constant> was already dequeued and no new buffers
|
||||||
|
are expected to become available.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
Loading…
Reference in New Issue
Block a user