Skip to content

Commit 1ef4821

Browse files
committed
Add support for compressed video saving in MKV format
MKV reading/writing library uses libraries from two locations: - libwebm: Low level MKV IO - IGSIO: High level implementation of MKV IO using libwebm
1 parent 80fa759 commit 1ef4821

File tree

4 files changed

+145
-0
lines changed

4 files changed

+145
-0
lines changed

CMakeLists.txt

+20
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ OPTION(PLUSBUILD_USE_Tesseract "Use OCR in PlusLib for recognizing ultrasound im
128128
OPTION(PLUSBUILD_USE_OpenCV "Use OpenCV for optical marker tracking and other features." OFF)
129129
OPTION(PLUSBUILD_USE_aruco "Use aruco for optical marker tracking." OFF)
130130
OPTION(PLUSBUILD_DOWNLOAD_PLUSLIBDATA "Download sample and test data. Required for automatic tests." ON)
131+
OPTION(PLUSBUILD_USE_IGSIO "Use IGSIO" OFF)
131132

132133
# Documentation
133134
OPTION(PLUSBUILD_DOCUMENTATION "Build Plus documentation (Doxygen)." OFF)
@@ -458,6 +459,25 @@ IF(PLUS_USE_BKPROFOCUS_CAMERALINK)
458459
INCLUDE(SuperBuild/External_GrabbieLib.cmake)
459460
ENDIF()
460461

462+
OPTION(PLUS_USE_VTKVIDEOIO_MKV "Use vtkVideoIO for reading/writing MKV files." OFF)
463+
IF (PLUS_USE_VTKVIDEOIO_MKV)
464+
IF (NOT PLUSBUILD_USE_IGSIO)
465+
SET (PLUSBUILD_USE_IGSIO ON CACHE BOOL "" FORCE)
466+
ENDIF()
467+
IF (NOT PLUS_USE_VTKVIDEOIO)
468+
SET (PLUS_USE_VTKVIDEOIO ON CACHE BOOL "" FORCE)
469+
ENDIF()
470+
ENDIF()
471+
472+
IF (PLUS_USE_VTKVIDEOIO_MKV)
473+
INCLUDE(SuperBuild/External_libwebm.cmake)
474+
ENDIF()
475+
476+
IF (PLUSBUILD_USE_IGSIO)
477+
INCLUDE(SuperBuild/External_IGSIO.cmake)
478+
LIST(APPEND PlusLib_DEPENDENCIES IGSIO)
479+
ENDIF()
480+
461481
#-- OvrvisionPro/OPTICAL_TRACKER dependency verification ----------------------------------------------
462482
IF(PLUS_USE_OvrvisionPro AND NOT PLUSBUILD_USE_OpenCV)
463483
MESSAGE("PLUS_USE_OvrvisionPro requires PLUSBUILD_USE_OpenCV option enabled, enabling.")

SuperBuild/External_IGSIO.cmake

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
IF(IGSIO_DIR)
2+
# IGSIO has been built already
3+
FIND_PACKAGE(IGSIO REQUIRED NO_MODULE)
4+
MESSAGE(STATUS "Using IGSIO available at: ${IGSIO_DIR}")
5+
6+
# Copy libraries to CMAKE_RUNTIME_OUTPUT_DIRECTORY
7+
PlusCopyLibrariesToDirectory(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${IGSIO_LIBRARIES})
8+
9+
SET (PLUS_IGSIO_DIR "${IGSIO_DIR}" CACHE INTERNAL "Path to store IGSIO binaries")
10+
ELSE()
11+
12+
SetGitRepositoryTag(
13+
IGSIO
14+
"${GIT_PROTOCOL}://github.com/IGSIO/IGSIO.git"
15+
"master"
16+
)
17+
18+
SET(PLUS_IGSIO_SRC_DIR ${CMAKE_BINARY_DIR}/Deps/IGSIO CACHE INTERNAL "Path to store IGSIO contents.")
19+
SET(PLUS_IGSIO_PREFIX_DIR ${CMAKE_BINARY_DIR}/Deps/IGSIO-prefix CACHE INTERNAL "Path to store IGSIO prefix data.")
20+
SET(PLUS_IGSIO_DIR ${CMAKE_BINARY_DIR}/Deps/IGSIO-bin CACHE INTERNAL "Path to store IGSIO binaries")
21+
22+
SET(IGSIO_DEPENDENCIES vtk)
23+
SET(IGSIO_BUILD_OPTIONS
24+
-DVTK_DIR:PATH=${PLUS_VTK_DIR}
25+
)
26+
27+
IF (PLUS_USE_VTKVIDEOIO)
28+
LIST(APPEND IGSIO_BUILD_OPTIONS
29+
-DBUILD_VTKVIDEOIO:BOOL=ON
30+
)
31+
IF (PLUS_USE_VTKVIDEOIO_MKV)
32+
LIST(APPEND IGSIO_BUILD_OPTIONS
33+
-DVTKVIDEOIO_ENABLE_MKV:BOOL=${PLUS_USE_VTKVIDEOIO_MKV}
34+
-Dlibwebm_DIR:PATH=${PLUS_libwebm_DIR}
35+
)
36+
LIST(APPEND IGSIO_DEPENDENCIES libwebm)
37+
ENDIF()
38+
ENDIF()
39+
40+
ExternalProject_Add( IGSIO
41+
PREFIX ${PLUS_IGSIO_PREFIX_DIR}
42+
"${PLUSBUILD_EXTERNAL_PROJECT_CUSTOM_COMMANDS}"
43+
SOURCE_DIR ${PLUS_IGSIO_SRC_DIR}
44+
BINARY_DIR ${PLUS_IGSIO_DIR}
45+
#--Download step--------------
46+
GIT_REPOSITORY ${IGSIO_GIT_REPOSITORY}
47+
GIT_TAG ${IGSIO_GIT_TAG}
48+
#--Configure step-------------
49+
CMAKE_ARGS
50+
${ep_common_args}
51+
-DEXECUTABLE_OUTPUT_PATH:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
52+
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
53+
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
54+
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
55+
-DCMAKE_CXX_FLAGS:STRING=${ep_common_cxx_flags}
56+
-DCMAKE_C_FLAGS:STRING=${ep_common_c_flags}
57+
-DBUILD_SHARED_LIBS:BOOL=${PLUSBUILD_BUILD_SHARED_LIBS}
58+
${IGSIO_BUILD_OPTIONS}
59+
#--Build step-----------------
60+
BUILD_ALWAYS 1
61+
#--Install step-----------------
62+
INSTALL_COMMAND ""
63+
DEPENDS ${IGSIO_DEPENDENCIES}
64+
)
65+
ENDIF()

SuperBuild/External_PlusLib.cmake

+9
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,14 @@ IF(PLUS_USE_INFRARED_SEEK_CAM)
322322
)
323323
ENDIF()
324324

