PR #22714 opened by Timo Rothenpieler (BtbN)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22714
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22714.patch

The missing Vulkan one breaks build of ffplay in case of --disable-vulkan.
The other ones cause no known issues, but they're public API that vanishes 
based on configure options nevertheless.

Fixes #22711


>From 2dd07b406342dec313b828e0b8fbb41f1a453e39 Mon Sep 17 00:00:00 2001
From: Timo Rothenpieler <[email protected]>
Date: Sat, 4 Apr 2026 20:01:13 +0200
Subject: [PATCH 1/2] avutil/hwcontext_stub: add stubs for new public Vulkan
 APIs

---
 libavutil/hwcontext_stub.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/libavutil/hwcontext_stub.c b/libavutil/hwcontext_stub.c
index 8683f07fc7..0adf774ba0 100644
--- a/libavutil/hwcontext_stub.c
+++ b/libavutil/hwcontext_stub.c
@@ -26,6 +26,8 @@ typedef enum VkFormat VkFormat;
 typedef struct AVVkFrame AVVkFrame;
 const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p);
 AVVkFrame *av_vk_frame_alloc(void);
+const char **av_vk_get_optional_instance_extensions(int *count);
+const char **av_vk_get_optional_device_extensions(int *count);
 
 const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p)
 {
@@ -36,4 +38,16 @@ AVVkFrame *av_vk_frame_alloc(void)
 {
     return NULL;
 }
+
+const char **av_vk_get_optional_instance_extensions(int *count)
+{
+    *count = -1;
+    return NULL;
+}
+
+const char **av_vk_get_optional_device_extensions(int *count)
+{
+    *count = -1;
+    return NULL;
+}
 #endif /* CONFIG_VULKAN */
-- 
2.52.0


>From 8f5c0cdafb2af2b2c6dc7576ba1a15e7639a8671 Mon Sep 17 00:00:00 2001
From: Timo Rothenpieler <[email protected]>
Date: Sat, 4 Apr 2026 20:26:29 +0200
Subject: [PATCH 2/2] avutil/hwcontext_stub: add stubs for public AMF and VT
 APIs as well

---
 libavutil/Makefile         |   2 +
 libavutil/hwcontext_stub.c | 118 +++++++++++++++++++++++++++++++++++--
 2 files changed, 116 insertions(+), 4 deletions(-)

diff --git a/libavutil/Makefile b/libavutil/Makefile
index 1647952f8f..45656e2f19 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -219,6 +219,8 @@ OBJS-$(CONFIG_VIDEOTOOLBOX)             += 
hwcontext_videotoolbox.o
 OBJS-$(CONFIG_VDPAU)                    += hwcontext_vdpau.o
 OBJS-$(CONFIG_VULKAN)                   += hwcontext_vulkan.o vulkan.o
 
+OBJS-$(!CONFIG_AMF)                     += hwcontext_stub.o
+OBJS-$(!CONFIG_VIDEOTOOLBOX)            += hwcontext_stub.o
 OBJS-$(!CONFIG_VULKAN)                  += hwcontext_stub.o
 
 OBJS += $(COMPAT_OBJS:%=../compat/%)
diff --git a/libavutil/hwcontext_stub.c b/libavutil/hwcontext_stub.c
index 0adf774ba0..061db70662 100644
--- a/libavutil/hwcontext_stub.c
+++ b/libavutil/hwcontext_stub.c
@@ -16,14 +16,67 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "config.h"
-
-#if !CONFIG_VULKAN
 #include <stddef.h>
 #include "pixfmt.h"
 
+#include "config.h"
+
+
+#if !CONFIG_AMF
+#include "mastering_display_metadata.h"
+
+typedef struct AMFHDRMetadata AMFHDRMetadata;
+typedef enum AMF_SURFACE_FORMAT { AMF_SURFACE_UNKNOWN = 0 } AMF_SURFACE_FORMAT;
+typedef enum AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM { 
AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN = -1 } 
AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM;
+
+enum AMF_SURFACE_FORMAT av_av_to_amf_format(enum AVPixelFormat fmt);
+enum AVPixelFormat av_amf_to_av_format(enum AMF_SURFACE_FORMAT fmt);
+enum AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM av_amf_get_color_profile(enum 
AVColorRange color_range, enum AVColorSpace color_space);
+int av_amf_display_mastering_meta_to_hdrmeta(const AVMasteringDisplayMetadata 
*display_meta, AMFHDRMetadata *hdrmeta);
+int av_amf_light_metadata_to_hdrmeta(const AVContentLightMetadata *light_meta, 
AMFHDRMetadata *hdrmeta);
+int av_amf_extract_hdr_metadata(const AVFrame *frame, AMFHDRMetadata *hdrmeta);
+int av_amf_attach_hdr_metadata(AVFrame *frame, const AMFHDRMetadata *hdrmeta);
+
+enum AMF_SURFACE_FORMAT av_av_to_amf_format(enum AVPixelFormat fmt)
+{
+    return AMF_SURFACE_UNKNOWN;
+}
+
+enum AVPixelFormat av_amf_to_av_format(enum AMF_SURFACE_FORMAT fmt)
+{
+    return AV_PIX_FMT_NONE;
+}
+
+enum AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM av_amf_get_color_profile(enum 
AVColorRange color_range, enum AVColorSpace color_space)
+{
+    return AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN;
+}
+
+int av_amf_display_mastering_meta_to_hdrmeta(const AVMasteringDisplayMetadata 
*display_meta, AMFHDRMetadata *hdrmeta)
+{
+    return AVERROR(ENOSYS);
+}
+
+int av_amf_light_metadata_to_hdrmeta(const AVContentLightMetadata *light_meta, 
AMFHDRMetadata *hdrmeta)
+{
+    return AVERROR(ENOSYS);
+}
+
+int av_amf_extract_hdr_metadata(const AVFrame *frame, AMFHDRMetadata *hdrmeta)
+{
+    return AVERROR(ENOSYS);
+}
+
+int av_amf_attach_hdr_metadata(AVFrame *frame, const AMFHDRMetadata *hdrmeta)
+{
+    return AVERROR(ENOSYS);
+}
+#endif /* !CONFIG_AMF */
+
+#if !CONFIG_VULKAN
 typedef enum VkFormat VkFormat;
 typedef struct AVVkFrame AVVkFrame;
+
 const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p);
 AVVkFrame *av_vk_frame_alloc(void);
 const char **av_vk_get_optional_instance_extensions(int *count);
