The branch, master has been updated
via dd092f7fd966c62598c05555667144ca91642340 (commit)
via 946a1dbd94f5e896f3dce57addcf95d1d15b9c4a (commit)
via e9be8b831d0439fbde7f7a7a017ab6dea79988e4 (commit)
via 2523235a3161c4ed7c33c54cf6d458710d1e6923 (commit)
via ef3e337079e4da4bc3c73f59fab61a631f87e12b (commit)
via ab70751c8aad9e3fb7a29b0b5871ec3e57664979 (commit)
via df1b6f9cfd7b33f85b3536c79d271b7f7ac3d5b6 (commit)
via 1d68ae7389fd2b2f59b1eb795de12151875abd45 (commit)
from a2210902ffd18e22cf8824c390bbcd87833d0211 (commit)
- Log -----------------------------------------------------------------
commit dd092f7fd966c62598c05555667144ca91642340
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 11:02:46 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/avcodec: Simplify sentinel checks
There is no need to check the whole AVChannelLayout; checking
its nb_channels is enough.
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index 9df6f7efd4..14aca0f164 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -716,18 +716,22 @@ int attribute_align_arg
avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr
return ff_encode_receive_frame(avctx, frame);
}
-#define WRAP_CONFIG(allowed_type, field, field_type, terminator) \
+#define WRAP_CONFIG(allowed_type, field, var, field_type, sentinel_check) \
do { \
- static const field_type end = terminator; \
if (codec->type != (allowed_type)) \
return AVERROR(EINVAL); \
- *out_configs = (field); \
+ const field_type *ptr = codec->field; \
+ *out_configs = ptr; \
+ if (ptr) { \
for (int i = 0;; i++) { \
- if (!(field) || !memcmp(&(field)[i], &end, sizeof(end))) { \
+ const field_type var = ptr[i]; \
+ if (sentinel_check) { \
*out_num_configs = i; \
break; \
} \
} \
+ } else \
+ *out_num_configs = 0; \
return 0; \
} while (0)
@@ -764,15 +768,15 @@ int ff_default_get_supported_config(const AVCodecContext
*avctx,
switch (config) {
FF_DISABLE_DEPRECATION_WARNINGS
case AV_CODEC_CONFIG_PIX_FORMAT:
- WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->pix_fmts, enum AVPixelFormat,
AV_PIX_FMT_NONE);
+ WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, pix_fmts, pix_fmt, enum AVPixelFormat,
pix_fmt == AV_PIX_FMT_NONE);
case AV_CODEC_CONFIG_FRAME_RATE:
- WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates,
AVRational, {0});
+ WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, supported_framerates, framerate,
AVRational, framerate.num == 0);
case AV_CODEC_CONFIG_SAMPLE_RATE:
- WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->supported_samplerates, int, 0);
+ WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, supported_samplerates, samplerate,
int, samplerate == 0);
case AV_CODEC_CONFIG_SAMPLE_FORMAT:
- WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->sample_fmts, enum
AVSampleFormat, AV_SAMPLE_FMT_NONE);
+ WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, sample_fmts, sample_fmt, enum
AVSampleFormat, sample_fmt == AV_SAMPLE_FMT_NONE);
case AV_CODEC_CONFIG_CHANNEL_LAYOUT:
- WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts, AVChannelLayout,
{0});
+ WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, ch_layouts, ch_layout,
AVChannelLayout, ch_layout.nb_channels == 0);
FF_ENABLE_DEPRECATION_WARNINGS
case AV_CODEC_CONFIG_COLOR_RANGE:
commit 946a1dbd94f5e896f3dce57addcf95d1d15b9c4a
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 10:32:20 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/tests/avcodec: Check codec {pix,sample}_fmt etc. arrays
E.g. check that the ordinary entries are valid (e.g. no negative sample
rates, must have pix fmt descriptor) and also that the sentinels
are valid where they contain redundant information.
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/tests/avcodec.c b/libavcodec/tests/avcodec.c
index b45bd9d08c..893175c285 100644
--- a/libavcodec/tests/avcodec.c
+++ b/libavcodec/tests/avcodec.c
@@ -17,6 +17,7 @@
*/
#include "libavutil/opt.h"
+#include "libavutil/pixdesc.h"
#include "libavcodec/codec.h"
#include "libavcodec/codec_desc.h"
#include "libavcodec/codec_internal.h"
@@ -55,6 +56,30 @@ static int priv_data_size_wrong(const FFCodec *codec)
return 0;
}
+#define ARRAY_CHECK(field, var, type, is_sentinel, check, sentinel_check) \
+do { \
+ const type *ptr = codec->field; \
+ if (!ptr) \
+ break; \
+ type var = *ptr; \
+ if (is_sentinel) { \
+ ERR("Codec %s sets " #field ", but without valid elements.\n"); \
+ break; \
+ } \
+ do { \
+ if (!(check)) { \
+ ERR("Codec's %s " #field " array contains invalid element\n");\
+ break; \
+ } \
+ ++ptr; \
+ var = *ptr; \
+ } while (!(is_sentinel)); \
+ if (!(sentinel_check)) { \
+ ERR("Codec's %s " #field " array has malformed sentinel\n"); \
+ break; \
+ } \
+} while (0)
+
int main(void){
void *iter = NULL;
const AVCodec *codec = NULL;
@@ -86,6 +111,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
AV_CODEC_CAP_CHANNEL_CONF |
AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
ERR("Non-audio codec %s has audio-only capabilities set\n");
+ } else {
+FF_DISABLE_DEPRECATION_WARNINGS
+ ARRAY_CHECK(supported_samplerates, sample_rate, int, sample_rate
== 0,
+ sample_rate > 0, 1);
+ ARRAY_CHECK(sample_fmts, sample_fmt, enum AVSampleFormat,
sample_fmt == AV_SAMPLE_FMT_NONE,
+ (unsigned)sample_fmt < AV_SAMPLE_FMT_NB, 1);
+ static const AVChannelLayout zero_channel_layout = { 0 };
+ ARRAY_CHECK(ch_layouts, ch_layout, AVChannelLayout,
ch_layout.nb_channels == 0,
+ av_channel_layout_check(&ch_layout), !memcmp(ptr,
&zero_channel_layout, sizeof(ch_layout)));
+FF_ENABLE_DEPRECATION_WARNINGS
}
if (codec->type != AVMEDIA_TYPE_VIDEO) {
FF_DISABLE_DEPRECATION_WARNINGS
@@ -146,6 +181,11 @@ FF_DISABLE_DEPRECATION_WARNINGS
av_log(NULL, AV_LOG_FATAL, "Encoder %s is missing the
sample_fmts field\n", codec->name);
ret = 1;
}
+ } else if (codec->type == AVMEDIA_TYPE_VIDEO) {
+ ARRAY_CHECK(pix_fmts, pix_fmt, enum AVPixelFormat, pix_fmt ==
AV_PIX_FMT_NONE,
+ av_pix_fmt_desc_get(pix_fmt), 1);
+ ARRAY_CHECK(supported_framerates, framerate, AVRational,
framerate.num == 0,
+ framerate.num > 0 && framerate.den > 0,
framerate.den == 0);
FF_ENABLE_DEPRECATION_WARNINGS
}
if (codec2->caps_internal & (FF_CODEC_CAP_USES_PROGRESSFRAMES |
commit e9be8b831d0439fbde7f7a7a017ab6dea79988e4
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 09:10:22 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/tests/avcodec: Test that decoders don't set encoder-only fields
For decoders, the pixel format is negotiated via the get_format callback
(if there is a choice at all), so decoders should not set pix_fmts.
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/tests/avcodec.c b/libavcodec/tests/avcodec.c
index d1a28c1935..b45bd9d08c 100644
--- a/libavcodec/tests/avcodec.c
+++ b/libavcodec/tests/avcodec.c
@@ -185,6 +185,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
codec2->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)
ERR("Decoder %s is marked as setting pkt_dts when it doesn't
have"
"any effect\n");
+FF_DISABLE_DEPRECATION_WARNINGS
+ if (codec->type == AVMEDIA_TYPE_VIDEO && (codec->pix_fmts ||
codec->supported_framerates))
+ ERR("Decoder %s sets pix_fmts or supported_framerates.\n");
+FF_ENABLE_DEPRECATION_WARNINGS
}
if (priv_data_size_wrong(codec2))
ERR_EXT("Private context of codec %s is impossibly-sized (size
%d).",
commit 2523235a3161c4ed7c33c54cf6d458710d1e6923
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 10:47:06 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/amfdec: Don't set AVCodec.pix_fmts
It is not supposed to be set by decoders (where format negotiation
happens via the get_format callback).
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/amfdec.c b/libavcodec/amfdec.c
index 7b038c6181..1a2eb9392c 100644
--- a/libavcodec/amfdec.c
+++ b/libavcodec/amfdec.c
@@ -44,14 +44,6 @@
//will be in public headers soon
#define AMF_VIDEO_DECODER_OUTPUT_FORMAT L"OutputDecodeFormat"
-const enum AVPixelFormat amf_dec_pix_fmts[] = {
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_P010,
- AV_PIX_FMT_P012,
- AV_PIX_FMT_AMF_SURFACE,
- AV_PIX_FMT_NONE
-};
-
static const AVCodecHWConfigInternal *const amf_hw_configs[] = {
&(const AVCodecHWConfigInternal) {
.public = {
@@ -716,7 +708,6 @@ const FFCodec ff_##x##_amf_decoder = { \
.bsfs = bsf_name, \
.p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_AVOID_PROBING, \
.p.priv_class = &amf_decode_class, \
- CODEC_PIXFMTS_ARRAY(amf_dec_pix_fmts), \
.hw_configs = amf_hw_configs, \
.p.wrapper_name = "amf", \
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, \
commit ef3e337079e4da4bc3c73f59fab61a631f87e12b
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 08:51:09 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/tests/avcodec: Test color_ranges and alpha_modes
Test that they are only set by video codecs.
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/tests/avcodec.c b/libavcodec/tests/avcodec.c
index dde8226384..d1a28c1935 100644
--- a/libavcodec/tests/avcodec.c
+++ b/libavcodec/tests/avcodec.c
@@ -89,7 +89,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
}
if (codec->type != AVMEDIA_TYPE_VIDEO) {
FF_DISABLE_DEPRECATION_WARNINGS
- if (codec->pix_fmts || codec->supported_framerates)
+ if (codec->pix_fmts || codec->supported_framerates ||
+ codec2->color_ranges || codec2->alpha_modes)
ERR("Non-video codec %s has video-only fields set\n");
FF_ENABLE_DEPRECATION_WARNINGS
if (codec2->caps_internal & FF_CODEC_CAP_EXPORTS_CROPPING)
commit ab70751c8aad9e3fb7a29b0b5871ec3e57664979
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 08:22:59 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/codec_internal: Use bitfield for alpha_modes
Right now, FFCodec contains a dedicated pointer for
alpha_mode; this is wasteful, as there is only a very limited
range of options for this value, namely four.
So store it as a two-bit bitfield like color_ranges.
This reduces sizeof(FFCodec) by 16 here (the placement
of alpha_mode entailed unnecessary padding) and
saves 11328B of .data.rel.ro here (on a standard build with
no external libraries).
(If it were not for effective-type violations, one could
share the code and the table with AV_CODEC_CONFIG_COLOR_RANGE.)
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index 00f5447b52..9df6f7efd4 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -23,6 +23,8 @@
* AVCodecContext functions for libavcodec
*/
+#include <assert.h>
+
#include "config.h"
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
@@ -30,7 +32,6 @@
#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/emms.h"
-#include "libavutil/fifo.h"
#include "libavutil/imgutils.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
@@ -41,12 +42,10 @@
#include "codec_desc.h"
#include "codec_internal.h"
#include "decode.h"
-#include "encode.h"
#include "frame_thread_encoder.h"
#include "hwconfig.h"
#include "internal.h"
#include "libavutil/refstruct.h"
-#include "thread.h"
/**
* Maximum size in bytes of extradata.
@@ -737,7 +736,17 @@ static const enum AVColorRange color_range_tab[] = {
AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED,
};
-static const uint8_t color_range_offsets[] = {
+static const enum AVAlphaMode alpha_mode_tab[] = {
+ AVALPHA_MODE_PREMULTIPLIED, AVALPHA_MODE_STRAIGHT,
AVALPHA_MODE_UNSPECIFIED,
+ AVALPHA_MODE_PREMULTIPLIED, AVALPHA_MODE_UNSPECIFIED
+};
+
+static_assert((int)AVCOL_RANGE_MPEG == (int)AVALPHA_MODE_PREMULTIPLIED,
"unexpected enum values");
+static_assert((int)AVCOL_RANGE_JPEG == (int)AVALPHA_MODE_STRAIGHT, "unexpected
enum values");
+static_assert(AVCOL_RANGE_UNSPECIFIED == 0 && AVALPHA_MODE_UNSPECIFIED == 0,
"unexpected enum values");
+static_assert(AVCOL_RANGE_NB == 3 && AVALPHA_MODE_NB == 3, "unexpected enum
values");
+
+static const uint8_t offset_tab[] = {
[AVCOL_RANGE_MPEG] = 3,
[AVCOL_RANGE_JPEG] = 1,
[AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG] = 0,
@@ -771,7 +780,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
return AVERROR(EINVAL);
unsigned color_ranges = codec2->color_ranges;
if (color_ranges)
- *out_configs = color_range_tab + color_range_offsets[color_ranges];
+ *out_configs = color_range_tab + offset_tab[color_ranges];
else
*out_configs = NULL;
*out_num_configs = av_popcount(color_ranges);
@@ -783,7 +792,15 @@ FF_ENABLE_DEPRECATION_WARNINGS
return 0;
case AV_CODEC_CONFIG_ALPHA_MODE:
- WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec2->alpha_modes, enum AVAlphaMode,
AVALPHA_MODE_UNSPECIFIED);
+ if (codec->type != AVMEDIA_TYPE_VIDEO)
+ return AVERROR(EINVAL);
+ unsigned alpha_modes = codec2->alpha_modes;
+ if (alpha_modes)
+ *out_configs = alpha_mode_tab + offset_tab[alpha_modes];
+ else
+ *out_configs = NULL;
+ *out_num_configs = av_popcount(alpha_modes);
+ return 0;
default:
return AVERROR(EINVAL);
diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h
index 0d13a50fed..eea982e56c 100644
--- a/libavcodec/codec_internal.h
+++ b/libavcodec/codec_internal.h
@@ -133,7 +133,7 @@ typedef struct FFCodec {
/**
* Internal codec capabilities FF_CODEC_CAP_*.
*/
- unsigned caps_internal:26;
+ unsigned caps_internal:24;
/**
* Is this a decoder?
@@ -146,6 +146,12 @@ typedef struct FFCodec {
*/
unsigned color_ranges:2;
+ /**
+ * This field determines the alpha modes supported by an encoder.
+ * Should be set to a bitmask of AVALPHA_MODE_PREMULTIPLIED and
AVALPHA_MODE_STRAIGHT.
+ */
+ unsigned alpha_modes:2;
+
/**
* This field determines the type of the codec (decoder/encoder)
* and also the exact callback cb implemented by the codec.
@@ -153,11 +159,6 @@ typedef struct FFCodec {
*/
unsigned cb_type:3;
- /**
- * This field determines the alpha modes supported by an encoder.
- */
- const enum AVAlphaMode *alpha_modes;
-
int priv_data_size;
/**
* @name Frame-level threading support functions
diff --git a/libavcodec/exrenc.c b/libavcodec/exrenc.c
index 54f63d9eb6..68eb683aa5 100644
--- a/libavcodec/exrenc.c
+++ b/libavcodec/exrenc.c
@@ -553,7 +553,5 @@ const FFCodec ff_exr_encoder = {
FF_CODEC_ENCODE_CB(encode_frame),
.close = encode_close,
CODEC_PIXFMTS(AV_PIX_FMT_GRAYF32, AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GBRAPF32),
- .alpha_modes = (const enum AVAlphaMode[]) {
- AVALPHA_MODE_PREMULTIPLIED, AVALPHA_MODE_UNSPECIFIED
- },
+ .alpha_modes = AVALPHA_MODE_PREMULTIPLIED,
};
diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c
index da538518a5..a2fec89560 100644
--- a/libavcodec/libjxlenc.c
+++ b/libavcodec/libjxlenc.c
@@ -793,9 +793,7 @@ const FFCodec ff_libjxl_encoder = {
FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP |
FF_CODEC_CAP_ICC_PROFILES,
CODEC_PIXFMTS_ARRAY(libjxl_supported_pixfmts),
- .alpha_modes = (const enum AVAlphaMode[]) {
- AVALPHA_MODE_STRAIGHT, AVALPHA_MODE_PREMULTIPLIED,
AVALPHA_MODE_UNSPECIFIED
- },
+ .alpha_modes = AVALPHA_MODE_STRAIGHT | AVALPHA_MODE_PREMULTIPLIED,
.p.priv_class = &libjxl_encode_class,
.p.wrapper_name = "libjxl",
};
@@ -816,9 +814,7 @@ const FFCodec ff_libjxl_anim_encoder = {
FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP |
FF_CODEC_CAP_ICC_PROFILES,
CODEC_PIXFMTS_ARRAY(libjxl_supported_pixfmts),
- .alpha_modes = (const enum AVAlphaMode[]) {
- AVALPHA_MODE_STRAIGHT, AVALPHA_MODE_PREMULTIPLIED,
AVALPHA_MODE_UNSPECIFIED
- },
+ .alpha_modes = AVALPHA_MODE_STRAIGHT | AVALPHA_MODE_PREMULTIPLIED,
.p.priv_class = &libjxl_encode_class,
.p.wrapper_name = "libjxl",
};
diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c
index 96894bf7fd..e627bf83fc 100644
--- a/libavcodec/pngenc.c
+++ b/libavcodec/pngenc.c
@@ -1299,9 +1299,7 @@ const FFCodec ff_png_encoder = {
AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY8A,
AV_PIX_FMT_GRAY16BE, AV_PIX_FMT_YA16BE,
AV_PIX_FMT_MONOBLACK),
- .alpha_modes = (const enum AVAlphaMode[]) {
- AVALPHA_MODE_STRAIGHT, AVALPHA_MODE_UNSPECIFIED
- },
+ .alpha_modes = AVALPHA_MODE_STRAIGHT,
.p.priv_class = &pngenc_class,
.caps_internal = FF_CODEC_CAP_ICC_PROFILES,
};
@@ -1322,9 +1320,7 @@ const FFCodec ff_apng_encoder = {
AV_PIX_FMT_PAL8,
AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY8A,
AV_PIX_FMT_GRAY16BE, AV_PIX_FMT_YA16BE),
- .alpha_modes = (const enum AVAlphaMode[]) {
- AVALPHA_MODE_STRAIGHT, AVALPHA_MODE_UNSPECIFIED
- },
+ .alpha_modes = AVALPHA_MODE_STRAIGHT,
.p.priv_class = &pngenc_class,
.caps_internal = FF_CODEC_CAP_ICC_PROFILES,
};
commit df1b6f9cfd7b33f85b3536c79d271b7f7ac3d5b6
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 07:41:40 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/avcodec: Avoid relocations for color ranges
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index 78453e2467..00f5447b52 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -732,22 +732,15 @@ int attribute_align_arg
avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr
return 0; \
} while (0)
-static const enum AVColorRange color_range_jpeg[] = {
- AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED
+static const enum AVColorRange color_range_tab[] = {
+ AVCOL_RANGE_MPEG, AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED,
+ AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED,
};
-static const enum AVColorRange color_range_mpeg[] = {
- AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED
-};
-
-static const enum AVColorRange color_range_all[] = {
- AVCOL_RANGE_MPEG, AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED
-};
-
-static const enum AVColorRange *color_range_table[] = {
- [AVCOL_RANGE_MPEG] = color_range_mpeg,
- [AVCOL_RANGE_JPEG] = color_range_jpeg,
- [AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG] = color_range_all,
+static const uint8_t color_range_offsets[] = {
+ [AVCOL_RANGE_MPEG] = 3,
+ [AVCOL_RANGE_JPEG] = 1,
+ [AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG] = 0,
};
int ff_default_get_supported_config(const AVCodecContext *avctx,
@@ -776,8 +769,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
case AV_CODEC_CONFIG_COLOR_RANGE:
if (codec->type != AVMEDIA_TYPE_VIDEO)
return AVERROR(EINVAL);
- *out_configs = color_range_table[ffcodec(codec)->color_ranges];
- *out_num_configs = av_popcount(ffcodec(codec)->color_ranges);
+ unsigned color_ranges = codec2->color_ranges;
+ if (color_ranges)
+ *out_configs = color_range_tab + color_range_offsets[color_ranges];
+ else
+ *out_configs = NULL;
+ *out_num_configs = av_popcount(color_ranges);
return 0;
case AV_CODEC_CONFIG_COLOR_SPACE:
commit 1d68ae7389fd2b2f59b1eb795de12151875abd45
Author: Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Nov 3 00:17:18 2025 +0100
Commit: James Almer <[email protected]>
CommitDate: Fri Nov 7 17:55:43 2025 +0000
avcodec/avcodec: Remove always-true branches
avcodec_get_supported_config() always sets a dummy for
the pointer to the number of entries in case it is not set.
Signed-off-by: Andreas Rheinhardt <[email protected]>
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index db24b4ed52..78453e2467 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -723,14 +723,12 @@ int attribute_align_arg
avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr
if (codec->type != (allowed_type)) \
return AVERROR(EINVAL); \
*out_configs = (field); \
- if (out_num_configs) { \
for (int i = 0;; i++) { \
if (!(field) || !memcmp(&(field)[i], &end, sizeof(end))) { \
*out_num_configs = i; \
break; \
} \
} \
- } \
return 0; \
} while (0)
@@ -779,14 +777,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (codec->type != AVMEDIA_TYPE_VIDEO)
return AVERROR(EINVAL);
*out_configs = color_range_table[ffcodec(codec)->color_ranges];
- if (out_num_configs)
- *out_num_configs = av_popcount(ffcodec(codec)->color_ranges);
+ *out_num_configs = av_popcount(ffcodec(codec)->color_ranges);
return 0;
case AV_CODEC_CONFIG_COLOR_SPACE:
*out_configs = NULL;
- if (out_num_configs)
- *out_num_configs = 0;
+ *out_num_configs = 0;
return 0;
case AV_CODEC_CONFIG_ALPHA_MODE:
-----------------------------------------------------------------------
Summary of changes:
libavcodec/amfdec.c | 9 ------
libavcodec/avcodec.c | 76 +++++++++++++++++++++++++++------------------
libavcodec/codec_internal.h | 13 ++++----
libavcodec/exrenc.c | 4 +--
libavcodec/libjxlenc.c | 8 ++---
libavcodec/pngenc.c | 8 ++---
libavcodec/tests/avcodec.c | 47 +++++++++++++++++++++++++++-
7 files changed, 103 insertions(+), 62 deletions(-)
hooks/post-receive
--
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]