]> git.sesse.net Git - ffmpeg/log
ffmpeg
3 years agoavcodec/bitstream: Add second function to create VLCs
Andreas Rheinhardt [Sat, 24 Oct 2020 22:54:21 +0000 (00:54 +0200)]
avcodec/bitstream: Add second function to create VLCs

When using ff_init_vlc_sparse() to create a VLC, three input tables are
used: A table for lengths, one for codes and one for symbols; the latter
one can be omitted, then a default one will be used. These input tables
will be traversed twice, once to get the long codes (which will be put
into subtables) and once for the small codes. The long codes are then
sorted so that entries that should be in the same subtable are
contiguous.

This commit adds an alternative to ff_init_vlc_sparse():
ff_init_vlc_from_lengths(). It is based upon the observation that if
lengths, codes and symbols tables are permuted (in the same way) so that
the codes are ordered from left to right in the corresponding tree and
if said tree is complete (i.e. every non-leaf node has two children),
the codes can be easily computed from the lengths and are therefore
redundant. This means that if one initializes such a VLC with explicitly
coded lengths, codes and symbols, the codes can be avoided; and even if
one has no explicitly coded symbols, it might still be beneficial to
remove the codes even when one has to add a new symbol table, because
codes are typically longer than symbols so that the latter often fit
into a smaller type, saving space.

Furthermore, given that the codes here are by definition ordered from
left to right, it is unnecessary to sort them again; for the same
reason, one does not have to traverse the input twice. This function
proved to be faster than ff_init_vlc_sparse() whenever it has been
benchmarked.

This function is usable for static tables (they can simply be permuted
once) as well as in scenarios where the tables are naturally ordered
from left to right in the tree; the latter e.g. happens with Smacker,
Theora and several other formats.

In order to make it also usable for (static) tables with incomplete trees,
negative lengths are used to indicate that there is an open end of a
certain length.

Finally, ff_init_vlc_from_lengths() has one downside compared to
ff_init_vlc_sparse(): The latter uses tables that can be reused by
encoders. Of course, one could calculate the needed table at runtime
if one so wishes, but it is nevertheless an obstacle.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavfilter/aeval: add timeline support for aeval
Paul B Mahol [Tue, 8 Dec 2020 14:17:49 +0000 (15:17 +0100)]
avfilter/aeval: add timeline support for aeval

3 years agohlsenc: expand hls_fmp4_init_filename with strftime()
Nikola Pajkovsky [Tue, 27 Oct 2020 11:28:59 +0000 (12:28 +0100)]
hlsenc: expand hls_fmp4_init_filename with strftime()

the init.mp4 can be expanded with strftime the same way as
hls_segment_filename.

Signed-off-by: Nikola Pajkovsky <nikola@pajkovsky.cz>
Signed-off-by: liuqi05 <liuqi05@kuaishou.com>
3 years agoavformat/hls: Fixes overwriting existing #EXT-X-PROGRAM-DATE-TIME value in HLS playlist
Vignesh Ravichandran [Tue, 1 Dec 2020 10:10:40 +0000 (15:40 +0530)]
avformat/hls: Fixes overwriting existing #EXT-X-PROGRAM-DATE-TIME value in HLS playlist

fix ticket: 8989

This is is due to the following behavior in the current code:
1. The initial_prog_date_time gets set to the current local time
2. The existing playlist (.m3u8) file gets parsed and the segments
   present are added to the variant stream
3. The new segment is created and added
4. The existing segments and the new segment are written to the
   playlist file. The initial_prog_date_time from point 1 is used
   for calculating "#EXT-X-PROGRAM-DATE-TIME" for the segments,
   which results in incorrect "#EXT-X-PROGRAM-DATE-TIME" values
   for existing segments
The following approach fixes this bug:
1. Add a new variable "discont_program_date_time" of type double
   to HLSSegment struct
2. Store the "EXT-X-PROGRAM-DATE-TIME" value from the existing
   segments in this variable
3. When writing to playlist file if "discont_program_date_time"
   is set, then use that value for "EXT-X-PROGRAM-DATE-TIME" else
   use the value present in vs->initial_prog_date_time

