PR #23396 opened by mkver
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23396
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23396.patch

This has led to the failing build in #22455 (the bump PR). Also perform other 
minor improvements.


>From 9791c4d1837364fffd27bdb76d2b536496c0b0d1 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Sun, 7 Jun 2026 07:56:00 +0200
Subject: [PATCH 1/6] avcodec/liboapvenc: Don't set AVCodec.pix_fmts directly

Instead use CODEC_PIXFMTS. Avoids deprecation warnings
from Clang and simplifies the removal of AVCodec.pix_fmts.

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/liboapvenc.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/libavcodec/liboapvenc.c b/libavcodec/liboapvenc.c
index 2b4da37b7d..12b8383c30 100644
--- a/libavcodec/liboapvenc.c
+++ b/libavcodec/liboapvenc.c
@@ -570,17 +570,6 @@ static av_cold int liboapve_close(AVCodecContext *avctx)
 #define OFFSET(x) offsetof(ApvEncContext, x)
 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 
-static const enum AVPixelFormat supported_pixel_formats[] = {
-    AV_PIX_FMT_GRAY10,
-    AV_PIX_FMT_YUV422P10,
-    AV_PIX_FMT_YUV422P12,
-    AV_PIX_FMT_YUV444P10,
-    AV_PIX_FMT_YUV444P12,
-    AV_PIX_FMT_YUVA444P10,
-    AV_PIX_FMT_YUVA444P12,
-    AV_PIX_FMT_NONE
-};
-
 static const AVOption liboapv_options[] = {
     { "preset", "Encoding preset for setting encoding speed (optimization 
level control)", OFFSET(preset_id), AV_OPT_TYPE_INT, { .i64 = 
OAPV_PRESET_DEFAULT }, OAPV_PRESET_FASTEST, OAPV_PRESET_PLACEBO, VE, .unit = 
"preset" },
     { "fastest", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = OAPV_PRESET_FASTEST }, 
INT_MIN, INT_MAX, VE, .unit = "preset" },
@@ -620,7 +609,10 @@ const FFCodec ff_liboapv_encoder = {
     .defaults           = liboapve_defaults,
     .p.capabilities     = AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_DR1,
     .p.wrapper_name     = "liboapv",
-    .p.pix_fmts         = supported_pixel_formats,
     .p.profiles         = NULL_IF_CONFIG_SMALL(ff_apv_profiles),
     .caps_internal      = FF_CODEC_CAP_INIT_CLEANUP | 
FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_NOT_INIT_THREADSAFE,
+    CODEC_PIXFMTS(AV_PIX_FMT_GRAY10,
+                  AV_PIX_FMT_YUV422P10,  AV_PIX_FMT_YUV422P12,
+                  AV_PIX_FMT_YUV444P10,  AV_PIX_FMT_YUV444P12,
+                  AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P12),
 };
-- 
2.52.0


>From 67855a723441116a96f2ac0e3a3839c6cae07658 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Sun, 7 Jun 2026 09:06:23 +0200
Subject: [PATCH 2/6] avcodec/liboapvenc: Use av_unreachable for unreachable
 default cases

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/liboapvenc.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libavcodec/liboapvenc.c b/libavcodec/liboapvenc.c
index 12b8383c30..371ead3938 100644
--- a/libavcodec/liboapvenc.c
+++ b/libavcodec/liboapvenc.c
@@ -121,7 +121,7 @@ static inline int get_color_format(enum AVPixelFormat 
pix_fmt)
         cf = OAPV_CF_YCBCR4444;
         break;
     default:
-        av_assert0(cf != OAPV_CF_UNKNOWN);
+        av_unreachable("Already checked via CODEC_PIXFMTS");
     }
 
     return cf;
@@ -148,7 +148,7 @@ static inline int get_chroma_format_idc(enum AVPixelFormat 
pix_fmt)
         cfi = APV_CHROMA_FORMAT_4444;
         break;
     default:
-        av_assert0(cfi >= 0);
+        av_unreachable("Already checked via CODEC_PIXFMTS");
     }
 
     return cfi;
@@ -181,7 +181,7 @@ static inline int get_min_profile(enum AVPixelFormat 
pix_fmt)
         profile = AV_PROFILE_APV_4444_12;
         break;
     default:
-        av_assert0(profile != AV_PROFILE_UNKNOWN);
+        av_unreachable("Already checked via CODEC_PIXFMTS");
     }
 
     return profile;
-- 
2.52.0


>From 80ea2d14872b991109fe5539dd4c8c0822f28e87 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Sun, 7 Jun 2026 09:15:46 +0200
Subject: [PATCH 3/6] avcodec/liboapvenc: Return directly when possible

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/liboapvenc.c | 108 +++++++++++++++-------------------------
 1 file changed, 39 insertions(+), 69 deletions(-)

