ソースを参照

Add vlc/decoder notes

Alexandre Janniaux 6 年 前
コミット
eb1935a68c
1 ファイル変更54 行追加0 行削除
  1. 54 0
      vlc_decoder.md

+ 54 - 0
vlc_decoder.md

@@ -0,0 +1,54 @@
+# decoder_owner
+
+During playback, decoder behaviour is handled by a decoder_owner.
+This owner controls play/pause, flush, drain, waiting, and decoding.
+
+The decoder behaviour with resources can be quite confusing because resources
+are sometimes allocated from **vout** memory and sometimes from decoder memory.
+Indeed, when the decoder behind the scene is a harware decoder, and especially
+when it is able to directly render the decoded picture with the correct timing
+on the video output, the picture is likely to be allocated by the API
+controlling this hardware decoder. This mecanism is called
+**inflight pictures** or **direct rendering** in VLC.
+
+Some examples of this can be found in the omxil/mediacodec decoder.
+
+# decoder
+
+## General architecture
+
+In VLC, a decoder is a special structure containing the following functions:
+
++ ``int pf_decode (decoder_t *, block_t *)``: used by audio and video decoder
+    to push the block into the actual decoder.
++ ``block_t *pf_packetize (decoder_t *, block_t ***)``: used by the different
+    packetizer, which are ``decoder_t`` objects too, to transform a list of
+    blocks into new blocks.
++ ``void pf_flush (decoder_t *)``: used by all decoder to perform a flush
+    operation so as to clean up the real decoder module.
++ ``block_t pf_get_cc (decoder_t *, decoder_cc_desc_t *)``: used by spu decoder
+    so as to // TODO
+
+When a block is decoded and direct rendering is disabled, the
+``decoder_QueueVideo`` is called and allows the ``decoder_owner`` to collect
+the picture.
+
+## Push-event architecture
+
+What we may want is a push-event architecture but some obstacles prevents an
+easy implementation:
+
+First, in the situation where only one event queue exists and because of the
+**direct rendering** feature, if a _pause_ order is made, it will be pushed
+after the decoding block order. This is great in the general case because you
+get full control of the pipeline behaviour but it leads to an unexpected
+playback of the queues block before pausing in the case of harware decoder.
+
+Then, we could argue that the decoder might need to be paused as soon as
+possible or flushed as soon as possible, for instance because we seeked in the
+video. As a consequence, we would need a way to push out of band order with a
+higher priority than usual data.
+
+## Memory allocation
+
+## Date, tick and timestamp