Signed-off-by: Vignesh Ravichandran <vignesh.ravichandran02@gmail.com>
Signed-off-by: liuqi05 <liuqi05@kuaishou.com>
3 years agoavfilter/f_perms: add timeline support
Paul B Mahol [Mon, 7 Dec 2020 20:05:37 +0000 (21:05 +0100)]
avfilter/f_perms: add timeline support

3 years agoavfilter/af_earwax: fix filter behavior
Paul B Mahol [Fri, 4 Dec 2020 16:54:05 +0000 (17:54 +0100)]
avfilter/af_earwax: fix filter behavior

Previous filter output was incorrect. New one actually follows
graph in comments described on side of filter taps.

3 years agoavcodec/dynamic_hdr10_plus: remove unused const variables
James Almer [Mon, 7 Dec 2020 17:28:50 +0000 (14:28 -0300)]
avcodec/dynamic_hdr10_plus: remove unused const variables

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavcodec/dynamic_hdr10_plus: don't take a GetBitContext as input argument
James Almer [Sun, 6 Dec 2020 15:30:14 +0000 (12:30 -0300)]
avcodec/dynamic_hdr10_plus: don't take a GetBitContext as input argument

Create a local one instead from a byte buffer input argument.
This prevents skipping bytes that may belong to another SEI message.

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavcodec/hevc_sei: keep size in sync with the registered ITU-T T35 SEI GetBitContext
James Almer [Sun, 6 Dec 2020 15:30:13 +0000 (12:30 -0300)]
avcodec/hevc_sei: keep size in sync with the registered ITU-T T35 SEI GetBitContext

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavcodec/hevc_sei: split Dynamic HDR10+ SEI parsing into its own function
James Almer [Sun, 6 Dec 2020 14:04:05 +0000 (11:04 -0300)]
avcodec/hevc_sei: split Dynamic HDR10+ SEI parsing into its own function

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agodoc/filters: fix obvious mistake for minimum accepted value
Paul B Mahol [Mon, 7 Dec 2020 12:12:42 +0000 (13:12 +0100)]
doc/filters: fix obvious mistake for minimum accepted value

3 years agoavformat/tee: allow packets with negative timestamps
Jan Ekström [Tue, 14 Jul 2020 08:54:08 +0000 (11:54 +0300)]
avformat/tee: allow packets with negative timestamps

As this is a meta muxer and the same flag is set with the fifo
meta muxer, there is really no reason not to have this set here
as well.

Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
3 years agoavcodec/nvdec: Add support for decoding monochrome av1
Philip Langdale [Sun, 6 Dec 2020 04:25:29 +0000 (20:25 -0800)]
avcodec/nvdec: Add support for decoding monochrome av1

The nvidia hardware explicitly supports decoding monochrome content,
presumably for the AVIF alpha channel. Supporting this requires an
adjustment in av1dec and explicit monochrome detection in nvdec.

I'm not sure why the monochrome path in av1dec did what it did - it
seems non-functional - YUV440P doesn't seem a logical pix_fmt for
monochrome and conditioning on chroma sub-sampling doesn't make sense.
So I changed it.

I've tested 8bit content, but I haven't found a way to create a 10bit
sample, so that path is untested for now.

3 years agoavcodec/h264idct_template: Fix integer overflow in ff_h264_chroma422_dc_dequant_idct()
Michael Niedermayer [Thu, 5 Nov 2020 21:14:21 +0000 (22:14 +0100)]
avcodec/h264idct_template: Fix integer overflow in ff_h264_chroma422_dc_dequant_idct()

Fixes: signed integer overflow: -2105540608 - 2105540608 cannot be represented in type 'int'
Fixes: 26870/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_H264_fuzzer-5656647567147008
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/dsfdec: Check block_align more completely
Michael Niedermayer [Thu, 5 Nov 2020 20:22:13 +0000 (21:22 +0100)]
avformat/dsfdec: Check block_align more completely

Fixes: infinite loop
Fixes: 26865/clusterfuzz-testcase-minimized-ffmpeg_dem_DSF_fuzzer-5649473830912000
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/av1dec: check size before addition in probing
Michael Niedermayer [Thu, 5 Nov 2020 19:04:20 +0000 (20:04 +0100)]
avformat/av1dec: check size before addition in probing

