Bläddra i källkod

Merge pull request #5337 from IvanSavenko/ffmpeg_explicit

[1.6?] Explicit toggle for ffmpeg video player compilation
Ivan Savenko 8 månader sedan
förälder
incheckning
8d78bb1a82

+ 5 - 1
CMakeLists.txt

@@ -48,6 +48,7 @@ endif()
 option(ENABLE_CLIENT "Enable compilation of game client" ON)
 option(ENABLE_ERM "Enable compilation of ERM scripting module" OFF)
 option(ENABLE_LUA "Enable compilation of LUA scripting module" OFF)
+option(ENABLE_VIDEO "Enable video support using ffmpeg" ON)
 option(ENABLE_TRANSLATIONS "Enable generation of translations for launcher and editor" ON)
 option(ENABLE_NULLKILLER_AI "Enable compilation of Nullkiller AI library" ON)
 option(ENABLE_MINIMAL_LIB "Build only core parts of vcmi library that are required for game lobby" OFF)
@@ -479,8 +480,11 @@ if(NOT FORCE_BUNDLED_MINIZIP)
 	endif()
 endif()
 
+
 if (ENABLE_CLIENT)
-	find_package(ffmpeg COMPONENTS avutil swscale avformat avcodec swresample)
+	if (ENABLE_VIDEO)
+		find_package(ffmpeg REQUIRED COMPONENTS avutil swscale avformat avcodec swresample)
+	endif()
 
 	find_package(SDL2 REQUIRED)
 	find_package(SDL2_image REQUIRED)

+ 2 - 3
client/CMakeLists.txt

@@ -474,12 +474,11 @@ target_link_libraries(vcmiclientcommon PUBLIC
 		vcmi SDL2::SDL2 SDL2::Image SDL2::Mixer SDL2::TTF
 )
 
-if(ffmpeg_LIBRARIES)
+if(ENABLE_VIDEO)
+	target_compile_definitions(vcmiclientcommon PRIVATE ENABLE_VIDEO)
 	target_link_libraries(vcmiclientcommon PRIVATE
 		${ffmpeg_LIBRARIES}
 	)
-else()
-	target_compile_definitions(vcmiclientcommon PRIVATE DISABLE_VIDEO)
 endif()
 
 target_include_directories(vcmiclientcommon PUBLIC

+ 2 - 0
client/media/CEmptyVideoPlayer.h

@@ -17,12 +17,14 @@ public:
 	/// Load video from specified path
 	std::unique_ptr<IVideoInstance> open(const VideoPath & name, float scaleFactor) override
 	{
+		logGlobal->debug("Failed to open video. Reason: video support disabled in build");
 		return nullptr;
 	};
 
 	/// Extracts audio data from provided video in wav format
 	std::pair<std::unique_ptr<ui8[]>, si64> getAudio(const VideoPath & videoToOpen) override
 	{
+		logGlobal->debug("Failed to open video. Reason: video support disabled in build");
 		return {nullptr, 0};
 	};
 };

+ 5 - 1
client/media/CVideoHandler.cpp

@@ -10,7 +10,7 @@
 #include "StdInc.h"
 #include "CVideoHandler.h"
 
-#ifndef DISABLE_VIDEO
+#ifdef ENABLE_VIDEO
 
 #include "ISoundPlayer.h"
 
@@ -671,6 +671,8 @@ std::pair<std::unique_ptr<ui8 []>, si64> CAudioInstance::extractAudio(const Vide
 
 std::unique_ptr<IVideoInstance> CVideoPlayer::open(const VideoPath & name, float scaleFactor)
 {
+	logGlobal->trace("Opening video: %s", name.getOriginalName());
+
 	auto result = std::make_unique<CVideoInstance>();
 
 	if (!result->openInput(name))
@@ -687,6 +689,8 @@ std::unique_ptr<IVideoInstance> CVideoPlayer::open(const VideoPath & name, float
 
 std::pair<std::unique_ptr<ui8[]>, si64> CVideoPlayer::getAudio(const VideoPath & videoToOpen)
 {
+	logGlobal->trace("Opening video: %s", videoToOpen.getOriginalName());
+
 	AudioPath audioPath = videoToOpen.toType<EResType::SOUND>();
 	AudioPath audioPathVideoDir = audioPath.addPrefix("VIDEO/");
 

+ 1 - 1
client/media/CVideoHandler.h

@@ -9,7 +9,7 @@
  */
 #pragma once
 
-#ifndef DISABLE_VIDEO
+#ifdef ENABLE_VIDEO
 
 #include "../lib/Point.h"
 #include "IVideoPlayer.h"

+ 5 - 5
clientapp/CMakeLists.txt

@@ -42,6 +42,11 @@ target_include_directories(vcmiclient
 	PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
+if(ENABLE_VIDEO)
+	target_compile_definitions(vcmiclient PRIVATE ENABLE_VIDEO)
+endif()
+
+
 if(WIN32)
 	target_sources(vcmiclient PRIVATE "VCMI_client.rc")
 	set_target_properties(vcmiclient
@@ -56,11 +61,6 @@ if(WIN32)
 	endif()
 	target_compile_definitions(vcmiclient PRIVATE WINDOWS_IGNORE_PACKING_MISMATCH)
 
-	if(NOT ffmpeg_LIBRARIES)
-		target_compile_definitions(vcmiclient PRIVATE DISABLE_VIDEO)
-	endif()
-
-
 	# TODO: very hacky, find proper solution to copy AI dlls into bin dir
 	if(MSVC)
 		add_custom_command(TARGET vcmiclient POST_BUILD

+ 1 - 1
clientapp/EntryPoint.cpp

@@ -314,7 +314,7 @@ int main(int argc, char * argv[])
 	CSH = new CServerHandler();
 	
 	// Initialize video
-#ifdef DISABLE_VIDEO
+#ifndef ENABLE_VIDEO
 	CCS->videoh = new CEmptyVideoPlayer();
 #else
 	if (!settings["session"]["headless"].Bool() && !vm.count("disable-video"))