Files
TerracottaWarriors/Plugins/AndroidVulkanVideo_5.3/Source/AndroidVulkanVideo/Private/AndroidVulkanVideo.cpp
2025-07-14 22:24:27 +08:00

72 lines
2.6 KiB
C++

// ------------------------------------------------
// Copyright Joe Marshall 2024- All Rights Reserved
// ------------------------------------------------
//
// Vulkan video player module. Handles starting up
// the correct vulkan extensions, and enabling
// the override layer which we use to enable
// SamplerYCbCrConversion feature properly.
// ------------------------------------------------
#include "AndroidVulkanVideo.h"
// #include "Core.h"
#include "Modules/ModuleManager.h"
// #include "Interfaces/IPluginManager.h"
#if PLATFORM_ANDROID
#include "AndroidVulkanMediaPlayer.h"
#include "IVulkanDynamicRHI.h"
#endif
#define LOCTEXT_NAMESPACE "FAndroidVulkanVideoModule"
class FAndroidVulkanVideoModule : public IAndroidVulkanVideoModule
{
void StartupModule()
{
// This code will execute after your module is loaded into memory; the exact timing is
// specified in the .uplugin file per-module
// Get the base directory of this plugin
// FString BaseDir = IPluginManager::Get().FindPlugin("AndroidVulkanVideo")->GetBaseDir();
//
#if PLATFORM_ANDROID
// setup vulkan extensions that we need
const TArray<const ANSICHAR *> DeviceExtensions = {
"VK_KHR_external_memory",
"VK_ANDROID_external_memory_android_hardware_buffer",
"VK_KHR_sampler_ycbcr_conversion",
"VK_KHR_bind_memory2",
"VK_EXT_queue_family_foreign",
"VK_KHR_dedicated_allocation",
"VK_KHR_get_physical_device_properties2"};
const TArray<const ANSICHAR *> DeviceLayers = {};
const TArray<const ANSICHAR *> InstanceExtensions = {
VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME};
const TArray<const ANSICHAR *> InstanceLayers = {"VkLayer_OverrideLib"};
IVulkanDynamicRHI::AddEnabledDeviceExtensionsAndLayers(DeviceExtensions, DeviceLayers);
IVulkanDynamicRHI::AddEnabledInstanceExtensionsAndLayers(InstanceExtensions,
InstanceLayers);
#endif
}
void ShutdownModule()
{
// This function may be called during shutdown to clean up your module. For modules that
// support dynamic reloading, we call this function before unloading the module.
// Free the dll handle
}
TSharedPtr<IMediaPlayer, ESPMode::ThreadSafe> CreatePlayer(IMediaEventSink &EventSink)
{
return TSharedPtr<IMediaPlayer, ESPMode::ThreadSafe>(
new FAndroidVulkanMediaPlayer(EventSink));
}
};
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FAndroidVulkanVideoModule, AndroidVulkanVideo)