Fixes: signed integer overflow: 175 + 2147483571 cannot be represented in type 'int'
Fixes: 26833/clusterfuzz-testcase-minimized-ffmpeg_dem_IMAGE2_fuzzer-5969501214212096
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/realtextdec: read_ts() in 64bits
Michael Niedermayer [Thu, 5 Nov 2020 15:19:18 +0000 (16:19 +0100)]
avformat/realtextdec: read_ts() in 64bits

Fixes: signed integer overflow: 46671062 * 100 cannot be represented in type 'int'
Fixes: 26826/clusterfuzz-testcase-minimized-ffmpeg_dem_REALTEXT_fuzzer-5644062910316544
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/dv: fix timestamps of audio packets in case of dropped corrupt audio frames
Marton Balint [Sat, 31 Oct 2020 16:51:34 +0000 (17:51 +0100)]
avformat/dv: fix timestamps of audio packets in case of dropped corrupt audio frames

By using the frame counter (and the video time base) for audio pts we lose some
timestamp precision but we ensure that video and audio coming from the same DV
frame are always in sync.

This patch also makes timestamps after seek consistent and it should also fix
the timestamps when the audio clock is unlocked and have a completely
indpendent clock source. (E.g. runs on fixed 48009 Hz which should have been
exact 48000 Hz)

Fixes out of sync timestamps in ticket #8762.

Signed-off-by: Marton Balint <cus@passwd.hu>
3 years agoavcodec/dynamic_hdr10_plus: use get_bits_long() where needed
James Almer [Sun, 6 Dec 2020 16:36:37 +0000 (13:36 -0300)]
avcodec/dynamic_hdr10_plus: use get_bits_long() where needed

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavcodec/hevc_sei: replace en dash character with a hyphen
James Almer [Sun, 6 Dec 2020 15:29:18 +0000 (12:29 -0300)]
avcodec/hevc_sei: replace en dash character with a hyphen

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavfilter/vf_showinfo: include the correct Dynamic HDR10+ header
James Almer [Sun, 6 Dec 2020 15:08:58 +0000 (12:08 -0300)]
avfilter/vf_showinfo: include the correct Dynamic HDR10+ header

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavfilter/af_biquads: add shortcut to set internal precision
Paul B Mahol [Sun, 6 Dec 2020 13:39:47 +0000 (14:39 +0100)]
avfilter/af_biquads: add shortcut to set internal precision

3 years agoavformat/mspdec: Microsoft Paint (MSP) demuxer
Peter Ross [Thu, 8 Oct 2020 10:04:58 +0000 (21:04 +1100)]
avformat/mspdec: Microsoft Paint (MSP) demuxer

Signed-off-by: Peter Ross <pross@xvid.org>
3 years agoavcodec/msp2dec: Microsoft Paint (MSP) version 2 decoder
Peter Ross [Thu, 8 Oct 2020 10:04:58 +0000 (21:04 +1100)]
avcodec/msp2dec: Microsoft Paint (MSP) version 2 decoder

Signed-off-by: Peter Ross <pross@xvid.org>
3 years agohwcontext_vulkan: wait and signal semaphores when transferring to CUDA
Lynne [Sat, 5 Dec 2020 22:51:47 +0000 (23:51 +0100)]
hwcontext_vulkan: wait and signal semaphores when transferring to CUDA

Same as when downloading. Not sure why this isn't done, probably
because the CUDA code predates the sync mechanism we settled on.

3 years agofate: add a test for HDR10+ metadata in HEVC
Mohammad Izadi [Mon, 23 Nov 2020 21:29:37 +0000 (13:29 -0800)]
fate: add a test for HDR10+ metadata in HEVC

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agofftools/ffprobe: add support for HDR10+ metadata
Mohammad Izadi [Mon, 23 Nov 2020 21:29:36 +0000 (13:29 -0800)]
fftools/ffprobe: add support for HDR10+ metadata

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavfilter/vf_showinfo: add support for HDR10+ metadata
Mohammad Izadi [Mon, 23 Nov 2020 21:29:35 +0000 (13:29 -0800)]
avfilter/vf_showinfo: add support for HDR10+ metadata

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavcodec/hevc_sei: add support for HDR10+ metadata
Mohammad Izadi [Mon, 23 Nov 2020 21:29:34 +0000 (13:29 -0800)]
avcodec/hevc_sei: add support for HDR10+ metadata

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavfilter/af_afreqshift: add level option
Paul B Mahol [Sat, 5 Dec 2020 13:44:14 +0000 (14:44 +0100)]
avfilter/af_afreqshift: add level option

