Allow building testffmpeg without Vulkan support

main
Sam Lantinga 2024-03-08 16:26:19 -08:00
parent 16e0806ced
commit fcb132b8e8
2 changed files with 45 additions and 3 deletions

View File

@ -229,8 +229,11 @@ if(FFmpeg_FOUND)
check_struct_has_member("AVVulkanFramesContext" "format" "libavutil/hwcontext_vulkan.h" LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT) check_struct_has_member("AVVulkanFramesContext" "format" "libavutil/hwcontext_vulkan.h" LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT)
cmake_pop_check_state() cmake_pop_check_state()
endif() endif()
if(FFmpeg_FOUND AND LIBAVUTIL_AVFRAME_HAS_CH_LAYOUT AND LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT) if(FFmpeg_FOUND AND LIBAVUTIL_AVFRAME_HAS_CH_LAYOUT)
add_sdl_test_executable(testffmpeg NO_C90 SOURCES testffmpeg.c testffmpeg_vulkan.c ${icon_bmp_header}) add_sdl_test_executable(testffmpeg NO_C90 SOURCES testffmpeg.c testffmpeg_vulkan.c ${icon_bmp_header})
if(LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT)
target_compile_definitions(testffmpeg PRIVATE FFMPEG_VULKAN_SUPPORT)
endif()
if(APPLE) if(APPLE)
target_link_options(testffmpeg PRIVATE "-Wl,-framework,CoreVideo") target_link_options(testffmpeg PRIVATE "-Wl,-framework,CoreVideo")
endif() endif()

View File

@ -12,11 +12,13 @@
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
#include <SDL3/SDL_vulkan.h> #include <SDL3/SDL_vulkan.h>
#include "testffmpeg_vulkan.h"
#ifdef FFMPEG_VULKAN_SUPPORT
#include <libavutil/hwcontext.h> #include <libavutil/hwcontext.h>
#include <libavutil/hwcontext_vulkan.h> #include <libavutil/hwcontext_vulkan.h>
#include "testffmpeg_vulkan.h"
#define VULKAN_FUNCTIONS() \ #define VULKAN_FUNCTIONS() \
VULKAN_GLOBAL_FUNCTION(vkCreateInstance) \ VULKAN_GLOBAL_FUNCTION(vkCreateInstance) \
VULKAN_GLOBAL_FUNCTION(vkEnumerateInstanceExtensionProperties) \ VULKAN_GLOBAL_FUNCTION(vkEnumerateInstanceExtensionProperties) \
@ -966,3 +968,40 @@ void DestroyVulkanVideoContext(VulkanVideoContext *context)
SDL_free(context); SDL_free(context);
} }
} }
#else
VulkanVideoContext *CreateVulkanVideoContext(SDL_Window *window)
{
SDL_SetError("testffmpeg not built with Vulkan support");
return NULL;
}
void SetupVulkanRenderProperties(VulkanVideoContext *context, SDL_PropertiesID props)
{
}
void SetupVulkanDeviceContextData(VulkanVideoContext *context, AVVulkanDeviceContext *ctx)
{
}
SDL_Texture *CreateVulkanVideoTexture(VulkanVideoContext *context, AVFrame *frame, SDL_Renderer *renderer, SDL_PropertiesID props)
{
return NULL;
}
int BeginVulkanFrameRendering(VulkanVideoContext *context, AVFrame *frame, SDL_Renderer *renderer)
{
return -1;
}
int FinishVulkanFrameRendering(VulkanVideoContext *context, AVFrame *frame, SDL_Renderer *renderer)
{
return -1;
}
void DestroyVulkanVideoContext(VulkanVideoContext *context)
{
}
#endif // FFMPEG_VULKAN_SUPPORT