Add some comments on how the code should work. Basic idea is first
check input lipsync against audio track. Then check if we can drop the
picture based on output pts and then do same checked in OutputFrame as
some filters can output multiple pictures (yadif2x etc).
simple framerate conversion from 25 worked to 4,5,10,20,23,29.97,50.60.
Not sure if yadif2x and all work fully yet.
The PICTURE_RING_BUFFER used a fixed size, which when running out of available pictures
produces visible artefacts in the encoded stream. Allocating a new picture and keeping
track of them in a fifo is much simpler (in the multiple threads encoding scenario) and
solves the ring buffer overrun.
I have merged spu_RenderSubpictures and spu_SortSubpictures and removed the
blending from spu_RenderSubpictures. No functionnal changes except maybe
a bit for the transcode plugin.
Fixes issue for me when doing transcode{}:gather: --sout-keep and subtitle
overlaying from dvbs. Otherwise keeps last subtitles on video if new channel
doesn't contain dvbs track.
also consistenty as spu_Create is called on transcode_spu_new()
The stream_out_t chain creation is modified: all modules are created by
the core (or by stream_out_duplicate) instead of being created by the
previous module.
sout_StreamChain{New,Delete} replace sout_Stream{New,Delete} to handle
modules chains instead of individual modules
sout_Stream{New,Delete} are still used by those new functions but made
static inside stream_output.c
Remove now unneeded psz_chain from struct sout_instance_t
Replace pointer to chain of next module by pointer to next module in
struct sout_stream_t
Example use:
vlc --sout-all input.mp4 --sout
"#duplicate{dst=transcode{vcodec=mp2v},select=es=0,dst=transcode,select=es=1}:std{...}"
(dst=transcode without acodec/vcodec is a hack to pass the encoded stream to
stream_out_standard without transcoding)