3 years agoavfilter: add asubcut filter
Paul B Mahol [Mon, 30 Nov 2020 08:49:03 +0000 (09:49 +0100)]
avfilter: add asubcut filter

3 years agolibavformat/mov.c: export vendor id as metadata
Thierry Foucu [Wed, 18 Nov 2020 20:09:37 +0000 (12:09 -0800)]
libavformat/mov.c: export vendor id as metadata

3 years agoavformat/rtsp: prefer to use MAX_URL_SIZE for url and command buffer
Limin Wang [Sun, 15 Nov 2020 02:45:15 +0000 (10:45 +0800)]
avformat/rtsp: prefer to use MAX_URL_SIZE for url and command buffer

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
3 years agoavutil/opt: add AV_OPT_FLAG_DEPRECATED option
Limin Wang [Thu, 19 Nov 2020 14:13:55 +0000 (22:13 +0800)]
avutil/opt: add AV_OPT_FLAG_DEPRECATED option

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
3 years agoavdevice/decklink: remove the duplicated warning message
Limin Wang [Sun, 29 Nov 2020 00:07:46 +0000 (08:07 +0800)]
avdevice/decklink: remove the duplicated warning message

 ./ffmpeg -list_devices true -f decklink -i dummy
[Blackmagic DeckLink indev @ 0x2f96d00] The "list_devices" option is deprecated: list available devices
[decklink @ 0x2f96400] The -list_devices option is deprecated and will be removed. Please use ffmpeg -sources decklink instead.
->
[Blackmagic DeckLink indev @ 0x306ed00] The "list_devices" option is deprecated: use ffmpeg -sources decklink instead

Reviewed-by: Marton Balint <cus@passwd.hu>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
3 years agoavcodec/av1dec: Fix leak in case of failure
Andreas Rheinhardt [Fri, 4 Dec 2020 17:09:48 +0000 (18:09 +0100)]
avcodec/av1dec: Fix leak in case of failure

A reference to an AV1RawFrameHeader and consequently the
AV1RawFrameHeader itself and everything it has a reference to leak
if the hardware has no AV1 decoding capabilities or if some other error
happens. It happens e.g. in the cbs-av1-av1-1-b8-02-allintra FATE-test;
it has just been masked because the return value of ffmpeg (which
indicates failure when using Valgrind or ASAN) is ignored when doing
tests of type md5.

Reviewed-by: James Almer <jamrial@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/cdgraphics: Check frame before clearing
Michael Niedermayer [Fri, 4 Dec 2020 00:07:04 +0000 (01:07 +0100)]
avcodec/cdgraphics: Check frame before clearing

Fixes: null pointer dereference
Fixes: 27730/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_CDGRAPHICS_fuzzer-6212402236096512
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/mpc8: Check remaining space in mpc8_parse_seektable()
Michael Niedermayer [Fri, 30 Oct 2020 20:50:32 +0000 (21:50 +0100)]
avformat/mpc8: Check remaining space in mpc8_parse_seektable()

Fixes: Fixes infinite loop
Fixes: 26704/clusterfuzz-testcase-minimized-ffmpeg_dem_MPC8_fuzzer-6327056939614208
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/wavdec: Check for EOF in cues reading
Michael Niedermayer [Sun, 1 Nov 2020 21:18:49 +0000 (22:18 +0100)]
avformat/wavdec: Check for EOF in cues reading

Fixes: Timeout (>20sec -> 1ms)
Fixes: 26793/clusterfuzz-testcase-minimized-ffmpeg_dem_WAV_fuzzer-5674966852567040
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/vqf: Check len for COMM chunks
Michael Niedermayer [Sun, 1 Nov 2020 19:20:02 +0000 (20:20 +0100)]
avformat/vqf: Check len for COMM chunks

