1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00
Commit Graph

118756 Commits

Author SHA1 Message Date
Andreas Rheinhardt
39286d97f2 avcodec: Don't log to private context
While it is save for these codecs (they all have private contexts),
it is customary to always use the AVCodecContext for logging.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-08 01:05:46 +01:00
Andreas Rheinhardt
e6d07e45e0 avcodec/{h263,ituh263,msmpeg4,snow}dec: Use proper logcontext
The logging functions here can be reached by codecs without
private class, so that the log callback will receive a non-NULL
object whose AVClass pointer is NULL. Although the default log
callback handles this gracefully, it is probably an API violation.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-08 01:05:46 +01:00
Andreas Rheinhardt
ce1cec673e avcodec/mpeg12dec: Use CHROMA_* defines
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
8940a6153f avcodec/mjpegenc: Constify parent ctx in encode_block()
Said parent is shared between all slice contexts and encode_block()
can be run concurrently by slice threads, so the parent context
must not be (and is not) modified. So constify the pointers.

Reviewed-by: Ramiro Polla <ramiro.polla@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
60cae5019a avcodec/mjpegenc_common: Constify ff_mjpeg_encode_{dc,picture_header}()
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
5689d9c0f4 avcodec/mjpegenc: Don't use ff_ prefix for static functions
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
455ca92b31 avcodec/mjpegenc: Use forward decl for MpegEncContext, MJpegHuffmanCode
Avoids an indirect inclusion of mpegvideo.h in mjpegenc_common.c.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
85138c1434 avcodec/mpegvideo_enc, motion_est: Pre-center fcode_tab
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
c709a3d424 avcodec/mpegvideo: Move vbv_delay to Mpeg1Context
Only used there and only by the main thread.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
6e225123d8 avcodec/mpeg12enc: Simplify writing bits
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
d5db4ee30c avcodec/mjpegenc: Don't log to private context
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
6cdcf15e0a avcodec/mjpegenc: Remove nonsensical AMV options
Both these options are unsupported and silently ignored for AMV;
so it is better to not offer them at all.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
fc158f3d40 avcodec/speedhqenc: Inline ff_speedhq_mb_y_order_to_mb()
It is an extremely simple function that is only called once,
so it should be inlined.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
49c38761f1 avcodec/speedhqenc: Don't log to the private context
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
e117faddbf avcodec/mpegvideo: Mark ff_mpv_common_defaults() as av_cold
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
89a8033fc9 avcodec/mpegvideo: Move temp ratecontrol bufs to RateControlContext
Also only allocate them when they are needed (namely iff
adaptive quant is true) and allocate them jointly.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
6844e96116 avcodec/mpegvideo: Move ratecontrol-only options to RateControlContext
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
1ec1f1e236 avcodec/mpegvideo_enc: Move H.263 specific check to ituh263enc.c
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:03 +01:00
Andreas Rheinhardt
c3ab7362dd avcodec/mpegvideo_enc: Move vbv_delay warning to mpeg12enc.c
It is MPEG-1/2 only.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
137060d586 avcodec/mpegvideo_enc: Move q_scale_type check to mpeg12enc.c
The MPEG-2 encoder is the only encoder supporting q_scale_type.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
0c4b091bd6 avcodec/mpegvideo_enc: Move q_matrix init to init_matrices()
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
726adfafc6 avcodec/mpegvideo_enc: Don't init matrices unnecessarily for MJPEG
The MJPEG initialization happens later.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
41451b4eef avcodec/mpegvideo_enc: Only allocate inter matrices when needed
Also allocate them jointly with intra matrices when needed.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
a43124452f avcodec/mpegvideo_enc: Factor checks out of loop
Also move this code to init_matrices().

