[FFmpeg-devel] [PATCH 00/39] Make mpegvideo encoders init-threadsafe
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Thu Dec 10 13:16:18 EET 2020
This patchset makes all mpegvideo encoders (i.e. all those that use
ff_mpv_encode_init()) init-threadsafe; some of the patches here
supersede earlier patches (namely #214-216 from my earlier
init-threadsafe patchset [1] as well as patches from the latter part of
my init-vlc patchset (said part actually dealt with init-threadsafety),
namely #181-183 [2]); also an error in [3] (which was not applied
because of this) is corrected (the earlier patch ignored that the
RLTables used by mpeg1/2 are initialized at two different places, so
guarding one of them with an AVOnce is not enough).
In order to make this patchset self-contained [4] from my earlier
init-threadsafe patchset has been included here unchanged.
Furthermore, there are also numerous fixes for RLTables interwoven in
this patchset.
Finally, the SpeedHQ encoder has also received attention. It called the
wrong function, leading to potential segfaults.
The mpegvideo decoders are my next target.
[1]: https://ffmpeg.org/pipermail/ffmpeg-devel/2020-December/273287.html
[2]: https://ffmpeg.org/pipermail/ffmpeg-devel/2020-November/272876.html
[3]: https://ffmpeg.org/pipermail/ffmpeg-devel/2020-November/272873.html
[4]: https://ffmpeg.org/pipermail/ffmpeg-devel/2020-December/273286.html
Andreas Rheinhardt (39):
avcodec/rl: Remove nonstatic storage of RL tables
avcodec/mpeg12: Don't initialize encoder-only parts of RLTable
avcodec/mpeg12: Make initializing VLCs thread-safe
avcodec/mpeg12: Reindentation
avcodec/mpeg12enc, speedhqenc: Avoid redundant copies of tables
avcodec/speedhq: Remove cast
avcodec/rl: Allow to create only a few VLC tables
avcodec/h261dec: Don't initialize unused VLCs
avcodec/msmpeg4dec: Don't initialize unused RL VLCs
avcodec/mpeg4videodec: Don't initialize unused RL VLCs
avcodec/ituh263dec: Don't initialize unused RL VLCs
avcodec/msmpeg4dec: Reuse identical RL VLCs
avcodec/msmpeg4dec: Reuse identical MV VLC
avcodec/h261dec: Don't use too big max_depth in get_vlc2()
avcodec/mpegvideo: Merge ff_mpv_decode_defaults into
ff_mpv_decode_init
avcodec/mpeg12dec: Remove redundant writes
avcodec/me_cmp: Remove ff_check_alignment()
avcodec/motion_est, mpegvideo: Make pointers to static storage const
avcodec/mpegvideo_enc: Make mpv_encode_defaults thread-safe
avcodec/h261dec: Don't initialize unused part of RLTable
avcodec/h261dec: Make decoder init-threadsafe
avcodec/h261dec: Reindentation
avcodec/h261enc: Make encoder init-threadsafe
avcodec/ituh263dec: Don't initialize unused parts of RLTable
avcodec/ituh263enc: Remove unused function parameter
avcodec/h263data, ituh263*: Make initializing RL inter table
thread-safe
avcodec/ituh263enc: Make static initializations thread-safe
avcodec/mpeg4video: Making initializing RLTable thread-safe
avcodec/mpeg4videoenc: Make encoder init-threadsafe
avcodec/msmpeg4: Make ff_msmpeg4_common_init() thread-safe
avcodec/msmpeg4: Reindentation
avcodec/msmpeg4enc: Don't use code for static init that can fail
avcodec/msmpeg4: Factor out common RLTable initialization code
avcodec/msmpeg4enc: Make msmpeg4 encoders init-threadsafe
avcodec/msmpeg4enc: Reindent after the last commit
avcodec/speedhqenc: Call correct function
avcodec/speedhq, speedhqenc: Make codecs init-threadsafe
avcodec/speedhqenc: Hardcode table to save space
configure, libavcodec/speedhq: Fix compiling SpeedHQ encoder
configure | 1 +
libavcodec/Makefile | 2 +-
libavcodec/eamad.c | 1 +
libavcodec/eatqi.c | 1 +
libavcodec/flvenc.c | 2 +-
libavcodec/h261.c | 13 ----
libavcodec/h261.h | 3 -
libavcodec/h261dec.c | 45 ++++++-------
libavcodec/h261enc.c | 16 +++--
libavcodec/h263.h | 2 +
libavcodec/h263data.c | 16 ++++-
libavcodec/h263data.h | 2 +-
libavcodec/h263dec.c | 1 -
libavcodec/ituh263dec.c | 12 ++--
libavcodec/ituh263enc.c | 39 +++++------
libavcodec/mdec.c | 1 +
libavcodec/me_cmp.c | 23 -------
libavcodec/me_cmp.h | 2 -
libavcodec/mjpegenc.c | 4 +-
libavcodec/motion_est.c | 12 ++--
libavcodec/motion_est.h | 4 +-
libavcodec/motion_est_template.c | 2 +-
libavcodec/mpeg12.c | 67 +++++++++----------
libavcodec/mpeg12.h | 3 +-
libavcodec/mpeg12dec.c | 17 ++---
libavcodec/mpeg12enc.c | 31 +++++----
libavcodec/mpeg4video.c | 14 +++-
libavcodec/mpeg4video.h | 3 +-
libavcodec/mpeg4videodec.c | 12 ++--
libavcodec/mpeg4videoenc.c | 26 ++++----
libavcodec/mpegvideo.c | 7 +-
libavcodec/mpegvideo.h | 3 +-
libavcodec/mpegvideo_enc.c | 34 +++++-----
libavcodec/msmpeg4.c | 110 +++++++++++++++++--------------
libavcodec/msmpeg4.h | 2 +-
libavcodec/msmpeg4data.c | 1 -
libavcodec/msmpeg4data.h | 1 -
libavcodec/msmpeg4dec.c | 23 +++----
libavcodec/msmpeg4enc.c | 63 ++++++++----------
libavcodec/rl.c | 53 ++++-----------
libavcodec/rl.h | 19 +++---
libavcodec/rv10.c | 1 -
libavcodec/rv10enc.c | 2 +-
libavcodec/rv20enc.c | 2 +-
libavcodec/rv34.c | 1 -
libavcodec/speedhq.c | 9 +--
libavcodec/speedhqenc.c | 47 ++++---------
libavcodec/wmv2enc.c | 2 +-
48 files changed, 339 insertions(+), 418 deletions(-)
--
2.25.1
More information about the ffmpeg-devel
mailing list