From 5f526f502bb721ac054c720834ebcc246d552b69 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Sun, 5 Jan 2020 16:09:31 -0600 Subject: [PATCH 01/14] Bump version to 0.2.4 (SO 18) --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 31b0de2c..1fae1f41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,8 +40,8 @@ For more information, please visit . set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules") ################ PROJECT VERSION #################### -set(PROJECT_VERSION_FULL "0.2.3-dev1") -set(PROJECT_SO_VERSION 17) +set(PROJECT_VERSION_FULL "0.2.4") +set(PROJECT_SO_VERSION 18) # Remove the dash and anything following, to get the #.#.# version for project() STRING(REGEX REPLACE "\-.*$" "" VERSION_NUM "${PROJECT_VERSION_FULL}") From 606a851c59c58a7b12339c9d23ec158af0eb0f21 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Mon, 6 Jan 2020 17:27:33 -0600 Subject: [PATCH 02/14] Updating required OpenShotAudio version in CmakeLists.txt --- src/CMakeLists.txt | 2 +- tests/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b684aaec..41c425c2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -79,7 +79,7 @@ ENDIF (ImageMagick_FOUND) ################# LIBOPENSHOT-AUDIO ################### # Find JUCE-based openshot Audio libraries -FIND_PACKAGE(OpenShotAudio 0.1.8 REQUIRED) +FIND_PACKAGE(OpenShotAudio 0.1.9 REQUIRED) # Include Juce headers (needed for compile) include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 12f84bb6..f609bc27 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -76,7 +76,7 @@ ENDIF (ImageMagick_FOUND) ################# LIBOPENSHOT-AUDIO ################### # Find JUCE-based openshot Audio libraries -FIND_PACKAGE(OpenShotAudio 0.1.8 REQUIRED) +FIND_PACKAGE(OpenShotAudio 0.1.9 REQUIRED) # Include Juce headers (needed for compile) include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS}) From e1b21c37f009d15043ac46af16b5e5f45945c1bc Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Tue, 7 Jan 2020 14:23:05 -0600 Subject: [PATCH 03/14] Reverting CMakeList.txt OpenShotAudio required version, because it's crashing Travis due to the dependency on libopenshot PPA (which only has the develop version number). Need to think about this more. --- src/CMakeLists.txt | 2 +- tests/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 41c425c2..b684aaec 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -79,7 +79,7 @@ ENDIF (ImageMagick_FOUND) ################# LIBOPENSHOT-AUDIO ################### # Find JUCE-based openshot Audio libraries -FIND_PACKAGE(OpenShotAudio 0.1.9 REQUIRED) +FIND_PACKAGE(OpenShotAudio 0.1.8 REQUIRED) # Include Juce headers (needed for compile) include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f609bc27..12f84bb6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -76,7 +76,7 @@ ENDIF (ImageMagick_FOUND) ################# LIBOPENSHOT-AUDIO ################### # Find JUCE-based openshot Audio libraries -FIND_PACKAGE(OpenShotAudio 0.1.9 REQUIRED) +FIND_PACKAGE(OpenShotAudio 0.1.8 REQUIRED) # Include Juce headers (needed for compile) include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS}) From 4e5ba4d638f74b5792b0832f8fad34e2d58ce191 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Tue, 7 Jan 2020 16:46:33 -0600 Subject: [PATCH 04/14] Updating CMakeList.txt requirement for OpenShotAudio 0.1.9. This should work now, since we've updated the versions on `develop`. --- src/CMakeLists.txt | 2 +- tests/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b684aaec..41c425c2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -79,7 +79,7 @@ ENDIF (ImageMagick_FOUND) ################# LIBOPENSHOT-AUDIO ################### # Find JUCE-based openshot Audio libraries -FIND_PACKAGE(OpenShotAudio 0.1.8 REQUIRED) +FIND_PACKAGE(OpenShotAudio 0.1.9 REQUIRED) # Include Juce headers (needed for compile) include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 12f84bb6..f609bc27 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -76,7 +76,7 @@ ENDIF (ImageMagick_FOUND) ################# LIBOPENSHOT-AUDIO ################### # Find JUCE-based openshot Audio libraries -FIND_PACKAGE(OpenShotAudio 0.1.8 REQUIRED) +FIND_PACKAGE(OpenShotAudio 0.1.9 REQUIRED) # Include Juce headers (needed for compile) include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS}) From 187b2055ddd73dcbeedff02a46e7f2df64db7dd6 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Wed, 8 Jan 2020 00:09:01 -0600 Subject: [PATCH 05/14] Preventing crash where last_video_frame is NULL --- src/FFmpegReader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FFmpegReader.cpp b/src/FFmpegReader.cpp index 2bd5c53f..9234ecfe 100644 --- a/src/FFmpegReader.cpp +++ b/src/FFmpegReader.cpp @@ -2086,7 +2086,7 @@ bool FFmpegReader::CheckMissingFrame(int64_t requested_frame) { // CPU time looking for missing images for all the audio-only frames. if (checked_frames[requested_frame] > 8 && !missing_video_frames.count(requested_frame) && !processing_audio_frames.count(requested_frame) && processed_audio_frames.count(requested_frame) && - last_frame && last_video_frame->has_image_data && aCodecId == AV_CODEC_ID_MP3 && (vCodecId == AV_CODEC_ID_MJPEGB || vCodecId == AV_CODEC_ID_MJPEG)) { + last_frame && last_video_frame && last_video_frame->has_image_data && aCodecId == AV_CODEC_ID_MP3 && (vCodecId == AV_CODEC_ID_MJPEGB || vCodecId == AV_CODEC_ID_MJPEG)) { missing_video_frames.insert(std::pair(requested_frame, last_video_frame->number)); missing_video_frames_source.insert(std::pair(last_video_frame->number, requested_frame)); missing_frames.Add(last_video_frame); From 0b4885b6731f8de9dba741f64aa932b65635c0d7 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Wed, 8 Jan 2020 17:00:46 -0500 Subject: [PATCH 06/14] Change RESVG image format to ARGB32_Pre --- src/QtImageReader.cpp | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/QtImageReader.cpp b/src/QtImageReader.cpp index 7163b097..e2ee5d7a 100644 --- a/src/QtImageReader.cpp +++ b/src/QtImageReader.cpp @@ -71,7 +71,7 @@ void QtImageReader::Open() if (!is_open) { bool success = true; - image = std::shared_ptr(new QImage()); + bool loaded = false; #if USE_RESVG == 1 // If defined and found in CMake, utilize the libresvg for parsing @@ -80,38 +80,32 @@ void QtImageReader::Open() if (path.toLower().endsWith(".svg") || path.toLower().endsWith(".svgz")) { ResvgRenderer renderer(path); - if (!renderer.isValid()) { - // Attempt to open file (old method using Qt5 limited SVG parsing) - success = image->load(path); - if (success) { - image = std::shared_ptr(new QImage(image->convertToFormat(QImage::Format_RGBA8888))); - } - } else { + if (renderer.isValid()) { - image = std::shared_ptr(new QImage(renderer.defaultSize(), QImage::Format_RGBA8888)); + image = std::shared_ptr(new QImage(renderer.defaultSize(), QImage::Format_ARGB32_Premultiplied)); image->fill(Qt::transparent); QPainter p(image.get()); renderer.render(&p); p.end(); + loaded = true; } - - } else { - // Attempt to open file (old method) - success = image->load(path); - if (success) - image = std::shared_ptr(new QImage(image->convertToFormat(QImage::Format_RGBA8888))); } -#else - // Attempt to open file using Qt's build in image processing capabilities - success = image->load(path); - if (success) - image = std::shared_ptr(new QImage(image->convertToFormat(QImage::Format_RGBA8888))); #endif - if (!success) + if (!loaded) { + // Attempt to open file using Qt's build in image processing capabilities + image = std::shared_ptr(new QImage()); + success = image->load(path); + } + + if (!success) { // raise exception throw InvalidFile("File could not be opened.", path.toStdString()); + } + + // Convert to proper format + image = std::shared_ptr(new QImage(image->convertToFormat(QImage::Format_RGBA8888))); // Update image properties info.has_audio = false; From 21815fe48ae5fe800d9e90c5cd4084f25b48798f Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Wed, 8 Jan 2020 16:40:52 -0500 Subject: [PATCH 07/14] FindRESVG: Modernize with targets --- cmake/Modules/FindRESVG.cmake | 129 +++++++++++++++++++++++++++------- src/CMakeLists.txt | 39 +++++----- tests/CMakeLists.txt | 10 --- 3 files changed, 125 insertions(+), 53 deletions(-) diff --git a/cmake/Modules/FindRESVG.cmake b/cmake/Modules/FindRESVG.cmake index b03a0667..d9942730 100644 --- a/cmake/Modules/FindRESVG.cmake +++ b/cmake/Modules/FindRESVG.cmake @@ -1,28 +1,107 @@ -# - Try to find RESVG -# Once done this will define -# RESVG_FOUND - System has RESVG -# RESVG_INCLUDE_DIRS - The RESVG include directories -# RESVG_LIBRARIES - The libraries needed to use RESVG -find_path ( RESVG_INCLUDE_DIR ResvgQt.h - PATHS ${RESVGDIR}/include/resvg - $ENV{RESVGDIR}/include/resvg - $ENV{RESVGDIR}/include - /usr/include/resvg - /usr/include - /usr/local/include/resvg - /usr/local/include ) +# vim: ts=2 sw=2 +#[=======================================================================[.rst: +FindRESVG +--------- +Try to find the shared-library build of resvg, the Rust SVG library -find_library ( RESVG_LIBRARY NAMES resvg - PATHS /usr/lib - /usr/local/lib - $ENV{RESVGDIR} - $ENV{RESVGDIR}/lib ) +IMPORTED targets +^^^^^^^^^^^^^^^^ -set ( RESVG_LIBRARIES ${RESVG_LIBRARY} ) -set ( RESVG_INCLUDE_DIRS ${RESVG_INCLUDE_DIR} ) +This module defines :prop_tgt:`IMPORTED` target ``RESVG::resvg`` when +the library and headers are found. -include ( FindPackageHandleStandardArgs ) -# handle the QUIETLY and REQUIRED arguments and set RESVG_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args ( RESVG "Could NOT find RESVG, using Qt SVG parsing instead" RESVG_LIBRARY RESVG_INCLUDE_DIR ) -mark_as_advanced( RESVG_LIBRARY RESVG_INCLUDE_DIR ) +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +:: + + RESVG_FOUND - Library and header files found + RESVG_INCLUDE_DIRS - Include directory path + RESVG_LIBRARIES - Link path to the library + RESVG_DEFINITIONS - Compiler switches (currently unused) + +Backwards compatibility +^^^^^^^^^^^^^^^^^^^^^^^ + +For compatibility with previous versions of this module, uppercase names +for FFmpeg and for all components are also recognized, and all-uppercase +versions of the cache variables are also created. + +Control variables +^^^^^^^^^^^^^^^^^ + +The following variables can be used to provide path hints to the module: + +RESVGDIR - Set in the calling CMakeLists.txt or on the command line +ENV{RESVGDIR} - An environment variable in the cmake process context + +Copyright (c) 2020, FeRD (Frank Dana) +#]=======================================================================] +include(FindPackageHandleStandardArgs) + +# CMake 3.4+ only: Convert relative paths to absolute +if(DEFINED RESVGDIR AND CMAKE_VERSION VERSION_GREATER 3.4) + get_filename_component(RESVGDIR "${RESVGDIR}" ABSOLUTE + BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}) +endif() + +find_path(RESVG_INCLUDE_DIRS + ResvgQt.h + PATHS + ${RESVGDIR} + ${RESVGDIR}/include + $ENV{RESVGDIR} + $ENV{RESVGDIR}/include + /usr/include + /usr/local/include + PATH_SUFFIXES + resvg + capi/include + resvg/capi/include +) + +find_library(RESVG_LIBRARIES + NAMES resvg + PATHS + ${RESVGDIR} + ${RESVGDIR}/lib + $ENV{RESVGDIR} + $ENV{RESVGDIR}/lib + /usr/lib + /usr/local/lib + PATH_SUFFIXES + resvg + target/release + resvg/target/release +) + +if (RESVG_INCLUDE_DIRS AND RESVG_LIBRARIES) + set(RESVG_FOUND TRUE) +endif() +set(RESVG_LIBRARIES ${RESVG_LIBRARIES} CACHE STRING "The Resvg library link path") +set(RESVG_INCLUDE_DIRS ${RESVG_INCLUDE_DIRS} CACHE STRING "The Resvg include directories") +set(RESVG_DEFINITIONS "" CACHE STRING "The Resvg CFLAGS") + +mark_as_advanced(RESVG_LIBRARIES RESVG_INCLUDE_DIRS RESVG_DEFINITIONS) + +# Give a nice error message if some of the required vars are missing. +find_package_handle_standard_args(RESVG + "Could NOT find RESVG, using Qt SVG parsing instead" + RESVG_LIBRARIES RESVG_INCLUDE_DIRS ) + +# Export target +if(RESVG_FOUND AND NOT TARGET RESVG::resvg) + message(STATUS "Creating IMPORTED target RESVG::resvg") + add_library(RESVG::resvg UNKNOWN IMPORTED) + + set_target_properties(RESVG::resvg PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${RESVG_INCLUDE_DIRS}") + + set_property(TARGET RESVG::resvg APPEND PROPERTY + INTERFACE_COMPILE_DEFINITIONS "${RESVG_DEFINITIONS}") + + set_property(TARGET RESVG::resvg APPEND PROPERTY + IMPORTED_LOCATION "${RESVG_LIBRARIES}") +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 41c425c2..fb62de0a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -100,20 +100,6 @@ IF (ENABLE_BLACKMAGIC) ENDIF (BLACKMAGIC_FOUND) ENDIF (ENABLE_BLACKMAGIC) - -################### RESVG ##################### -# Find resvg library (used for rendering svg files) -FIND_PACKAGE(RESVG) - -# Include resvg headers (optional SVG library) -if (RESVG_FOUND) - include_directories(${RESVG_INCLUDE_DIRS}) - - # define a global var (used in the C++) - add_definitions( -DUSE_RESVG=1 ) - SET(CMAKE_SWIG_FLAGS "-DUSE_RESVG=1") -endif(RESVG_FOUND) - ############### PROFILING ################# #set(PROFILER "/usr/lib/libprofiler.so.0.3.2") #set(PROFILER "/usr/lib/libtcmalloc.so.4") @@ -357,6 +343,27 @@ if (TARGET cppzmq) target_link_libraries(openshot PUBLIC cppzmq) endif() +################### RESVG ##################### +# Migrate some legacy variable names +if(DEFINED RESVGDIR AND NOT DEFINED RESVG_ROOT) + set(RESVG_ROOT ${RESVGDIR}) +endif() +if(DEFINED ENV{RESVGDIR} AND NOT DEFINED RESVG_ROOT) + set(RESVG_ROOT $ENV{RESVGDIR}) +endif() + +# Find resvg library (used for rendering svg files) +FIND_PACKAGE(RESVG) + +# Include resvg headers (optional SVG library) +if (TARGET RESVG::resvg) + #include_directories(${RESVG_INCLUDE_DIRS}) + target_link_libraries(openshot PUBLIC RESVG::resvg) + + # define a global var (used in the C++) + add_definitions( -DUSE_RESVG=1 ) + set(CMAKE_SWIG_FLAGS "-DUSE_RESVG=1") +endif() ############### LINK LIBRARY ################# # Link remaining dependency libraries @@ -368,10 +375,6 @@ if(ImageMagick_FOUND) target_link_libraries(openshot PUBLIC ${ImageMagick_LIBRARIES}) endif() -if(RESVG_FOUND) - target_link_libraries(openshot PUBLIC ${RESVG_LIBRARIES}) -endif() - if(BLACKMAGIC_FOUND) target_link_libraries(openshot PUBLIC ${BLACKMAGIC_LIBRARY_DIR}) endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f609bc27..4b2284f6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -94,16 +94,6 @@ IF (ENABLE_BLACKMAGIC) ENDIF (ENABLE_BLACKMAGIC) -################### RESVG ##################### -# Find resvg library (used for rendering svg files) -FIND_PACKAGE(RESVG) - -# Include resvg headers (optional SVG library) -if (RESVG_FOUND) - include_directories(${RESVG_INCLUDE_DIRS}) -endif(RESVG_FOUND) - - ############### SET TEST SOURCE FILES ################# SET ( OPENSHOT_TEST_FILES Cache_Tests.cpp From 22793e27457d932fa164090b086b024f411c30ed Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Wed, 8 Jan 2020 18:47:19 -0500 Subject: [PATCH 08/14] Set IMPORTED_NO_SONAME on RESVG target --- cmake/Modules/FindRESVG.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/Modules/FindRESVG.cmake b/cmake/Modules/FindRESVG.cmake index d9942730..c70b2e88 100644 --- a/cmake/Modules/FindRESVG.cmake +++ b/cmake/Modules/FindRESVG.cmake @@ -94,7 +94,7 @@ find_package_handle_standard_args(RESVG # Export target if(RESVG_FOUND AND NOT TARGET RESVG::resvg) message(STATUS "Creating IMPORTED target RESVG::resvg") - add_library(RESVG::resvg UNKNOWN IMPORTED) + add_library(RESVG::resvg SHARED IMPORTED) set_target_properties(RESVG::resvg PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${RESVG_INCLUDE_DIRS}") @@ -102,6 +102,10 @@ if(RESVG_FOUND AND NOT TARGET RESVG::resvg) set_property(TARGET RESVG::resvg APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "${RESVG_DEFINITIONS}") + # libresvg.so doesn't have a SONAME + set_property(TARGET RESVG::resvg APPEND PROPERTY + IMPORTED_NO_SONAME TRUE) + set_property(TARGET RESVG::resvg APPEND PROPERTY IMPORTED_LOCATION "${RESVG_LIBRARIES}") endif() From 0f4744651ee33094d1f5d6298e9164f050cb3e77 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Wed, 8 Jan 2020 23:54:04 -0600 Subject: [PATCH 09/14] Improved way to generate git logs from the current commit to the previous tag. During a release, we tag the current commit during the publishing, and then it starts detecting no changes (since we are ON the current tag). --- .gitlab-ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 62495078..f998c3d4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,7 +24,7 @@ linux-builder: - ~/auto-update-docs "$CI_PROJECT_DIR/build" "$CI_COMMIT_REF_NAME" - mv install-x64/lib/python3.4/site-packages/*openshot* install-x64/python - echo -e "CI_PROJECT_NAME:$CI_PROJECT_NAME\nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME\nCI_COMMIT_SHA:$CI_COMMIT_SHA\nCI_JOB_ID:$CI_JOB_ID" > "install-x64/share/$CI_PROJECT_NAME" - - git log $(git describe --tags --abbrev=0)..HEAD --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log" + - git log $(git describe --tags --abbrev=0 @^)..@ --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log" when: always except: - tags @@ -51,7 +51,7 @@ mac-builder: - make install - mv install-x64/lib/python3.6/site-packages/*openshot* install-x64/python - echo -e "CI_PROJECT_NAME:$CI_PROJECT_NAME\nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME\nCI_COMMIT_SHA:$CI_COMMIT_SHA\nCI_JOB_ID:$CI_JOB_ID" > "install-x64/share/$CI_PROJECT_NAME" - - git log $(git describe --tags --abbrev=0)..HEAD --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log" + - git log $(git describe --tags --abbrev=0 @^)..@ --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log" when: always except: - tags @@ -79,8 +79,8 @@ windows-builder-x64: - mingw32-make install - Move-Item -Force -path "install-x64\lib\python3.7\site-packages\*openshot*" -destination "install-x64\python\" - New-Item -path "install-x64/share/" -Name "$CI_PROJECT_NAME" -Value "CI_PROJECT_NAME:$CI_PROJECT_NAME`nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME`nCI_COMMIT_SHA:$CI_COMMIT_SHA`nCI_JOB_ID:$CI_JOB_ID" -ItemType file -force - - $PREV_GIT_LABEL=(git describe --tags --abbrev=0) - - git log "$PREV_GIT_LABEL..HEAD" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log" + - $PREV_GIT_LABEL=(git describe --tags --abbrev=0 '@^') + - git log "$PREV_GIT_LABEL..@" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x64/share/$CI_PROJECT_NAME.log" when: always except: - tags @@ -108,8 +108,8 @@ windows-builder-x86: - mingw32-make install - Move-Item -Force -path "install-x86\lib\python3.7\site-packages\*openshot*" -destination "install-x86\python\" - New-Item -path "install-x86/share/" -Name "$CI_PROJECT_NAME" -Value "CI_PROJECT_NAME:$CI_PROJECT_NAME`nCI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME`nCI_COMMIT_SHA:$CI_COMMIT_SHA`nCI_JOB_ID:$CI_JOB_ID" -ItemType file -force - - $PREV_GIT_LABEL=(git describe --tags --abbrev=0) - - git log "$PREV_GIT_LABEL..HEAD" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x86/share/$CI_PROJECT_NAME.log" + - $PREV_GIT_LABEL=(git describe --tags --abbrev=0 '@^') + - git log "$PREV_GIT_LABEL..@" --oneline --pretty=format:"%C(auto,yellow)%h%C(auto,magenta)% %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(25,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D" --date=short > "install-x86/share/$CI_PROJECT_NAME.log" when: always except: - tags From 08add08378afcac14ee83edc77ddb819ce4f9ccf Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Thu, 9 Jan 2020 01:59:26 -0500 Subject: [PATCH 10/14] Fix FindRESVG for Windows --- cmake/Modules/FindRESVG.cmake | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/cmake/Modules/FindRESVG.cmake b/cmake/Modules/FindRESVG.cmake index c70b2e88..f49ad1f2 100644 --- a/cmake/Modules/FindRESVG.cmake +++ b/cmake/Modules/FindRESVG.cmake @@ -94,18 +94,28 @@ find_package_handle_standard_args(RESVG # Export target if(RESVG_FOUND AND NOT TARGET RESVG::resvg) message(STATUS "Creating IMPORTED target RESVG::resvg") - add_library(RESVG::resvg SHARED IMPORTED) + if (WIN32) + # Windows mis-links SHARED library targets + add_library(RESVG::resvg UNKNOWN IMPORTED) + message(STATUS " UNKNOWN IMPORTED target for Win32") + else() + # Linux needs SHARED to link because libresvg has no SONAME + add_library(RESVG::resvg SHARED IMPORTED) + set_property(TARGET RESVG::resvg APPEND PROPERTY + IMPORTED_NO_SONAME TRUE) + message(STATUS " SHARED IMPORTED target with IMPORTED_NO_SONAME") + endif() - set_target_properties(RESVG::resvg PROPERTIES + message(STATUS " INCLUDE_DIRECTORIES: ${RESVG_INCLUDE_DIRS}") + message(STATUS " COMPILE_DEFINITIONS: ${RESVG_DEFINITIONS}") + message(STATUS " IMPORTED_LOCATION: ${RESVG_LIBRARIES}") + + set_property(TARGET RESVG::resvg APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${RESVG_INCLUDE_DIRS}") set_property(TARGET RESVG::resvg APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "${RESVG_DEFINITIONS}") - # libresvg.so doesn't have a SONAME - set_property(TARGET RESVG::resvg APPEND PROPERTY - IMPORTED_NO_SONAME TRUE) - set_property(TARGET RESVG::resvg APPEND PROPERTY IMPORTED_LOCATION "${RESVG_LIBRARIES}") endif() From fa9189a96a46da9dc87a6699f3c615bb8bc4f12c Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Sat, 11 Jan 2020 17:59:03 -0500 Subject: [PATCH 11/14] Fix RESVG format in GetFrame --- src/QtImageReader.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/QtImageReader.cpp b/src/QtImageReader.cpp index e2ee5d7a..3e51d769 100644 --- a/src/QtImageReader.cpp +++ b/src/QtImageReader.cpp @@ -218,11 +218,14 @@ std::shared_ptr QtImageReader::GetFrame(int64_t requested_frame) // Scale image smaller (or use a previous scaled image) if (!cached_image || (max_size.width() != max_width || max_size.height() != max_height)) { + + bool rendered = false; #if USE_RESVG == 1 // If defined and found in CMake, utilize the libresvg for parsing // SVG files and rasterizing them to QImages. // Only use resvg for files ending in '.svg' or '.svgz' if (path.toLower().endsWith(".svg") || path.toLower().endsWith(".svgz")) { + ResvgRenderer renderer(path); if (renderer.isValid()) { // Scale SVG size to keep aspect ratio, and fill the max_size as best as possible @@ -230,30 +233,25 @@ std::shared_ptr QtImageReader::GetFrame(int64_t requested_frame) svg_size.scale(max_width, max_height, Qt::KeepAspectRatio); // Create empty QImage - cached_image = std::shared_ptr(new QImage(QSize(svg_size.width(), svg_size.height()), QImage::Format_RGBA8888)); + cached_image = std::shared_ptr(new QImage(QSize(svg_size.width(), svg_size.height()), QImage::Format_ARGB32_Premultiplied)); cached_image->fill(Qt::transparent); // Render SVG into QImage QPainter p(cached_image.get()); renderer.render(&p); p.end(); - } else { - // Resize current rasterized SVG (since we failed to parse original SVG file with resvg) - cached_image = std::shared_ptr(new QImage(image->scaled(max_width, max_height, Qt::KeepAspectRatio, Qt::SmoothTransformation))); - cached_image = std::shared_ptr(new QImage(cached_image->convertToFormat(QImage::Format_RGBA8888))); + rendered = true; } - } else { + } +#endif + + if (!rendered) { // We need to resize the original image to a smaller image (for performance reasons) // Only do this once, to prevent tons of unneeded scaling operations cached_image = std::shared_ptr(new QImage(image->scaled(max_width, max_height, Qt::KeepAspectRatio, Qt::SmoothTransformation))); - cached_image = std::shared_ptr(new QImage(cached_image->convertToFormat(QImage::Format_RGBA8888))); } -#else - // We need to resize the original image to a smaller image (for performance reasons) - // Only do this once, to prevent tons of unneeded scaling operations - cached_image = std::shared_ptr(new QImage(image->scaled(max_width, max_height, Qt::KeepAspectRatio, Qt::SmoothTransformation))); + cached_image = std::shared_ptr(new QImage(cached_image->convertToFormat(QImage::Format_RGBA8888))); -#endif // Set max size (to later determine if max_size is changed) max_size.setWidth(max_width); From 175062913d18336ad17e1b341d22ef9e3292c537 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Sat, 11 Jan 2020 18:11:02 -0500 Subject: [PATCH 12/14] Define USE_RESVG for openshot target --- src/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fb62de0a..619d78ed 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -360,8 +360,7 @@ if (TARGET RESVG::resvg) #include_directories(${RESVG_INCLUDE_DIRS}) target_link_libraries(openshot PUBLIC RESVG::resvg) - # define a global var (used in the C++) - add_definitions( -DUSE_RESVG=1 ) + target_compile_definitions(openshot PUBLIC "-DUSE_RESVG=1") set(CMAKE_SWIG_FLAGS "-DUSE_RESVG=1") endif() From f801af26e5058d19824dbc9d1c07e59edb0e6c98 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Sun, 12 Jan 2020 05:27:17 -0500 Subject: [PATCH 13/14] FindRESVG: Remove debugging messages --- cmake/Modules/FindRESVG.cmake | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cmake/Modules/FindRESVG.cmake b/cmake/Modules/FindRESVG.cmake index f49ad1f2..0538eacd 100644 --- a/cmake/Modules/FindRESVG.cmake +++ b/cmake/Modules/FindRESVG.cmake @@ -97,19 +97,13 @@ if(RESVG_FOUND AND NOT TARGET RESVG::resvg) if (WIN32) # Windows mis-links SHARED library targets add_library(RESVG::resvg UNKNOWN IMPORTED) - message(STATUS " UNKNOWN IMPORTED target for Win32") else() # Linux needs SHARED to link because libresvg has no SONAME add_library(RESVG::resvg SHARED IMPORTED) set_property(TARGET RESVG::resvg APPEND PROPERTY IMPORTED_NO_SONAME TRUE) - message(STATUS " SHARED IMPORTED target with IMPORTED_NO_SONAME") endif() - message(STATUS " INCLUDE_DIRECTORIES: ${RESVG_INCLUDE_DIRS}") - message(STATUS " COMPILE_DEFINITIONS: ${RESVG_DEFINITIONS}") - message(STATUS " IMPORTED_LOCATION: ${RESVG_LIBRARIES}") - set_property(TARGET RESVG::resvg APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${RESVG_INCLUDE_DIRS}") From eb701a5f0829daf3e9d0f677b05371c9e64ee095 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Fri, 7 Feb 2020 17:33:54 -0600 Subject: [PATCH 14/14] Merging this PR from https://github.com/OpenShot/libopenshot/pull/416 into release branch. Tested locally and did not see any crazy memory demands from this. --- src/Qt/VideoCacheThread.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Qt/VideoCacheThread.cpp b/src/Qt/VideoCacheThread.cpp index 46b6f030..6cff46ba 100644 --- a/src/Qt/VideoCacheThread.cpp +++ b/src/Qt/VideoCacheThread.cpp @@ -29,13 +29,14 @@ */ #include "../../include/Qt/VideoCacheThread.h" +#include namespace openshot { // Constructor VideoCacheThread::VideoCacheThread() : Thread("video-cache"), speed(1), is_playing(false), position(1) - , reader(NULL), max_frames(OPEN_MP_NUM_PROCESSORS * 2), current_display_frame(1) + , reader(NULL), max_frames(std::min(OPEN_MP_NUM_PROCESSORS * 8, 64)), current_display_frame(1) { }