From 157cca946a6c9dcf4f605efe6ee6185b5d17422d Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Thu, 16 Feb 2023 19:15:58 +0100 Subject: [PATCH 01/23] wip --- CMakeLists.txt | 107 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..9f24f15 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 3.15) +project(libvideo-decode VERSION 1.0) + +# video-decode +set(LIB_SOURCES + src/vdec.c +) + +add_library(video-decode ${LIB_SOURCES}) + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) + +target_include_directories(video-decode PUBLIC + $ + $ +) + +target_compile_definitions(video-decode PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(video-decode PRIVATE "_GNU_SOURCE") +target_compile_options(video-decode PRIVATE "-fvisibility=hidden") +target_compile_options(video-decode PRIVATE "-std=gnu99") + +if(WIN32) + target_link_libraries(video-decode ws2_32) +endif() + +target_link_libraries(video-decode h264 pomp h265 ulog video-decode-core video-defs) +# if option TODO +target_link_libraries(video-decode video-decode-ffmpeg) + +# video-decode-core +set(LIB_SOURCES + core/src/vdec_dbg.c + core/src/vdec_enums.c + core/src/vdec_format.c + core/src/vdec_h264.c + core/src/vdec_h265.c +) + +add_library(video-decode-core ${LIB_SOURCES}) + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) + +target_include_directories(video-decode-core PUBLIC + $ + $ +) + +target_compile_definitions(video-decode-core PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(video-decode-core PRIVATE "_GNU_SOURCE") +target_compile_options(video-decode-core PRIVATE "-fvisibility=hidden") +target_compile_options(video-decode-core PRIVATE "-std=gnu99") + +if(WIN32) + target_link_libraries(video-decode-core ws2_32) +endif() + +target_link_libraries(video-decode-core + futils + h264 + h265 + media-buffers + media-buffers-memory + ulog + video-defs + video-metadata +) + +# video-decode-ffmpeg +set(LIB_SOURCES + ffmpeg/src/vdec_ffmpeg.c +) + +add_library(video-decode-ffmpeg ${LIB_SOURCES}) + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) + +target_include_directories(video-decode-ffmpeg PUBLIC + $ + $ +) + +target_compile_definitions(video-decode-ffmpeg PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(video-decode-ffmpeg PRIVATE "_GNU_SOURCE") +target_compile_options(video-decode-ffmpeg PRIVATE "-fvisibility=hidden") +target_compile_options(video-decode-ffmpeg PRIVATE "-std=gnu99") + +if(WIN32) + target_link_libraries(video-decode-ffmpeg ws2_32) +endif() + +find_package(FFMPEG REQUIRED) +target_include_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) +target_link_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) +target_link_libraries(video-decode-ffmpeg ${FFMPEG_LIBRARIES}) + +target_link_libraries(video-decode-ffmpeg + futils + media-buffers + media-buffers-memory + media-buffers-memory-generic + pomp + ulog + video-decode-core + video-defs + video-metadata +) From fc718410ec4cae197aab4f49051d93fca7300bec Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Sun, 26 Feb 2023 12:47:40 +0100 Subject: [PATCH 02/23] wip --- CMakeLists.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f24f15..dfce9a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,9 @@ set(LIB_SOURCES add_library(video-decode ${LIB_SOURCES}) option(BUILD_SHARED_LIBS "Build using shared libraries" ON) +set_target_properties(video-decode PROPERTIES + POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} +) target_include_directories(video-decode PUBLIC $ @@ -39,7 +42,9 @@ set(LIB_SOURCES add_library(video-decode-core ${LIB_SOURCES}) -option(BUILD_SHARED_LIBS "Build using shared libraries" ON) +set_target_properties(video-decode-core PROPERTIES + POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} +) target_include_directories(video-decode-core PUBLIC $ @@ -73,7 +78,9 @@ set(LIB_SOURCES add_library(video-decode-ffmpeg ${LIB_SOURCES}) -option(BUILD_SHARED_LIBS "Build using shared libraries" ON) +set_target_properties(video-decode-ffmpeg PROPERTIES + POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} +) target_include_directories(video-decode-ffmpeg PUBLIC $ @@ -90,8 +97,8 @@ if(WIN32) endif() find_package(FFMPEG REQUIRED) -target_include_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) -target_link_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) +target_include_directories(video-decode-ffmpeg ${FFMPEG_INCLUDE_DIRS}) +target_link_directories(video-decode-ffmpeg ${FFMPEG_LIBRARY_DIRS}) target_link_libraries(video-decode-ffmpeg ${FFMPEG_LIBRARIES}) target_link_libraries(video-decode-ffmpeg From 589f084a03282e974f9c3a828e019b7d2a5c1cc5 Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Sun, 26 Feb 2023 20:40:49 +0100 Subject: [PATCH 03/23] wip --- CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dfce9a7..b9503af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,7 +76,7 @@ set(LIB_SOURCES ffmpeg/src/vdec_ffmpeg.c ) -add_library(video-decode-ffmpeg ${LIB_SOURCES}) +add_library(video-decode-ffmpeg STATIC ${LIB_SOURCES}) set_target_properties(video-decode-ffmpeg PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} @@ -93,15 +93,15 @@ target_compile_options(video-decode-ffmpeg PRIVATE "-fvisibility=hidden") target_compile_options(video-decode-ffmpeg PRIVATE "-std=gnu99") if(WIN32) - target_link_libraries(video-decode-ffmpeg ws2_32) + target_link_libraries(video-decode-ffmpeg PRIVATE ws2_32) endif() find_package(FFMPEG REQUIRED) -target_include_directories(video-decode-ffmpeg ${FFMPEG_INCLUDE_DIRS}) -target_link_directories(video-decode-ffmpeg ${FFMPEG_LIBRARY_DIRS}) -target_link_libraries(video-decode-ffmpeg ${FFMPEG_LIBRARIES}) +target_include_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) +target_link_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) +target_link_libraries(video-decode-ffmpeg PRIVATE ${FFMPEG_LIBRARIES}) -target_link_libraries(video-decode-ffmpeg +target_link_libraries(video-decode-ffmpeg PRIVATE futils media-buffers media-buffers-memory From 9c670c6c5d1a845f84c9f6620cd1c484e0c7857a Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Tue, 28 Feb 2023 07:10:27 +0100 Subject: [PATCH 04/23] wip --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9503af..cbb66e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ set(LIB_SOURCES src/vdec.c ) -add_library(video-decode ${LIB_SOURCES}) +add_library(video-decode STATIC ${LIB_SOURCES}) option(BUILD_SHARED_LIBS "Build using shared libraries" ON) set_target_properties(video-decode PROPERTIES @@ -19,6 +19,7 @@ target_include_directories(video-decode PUBLIC ) target_compile_definitions(video-decode PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(video-decode PRIVATE "BUILD_LIBVIDEO_DECODE_FFMPEG") target_compile_definitions(video-decode PRIVATE "_GNU_SOURCE") target_compile_options(video-decode PRIVATE "-fvisibility=hidden") target_compile_options(video-decode PRIVATE "-std=gnu99") @@ -40,7 +41,7 @@ set(LIB_SOURCES core/src/vdec_h265.c ) -add_library(video-decode-core ${LIB_SOURCES}) +add_library(video-decode-core STATIC ${LIB_SOURCES}) set_target_properties(video-decode-core PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} @@ -52,6 +53,7 @@ target_include_directories(video-decode-core PUBLIC ) target_compile_definitions(video-decode-core PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(video-decode-core PRIVATE "BUILD_LIBVIDEO_DECODE_FFMPEG") target_compile_definitions(video-decode-core PRIVATE "_GNU_SOURCE") target_compile_options(video-decode-core PRIVATE "-fvisibility=hidden") target_compile_options(video-decode-core PRIVATE "-std=gnu99") From 6e111402c28156c2a8214129430fc29b6dfb92e4 Mon Sep 17 00:00:00 2001 From: Oscar Sjoberg Date: Tue, 28 Feb 2023 10:05:36 +0100 Subject: [PATCH 05/23] updating the local CMakeLists.txt file --- CMakeLists.txt | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f24f15..fd29e12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,11 @@ add_library(video-decode ${LIB_SOURCES}) option(BUILD_SHARED_LIBS "Build using shared libraries" ON) +# message(" SOME PRINT OUTS : ") +# message($) +# message($) + + target_include_directories(video-decode PUBLIC $ $ @@ -26,7 +31,7 @@ endif() target_link_libraries(video-decode h264 pomp h265 ulog video-decode-core video-defs) # if option TODO -target_link_libraries(video-decode video-decode-ffmpeg) +# target_link_libraries(video-decode video-decode-ffmpeg) # video-decode-core set(LIB_SOURCES @@ -89,7 +94,24 @@ if(WIN32) target_link_libraries(video-decode-ffmpeg ws2_32) endif() -find_package(FFMPEG REQUIRED) +# find_package(FFMPEG REQUIRED) +set(FFMPEG_LIBRARIES + avcodec + avdevice + avfilter + avformat + avutil + swresample + swscale) + +set(FFMPEG_INCLUDE_DIRS + /se/sw/contribs/centos7-gcc11-x86_64/ffmpeg/n4.1-contrib20200311.01/include +) + +set(FFMPEG_LIBRARY_DIRS + /se/sw/contribs/centos7-gcc11-x86_64/ffmpeg/n4.1-contrib20200311.01/lib +) + target_include_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) target_link_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) target_link_libraries(video-decode-ffmpeg ${FFMPEG_LIBRARIES}) From af7bcedc67940705c62a119ae469660d9a965050 Mon Sep 17 00:00:00 2001 From: Oscar Sjoberg Date: Wed, 1 Mar 2023 17:33:39 +0100 Subject: [PATCH 06/23] able to do correct install --- CMakeLists.txt | 212 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 144 insertions(+), 68 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fd29e12..040faff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,19 @@ cmake_minimum_required(VERSION 3.15) -project(libvideo-decode VERSION 1.0) +project(video-decode VERSION 1.0) -# video-decode +# checks if set up rpath exists for install +if(COMMAND set_up_rpath) + set_up_rpath() +else() + message("Set up rpath not defined!") +endif() + +# ${PROJECT_NAME} set(LIB_SOURCES src/vdec.c ) -add_library(video-decode ${LIB_SOURCES}) +add_library(${PROJECT_NAME} ${LIB_SOURCES}) option(BUILD_SHARED_LIBS "Build using shared libraries" ON) @@ -14,26 +21,21 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" ON) # message($) # message($) +# -- PROJECT -target_include_directories(video-decode PUBLIC +target_include_directories(${PROJECT_NAME} PUBLIC $ $ ) -target_compile_definitions(video-decode PRIVATE "VDEC_API_EXPORTS") -target_compile_definitions(video-decode PRIVATE "_GNU_SOURCE") -target_compile_options(video-decode PRIVATE "-fvisibility=hidden") -target_compile_options(video-decode PRIVATE "-std=gnu99") -if(WIN32) - target_link_libraries(video-decode ws2_32) -endif() +target_compile_definitions(${PROJECT_NAME} PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(${PROJECT_NAME} PRIVATE "_GNU_SOURCE") +target_compile_options(${PROJECT_NAME} PRIVATE "-fvisibility=hidden") +target_compile_options(${PROJECT_NAME} PRIVATE "-std=gnu99") -target_link_libraries(video-decode h264 pomp h265 ulog video-decode-core video-defs) -# if option TODO -# target_link_libraries(video-decode video-decode-ffmpeg) +# -- CORE -# video-decode-core set(LIB_SOURCES core/src/vdec_dbg.c core/src/vdec_enums.c @@ -42,57 +44,39 @@ set(LIB_SOURCES core/src/vdec_h265.c ) -add_library(video-decode-core ${LIB_SOURCES}) +add_library(${PROJECT_NAME}-core ${LIB_SOURCES}) option(BUILD_SHARED_LIBS "Build using shared libraries" ON) -target_include_directories(video-decode-core PUBLIC +target_include_directories(${PROJECT_NAME}-core PUBLIC $ $ ) -target_compile_definitions(video-decode-core PRIVATE "VDEC_API_EXPORTS") -target_compile_definitions(video-decode-core PRIVATE "_GNU_SOURCE") -target_compile_options(video-decode-core PRIVATE "-fvisibility=hidden") -target_compile_options(video-decode-core PRIVATE "-std=gnu99") +target_compile_definitions(${PROJECT_NAME}-core PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(${PROJECT_NAME}-core PRIVATE "_GNU_SOURCE") +target_compile_options(${PROJECT_NAME}-core PRIVATE "-fvisibility=hidden") +target_compile_options(${PROJECT_NAME}-core PRIVATE "-std=gnu99") -if(WIN32) - target_link_libraries(video-decode-core ws2_32) -endif() -target_link_libraries(video-decode-core - futils - h264 - h265 - media-buffers - media-buffers-memory - ulog - video-defs - video-metadata -) - -# video-decode-ffmpeg +# -- ffmpeg set(LIB_SOURCES ffmpeg/src/vdec_ffmpeg.c ) -add_library(video-decode-ffmpeg ${LIB_SOURCES}) +add_library(${PROJECT_NAME}-ffmpeg ${LIB_SOURCES}) option(BUILD_SHARED_LIBS "Build using shared libraries" ON) -target_include_directories(video-decode-ffmpeg PUBLIC +target_include_directories(${PROJECT_NAME}-ffmpeg PUBLIC $ $ ) -target_compile_definitions(video-decode-ffmpeg PRIVATE "VDEC_API_EXPORTS") -target_compile_definitions(video-decode-ffmpeg PRIVATE "_GNU_SOURCE") -target_compile_options(video-decode-ffmpeg PRIVATE "-fvisibility=hidden") -target_compile_options(video-decode-ffmpeg PRIVATE "-std=gnu99") - -if(WIN32) - target_link_libraries(video-decode-ffmpeg ws2_32) -endif() +target_compile_definitions(${PROJECT_NAME}-ffmpeg PRIVATE "VDEC_API_EXPORTS") +target_compile_definitions(${PROJECT_NAME}-ffmpeg PRIVATE "_GNU_SOURCE") +target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-fvisibility=hidden") +target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-std=gnu99") # find_package(FFMPEG REQUIRED) set(FFMPEG_LIBRARIES @@ -102,28 +86,120 @@ set(FFMPEG_LIBRARIES avformat avutil swresample - swscale) - -set(FFMPEG_INCLUDE_DIRS - /se/sw/contribs/centos7-gcc11-x86_64/ffmpeg/n4.1-contrib20200311.01/include + swscale ) -set(FFMPEG_LIBRARY_DIRS - /se/sw/contribs/centos7-gcc11-x86_64/ffmpeg/n4.1-contrib20200311.01/lib -) -target_include_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) -target_link_directories(video-decode-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) -target_link_libraries(video-decode-ffmpeg ${FFMPEG_LIBRARIES}) - -target_link_libraries(video-decode-ffmpeg - futils - media-buffers - media-buffers-memory - media-buffers-memory-generic - pomp - ulog - video-decode-core - video-defs - video-metadata -) + +if(NOT DEFINED FFMPEG_INCLUDE_DIRS AND NOT DEFINED FFMPEG_LIBRARY_DIRS) + message(FATAL_ERROR "Need to set FFMPEG_INCLUDE_DIRS and FFMPEG_LIBRARY_DIRS!") +else() + + message("FFMPEG INCLUDE DIRS: ") + message(${FFMPEG_INCLUDE_DIRS}) + target_include_directories(${PROJECT_NAME}-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) + + target_link_directories(${PROJECT_NAME}-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) + + if(WIN32) + + target_link_libraries(${PROJECT_NAME} + PRIVATE + ws2_32 + media-buffers + futils + h264 + pomp + h265 + ulog + ${PROJECT_NAME}-core + video-defs + ) + + + target_link_libraries(${PROJECT_NAME}-core + PRIVATE + ws2_32 + pomp + futils + h264 + h265 + media-buffers + media-buffers-memory + ulog + video-defs + video-metadata + ) + + target_link_libraries(${PROJECT_NAME}-ffmpeg + PRIVATE + ws2_32 + ${FFMPEG_LIBRARIES} + futils + media-buffers + media-buffers-memory + media-buffers-memory-generic + pomp + ulog + ${PROJECT_NAME}-core + video-defs + video-metadata + ) + + else() + + target_link_libraries(${PROJECT_NAME} + PRIVATE + media-buffers + futils + h264 + pomp + h265 + ulog + ${PROJECT_NAME}-core + video-defs + ) + + target_link_libraries(${PROJECT_NAME}-core + PRIVATE + pomp + futils + h264 + h265 + media-buffers + media-buffers-memory + ulog + video-defs + video-metadata + ) + + target_link_libraries(${PROJECT_NAME}-ffmpeg + PRIVATE + ${FFMPEG_LIBRARIES} + futils + media-buffers + media-buffers-memory + media-buffers-memory-generic + pomp + ulog + ${PROJECT_NAME}-core + video-defs + video-metadata + ) + + endif() + + install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-targets + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + ) + + install(TARGETS ${PROJECT_NAME}-core + EXPORT ${PROJECT_NAME}-core-targets + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + ) +endif() From 6a4d6bde687613418659af6e902801546520b27c Mon Sep 17 00:00:00 2001 From: Oscar Sjoberg Date: Wed, 1 Mar 2023 17:34:50 +0100 Subject: [PATCH 07/23] wip From 6faa5fb87c920c1332a7d95601e576caa3a130ca Mon Sep 17 00:00:00 2001 From: Oscar Sjoberg Date: Thu, 2 Mar 2023 15:07:11 +0100 Subject: [PATCH 08/23] installing libvideo-ffmpeg correctly --- CMakeLists.txt | 51 +++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 13e5a72..3f28249 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,17 +16,15 @@ set(LIB_SOURCES add_library(${PROJECT_NAME} ${LIB_SOURCES}) option(BUILD_SHARED_LIBS "Build using shared libraries" ON) + set_target_properties(video-decode PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} ) -# message(" SOME PRINT OUTS : ") -# message($) -# message($) - # -- PROJECT target_include_directories(${PROJECT_NAME} PUBLIC + # $ $ $ ) @@ -100,12 +98,13 @@ set(FFMPEG_LIBRARIES -if(NOT DEFINED FFMPEG_INCLUDE_DIRS AND NOT DEFINED FFMPEG_LIBRARY_DIRS) +if((NOT DEFINED FFMPEG_INCLUDE_DIRS OR NOT DEFINED FFMPEG_LIBRARY_DIRS)) message(FATAL_ERROR "Need to set FFMPEG_INCLUDE_DIRS and FFMPEG_LIBRARY_DIRS!") else() - message("FFMPEG INCLUDE DIRS: ") - message(${FFMPEG_INCLUDE_DIRS}) + message(INFO " FFMPEG SOURCES: ") + message(INFO " 1. FFMPEG INCLUDE DIRS: ${FFMPEG_INCLUDE_DIRS}") + message(INFO " 2. FFMPEG LIBRARY DIRS: ${FFMPEG_LIBRARY_DIRS}") target_include_directories(${PROJECT_NAME}-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) target_link_directories(${PROJECT_NAME}-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) @@ -122,9 +121,25 @@ else() h265 ulog ${PROJECT_NAME}-core + ${PROJECT_NAME}-ffmpeg video-defs ) + target_link_libraries(${PROJECT_NAME}-ffmpeg + PRIVATE + ws2_32 + ${FFMPEG_LIBRARIES} + futils + media-buffers + media-buffers-memory + media-buffers-memory-generic + pomp + ulog + ${PROJECT_NAME}-core + video-defs + video-metadata + ) + target_link_libraries(${PROJECT_NAME}-core PRIVATE @@ -140,20 +155,6 @@ else() video-metadata ) - target_link_libraries(${PROJECT_NAME}-ffmpeg - PRIVATE - ws2_32 - ${FFMPEG_LIBRARIES} - futils - media-buffers - media-buffers-memory - media-buffers-memory-generic - pomp - ulog - ${PROJECT_NAME}-core - video-defs - video-metadata - ) else() @@ -166,6 +167,7 @@ else() h265 ulog ${PROJECT_NAME}-core + ${PROJECT_NAME}-ffmpeg video-defs ) @@ -205,6 +207,13 @@ else() RUNTIME DESTINATION bin ) + install(TARGETS ${PROJECT_NAME}-ffmpeg + EXPORT ${PROJECT_NAME}-ffmpeg-targets + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + ) + install(TARGETS ${PROJECT_NAME}-core EXPORT ${PROJECT_NAME}-core-targets ARCHIVE DESTINATION lib From f6dc0083fb32137b2a51ba9c461f7d76b9c285dd Mon Sep 17 00:00:00 2001 From: Oscar Sjoberg Date: Thu, 2 Mar 2023 15:58:00 +0100 Subject: [PATCH 09/23] moving rpath --- CMakeLists.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f28249..574df21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,6 @@ cmake_minimum_required(VERSION 3.15) project(video-decode VERSION 1.0) -# checks if set up rpath exists for install -if(COMMAND set_up_rpath) - set_up_rpath() -else() - message("Set up rpath not defined!") -endif() # ${PROJECT_NAME} set(LIB_SOURCES @@ -15,9 +9,16 @@ set(LIB_SOURCES add_library(${PROJECT_NAME} ${LIB_SOURCES}) +# checks if set up rpath exists for install +if(COMMAND set_up_rpath) + set_up_rpath() +else() + message("Set up rpath not defined!") +endif() + option(BUILD_SHARED_LIBS "Build using shared libraries" ON) -set_target_properties(video-decode PROPERTIES +set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} ) From 8dfce8256168c22bb7067834fc2dfe1b1ca21707 Mon Sep 17 00:00:00 2001 From: Oscar Sjoberg Date: Thu, 2 Mar 2023 16:05:31 +0100 Subject: [PATCH 10/23] correcting cmake From f3173c146b88db1be11f56ee3fbac21b396d9dc2 Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Thu, 2 Mar 2023 18:08:13 +0100 Subject: [PATCH 11/23] wip --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 040faff..b17b6ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,7 +78,7 @@ target_compile_definitions(${PROJECT_NAME}-ffmpeg PRIVATE "_GNU_SOURCE") target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-fvisibility=hidden") target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-std=gnu99") -# find_package(FFMPEG REQUIRED) +find_package(FFMPEG REQUIRED) set(FFMPEG_LIBRARIES avcodec avdevice @@ -113,6 +113,7 @@ else() h265 ulog ${PROJECT_NAME}-core + ${PROJECT_NAME}-ffmpeg video-defs ) From 981e5204fe20b493a6176369d0860bb276644170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Sj=C3=B6berg?= Date: Fri, 3 Mar 2023 11:22:41 +0100 Subject: [PATCH 12/23] pulling correct dll when installing windows --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 574df21..23f6cfb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -141,6 +141,11 @@ else() video-metadata ) + file(GLOB ffmpeg_dll "${FFMPEG_LIBRARY_DIRS}/../bin/*.dll") + message(${ffmpeg_dll}) + install(FILES ${ffmpeg_dll} DESTINATION bin) + + target_link_libraries(${PROJECT_NAME}-core PRIVATE From 791b069695668c8f53f93f2b546e81305abda6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Sj=C3=B6berg?= Date: Fri, 3 Mar 2023 11:59:52 +0100 Subject: [PATCH 13/23] pulling correct dll when installing windows From ac01c94e96b9187aa42d6039aa673cc06add328b Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Fri, 3 Mar 2023 13:46:13 +0100 Subject: [PATCH 14/23] fix message --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 23f6cfb..965e92c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,7 @@ else() ) file(GLOB ffmpeg_dll "${FFMPEG_LIBRARY_DIRS}/../bin/*.dll") - message(${ffmpeg_dll}) + message(STATUS ${ffmpeg_dll}) install(FILES ${ffmpeg_dll} DESTINATION bin) From 862ced2f331eabc66b053f39b1cb402f98c2097d Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Fri, 3 Mar 2023 15:59:08 +0100 Subject: [PATCH 15/23] increase time --- ffmpeg/src/vdec_ffmpeg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffmpeg/src/vdec_ffmpeg.c b/ffmpeg/src/vdec_ffmpeg.c index 8c39ed6..4c90897 100644 --- a/ffmpeg/src/vdec_ffmpeg.c +++ b/ffmpeg/src/vdec_ffmpeg.c @@ -952,7 +952,7 @@ static void *vdec_ffmpeg_decoder_thread(void *ptr) timeout = (atomic_load(&self->flushing) && !atomic_load(&self->flush_discard)) ? 0 - : 5; + : 50; ret = pomp_loop_wait_and_process(loop, timeout); if (ret < 0 && ret != -ETIMEDOUT) { From e42fa38f6d8377bf29313552e656c1966c5a354f Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Mon, 6 Mar 2023 21:03:24 +0100 Subject: [PATCH 16/23] linux fix --- CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 965e92c..f0f3d1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,11 +7,11 @@ set(LIB_SOURCES src/vdec.c ) -add_library(${PROJECT_NAME} ${LIB_SOURCES}) +add_library(${PROJECT_NAME} STATIC ${LIB_SOURCES}) # checks if set up rpath exists for install if(COMMAND set_up_rpath) - set_up_rpath() + #set_up_rpath() else() message("Set up rpath not defined!") endif() @@ -47,7 +47,7 @@ set(LIB_SOURCES core/src/vdec_h265.c ) -add_library(${PROJECT_NAME}-core ${LIB_SOURCES}) +add_library(${PROJECT_NAME}-core STATIC ${LIB_SOURCES}) set_target_properties(video-decode-core PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} @@ -70,7 +70,7 @@ set(LIB_SOURCES ffmpeg/src/vdec_ffmpeg.c ) -add_library(${PROJECT_NAME}-ffmpeg ${LIB_SOURCES}) +add_library(${PROJECT_NAME}-ffmpeg STATIC ${LIB_SOURCES}) set_target_properties(video-decode-ffmpeg PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} @@ -87,17 +87,17 @@ target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-fvisibility=hidden") target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-std=gnu99") find_package(FFMPEG) -set(FFMPEG_LIBRARIES - avcodec - avdevice - avfilter - avformat - avutil - swresample - swscale -) - - +if(NOT DEFINED FFMPEG_LIBRARIES) + set(FFMPEG_LIBRARIES + avcodec + avdevice + avfilter + avformat + avutil + swresample + swscale + ) +endif() if((NOT DEFINED FFMPEG_INCLUDE_DIRS OR NOT DEFINED FFMPEG_LIBRARY_DIRS)) message(FATAL_ERROR "Need to set FFMPEG_INCLUDE_DIRS and FFMPEG_LIBRARY_DIRS!") From b0ba1caa121aeff7368125a0dff8aa5dac8eda1d Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Tue, 7 Mar 2023 10:08:51 +0100 Subject: [PATCH 17/23] reset timeout to original value --- ffmpeg/src/vdec_ffmpeg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffmpeg/src/vdec_ffmpeg.c b/ffmpeg/src/vdec_ffmpeg.c index 4c90897..8c39ed6 100644 --- a/ffmpeg/src/vdec_ffmpeg.c +++ b/ffmpeg/src/vdec_ffmpeg.c @@ -952,7 +952,7 @@ static void *vdec_ffmpeg_decoder_thread(void *ptr) timeout = (atomic_load(&self->flushing) && !atomic_load(&self->flush_discard)) ? 0 - : 50; + : 5; ret = pomp_loop_wait_and_process(loop, timeout); if (ret < 0 && ret != -ETIMEDOUT) { From 0bb44809a5a79e9e5c6d201c2f961a3638c691c9 Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Tue, 14 Mar 2023 09:26:24 +0100 Subject: [PATCH 18/23] use shared libs --- CMakeLists.txt | 75 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0f3d1b..2d32db1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15) +cmake_minimum_required(VERSION 3.20) project(video-decode VERSION 1.0) @@ -7,7 +7,7 @@ set(LIB_SOURCES src/vdec.c ) -add_library(${PROJECT_NAME} STATIC ${LIB_SOURCES}) +add_library(${PROJECT_NAME} SHARED ${LIB_SOURCES}) # checks if set up rpath exists for install if(COMMAND set_up_rpath) @@ -47,9 +47,9 @@ set(LIB_SOURCES core/src/vdec_h265.c ) -add_library(${PROJECT_NAME}-core STATIC ${LIB_SOURCES}) +add_library(${PROJECT_NAME}-core SHARED ${LIB_SOURCES}) -set_target_properties(video-decode-core PROPERTIES +set_target_properties(${PROJECT_NAME}-core PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} ) @@ -70,7 +70,7 @@ set(LIB_SOURCES ffmpeg/src/vdec_ffmpeg.c ) -add_library(${PROJECT_NAME}-ffmpeg STATIC ${LIB_SOURCES}) +add_library(${PROJECT_NAME}-ffmpeg SHARED ${LIB_SOURCES}) set_target_properties(video-decode-ffmpeg PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} @@ -103,12 +103,20 @@ if((NOT DEFINED FFMPEG_INCLUDE_DIRS OR NOT DEFINED FFMPEG_LIBRARY_DIRS)) message(FATAL_ERROR "Need to set FFMPEG_INCLUDE_DIRS and FFMPEG_LIBRARY_DIRS!") else() + if(CMAKE_BUILD_TYPE MATCHES DEBUG) + list(FIND FFMPEG_LIBRARY_DIRS debug lib_index) + else() + list(FIND FFMPEG_LIBRARY_DIRS optimized lib_index) + endif() + math(EXPR lib_index "${lib_index} + 1") + list(GET FFMPEG_LIBRARY_DIRS ${lib_index} FFMPEG_LIBRARY_DIRECTORY) + message(INFO " FFMPEG SOURCES: ") - message(INFO " 1. FFMPEG INCLUDE DIRS: ${FFMPEG_INCLUDE_DIRS}") - message(INFO " 2. FFMPEG LIBRARY DIRS: ${FFMPEG_LIBRARY_DIRS}") + message(INFO " 1. FFMPEG_INCLUDE_DIRS: ${FFMPEG_INCLUDE_DIRS}") + message(INFO " 2. FFMPEG_LIBRARY_DIRECTORY: ${FFMPEG_LIBRARY_DIRECTORY}") - target_include_directories(${PROJECT_NAME}-ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS}) - target_link_directories(${PROJECT_NAME}-ffmpeg PRIVATE ${FFMPEG_LIBRARY_DIRS}) + target_include_directories(${PROJECT_NAME}-ffmpeg PUBLIC ${FFMPEG_INCLUDE_DIRS}) + target_link_directories(${PROJECT_NAME}-ffmpeg PUBLIC ${FFMPEG_LIBRARY_DIRECTORY}) if(WIN32) @@ -141,26 +149,22 @@ else() video-metadata ) - file(GLOB ffmpeg_dll "${FFMPEG_LIBRARY_DIRS}/../bin/*.dll") - message(STATUS ${ffmpeg_dll}) - install(FILES ${ffmpeg_dll} DESTINATION bin) - - - target_link_libraries(${PROJECT_NAME}-core - PRIVATE - ws2_32 - pomp - futils - h264 - h265 - media-buffers - media-buffers-memory - ulog - video-defs - video-metadata + PRIVATE + ws2_32 + pomp + futils + h264 + h265 + media-buffers + media-buffers-memory + ulog + video-defs + video-metadata ) + install(CODE "file(GLOB dll_files \"${CMAKE_CURRENT_BINARY_DIR}/*.dll\")") + install(CODE "file(INSTALL DESTINATION \"\$\{CMAKE_INSTALL_PREFIX\}/bin\" TYPE SHARED_LIBRARY FILES \$\{dll_files\})") else() @@ -204,6 +208,25 @@ else() video-metadata ) + install(CODE "set(DEPENDENCY_PATHS \"${FFMPEG_LIBRARY_DIRECTORY}\")") + install(CODE [[ + file(GET_RUNTIME_DEPENDENCIES + LIBRARIES $ + RESOLVED_DEPENDENCIES_VAR _r_deps + UNRESOLVED_DEPENDENCIES_VAR _u_deps + DIRECTORIES ${DEPENDENCY_PATHS} + ) + foreach(_file ${_r_deps}) + file(INSTALL + DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" + TYPE SHARED_LIBRARY + FOLLOW_SYMLINK_CHAIN + FILES "${_file}" + ) + endforeach() + list(LENGTH _u_deps _u_length) + ]]) + endif() install(TARGETS ${PROJECT_NAME} From 33128a7e18f66650500b5f9991d86848086bf8cb Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Tue, 14 Mar 2023 14:09:01 +0100 Subject: [PATCH 19/23] fix system lib exclusion --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d32db1..478d71b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -215,6 +215,7 @@ else() RESOLVED_DEPENDENCIES_VAR _r_deps UNRESOLVED_DEPENDENCIES_VAR _u_deps DIRECTORIES ${DEPENDENCY_PATHS} + POST_EXCLUDE_REGEXES "^/lib" "^/usr/lib" ) foreach(_file ${_r_deps}) file(INSTALL From 00caf459ee605c422e93ae0abc05a80bf6826fdd Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Thu, 16 Mar 2023 09:09:48 +0100 Subject: [PATCH 20/23] fixes --- CMakeLists.txt | 4 +++- ffmpeg/src/vdec_ffmpeg.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 478d71b..d43213a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,7 +86,9 @@ target_compile_definitions(${PROJECT_NAME}-ffmpeg PRIVATE "_GNU_SOURCE") target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-fvisibility=hidden") target_compile_options(${PROJECT_NAME}-ffmpeg PRIVATE "-std=gnu99") -find_package(FFMPEG) +if((NOT DEFINED FFMPEG_INCLUDE_DIRS OR NOT DEFINED FFMPEG_LIBRARY_DIRS)) + find_package(FFMPEG REQUIRED) +endif() if(NOT DEFINED FFMPEG_LIBRARIES) set(FFMPEG_LIBRARIES avcodec diff --git a/ffmpeg/src/vdec_ffmpeg.c b/ffmpeg/src/vdec_ffmpeg.c index 8c39ed6..3bb6f3f 100644 --- a/ffmpeg/src/vdec_ffmpeg.c +++ b/ffmpeg/src/vdec_ffmpeg.c @@ -952,7 +952,7 @@ static void *vdec_ffmpeg_decoder_thread(void *ptr) timeout = (atomic_load(&self->flushing) && !atomic_load(&self->flush_discard)) ? 0 - : 5; + : -1; ret = pomp_loop_wait_and_process(loop, timeout); if (ret < 0 && ret != -ETIMEDOUT) { From 46e0bbdf4bdbb4ea30cdf77921695eb1e3c26725 Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Thu, 16 Mar 2023 15:41:49 +0100 Subject: [PATCH 21/23] fix debug dependency --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d43213a..bdc330a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,13 +210,11 @@ else() video-metadata ) - install(CODE "set(DEPENDENCY_PATHS \"${FFMPEG_LIBRARY_DIRECTORY}\")") install(CODE [[ file(GET_RUNTIME_DEPENDENCIES LIBRARIES $ RESOLVED_DEPENDENCIES_VAR _r_deps UNRESOLVED_DEPENDENCIES_VAR _u_deps - DIRECTORIES ${DEPENDENCY_PATHS} POST_EXCLUDE_REGEXES "^/lib" "^/usr/lib" ) foreach(_file ${_r_deps}) From c4ad2212b1cff1e461a34995ab42e3cb3e9719cf Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Tue, 21 Mar 2023 13:06:48 +0100 Subject: [PATCH 22/23] dll fixes --- CMakeLists.txt | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bdc330a..96b67ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,7 +72,7 @@ set(LIB_SOURCES add_library(${PROJECT_NAME}-ffmpeg SHARED ${LIB_SOURCES}) -set_target_properties(video-decode-ffmpeg PROPERTIES +set_target_properties(${PROJECT_NAME}-ffmpeg PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} ) @@ -165,8 +165,24 @@ else() video-metadata ) - install(CODE "file(GLOB dll_files \"${CMAKE_CURRENT_BINARY_DIR}/*.dll\")") - install(CODE "file(INSTALL DESTINATION \"\$\{CMAKE_INSTALL_PREFIX\}/bin\" TYPE SHARED_LIBRARY FILES \$\{dll_files\})") + install(CODE "set(FFMPEG_LIBRARY_DIRECTORY \"${FFMPEG_LIBRARY_DIRECTORY}/../bin\")") + install(CODE [[ + file(GET_RUNTIME_DEPENDENCIES + LIBRARIES $ + RESOLVED_DEPENDENCIES_VAR _r_deps + UNRESOLVED_DEPENDENCIES_VAR _u_deps + DIRECTORIES ${FFMPEG_LIBRARY_DIRECTORY} + POST_EXCLUDE_REGEXES ".*system32/.*\\.dll" + ) + foreach(_file ${_r_deps}) + file(INSTALL + DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" + TYPE SHARED_LIBRARY + FOLLOW_SYMLINK_CHAIN + FILES "${_file}" + ) + endforeach() +]]) else() @@ -225,7 +241,6 @@ else() FILES "${_file}" ) endforeach() - list(LENGTH _u_deps _u_length) ]]) endif() From 55e48585862f7d7201a8936f6718c08f4956c310 Mon Sep 17 00:00:00 2001 From: Andreas Viborg Date: Wed, 22 Mar 2023 09:43:13 +0100 Subject: [PATCH 23/23] reset timeout --- ffmpeg/src/vdec_ffmpeg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffmpeg/src/vdec_ffmpeg.c b/ffmpeg/src/vdec_ffmpeg.c index 3bb6f3f..8c39ed6 100644 --- a/ffmpeg/src/vdec_ffmpeg.c +++ b/ffmpeg/src/vdec_ffmpeg.c @@ -952,7 +952,7 @@ static void *vdec_ffmpeg_decoder_thread(void *ptr) timeout = (atomic_load(&self->flushing) && !atomic_load(&self->flush_discard)) ? 0 - : -1; + : 5; ret = pomp_loop_wait_and_process(loop, timeout); if (ret < 0 && ret != -ETIMEDOUT) {