Fixes: Infinite loop
Fixes: 26696/clusterfuzz-testcase-minimized-ffmpeg_dem_VQF_fuzzer-5648269168082944
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/mov: Use av_sat_add64() in mov_read_sidx()
Michael Niedermayer [Sat, 31 Oct 2020 11:06:21 +0000 (12:06 +0100)]
avformat/mov: Use av_sat_add64() in mov_read_sidx()

This avoids a potential integer overflow, no testcase is known

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/mov: Avoid overflow in end computation in mov_read_custom()
Michael Niedermayer [Sat, 31 Oct 2020 11:01:50 +0000 (12:01 +0100)]
avformat/mov: Avoid overflow in end computation in mov_read_custom()

Fixes: signed integer overflow: 18 + 9223372036854775799 cannot be represented in type 'long'
Fixes: 26731/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5696846019952640
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavformat/id3v2: Sanity check tlen before alloc and uncompress
Michael Niedermayer [Sat, 7 Nov 2020 20:39:21 +0000 (21:39 +0100)]
avformat/id3v2: Sanity check tlen before alloc and uncompress

Fixes: Timeout (>20sec -> 65ms)
Fixes: 26896/clusterfuzz-testcase-minimized-ffmpeg_dem_DAUD_fuzzer-5691024049176576
Fixes: 27627/clusterfuzz-testcase-minimized-ffmpeg_dem_AEA_fuzzer-4907019324358656
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
3 years agoavfilter/af_arnndn: add mix option
Paul B Mahol [Fri, 4 Dec 2020 22:50:57 +0000 (23:50 +0100)]
avfilter/af_arnndn: add mix option

Mostly useful to listen to actual noise.

3 years agoavfilter/vf_v360: fix several problems with 'perspective' output
Michael Koch [Fri, 4 Dec 2020 18:43:26 +0000 (19:43 +0100)]
avfilter/vf_v360: fix several problems with 'perspective' output

The image center wasn't preserved, the output image was mirror reversed,
and rotations were made around wrong axes.
I did also remove the vector normalization, because it's sure that the vector
is already normalized if it's calculated from sin() and cos() terms.

3 years agoavcodec/ffwavesynth: Mark decoder as init-threadsafe
Andreas Rheinhardt [Sun, 29 Nov 2020 22:18:19 +0000 (23:18 +0100)]
avcodec/ffwavesynth: Mark decoder as init-threadsafe

Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/utils: Remove ff_codec_open2_recursive()
Andreas Rheinhardt [Fri, 27 Nov 2020 00:12:01 +0000 (01:12 +0100)]
avcodec/utils: Remove ff_codec_open2_recursive()

This function existed to enable codecs with non-threadsafe init functions
to initialize other codecs despite the fact that normally no two codecs
with non-threadsafe init functions can be initialized at the same time
(there is a mutex guarding this). Yet there are no users of this
function any more as all users have been made thread-safe (switching
away from ff_codec_open2_recursive() was required for this as said
function requires the caller to hold the lock to the mutex guarding the
initializations and this is only true for codecs with the
FF_CODEC_CAP_INIT_THREADSAFE flag unset); so remove it.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/tiff: Make decoder init-threadsafe
Andreas Rheinhardt [Fri, 27 Nov 2020 00:09:04 +0000 (01:09 +0100)]
avcodec/tiff: Make decoder init-threadsafe

