1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-28 01:52:19 +00:00
mpv/filters
wm4 485f335b69 filter: add async queue filter
This is supposed to enable communication between filter graphs on
separate threads. Having multiple threads makes only sense if they can
run concurrently with each other, which requires such an asynchronous
queue as a building block. (Probably.)

The basic idea is that you have two independent filters, which can be
each part of separate filter graphs, but which communicate into one
direction with an explicit queue. This is rather similar to unix pipes.
Just like unix pipes, the queue is limited in size, so that still some
data flow control enforced, and runaway memory usage is avoided.

This implementation is pretty dumb. In theory, you could avoid avoid
waking up the filter graphs in quite a lot of situations. For example,
you don't need to wake up the consumer filter if there are already
frames queued. Also, you could add "watermarks" that set a threshold at
which producer or consumer should be woken up to produce/consume more
frames (this would generally serve to "batch" multiple frames at once,
instead of performing high-frequency wakeups). But this is hard, so the
code is dumb. (I just deleted all related code when I still got
situations where wakeups were lost.)

This is actually salvaged and modified from a much older branch I had
lying around. It will be used in the next commit.
2020-02-29 21:52:00 +01:00
..
f_async_queue.c filter: add async queue filter 2020-02-29 21:52:00 +01:00
f_async_queue.h filter: add async queue filter 2020-02-29 21:52:00 +01:00
f_auto_filters.c f_auto_filters: always fall back to hw-download+yadif if no hw deint filter 2020-02-16 15:28:57 +01:00
f_auto_filters.h
f_autoconvert.c f_autoconvert: remove subfmt conversion BS 2020-01-17 15:19:05 +01:00
f_autoconvert.h f_autoconvert: remove subfmt conversion BS 2020-01-17 15:19:05 +01:00
f_decoder_wrapper.c f_decoder_wrapper: replace most public fields with setters/getters 2020-02-29 01:23:20 +01:00
f_decoder_wrapper.h f_decoder_wrapper: replace most public fields with setters/getters 2020-02-29 01:23:20 +01:00
f_demux_in.c f_demux_in: give it a slightly better filter name 2018-02-05 02:47:14 -08:00
f_demux_in.h video: make decoder wrapper a filter 2018-01-30 03:10:27 -08:00
f_hwtransfer.c f_hwtransfer: extend vaapi whitelist with some working formats 2020-01-17 15:13:23 +01:00
f_hwtransfer.h f_hwtransfer: move format fields to private struct 2020-01-12 01:47:42 +01:00
f_lavfi.c f_lavfi: don't propagate filter failure if creation fails 2020-02-16 16:21:03 +01:00
f_lavfi.h options: pre-check filter names when using vf/af libavfilter bridge 2019-11-25 20:29:42 +01:00
f_output_chain.c f_autoconvert: remove subfmt conversion BS 2020-01-17 15:19:05 +01:00
f_output_chain.h f_output_chain: fix typo 2018-04-15 23:11:33 +03:00
f_swresample.c Remove remains of Libav compatibility 2020-02-16 15:14:55 +01:00
f_swresample.h swresample: limit output size of audio frames 2018-02-03 05:01:29 -08:00
f_swscale.c video: mess with the filte chain to enable zimg IMGFMT_RGB30 output 2019-11-02 17:50:32 +01:00
f_swscale.h video: mess with the filte chain to enable zimg IMGFMT_RGB30 output 2019-11-02 17:50:32 +01:00
f_utils.c filters: add another dumb helper 2019-10-02 21:09:30 +02:00
f_utils.h filters: add another dumb helper 2019-10-02 21:09:30 +02:00
filter_internal.h
filter.c filter: decide how multi-threading is supposed to work 2020-02-29 21:49:14 +01:00
filter.h filter: add async queue filter 2020-02-29 21:52:00 +01:00
frame.c Implement backwards playback 2019-09-19 20:37:04 +02:00
frame.h Implement backwards playback 2019-09-19 20:37:04 +02:00
user_filters.c build: downgrade EGL requirement from 1.5 to 1.4 2019-12-16 00:37:18 +01:00
user_filters.h vf_gpu: add video filter using vo_gpu's renderer 2019-11-29 20:37:11 +01:00