Message ID | 20220705001101.111869-1-ffmpeg@haasn.xyz |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] lavu: always provide symbols from hwcontext_vulkan.h | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
andriy/make_armv7_RPi4 | success | Make finished |
andriy/make_fate_armv7_RPi4 | success | Make fate finished |
On 5 Jul 2022, at 2:11, Niklas Haas wrote: > From: Niklas Haas <git@haasn.dev> > > This header is unconditionally installed, even though the utility > functions defined by it may be missing from the built library. > > A precedent set by e.g. libavcodec/qsv.h (and others) is to always > provide these functions by compiling stub functions in the absence of > CONFIG_*. Make hwcontext_vulkan.h match this convention. > > Fixes downstream issues, e.g. > https://github.com/haasn/libplacebo/issues/120 > > Signed-off-by: Niklas Haas <git@haasn.dev> > --- > libavutil/Makefile | 2 +- > libavutil/hwcontext_vulkan.c | 26 ++++++++++++++++++++++++-- > 2 files changed, 25 insertions(+), 3 deletions(-) > > [...] Public API symbols (av_*) shouldn't completely disappear based on configure options. LGTM.
On Tue, Jul 05, 2022 at 02:11:01AM +0200, Niklas Haas wrote: > From: Niklas Haas <git@haasn.dev> > > This header is unconditionally installed, even though the utility > functions defined by it may be missing from the built library. > > A precedent set by e.g. libavcodec/qsv.h (and others) is to always > provide these functions by compiling stub functions in the absence of > CONFIG_*. Make hwcontext_vulkan.h match this convention. > > Fixes downstream issues, e.g. > https://github.com/haasn/libplacebo/issues/120 > > Signed-off-by: Niklas Haas <git@haasn.dev> > --- > libavutil/Makefile | 2 +- > libavutil/hwcontext_vulkan.c | 26 ++++++++++++++++++++++++-- > 2 files changed, 25 insertions(+), 3 deletions(-) breaks build with shared libs LD libavutil/libavutil.so.57 libavutil/hwcontext_vulkan.o: In function `av_vk_frame_alloc': ffmpeg/linux64shared/src/libavutil/hwcontext_vulkan.c:4177: multiple definition of `av_vk_frame_alloc' libavutil/hwcontext_stub.o:ffmpeg/linux64shared/src/libavutil/hwcontext_stub.c:37: first defined here libavutil/hwcontext_vulkan.o: In function `av_vkfmt_from_pixfmt': ffmpeg/linux64shared/src/libavutil/hwcontext_vulkan.c:4182: multiple definition of `av_vkfmt_from_pixfmt' libavutil/hwcontext_stub.o:ffmpeg/linux64shared/src/libavutil/hwcontext_stub.c:32: first defined here clang: error: linker command failed with exit code 1 (use -v to see invocation) ffmpeg/ffbuild/library.mak:118: recipe for target 'libavutil/libavutil.so.57' failed make: *** [libavutil/libavutil.so.57] Error 1 [...]
Michael Niedermayer: > On Tue, Jul 05, 2022 at 02:11:01AM +0200, Niklas Haas wrote: >> From: Niklas Haas <git@haasn.dev> >> >> This header is unconditionally installed, even though the utility >> functions defined by it may be missing from the built library. >> >> A precedent set by e.g. libavcodec/qsv.h (and others) is to always >> provide these functions by compiling stub functions in the absence of >> CONFIG_*. Make hwcontext_vulkan.h match this convention. >> >> Fixes downstream issues, e.g. >> https://github.com/haasn/libplacebo/issues/120 >> >> Signed-off-by: Niklas Haas <git@haasn.dev> >> --- >> libavutil/Makefile | 2 +- >> libavutil/hwcontext_vulkan.c | 26 ++++++++++++++++++++++++-- >> 2 files changed, 25 insertions(+), 3 deletions(-) > > breaks build with shared libs > > LD libavutil/libavutil.so.57 > libavutil/hwcontext_vulkan.o: In function `av_vk_frame_alloc': > ffmpeg/linux64shared/src/libavutil/hwcontext_vulkan.c:4177: multiple definition of `av_vk_frame_alloc' > libavutil/hwcontext_stub.o:ffmpeg/linux64shared/src/libavutil/hwcontext_stub.c:37: first defined here > libavutil/hwcontext_vulkan.o: In function `av_vkfmt_from_pixfmt': > ffmpeg/linux64shared/src/libavutil/hwcontext_vulkan.c:4182: multiple definition of `av_vkfmt_from_pixfmt' > libavutil/hwcontext_stub.o:ffmpeg/linux64shared/src/libavutil/hwcontext_stub.c:32: first defined here > clang: error: linker command failed with exit code 1 (use -v to see invocation) > ffmpeg/ffbuild/library.mak:118: recipe for target 'libavutil/libavutil.so.57' failed > make: *** [libavutil/libavutil.so.57] Error 1 > > This commit has been superseded by f9dd8fcf9b87e757096de993dd32571c4a85a2cb (which fixes the issue in a different way and together with this patch causes the issue you encountered). - Andreas
diff --git a/libavutil/Makefile b/libavutil/Makefile index 29c170214c..66017a33a2 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -136,6 +136,7 @@ OBJS = adler32.o \ hdr_dynamic_vivid_metadata.o \ hmac.o \ hwcontext.o \ + hwcontext_vulkan.o \ imgutils.o \ integer.o \ intmath.o \ @@ -194,7 +195,6 @@ OBJS-$(CONFIG_QSV) += hwcontext_qsv.o OBJS-$(CONFIG_VAAPI) += hwcontext_vaapi.o OBJS-$(CONFIG_VIDEOTOOLBOX) += hwcontext_videotoolbox.o OBJS-$(CONFIG_VDPAU) += hwcontext_vdpau.o -OBJS-$(CONFIG_VULKAN) += hwcontext_vulkan.o OBJS += $(COMPAT_OBJS:%=../compat/%) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 237caa4bc0..f7944a321c 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -16,6 +16,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <stddef.h> + +#include "config.h" +#include "pixdesc.h" + +#if CONFIG_VULKAN + #define VK_NO_PROTOTYPES #define VK_ENABLE_BETA_EXTENSIONS @@ -29,8 +36,6 @@ #include <unistd.h> -#include "config.h" -#include "pixdesc.h" #include "avstring.h" #include "imgutils.h" #include "hwcontext.h" @@ -4161,3 +4166,20 @@ const HWContextType ff_hwcontext_type_vulkan = { AV_PIX_FMT_NONE }, }; + +#else /* !CONFIG_VULKAN */ + +struct AVVkFrame *av_vk_frame_alloc(void); +const enum VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p); + +struct AVVkFrame *av_vk_frame_alloc(void) +{ + return NULL; +} + +const enum VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p) +{ + return NULL; +} + +#endif