The only thing that stands in the way of adding the
FF_CODEC_CAP_INIT_THREADSAFE flag to the TIFF decoder is its usage
of ff_codec_open2_recursive(): This function requires its caller to hold
the lock for the mutex that guards initialization of AVCodecContexts
whose codecs have a non-threadsafe init function and only callers whose
codec does not have the FF_CODEC_CAP_INIT_THREADSAFE flag set hold said
lock (the others don't need to care about said lock). But one can set
the flag if one switches to avcodec_open2() at the same time.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/faxcompr: Make ff_ccitt_unpack_init() thread-safe
Andreas Rheinhardt [Fri, 27 Nov 2020 00:05:25 +0000 (01:05 +0100)]
avcodec/faxcompr: Make ff_ccitt_unpack_init() thread-safe

This will allow to make the TIFF decoder's init function thread-safe.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/smvjpegdec: Make decoder init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 23:25:44 +0000 (00:25 +0100)]
avcodec/smvjpegdec: Make decoder init-threadsafe

The only thing that stands in the way of adding the
FF_CODEC_CAP_INIT_THREADSAFE flag to the SMV JPEG decoder is its usage
of ff_codec_open2_recursive(): This function requires its caller to hold
the lock for the mutex that guards initialization of AVCodecContexts
whose codecs have a non-threadsafe init function and only callers whose
codec does not have the FF_CODEC_CAP_INIT_THREADSAFE flag set hold said
lock (the others don't need to care about said lock). But one can set
the flag if one switches to avcodec_open2() at the same time.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/cri: Make decoder init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 22:59:39 +0000 (23:59 +0100)]
avcodec/cri: Make decoder init-threadsafe

The only thing that stands in the way of adding the
FF_CODEC_CAP_INIT_THREADSAFE flag to the Cintel RAW decoder is its usage
of ff_codec_open2_recursive(): This function requires its caller to hold
the lock for the mutex that guards initialization of AVCodecContexts
whose codecs have a non-threadsafe init function and only callers whose
codec does not have the FF_CODEC_CAP_INIT_THREADSAFE flag set hold said
lock (the others don't need to care about said lock). But one can set
the flag if one switches to avcodec_open2() at the same time.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec: Fix invalid uses of ff_codec_open2_recursive()
Andreas Rheinhardt [Thu, 26 Nov 2020 22:16:04 +0000 (23:16 +0100)]
avcodec: Fix invalid uses of ff_codec_open2_recursive()

Normally no two codecs with FF_CODEC_CAP_INIT_THREADSAFE unset
can be initialized at the same time: a mutex in avcodec_open2()
ensures this. This implies that one cannot simply open a codec
with a non-threadsafe init-function from the init function of
a codec whose own init function is not threadsafe either as the child
codec couldn't acquire the lock.

ff_codec_open2_recursive() exists to get around this limitation:
If the init function of the child codec to be initialized is not
thread-safe, the mutex is unlocked, the child is initialized and
the mutex is locked again. This of course has as a prerequisite that
the parent AVCodecContext actually holds the lock, i.e. that the
parent codec's init function is not thread-safe. If it is, then one
can (and has to) just use avcodec_open2() directly (if the child's
init function is not thread-safe, then avcodec_open2() will have to
acquire the mutex itself (and potentially wait for it), so that it is
perfectly fine for an otherwise thread-safe init function to open
a codec with a potentially non-thread-safe init function via
avcodec_open2()).

Yet several of the users of ff_codec_open2_recursive() have the
FF_CODEC_CAP_INIT_THREADSAFE flag set; this only worked because
all the child codecs' init functions were thread-safe themselves
so that ff_codec_open2_recursive() didn't touch the mutex at all.
But of course the real solution to this is to directly use
avcodec_open2().

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/mxpegdec: Fix memleaks upon init failure
Andreas Rheinhardt [Thu, 26 Nov 2020 21:16:13 +0000 (22:16 +0100)]
avcodec/mxpegdec: Fix memleaks upon init failure

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/mjpegdec: Fix memleak upon init failure
Andreas Rheinhardt [Thu, 26 Nov 2020 20:54:54 +0000 (21:54 +0100)]
avcodec/mjpegdec: Fix memleak upon init failure

This affected all decoders that used ff_mjpeg_decode_init() as init
function; and it also affected decoders that open jpeg decoders via
ff_codec_open2_recursive() as well as MxPEG.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/smc: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 18:22:52 +0000 (19:22 +0100)]
avcodec/smc: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/sipr: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 18:22:15 +0000 (19:22 +0100)]
avcodec/sipr: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/shorten: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 18:18:04 +0000 (19:18 +0100)]
avcodec/shorten: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/sgirledec: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 18:16:32 +0000 (19:16 +0100)]
avcodec/sgirledec: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/sgienc: Combine av_log() statements
Andreas Rheinhardt [Thu, 26 Nov 2020 18:15:16 +0000 (19:15 +0100)]
avcodec/sgienc: Combine av_log() statements

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/sgienc: Mark encoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 18:09:46 +0000 (19:09 +0100)]
avcodec/sgienc: Mark encoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/sgidec: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 18:07:20 +0000 (19:07 +0100)]
avcodec/sgidec: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/tmv: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 18:02:28 +0000 (19:02 +0100)]
avcodec/tmv: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/ulti: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 17:56:06 +0000 (18:56 +0100)]
avcodec/ulti: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/ws-snd1: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 17:53:24 +0000 (18:53 +0100)]
avcodec/ws-snd1: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xxan: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 17:12:54 +0000 (18:12 +0100)]
avcodec/xxan: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xxan: Cleanup generically on init failure
Andreas Rheinhardt [Thu, 26 Nov 2020 17:11:29 +0000 (18:11 +0100)]
avcodec/xxan: Cleanup generically on init failure

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xsubenc: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 17:08:38 +0000 (18:08 +0100)]
avcodec/xsubenc: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xsubdec: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:52:44 +0000 (17:52 +0100)]
avcodec/xsubdec: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xl: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:48:29 +0000 (17:48 +0100)]
avcodec/xl: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xfacedec: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:46:01 +0000 (17:46 +0100)]
avcodec/xfacedec: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xan: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:44:38 +0000 (17:44 +0100)]
avcodec/xan: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/xan: Cleanup generically on init failure
Andreas Rheinhardt [Thu, 26 Nov 2020 16:43:48 +0000 (17:43 +0100)]
avcodec/xan: Cleanup generically on init failure

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/yuv4dec: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:40:17 +0000 (17:40 +0100)]
avcodec/yuv4dec: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/y41penc: Mark encoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:38:43 +0000 (17:38 +0100)]
avcodec/y41penc: Mark encoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/y41pdec: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:38:23 +0000 (17:38 +0100)]
avcodec/y41pdec: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/yop: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:15:51 +0000 (17:15 +0100)]
avcodec/yop: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/cljrdec: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 16:11:03 +0000 (17:11 +0100)]
avcodec/cljrdec: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/loco: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 15:50:44 +0000 (16:50 +0100)]
avcodec/loco: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/pcm: Mark decoders as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 15:40:42 +0000 (16:40 +0100)]
avcodec/pcm: Mark decoders as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/pcm: Make encoders init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 15:37:31 +0000 (16:37 +0100)]
avcodec/pcm: Make encoders init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/adpcmenc: Mark encoders as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 13:31:06 +0000 (14:31 +0100)]
avcodec/adpcmenc: Mark encoders as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/adpcm: Mark decoders as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 13:26:17 +0000 (14:26 +0100)]
avcodec/adpcm: Mark decoders as init-threadsafe