Reviewed-by: Ramiro Polla <ramiro.polla@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
7223363ccb avcodec/mpegvideo_enc: Set chroma_intra_matrix for SpeedHQ
Used with trellis; notice that inter_matrix is unused for
(intra-only) SpeedHQ, so it is irrelevant that its value changes.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
daff2df1a0 avcodec/mpegvideo_enc: Only allocate chroma intra matrices when needed
Also start factoring the matrix-init code out into a function
of its own to declutter ff_mpv_encode_init().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
70359de69f avcodec/mpeg4video: Move IS_3IV1 macro to mpeg4videodec.c
Also add parentheses around the replacement to make it safer.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
5df8c86b24 avcodec/mpeg4video: Split ff_mpeg4_pred_dc()
It currently does two things: a) Get a prediction for the dc
and the dc direction and b) process said prediction. Processing
the prediction differs for encoding (getting a diff) and decoding
(getting the level via diff+prediction). So having a common function
performing b) makes no sense.

Even worse, there is a decoding mode where the dc coefficient (diff)
is not coded specially and therefore unavailable before entering
the block decoding loop, so that one can only perform a). Before
this commit, the decoder simply called ff_mpeg4_pred_dc() twice;
the results of the b) part of the call before the loop were ignored
(but the compiler could not elide them because they involved error
messages) and a) was also performed twice.

This commit changes this by splitting b) out of ff_mpeg4_pred_dc()
and moving this code to decoder and encoder.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
c050269eda avcodec/mpeg4videodec: Bail out earlier when parsing
The scantables are unused for the parser (and in fact
the IDCT permutation used has not been initialized at all).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
f5f2c37a52 avcodec/ituh263dec: Reorder branches
(To perform this optimization a compiler would have to look
at both ff_rv_decode_dc() and av_log(). The latter seems very
unlikely.)

Reviewed-by: Ramiro Polla <ramiro.polla@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
17ff442adb avcodec/flvenc: Remove redundant setting of dc_scale_tables
h263_aic is always zero for FLV and ff_mpeg1_dc_scale_table
is already the default dc_scale table for both y and c.
h263_aic is also always zero for the FLV decoder.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
9e5a1b8693 avcodec/ituh263enc: Use memset where appropriate
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
607bc17b52 avcodec/ituh263enc: Make SVQ1+Snowenc stop calling ff_h263_encode_init()
They only do it for the mv_penalty table. Factor initializating
the static tables out into a function of its own; also move
everything not needed by SVQ1 or Snow behind #if CONFIG_H263_ENCODER
(this involved moving ff_h263_encode_motion() which is used
by svq1enc).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
9ca97756ac avcodec/ituh263enc: Combine branches
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
f67e5bf2cc avcodec/ituh263enc: Remove redundant setting of dc_scale_tables
ff_mpeg1_dc_scale_table is already the default dc_scale table
for both y and c.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
94f364289b avcodec/ituh263enc: Move MPEG-4 fcode_tab to mpeg4videoenc.c
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
3977abc89f avcodec/mpegutils: Move MAX_FCODE to mpegvideoenc.h
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
9479ee5038 avcodec/mpegvideo_enc: Move default_mv_penalty to h261enc.c
MPEG-1/2 and the H.263-based encoders overwrite the default later
and SpeedHQ and MJPEG-based encoders are intra-only and don't
need a mv_penalty table at all. So only H.261 uses this table.

Also add a comment to explain why it exists and is non-const.

Reviewed-by: Ramiro Polla <ramiro.polla@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
a02fb1a4f4 avcodec/h261: Use forward-declaration for MpegEncContext
Avoids an indirect inclusion of mpegvideo.h in h261data.c.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
7abc9c5e3d avcodec/h261dec: Don't call ff_set_qscale()
Most of what it does is unneeded for H.261.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
0c7e34856d avcodec/mpeg12dec: Mark flush as cold
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
4d8b706b1d avcodec/mpeg12dec: Don't count errors from first thread twice
Compilers can not perform this optimization on their own
given that they don't know that the different thread_context
pointers don't alias.
Also avoid using sequentially consistent operations with
atomics when only a single thread accesses them.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
094c2e7f5b avcodec/vc1dec: Don't initialize unused parts of ScanTable
The VC-1 decoders don't need ScanTable.raster_end as
they don't call any of the unquantize functions.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
38e8eefc9c avcodec/vc1_block: Inline y_dc_scale_table
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
8aa08c9fa0 avcodec/vc1_block, vc1dec: Don't use c_dc_scale(_table)?
It coincides with the luma values.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Andreas Rheinhardt
3defca7eae avcodec/rv34: Make ff_rv34_get_start_offset() honor its name
Up until now, it only returned the number of bits for the
start offset, but not the start offset; the GetBitContext
passed to it was unused.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-03-07 15:19:02 +01:00
Krzysztof Pyrkosz
f9b8f30680 avcodec/aarch64/vvc: Optimize vvc_avg{8, 10, 12}
This patch replaces integer widening with halving addition, and
multi-step "emulated" rounding shift with a single asm instruction doing
exactly that.