@@ -50,4 +103,61 @@ const char **av_vk_get_optional_device_extensions(int 
*count)
     *count = -1;
     return NULL;
 }
-#endif /* CONFIG_VULKAN */
+#endif /* !CONFIG_VULKAN */
+
+#if !CONFIG_VIDEOTOOLBOX
+#include <stdbool.h>
+#include "colorspace.h"
+
+typedef void *CFStringRef;
+typedef void *CVPixelBufferRef;
+
+enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt);
+uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt);
+uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, 
bool full_range);
+CFStringRef av_map_videotoolbox_chroma_loc_from_av(enum AVChromaLocation loc);
+CFStringRef av_map_videotoolbox_color_matrix_from_av(enum AVColorSpace space);
+CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries 
pri);
+CFStringRef av_map_videotoolbox_color_trc_from_av(enum 
AVColorTransferCharacteristic trc);
+int av_vt_pixbuf_set_attachments(void *log_ctx, CVPixelBufferRef pixbuf, const 
struct AVFrame *src);
+
+enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt)
+{
+    return AV_PIX_FMT_NONE;
+}
+
+uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt)
+{
+    return 0;
+}
+
+uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, 
bool full_range)
+{
+    return 0;
+}
+
+CFStringRef av_map_videotoolbox_chroma_loc_from_av(enum AVChromaLocation loc)
+{
+    return NULL;
+}
+
+CFStringRef av_map_videotoolbox_color_matrix_from_av(enum AVColorSpace space)
+{
+    return NULL;
+}
+
+CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries 
pri)
+{
+    return NULL;
+}
+
+CFStringRef av_map_videotoolbox_color_trc_from_av(enum 
AVColorTransferCharacteristic trc)
+{
+    return NULL;
+}
+
+int av_vt_pixbuf_set_attachments(void *log_ctx, CVPixelBufferRef pixbuf, const 
struct AVFrame *src)
+{
+    return AVERROR(ENOSYS);
+}
+#endif /* !CONFIG_VIDEOTOOLBOX */
-- 
2.52.0

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

Reply via email to