They don't modify any global state

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/cdtoons: Mark decoder as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 13:24:00 +0000 (14:24 +0100)]
avcodec/cdtoons: Mark decoder as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/a64multienc: Mark encoders as init-threadsafe
Andreas Rheinhardt [Thu, 26 Nov 2020 13:15:01 +0000 (14:15 +0100)]
avcodec/a64multienc: Mark encoders as init-threadsafe

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavfilter/af_stereotools: add support for commands
Paul B Mahol [Fri, 4 Dec 2020 14:37:43 +0000 (15:37 +0100)]
avfilter/af_stereotools: add support for commands

3 years agoavfilter/af_stereotools: add timeline support
Paul B Mahol [Fri, 4 Dec 2020 14:22:06 +0000 (15:22 +0100)]
avfilter/af_stereotools: add timeline support

3 years agoavfilter/af_stereotools: add two more modes
Paul B Mahol [Fri, 4 Dec 2020 10:53:34 +0000 (11:53 +0100)]
avfilter/af_stereotools: add two more modes

3 years agofftools/cmdutils: also print warnings when using -sinks and -sources
Marton Balint [Thu, 8 Oct 2020 20:26:09 +0000 (22:26 +0200)]
fftools/cmdutils: also print warnings when using -sinks and -sources

Signed-off-by: Marton Balint <cus@passwd.hu>
3 years agoavdevice/decklink: warn about too old decklink API version
Marton Balint [Thu, 8 Oct 2020 19:31:24 +0000 (21:31 +0200)]
avdevice/decklink: warn about too old decklink API version