Benchmarks before and after:
A78
avg_8_64x64_neon:                                     2686.2 ( 6.12x)
avg_8_128x128_neon:                                  10734.2 ( 5.88x)
avg_10_64x64_neon:                                    2536.8 ( 5.40x)
avg_10_128x128_neon:                                 10079.0 ( 5.22x)
avg_12_64x64_neon:                                    2548.2 ( 5.38x)
avg_12_128x128_neon:                                 10133.8 ( 5.19x)

avg_8_64x64_neon:                                      897.8 (18.26x)
avg_8_128x128_neon:                                   3608.5 (17.37x)
avg_10_32x32_neon:                                     444.2 ( 8.51x)
avg_10_64x64_neon:                                    1711.8 ( 8.00x)
avg_12_64x64_neon:                                    1706.2 ( 8.02x)
avg_12_128x128_neon:                                  7010.0 ( 7.46x)

A72
avg_8_64x64_neon:                                     5823.4 ( 3.88x)
avg_8_128x128_neon:                                  17430.5 ( 4.73x)
avg_10_64x64_neon:                                    5228.1 ( 3.71x)
avg_10_128x128_neon:                                 16722.2 ( 4.17x)
avg_12_64x64_neon:                                    5379.1 ( 3.51x)
avg_12_128x128_neon:                                 16715.7 ( 4.17x)

avg_8_64x64_neon:                                     2006.5 (10.61x)
avg_8_128x128_neon:                                   9158.7 ( 8.96x)
avg_10_64x64_neon:                                    3357.7 ( 5.60x)
avg_10_128x128_neon:                                 12411.7 ( 5.56x)
avg_12_64x64_neon:                                    3317.5 ( 5.67x)
avg_12_128x128_neon:                                 12358.5 ( 5.58x)

A53
avg_8_64x64_neon:                                     8327.8 ( 5.18x)
avg_8_128x128_neon:                                  31631.3 ( 5.34x)
avg_10_64x64_neon:                                    8783.5 ( 4.98x)
avg_10_128x128_neon:                                 32617.0 ( 5.25x)
avg_12_64x64_neon:                                    8686.0 ( 5.06x)
avg_12_128x128_neon:                                 32487.5 ( 5.25x)

avg_8_64x64_neon:                                     6032.3 ( 7.17x)
avg_8_128x128_neon:                                  22008.5 ( 7.69x)
avg_10_64x64_neon:                                    7738.0 ( 5.68x)
avg_10_128x128_neon:                                 27813.8 ( 6.14x)
avg_12_64x64_neon:                                    7844.5 ( 5.60x)
avg_12_128x128_neon:                                 26999.5 ( 6.34x)

Signed-off-by: Martin Storsjö <martin@martin.st>
2025-03-07 15:51:20 +02:00
Dmitrii Ovchinnikov
7225e307be Added support for direct RGB input to AMF encoder 2025-03-06 15:38:58 +01:00
Dmitrii Ovchinnikov
c7ff7345eb Enable 10-bit output for RGB input in AMF HEVC and AV1
encoders
2025-03-06 15:38:03 +01:00
Brad Smith
30a8641465 lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang
Add a check for the existence of the vec_xl() function. Clang provides
the function even with VSX not enabled.
2025-03-06 14:21:38 +01:00