diff --git a/libavcodec/liboapvenc.c b/libavcodec/liboapvenc.c
index 371ead3938..d39dd57d24 100644
--- a/libavcodec/liboapvenc.c
+++ b/libavcodec/liboapvenc.c
@@ -96,95 +96,65 @@ static int apv_imgb_getref(oapv_imgb_t * imgb)
  */
 static inline int get_color_format(enum AVPixelFormat pix_fmt)
 {
-    int cf = OAPV_CF_UNKNOWN;
-
     switch (pix_fmt) {
-    case AV_PIX_FMT_GRAY10:
-        cf = OAPV_CF_YCBCR400;
-        break;
-    case AV_PIX_FMT_YUV422P10:
-        cf = OAPV_CF_YCBCR422;
-        break;
-    case AV_PIX_FMT_YUV422P12:
-        cf = OAPV_CF_YCBCR422;
-        break;
-    case AV_PIX_FMT_YUV444P10:
-        cf = OAPV_CF_YCBCR444;
-        break;
-    case AV_PIX_FMT_YUV444P12:
-        cf = OAPV_CF_YCBCR444;
-        break;
-    case AV_PIX_FMT_YUVA444P10:
-        cf = OAPV_CF_YCBCR4444;
-        break;
-    case AV_PIX_FMT_YUVA444P12:
-        cf = OAPV_CF_YCBCR4444;
-        break;
     default:
         av_unreachable("Already checked via CODEC_PIXFMTS");
+    case AV_PIX_FMT_GRAY10:
+        return OAPV_CF_YCBCR400;
+    case AV_PIX_FMT_YUV422P10:
+        return OAPV_CF_YCBCR422;
+    case AV_PIX_FMT_YUV422P12:
+        return OAPV_CF_YCBCR422;
+    case AV_PIX_FMT_YUV444P10:
+        return OAPV_CF_YCBCR444;
+    case AV_PIX_FMT_YUV444P12:
+        return OAPV_CF_YCBCR444;
+    case AV_PIX_FMT_YUVA444P10:
+        return OAPV_CF_YCBCR4444;
+    case AV_PIX_FMT_YUVA444P12:
+        return OAPV_CF_YCBCR4444;
     }
-
-    return cf;
 }
 
 static inline int get_chroma_format_idc(enum AVPixelFormat pix_fmt)
 {
-    int cfi = -1;
-
     switch (pix_fmt) {
-    case AV_PIX_FMT_GRAY10:
-        cfi = APV_CHROMA_FORMAT_400;
-        break;
-    case AV_PIX_FMT_YUV422P10:
-    case AV_PIX_FMT_YUV422P12:
-        cfi = APV_CHROMA_FORMAT_422;
-        break;
-    case AV_PIX_FMT_YUV444P10:
-    case AV_PIX_FMT_YUV444P12:
-        cfi = APV_CHROMA_FORMAT_444;
-        break;
-    case AV_PIX_FMT_YUVA444P10:
-    case AV_PIX_FMT_YUVA444P12:
-        cfi = APV_CHROMA_FORMAT_4444;
-        break;
     default:
         av_unreachable("Already checked via CODEC_PIXFMTS");
+    case AV_PIX_FMT_GRAY10:
+        return APV_CHROMA_FORMAT_400;
+    case AV_PIX_FMT_YUV422P10:
+    case AV_PIX_FMT_YUV422P12:
+        return APV_CHROMA_FORMAT_422;
+    case AV_PIX_FMT_YUV444P10:
+    case AV_PIX_FMT_YUV444P12:
+        return APV_CHROMA_FORMAT_444;
+    case AV_PIX_FMT_YUVA444P10:
+    case AV_PIX_FMT_YUVA444P12:
+        return APV_CHROMA_FORMAT_4444;
     }
-
-    return cfi;
 }
 
 static inline int get_min_profile(enum AVPixelFormat pix_fmt)
 {
-    int profile = AV_PROFILE_UNKNOWN;
-
     switch (pix_fmt) {
-    case AV_PIX_FMT_GRAY10:
-        profile = AV_PROFILE_APV_400_10;
-        break;
-    case AV_PIX_FMT_YUV422P10:
-        profile = AV_PROFILE_APV_422_10;
-        break;
-    case AV_PIX_FMT_YUV422P12:
-        profile = AV_PROFILE_APV_422_12;
-        break;
-    case AV_PIX_FMT_YUV444P10:
-        profile = AV_PROFILE_APV_444_10;
-        break;
-    case AV_PIX_FMT_YUV444P12:
-        profile = AV_PROFILE_APV_444_12;
-        break;
-    case AV_PIX_FMT_YUVA444P10:
-        profile = AV_PROFILE_APV_4444_10;
-        break;
-    case AV_PIX_FMT_YUVA444P12:
-        profile = AV_PROFILE_APV_4444_12;
-        break;
     default:
         av_unreachable("Already checked via CODEC_PIXFMTS");
+    case AV_PIX_FMT_GRAY10:
+        return AV_PROFILE_APV_400_10;
+    case AV_PIX_FMT_YUV422P10:
+        return AV_PROFILE_APV_422_10;
+    case AV_PIX_FMT_YUV422P12:
+        return AV_PROFILE_APV_422_12;
+    case AV_PIX_FMT_YUV444P10:
+        return AV_PROFILE_APV_444_10;
+    case AV_PIX_FMT_YUV444P12:
+        return AV_PROFILE_APV_444_12;
+    case AV_PIX_FMT_YUVA444P10:
+        return AV_PROFILE_APV_4444_10;
+    case AV_PIX_FMT_YUVA444P12:
+        return AV_PROFILE_APV_4444_12;
     }
-
-    return profile;
 }
 
 static int profile_is_compatible(enum AVPixelFormat pix_fmt, int profile)
