diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 0dd833b06..6e9668ef3 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -35,7 +35,7 @@ option(SPIRV_CROSS_SKIP_INSTALL "" on) add_subdirectory(SPIRV-Cross) add_subdirectory(glslang) -if(NOT TARGET glslang::glslang-standalone) +if(NOT TARGET glslang::glslang-standalone AND TARGET glslang-standalone) add_executable(glslang::glslang-standalone ALIAS glslang-standalone) endif() @@ -49,49 +49,50 @@ target_link_libraries(3rdparty_json INTERFACE nlohmann_json) add_subdirectory(LibAtrac9) -set(FFMPEG_PATH ${CMAKE_CURRENT_SOURCE_DIR}/FFmpeg) -add_custom_command( - OUTPUT ${FFMPEG_PATH}/config.h - COMMAND ./configure --disable-libdrm --disable-vaapi --disable-vdpau --disable-zlib --disable-lzma - COMMENT "Configuring FFmpeg..." - WORKING_DIRECTORY ${FFMPEG_PATH} -) -add_custom_target(ffmpeg-configure DEPENDS ${FFMPEG_PATH}/config.h) +if (COMPILE_FFMPEG) + set(FFMPEG_PATH ${CMAKE_CURRENT_SOURCE_DIR}/FFmpeg) + add_custom_command( + OUTPUT ${FFMPEG_PATH}/config.h + COMMAND ./configure --disable-libdrm --disable-vaapi --disable-vdpau --disable-zlib --disable-lzma + COMMENT "Configuring FFmpeg..." + WORKING_DIRECTORY ${FFMPEG_PATH} + ) + add_custom_target(ffmpeg-configure DEPENDS ${FFMPEG_PATH}/config.h) -function(import_ffmpeg_library name) - if (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") - set(MAKE_COMMAND $(MAKE) -j$(nproc)) - elseif (${CMAKE_GENERATOR} STREQUAL "Ninja") - set(MAKE_COMMAND make -j$$(nproc)) - else() - set(MAKE_COMMAND make) - endif() + function(import_ffmpeg_library name) + if (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") + set(MAKE_COMMAND $(MAKE) -j$(nproc)) + elseif (${CMAKE_GENERATOR} STREQUAL "Ninja") + set(MAKE_COMMAND make -j$$(nproc)) + else() + set(MAKE_COMMAND make) + endif() - add_custom_command( - OUTPUT "${FFMPEG_PATH}/lib${name}/lib${name}.a" - COMMAND ${MAKE_COMMAND} -C ${FFMPEG_PATH} "lib${name}/lib${name}.a" - COMMENT "Building lib${name}/lib${name}.a" - DEPENDS ffmpeg-configure - WORKING_DIRECTORY ${FFMPEG_PATH} - ) + add_custom_command( + OUTPUT "${FFMPEG_PATH}/lib${name}/lib${name}.a" + COMMAND ${MAKE_COMMAND} -C ${FFMPEG_PATH} "lib${name}/lib${name}.a" + COMMENT "Building lib${name}/lib${name}.a" + DEPENDS ffmpeg-configure + WORKING_DIRECTORY ${FFMPEG_PATH} + ) - add_custom_target(ffmpeg-build-${name} DEPENDS "${FFMPEG_PATH}/lib${name}/lib${name}.a") + add_custom_target(ffmpeg-build-${name} DEPENDS "${FFMPEG_PATH}/lib${name}/lib${name}.a") - add_library(ffmpeg::${name} STATIC IMPORTED GLOBAL) - set_property(TARGET ffmpeg::${name} PROPERTY IMPORTED_LOCATION "${FFMPEG_PATH}/lib${name}/lib${name}.a") - set_property(TARGET ffmpeg::${name} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${FFMPEG_PATH}") - add_dependencies(ffmpeg::${name} ffmpeg-build-${name}) -endfunction() - -import_ffmpeg_library(avcodec) -import_ffmpeg_library(avformat) -import_ffmpeg_library(avfilter) -import_ffmpeg_library(avdevice) -import_ffmpeg_library(avutil) -import_ffmpeg_library(swscale) -import_ffmpeg_library(swresample) -import_ffmpeg_library(postproc) + add_library(ffmpeg::${name} STATIC IMPORTED GLOBAL) + set_property(TARGET ffmpeg::${name} PROPERTY IMPORTED_LOCATION "${FFMPEG_PATH}/lib${name}/lib${name}.a") + set_property(TARGET ffmpeg::${name} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${FFMPEG_PATH}") + add_dependencies(ffmpeg::${name} ffmpeg-build-${name}) + endfunction() + import_ffmpeg_library(avcodec) + import_ffmpeg_library(avformat) + import_ffmpeg_library(avfilter) + import_ffmpeg_library(avdevice) + import_ffmpeg_library(avutil) + import_ffmpeg_library(swscale) + import_ffmpeg_library(swresample) + import_ffmpeg_library(postproc) +endif() # Dummy target to use when lib isn't available add_library(3rdparty_dummy_lib INTERFACE) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8aab56d36..4904f816c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ option(WITH_RPCS3_QT_UI "Enable RPCS3 UI" OFF) option(WITHOUT_OPENGL "Disable OpenGL" OFF) option(WITHOUT_OPENGLEW "Disable OpenGLEW" OFF) option(WITHOUT_OPENAL "Disable OpenAL" OFF) +option(COMPILE_FFMPEG "Compile FFmpeg" ON) # rpcs3 options option(USE_NATIVE_INSTRUCTIONS "USE_NATIVE_INSTRUCTIONS makes rpcs3 compile with -march=native, which is useful for local builds, but not good for packages." ON) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 3b8080c6b..43990629e 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -39,7 +39,7 @@ set(ADDITIONAL_LIBS "") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") #on some Linux distros shm_unlink and similar functions are in librt only set(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} "rt") -elseif(NOT WIN32 AND NOT CMAKE_CXX_FLAGS MATCHES "LIBICONV_PLUG") +elseif(NOT WIN32 AND NOT CMAKE_CXX_FLAGS MATCHES "LIBICONV_PLUG" AND NOT ANDROID) #it seems like glibc includes the iconv functions we use but other libc #implementations like the one on OSX don't seem implement them set(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} "iconv") diff --git a/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.cpp b/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.cpp index da793ca8d..be581d110 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.cpp @@ -8,10 +8,41 @@ namespace rsx { namespace overlays { - save_dialog::save_dialog_entry::save_dialog_entry(const std::string& text1, const std::string& text2, const std::string& text3, u8 resource_id, const std::vector& icon_buf, const std::string& video_path) + save_dialog::save_dialog_entry::save_dialog_entry(const std::string& text1, const std::string& text2, const std::string& text3, u8 resource_id, const std::vector& icon_buf, [[maybe_unused]] const std::string& video_path) { - std::unique_ptr image = resource_id != image_resource_id::raw_image ? std::make_unique(video_path, resource_id) : !icon_buf.empty() ? std::make_unique(video_path, icon_buf) : - std::make_unique(video_path, resource_config::standard_image_resource::save); // Fallback + std::unique_ptr image; +#ifndef ANDROID + if (resource_id != image_resource_id::raw_image) + { + image = std::make_unique(video_path, resource_id); + } + else if (!icon_buf.empty()) + { + image = std::make_unique(video_path, icon_buf); + } + else + { + image = std::make_unique(video_path, resource_config::standard_image_resource::save); // Fallback + } +#else + image = std::make_unique(); + + if (resource_id != image_resource_id::raw_image) + { + static_cast(image.get())->set_image_resource(resource_id); + } + else if (!icon_buf.empty()) + { + image->set_padding(0, 0, 11, 11); // Half sized icon, 320x176->160x88 + icon_data = std::make_unique(icon_buf); + static_cast(image.get())->set_raw_image(icon_data.get()); + } + else + { + static_cast(image.get())->set_image_resource(resource_config::standard_image_resource::save); + } +#endif + image->set_size(160, 110); image->set_padding(36, 36, 11, 11); // Square image, 88x88 @@ -71,10 +102,12 @@ namespace rsx void save_dialog::save_dialog_entry::set_selected(bool selected) { +#ifndef ANDROID if (m_image) { static_cast(m_image)->set_active(selected); } +#endif } save_dialog::save_dialog() diff --git a/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.h b/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.h index 796a1e175..108c92ffd 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_save_dialog.h @@ -18,6 +18,7 @@ namespace rsx void set_selected(bool selected) override; private: + std::unique_ptr icon_data; overlay_element* m_image = nullptr; };