Commit graph

52168 commits

Author SHA1 Message Date
Andreas Rheinhardt
0d73ce4bc4 avcodec/h263dec: Use av_unreachable() for unreachable code
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-26 03:38:37 +02:00
Andreas Rheinhardt
ded08d0b1b avcodec/msmpeg4dec: Use av_unreachable() for unreachable code
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-26 03:38:37 +02:00
Andreas Rheinhardt
ef95a8d7b5 avcodec/mpegvideo_enc: Use av_unreachable() for unreachable code
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-26 03:38:37 +02:00
Andreas Rheinhardt
a5ff6ea32d avcodec/asvenc: Simplify writing extradata
It is confusing, because the AV_RL32("ASUS") already
returns an endian-independent value, so converting
it via av_le2ne32() makes no real sense: one would need
to transform the native value to le and write it as
a natie endian uint32_t for it to make sense (the current
code only works because le2ne32 and ne2le32 are the same
for both endianness that we care about). Or one can just
use AV_RL32 and create the number via MKTAG().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-26 03:37:09 +02:00
Andreas Rheinhardt
05a5e2b576 avcodec/asvenc: Combine writing bits
Removes implicit checks for "do I need to output the buffer now?".
Codesize with Clang 19 with -O3 decreased from 7136B to 6108B
(although asv2_put_level() is now inlined).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-26 03:37:09 +02:00
Andreas Rheinhardt
0401ca714a avcodec/asvenc: Don't waste bits encoding non-visible part
Up until now, the encoder replicated all the border pixels
for incomplete 16x16 macroblocks. In case the available width
or height is <= 8, some of the luma blocks of the MB
do not correspond to actual input, so that we should encode
them using the least amount of bits. Zeroing the block coefficients
(as this commit does) achieves this, replicating the pixels
and performing an FDCT does not.

This commit also removes the frame copying code for insufficiently
aligned dimensions.

The vsynth3-asv[12] FATE tests use a 34x34 input file and are
therefore affected by this. As the ref updates show, the size
and checksum of the encoded changes, yet the decoded output
stays the same.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-26 03:37:09 +02:00
Frank Plowman
ae0f71a387 lavc/h2645_parse: More descriptive NALU header error
Signed-off-by: Frank Plowman <post@frankplowman.com>
2025-05-25 09:54:42 +08:00
Frank Plowman
0382291811 lavc/vvc: Fix divide-by-zero in LMCS param derivation
Add three missing requirements on bitstream conformance from 7.4.3.19 of
H.266 (V3).  Issue found using fuzzing.

Signed-off-by: Frank Plowman <post@frankplowman.com>
2025-05-25 09:35:21 +08:00
Frank Plowman
670089304a lavc/vvc: Avoid UB in DB strength derivation for PLT CUs
When called for palette-predicted CUs, boundary_strength could cause
undefined behaviour due to accessing uninitialised motion information.
The spec doesn't include this, but in the reference software it seems
the deblock strength is always set to 0 for palette CUs due to some
implementation details: perhaps this is a spec issue?

Signed-off-by: Frank Plowman <post@frankplowman.com>
2025-05-24 21:50:46 +08:00
Frank Plowman
a18b2c2696 lavc/vvc: Detect subpic overlaps at CTU level
In d5dbcc00d8, it was hoped that detection
of subpicture overlaps could be performed at the tile level, so as to
avoid introducing per-CTU checks. Unfortunately since that patch,
fuzzing has indicated there are some structures involving
pps_subpic_one_or_more_tiles_slice where tile-level checking is not
sufficient.  Performing the check at the CTU level should (touch wood)
be the be-all and and-all of this, as CTUs are the lowest common
denominator of the picture partitioning.

Signed-off-by: Frank Plowman <post@frankplowman.com>
2025-05-24 10:57:20 +08:00
Nuo Mi
363a7a34f6 lavc/vvc/plt: validate run and signalled_entries
Fixes a crash triggered by a fuzzed clip:
https://github.com/ffvvc/tests/tree/main/fuzz/passed/000256.bit

