[vlc-devel] [PATCH v1 00/33] Push Model for video filters

Steve Lhomme robux4 at ycbcr.xyz
Fri Sep 25 16:46:36 CEST 2020


This patchset change video filters (deinterlacers, converters, filters) into a
push model. Each filter sends its output into a "video sink" rather than 
returning one picture with potentially more pictures attached.

To achieve this a parallel system is added next to pf_video_filter and 
filter_chain_VideoFilter to gradually add the feature to filters. In the end
they all use the new system and pf_video_filter is replaced with the new 
signature.

Theses patches sit on top of picture_chain patchset sent on 2020-09-24 and
patchset picture_chain_GetAndClear​.
The whole branch can be found at https://code.videolan.org/robUx4/vlc/-/commits/pic_chain/6

Steve Lhomme (33):
  filter: add a function to do the picture filtering
  vout_subpictures: use helper function to filter a picture
  image: use helper function to filter a picture
  opencv_wrapper: use helper function to filter a picture
  video_filter: use helper function to filter a picture
  filters: allow filters to output multiple pictures without chaining
    them
  filter: allow using filters with a sink callback to filter into a
    single picture
  deinterlace: add a filter callback using the video sink
  fps: add a filter callback using the video sink
  filter_chain: allow filtering into a sink with
    filter_chain_VideoFilterInto
  video_output: keep the output of the static filters in a FIFO
  mosaic_bridge: output the filtered pictures directly into the picture
    chain
  transcode: use filter chains with multiple output
  filter_chain: use a local video sink to implement
    filter_chain_VideoFilter
  filter_chain: remove dead code
  fps: only support push mode
  deinterlace: only support push mode in common deinterlacer code
  mmal: deinterlace: only support push mode in common deinterlacer code
  vaapi: deinterlace: only support push mode in deinterlacer code
  vdpau: deinterlace: only support push mode in deinterlacer code
  picture_chain: remove unused vlc_picture_chain_AppendChain
  filter: add a wrapper for filters sending the output into a sink
  video_chroma: switch filters to push mode
  d3d11_surface: switch filters into push mode
  video_filter: add a helper function to push the output picture
  video_filter: use the filter push mode
  ci_filters: use the filter push mode
  chroma: chain: use the filter push mode
  opencv: use the filter push mode
  video_filter: replace unused pf_video_filter by pf_video_filter_into
  picture: remove unused picture_GetAndResetChain
  filter: rename pf_video_filter_into to pf_video_filter
  filter: rename VIDEO_FILTER_WRAPPER2 to VIDEO_FILTER_WRAPPER

 include/vlc_filter.h                          |  72 ++++++++++--
 include/vlc_picture.h                         |  22 ----
 modules/hw/d3d11/d3d11_deinterlace.c          |   4 +-
 modules/hw/d3d11/d3d11_filters.c              |  10 +-
 modules/hw/d3d11/d3d11_surface.c              |  15 +--
 modules/hw/d3d9/d3d9_filters.c                |  10 +-
 modules/hw/d3d9/dxa9.c                        |  15 +--
 modules/hw/d3d9/dxva2_deinterlace.c           |   4 +-
 modules/hw/mmal/converter.c                   |  16 ++-
 modules/hw/mmal/deinterlace.c                 |  17 ++-
 modules/hw/nvdec/chroma.c                     |  16 +--
 modules/hw/vaapi/chroma.c                     |  29 +++--
 modules/hw/vaapi/filters.c                    |  66 ++++++-----
 modules/hw/vdpau/adjust.c                     |   6 +-
 modules/hw/vdpau/chroma.c                     |  39 ++++---
 modules/hw/vdpau/deinterlace.c                |  17 ++-
 modules/hw/vdpau/sharpen.c                    |   6 +-
 modules/spu/audiobargraph_v.c                 |   6 +-
 modules/spu/logo.c                            |   8 +-
 modules/stream_out/mosaic_bridge.c            |  22 ++--
 modules/stream_out/transcode/video.c          |  42 ++++---
 modules/video_chroma/chain.c                  |   6 +-
 modules/video_chroma/cvpx.c                   |  44 +++----
 modules/video_chroma/grey_yuv.c               |   7 +-
 modules/video_chroma/i420_rgb.c               |  35 +++---
 modules/video_chroma/i420_yuy2.c              |  25 ++--
 modules/video_chroma/i422_i420.c              |  10 +-
 modules/video_chroma/i422_yuy2.c              |  21 ++--
 modules/video_chroma/rv32.c                   |  12 +-
 modules/video_chroma/swscale.c                |  13 +--
 modules/video_chroma/yuvp.c                   |   4 +-
 modules/video_chroma/yuy2_i420.c              |   9 +-
 modules/video_chroma/yuy2_i422.c              |  11 +-
 modules/video_filter/adjust.c                 |  28 ++---
 modules/video_filter/alphamask.c              |   6 +-
 modules/video_filter/anaglyph.c               |  12 +-
 modules/video_filter/antiflicker.c            |  12 +-
 modules/video_filter/ball.c                   |  10 +-
 modules/video_filter/blendbench.c             |  12 +-
 modules/video_filter/bluescreen.c             |  10 +-
 modules/video_filter/canvas.c                 |   6 +-
 modules/video_filter/ci_filters.m             |  22 ++--
 modules/video_filter/colorthres.c             |  22 ++--
 modules/video_filter/croppadd.c               |  10 +-
 modules/video_filter/deinterlace/common.c     |  47 ++++++--
 modules/video_filter/deinterlace/common.h     |   4 +-
 .../video_filter/deinterlace/deinterlace.c    |   6 +-
 modules/video_filter/edgedetection.c          |   8 +-
 modules/video_filter/erase.c                  |  10 +-
 modules/video_filter/extract.c                |  12 +-
 modules/video_filter/filter_picture.h         |   7 ++
 modules/video_filter/fps.c                    |  22 ++--
 modules/video_filter/freeze.c                 |  13 ++-
 modules/video_filter/gaussianblur.c           |  10 +-
 modules/video_filter/gradfun.c                |  11 +-
 modules/video_filter/gradient.c               |  10 +-
 modules/video_filter/grain.c                  |   9 +-
 modules/video_filter/hqdn3d.c                 |  12 +-
 modules/video_filter/invert.c                 |  10 +-
 modules/video_filter/magnify.c                |   8 +-
 modules/video_filter/mirror.c                 |  10 +-
 modules/video_filter/motionblur.c             |  10 +-
 modules/video_filter/motiondetect.c           |  11 +-
 modules/video_filter/oldmovie.c               |  20 ++--
 modules/video_filter/opencv_example.cpp       |  16 +--
 modules/video_filter/opencv_wrapper.c         |  17 ++-
 modules/video_filter/posterize.c              |  10 +-
 modules/video_filter/postproc.c               |   8 +-
 modules/video_filter/psychedelic.c            |  10 +-
 modules/video_filter/puzzle.c                 |  20 ++--
 modules/video_filter/puzzle.h                 |   2 +-
 modules/video_filter/ripple.c                 |  10 +-
 modules/video_filter/rotate.c                 |  22 ++--
 modules/video_filter/scale.c                  |  13 +--
 modules/video_filter/scene.c                  |  17 +--
 modules/video_filter/sepia.c                  |  10 +-
 modules/video_filter/sharpen.c                |   8 +-
 modules/video_filter/transform.c              |   9 +-
 modules/video_filter/vhs.c                    |  16 +--
 modules/video_filter/wave.c                   |  10 +-
 src/libvlccore.sym                            |   1 +
 src/misc/filter_chain.c                       | 109 ++++++++++--------
 src/misc/image.c                              |   7 +-
 src/video_output/video_output.c               |  29 ++++-
 src/video_output/vout_subpictures.c           |   4 +-
 85 files changed, 732 insertions(+), 655 deletions(-)

-- 
2.26.2



More information about the vlc-devel mailing list