-- 
2.52.0


>From bf47563bd8205c912d650c857e1fe812dab48812 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Sun, 7 Jun 2026 09:24:31 +0200
Subject: [PATCH 4/6] avcodec/liboapvenc: Remove always-false checks

Already checked in encode_preinit_video().

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/liboapvenc.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/libavcodec/liboapvenc.c b/libavcodec/liboapvenc.c
index d39dd57d24..c4051844f8 100644
--- a/libavcodec/liboapvenc.c
+++ b/libavcodec/liboapvenc.c
@@ -287,11 +287,8 @@ static int get_conf(AVCodecContext *avctx, oapve_cdesc_t 
*cdsc)
     }
 
     /* read options from AVCodecContext */
-    if (avctx->width > 0)
-        cdsc->param[FRM_IDX].w = avctx->width;
-
-    if (avctx->height > 0)
-        cdsc->param[FRM_IDX].h = avctx->height;
+    cdsc->param[FRM_IDX].w = avctx->width;
+    cdsc->param[FRM_IDX].h = avctx->height;
 
     if (avctx->framerate.num > 0) {
         cdsc->param[FRM_IDX].fps_num = avctx->framerate.num;
-- 
2.52.0


>From 0faa43ae6c93e964279d3d64d6de300fe8af3eb0 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Sun, 7 Jun 2026 09:31:25 +0200
Subject: [PATCH 5/6] avcodec/liboapvenc: Use av_image_copy2() to avoid cast

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/liboapvenc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavcodec/liboapvenc.c b/libavcodec/liboapvenc.c
index c4051844f8..b09c5d1077 100644
--- a/libavcodec/liboapvenc.c
+++ b/libavcodec/liboapvenc.c
@@ -456,8 +456,8 @@ static int liboapve_encode(AVCodecContext *avctx, AVPacket 
*avpkt,
         return AVERROR(EINVAL);
     }
 
-    av_image_copy((uint8_t **)imgb->a, imgb->s, (const uint8_t **)frame->data, 
frame->linesize,
-                  frame->format, frame->width, frame->height);
+    av_image_copy2((uint8_t **)imgb->a, imgb->s, frame->data, frame->linesize,
+                   frame->format, frame->width, frame->height);
 
     imgb->ts[0] = frame->pts;
 
-- 
2.52.0


>From bb49197ede88e7b31b690ad3e6c5320c63e2abe4 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Sun, 7 Jun 2026 09:34:31 +0200
Subject: [PATCH 6/6] avcodec/liboapvenc: Remove dimension change check

If this were to be checked, it should be checked generically,
not in every single encoder.

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/liboapvenc.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/libavcodec/liboapvenc.c b/libavcodec/liboapvenc.c
index b09c5d1077..92640b74a3 100644
--- a/libavcodec/liboapvenc.c
+++ b/libavcodec/liboapvenc.c
@@ -451,11 +451,6 @@ static int liboapve_encode(AVCodecContext *avctx, AVPacket 
*avpkt,
     oapv_imgb_t *imgb = frm->imgb;
     int ret;
 
-    if (avctx->width != frame->width || avctx->height != frame->height || 
avctx->pix_fmt != frame->format) {
-        av_log(avctx, AV_LOG_ERROR, "Dimension changes are not supported\n");
-        return AVERROR(EINVAL);
-    }
-
     av_image_copy2((uint8_t **)imgb->a, imgb->s, frame->data, frame->linesize,
                    frame->format, frame->width, frame->height);
 
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to