325+
IF(PLUSBUILD_USE_IGSIO)
326+
LIST(APPEND PLUSBUILD_ADDITIONAL_SDK_ARGS
327+
-DPLUS_USE_IGSIO:BOOL=${PLUSBUILD_USE_IGSIO}
328+
-DIGSIO_DIR:PATH=${PLUS_IGSIO_DIR}
329+
-Dlibwebm_DIR:PATH=${PLUS_libwebm_DIR}
330+
)
331+
ENDIF()
332+
325333
IF(PLUSBUILD_DOCUMENTATION)
326334
LIST(APPEND PLUSBUILD_ADDITIONAL_SDK_ARGS
327335
-DPLUS_DOCUMENTATION_SEARCH_SERVER_INDEXED=${PLUSBUILD_DOCUMENTATION_SEARCH_SERVER_INDEXED}
@@ -434,6 +442,7 @@ ExternalProject_Add(PlusLib
434442
-DPLUS_USE_INFRARED_TEQ1_CAM:BOOL=${PLUS_USE_INFRARED_TEQ1_CAM}
435443
-DPLUS_USE_ATRACSYS:BOOL=${PLUS_USE_ATRACSYS}
436444
-DPLUS_USE_WITMOTIONTRACKER:BOOL=${PLUS_USE_WITMOTIONTRACKER}
445+
-DPLUS_USE_VTKVIDEOIO_MKV:BOOL=${PLUS_USE_VTKVIDEOIO_MKV}
437446
${PLUSBUILD_ADDITIONAL_SDK_ARGS}
438447
LIST_SEPARATOR "|"
439448
#--Build step-----------------

SuperBuild/External_libwebm.cmake

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
IF(libwebm_DIR)
2+
# libwebm has been built already
3+
FIND_PACKAGE(libwebm REQUIRED NO_MODULE)
4+
MESSAGE(STATUS "Using libwebm available at: ${libwebm_DIR}")
5+
6+
# Copy libraries to CMAKE_RUNTIME_OUTPUT_DIRECTORY
7+
PlusCopyLibrariesToDirectory(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${libwebm_LIBRARIES})
8+
9+
SET (PLUS_libwebm_DIR "${libwebm_DIR}" CACHE INTERNAL "Path to store libwebm binaries")
10+
ELSE()
11+
12+
SetGitRepositoryTag(
13+
libwebm
14+
"${GIT_PROTOCOL}://github.com/Sunderlandkyl/libwebm.git"
15+
"master"
16+
)
17+
18+
SET (PLUS_libwebm_SRC_DIR ${CMAKE_BINARY_DIR}/Deps/libwebm CACHE INTERNAL "Path to store libwebm contents.")
19+
SET (PLUS_libwebm_PREFIX_DIR ${CMAKE_BINARY_DIR}/Deps/libwebm-prefix CACHE INTERNAL "Path to store libwebm prefix data.")
20+
SET (PLUS_libwebm_DIR ${CMAKE_BINARY_DIR}/Deps/libwebm-bin CACHE INTERNAL "Path to store libwebm binaries")
21+
22+
ExternalProject_Add( libwebm
23+
PREFIX ${PLUS_libwebm_PREFIX_DIR}
24+
"${PLUSBUILD_EXTERNAL_PROJECT_CUSTOM_COMMANDS}"
25+
SOURCE_DIR ${PLUS_libwebm_SRC_DIR}
26+
BINARY_DIR ${PLUS_libwebm_DIR}
27+
#--Download step--------------
28+
GIT_REPOSITORY ${libwebm_GIT_REPOSITORY}
29+
GIT_TAG ${libwebm_GIT_TAG}
30+
#--Configure step-------------
31+
CMAKE_ARGS
32+
${ep_common_args}
33+
-DEXECUTABLE_OUTPUT_PATH:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
34+
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
35+
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
36+
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
37+
-DCMAKE_CXX_FLAGS:STRING=${ep_common_cxx_flags}
38+
-DCMAKE_C_FLAGS:STRING=${ep_common_c_flags}
39+
-DBUILD_SHARED_LIBS:BOOL=OFF
40+
# Options
41+
-DENABLE_WEBMINFO:BOOL=OFF
42+
-DENABLE_WEBMTS:BOOL=OFF
43+
-DENABLE_WEBM_PARSER:BOOL=OFF
44+
-DENABLE_SAMPLES:BOOL=OFF
45+
-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS:BOOL=ON
46+
#--Build step-----------------
47+
BUILD_ALWAYS 1
48+
#--Install step-----------------
49+
INSTALL_COMMAND ""
50+
)
51+
ENDIF()

0 commit comments

Comments
 (0)