Reproduce with:
ffmpeg -i 000256.bit -f null -
2025-05-24 10:36:19 +08:00
Maxime Gervais
cbdb5e2477 ffv1enc_vulkan: fix array overflow 2025-05-24 02:28:13 +09:00
Lynne
56b85b689d aacdec_ac: fix signed overflow in ff_aac_ac_update_context()
The issue is that state->cur[] is 8-bits, but a+b+1 can overflow
before being clipped to 0xF in the following line, causing an incorrect
state to be saved for the next symbol.

This solves numerous bitstream desyncs, particularly when coefficients
with magnitude greater than 127 are sent.
2025-05-24 02:19:18 +09:00
James Almer
8eae65dc5c avcodec/lcevcdec: don't try to write to output frames directly
The buffer references may not be writable at this point, as the decoder
calls get_buffer2() with the AV_GET_BUFFER_FLAG_REF flag.

Fixes races as reported by tsan, producing correct output regardless of
threading choices.

Signed-off-by: James Almer <jamrial@gmail.com>
2025-05-22 19:28:35 -03:00
Lynne
977d1a24bc
vulkan/ffv1: fix sync issue in cached bitstream reader/writer
The issue is that there is an explicit lack of synchronization as only the very
first invocation writes symbols and updates the state, which other invocations
then store.
2025-05-23 05:23:44 +09:00
Dmitrii Ovchinnikov
f1b3e51950 avcodec/amfenc_h264: improve B-frame usability and simplify options
- Query GPU caps for B-frame support and warn if unsupported.
- Make `-max_b_frames` optional
- Drop explicit `-pa_lookahead_buffer_depth` requirement in
adaptive mode.
2025-05-21 15:42:30 +02:00
Andreas Rheinhardt
2a5ee83442 avcodec/atrac3: Use av_unreachable() instead of av_assert1(0)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
328ba54efa avcodec/4xm: Use av_unreachable() instead of av_assert0(0)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
5653e0b1fa avcodec/mjpegenc_common: Use av_unreachable() instead of av_assert0(0)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
85fb3453f8 avcodec/adpcm: Use av_unreachable() instead of av_assert0()
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
0bdb69119a avcodec/vp9: Replace av_assert(0) by av_unreachable()
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
2282a3740b avcodec/rv20enc: Use av_assert1() instead of av_assert0()
There is really no good reason to perform these checks in
release builds.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
a35917268d avcodec/mpegvideo encs: Add put_bits_assume_flushed() to encode_header
This allows the compiler to remove the implicit "Do I need to output
the PutBitContext buffer here?" checks.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
5d0e8fa4bb avcodec/vlc: Make assert check more strict
The earlier code allowed callers to use arbitrary values as
symbols_size as long as no symbols were present.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
ef58de7fdc avcodec/mpegvideo_{dec,motion}: Mark unreachable code as unreachable
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
57696f7c2b avcodec/wmaenc: Use av_unreachable() instead of av_assert0(0)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:52 +02:00
Andreas Rheinhardt
831a0d0c6b avcodec/speedhqenc: Use av_unreachable() for unreachable condition
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:46 +02:00
Andreas Rheinhardt
2df9c8da72 avcodec/e?ac3enc: Inform compiler about PutBitContext being blank
This turned out to be very beneficial: For GCC 13, the codesize
of ac3_output_frame_header went down from 4522B to 1247B and
from 10762B to 9298B for eac3_output_frame_header. For Clang 17,
the numbers went down from 3923B to 2477B and from 8338B to 6548B
(always with -O3).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:25 +02:00
Andreas Rheinhardt
4484e9b373 avcodec/put_bits: Allow to mark places where PutBitContext is flushed
This will allow the compiler to optimize the "is the cache full?"
branches away from some put_bits().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:25 +02:00
Andreas Rheinhardt
988e319b40 avcodec/dolby_e_parse: Use av_unreachable instead of av_assert0(0)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:25 +02:00
Andreas Rheinhardt
22e6e4e914 avcodec/utvideoenc: Remove always-false pixel format check
Mark it as unreachable instead.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:02:10 +02:00
Andreas Rheinhardt
d7d1379d06 avcodec/vlc: Make code more readable with av_unreachable()
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:01:43 +02:00
Andreas Rheinhardt
fc520ccb07 avcodec/pcm-dvdenc: Mark unreachable default cases as unreachable
Fixes a Clang warning when asserts are disabled:
"variable 'quant' is used uninitialized whenever switch default is taken
[-Wsometimes-uninitialized]"

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 12:01:30 +02:00
Andreas Rheinhardt
7a27357636 avcodec/mpeg4videodec: Mark impossible switch case as unreachable
Alternative to 8fc649b931.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 11:36:09 +02:00
Andreas Rheinhardt
b5824a6dab avcodec/proresenc_anatoliy: Mark impossible case as unreachable
Alternative fix for fix Coverity issue 1440385 (instead of
6106177ad6).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 11:35:31 +02:00
Andreas Rheinhardt
fc9e2a92c1 avcodec/amrwbdec: Mark default switch as unreachable
Alternative fix for Coverity issue #1473499
instead of a3bb269db9.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 11:16:25 +02:00
Andreas Rheinhardt
b6f84cd72a avcodec/svq3: Improve returning last picture
Use av_frame_move_ref() instead of av_frame_ref().
This allows to remove the separate variable for whether
we have already returned the delayed last pic. It also
makes stream looping work when looping multiple times;
previously the delayed pic was only output the first time,
because last_frame_output was never reset.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:52 +02:00
Andreas Rheinhardt
f362a19096 avcodec/svq3: Allocate picture buffers during init
Also allocate them jointly.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:52 +02:00
Andreas Rheinhardt
b8ec4f7b20 avcodec/svq3: Allocate motion_val jointly
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:52 +02:00
Andreas Rheinhardt
eacde6ee7b avcodec/svq3: Deduplicate allocating dummy frame
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:52 +02:00
Andreas Rheinhardt
cb54eca41a avcodec/svq3: Improve returned error codes
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:52 +02:00
Andreas Rheinhardt
0468b866ca avcodec/svq3: Factor out decoding extradata
Reduces indentation and avoids an extra variable for whether
a sequence header has been found.
It also fixes potential undefined behaviour:
NULL + 0 is undefined and happens when no extradata is available.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:52 +02:00
Andreas Rheinhardt
0b3dae6c63 avcodec/mpeg12enc: Combine put_bits()
This is a 16bit field in the spec, so using a single
put_bits() to write it is more natural.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:22 +02:00
Andreas Rheinhardt
f5f890fee4 avcodec/mpeg12dec: Remove nonsense comment
Everything in mpeg12dec.c is about decoding.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:10:05 +02:00
Andreas Rheinhardt
562192e283 avcodec/mpeg12dec: Remove redundant save_width/height
These have been added in 29644cb504
in 2007 at a time when the MPEG-1/2 parser just set
the AVCodecContext's dimensions when encountering a sequence header,
so that the checks for the coded dimensions didn't trigger.
Yet this is no more and so we can simply remove these redundant checks.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:09:55 +02:00
Andreas Rheinhardt
56497671dd avcodec/mpeg12dec: Set save_chroma_format also for VCR2
Otherwise the MpegEncContext would be unnecessarily reinitialized
once (this does not affect the output for an intra-only variant
like VCR2) in mpeg_decode_postinit().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 03:09:45 +02:00
Andreas Rheinhardt
a1e4be5740 avcodec/mpegvideo_dec: Move ff_mpv_report_decode_progress() to h263dec.c
It is its only user. Also make it static and call it
before ff_mpeg_draw_horiz_band().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 02:54:22 +02:00
Andreas Rheinhardt
e12cbf6095 avcodec/tests/avcodec: Check only frame-mt decoders set update_thread_ctx
Possible since 554b52b1b3.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 02:44:15 +02:00
Andreas Rheinhardt
a6f7b32085 avcodec/ratecontrol: Fix wrong sizeof expression
Fixes Coverity issue #1644200.
Introduced in 89a8033fc9.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 02:44:06 +02:00
Andreas Rheinhardt
36af32f9e5 avcodec/tests/.gitignore: Add apv test tool
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-05-21 02:43:22 +02:00