Signed-off-by: Marton Balint <cus@passwd.hu>
3 years agoavdevice/decklink_enc: simplify usage of buffercount type
Marton Balint [Thu, 8 Oct 2020 21:12:24 +0000 (23:12 +0200)]
avdevice/decklink_enc: simplify usage of buffercount type

Also remove some leftover declaration of CreateDeckLinkIteratorInstance().

Signed-off-by: Marton Balint <cus@passwd.hu>
3 years agoavdevice/decklink_dec: add support for 50/60 fps timecode
Marton Balint [Sat, 5 Sep 2020 21:29:24 +0000 (23:29 +0200)]
avdevice/decklink_dec: add support for 50/60 fps timecode

Signed-off-by: Marton Balint <cus@passwd.hu>
3 years agoavutil/timecode: add av_timecode_init_from_components
Marton Balint [Sat, 5 Sep 2020 21:04:28 +0000 (23:04 +0200)]
avutil/timecode: add av_timecode_init_from_components

Signed-off-by: Marton Balint <cus@passwd.hu>
3 years agoavutil/timecode: allow drop frame timecodes for multiples of 30000/1001 fps
Marton Balint [Sat, 5 Sep 2020 20:45:52 +0000 (22:45 +0200)]
avutil/timecode: allow drop frame timecodes for multiples of 30000/1001 fps

Signed-off-by: Marton Balint <cus@passwd.hu>
3 years agoavutil/film_grain_params: fix doxy for ar_coeff_* fields
James Almer [Thu, 3 Dec 2020 16:25:21 +0000 (13:25 -0300)]
avutil/film_grain_params: fix doxy for ar_coeff_* fields

Signed-off-by: James Almer <jamrial@gmail.com>
3 years agoavcodec/pthread_slice: Don't use static variable, fix race
Andreas Rheinhardt [Sat, 28 Nov 2020 22:23:22 +0000 (23:23 +0100)]
avcodec/pthread_slice: Don't use static variable, fix race

ff_slice_thread_init() uses a static variable to hold a function
pointer, although the value of said pointer needn't be saved between
different runs of this function at all.

The reason for this being so is probably that said pointer points to
a static function (if used); but storage class specifiers like "static"
are not part of the type of an object and so including it in the pointer
declaration is wrong (anyway, "static" means different things in both
contexts: for the function declaration it affects linkage, for the
variable storage duration).

Using a static variable here can lead to races, e.g. when initializing
VP9 (for which said function pointer was added) and H.264 with slice
threading. The latter has the FF_CODEC_CAP_INIT_THREADSAFE flag set and
is therefore unaffected by the lock guarding initializations of
decoders.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavcodec/mpeg12enc: Disallow using MPEG-2 intra VLC table for mpeg1video
Andreas Rheinhardt [Tue, 24 Nov 2020 14:32:04 +0000 (15:32 +0100)]
avcodec/mpeg12enc: Disallow using MPEG-2 intra VLC table for mpeg1video

Using MPEG-2 intra VLC tables is spec-incompliant for MPEG-1 and given
that an MPEG-1 bitstream can't signal whether MPEG-2 intra VLC tables
have been used the output is broken. Therefore this option is removed
immediately without any deprecation period.

Reviewed-by: James Almer <jamrial@gmail.com>
Reviewed-by: Marton Balint <cus@passwd.hu>
Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 years agoavfilter/af_acrossover: add per output band gain
Paul B Mahol [Wed, 2 Dec 2020 12:48:32 +0000 (13:48 +0100)]
avfilter/af_acrossover: add per output band gain

3 years agoavutil/avsscanf: fix possible overreads when dealing with %c or %s
Paul B Mahol [Wed, 2 Dec 2020 12:46:22 +0000 (13:46 +0100)]
avutil/avsscanf: fix possible overreads when dealing with %c or %s

3 years agoavfilter/af_acrossover: remove pointless allocation of static size
Paul B Mahol [Wed, 2 Dec 2020 11:38:29 +0000 (12:38 +0100)]
avfilter/af_acrossover: remove pointless allocation of static size

3 years agoavfilter/af_acrossover: document roll-off of each filter order
Paul B Mahol [Wed, 2 Dec 2020 11:28:01 +0000 (12:28 +0100)]
avfilter/af_acrossover: document roll-off of each filter order