diff --git a/CMakeLists.txt b/CMakeLists.txt index 6620773..6998e51 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,13 @@ cmake_minimum_required( VERSION 2.8.9 ) +###################################################################################### +# CMake functions +###################################################################################### +SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) +INCLUDE( cmake/ModulesFct.cmake ) +INCLUDE(FeatureSummary) + ###################################################################################### # Project Definition ###################################################################################### @@ -20,27 +27,31 @@ set( PLAYUVER_VERSION "${PLAYUVER_VERSION_MAJOR}.${PLAYUVER_VERSION_MINOR}.${PLA # Variables ###################################################################################### -OPTION( PLAYUVER_BUILD_APP "Build GUI Application" ON ) -OPTION( PLAYUVER_BUILD_TOOLS "Build Command Line Application" ON ) -OPTION( PLAYUVER_BUILD_EXAMPLES "Build Examples" OFF ) -OPTION( PLAYUVER_BUILD_DOC "Build Documentation" OFF ) -OPTION( USE_SSE "Build with SSE support" OFF ) +OPTION( BUILD_APP "Build GUI Application" ON ) +OPTION( BUILD_TOOLS "Build Command Line Application" ON ) +OPTION( BUILD_EXAMPLES "Build Examples" OFF ) +OPTION( BUILD_DOC "Build Documentation" OFF ) + OPTION( USE_FERVOR "Add Fervor support" OFF ) + +OPTION( USE_DYNLOAD "Use dynamic load of modules" ON ) +OPTION( USE_SSE "Build with SSE support" OFF ) OPTION( USE_WERROR "Warnings as errors" OFF ) OPTION( USE_STATIC "Use static libs" OFF ) -OPTION( USE_QT4 "Build with Qt4" OFF ) -OPTION( USE_QTDBUS "Build with QtDBus" ON ) -OPTION( USE_DYNLOAD "Use dynamic load of modules" ON ) + + +###################################################################################### +# Release configuration +###################################################################################### + # To be switched on when releasing. OPTION(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON) - - # Get current version. set(PLAYUVER_VERSION_STRING "${PLAYUVER_VERSION}") if(NOT RELEASE_BUILD AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) # Probably a Git workspace; determine the revision. - find_package(Git QUIET) + FIND_PACKAGE(Git QUIET) if(GIT_FOUND) exec_program(${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} @@ -67,6 +78,45 @@ SET(UPDATE_CHANNEL "stable" CACHE STRING "Update channel" ) CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/PlaYUVerUpdate.xml.in ${CMAKE_CURRENT_BINARY_DIR}/PlaYUVerUpdate-${UPDATE_CHANNEL}.xml ) +###################################################################################### +# Dependencies +###################################################################################### + +IF( BUILD_DOC ) + FIND_PACKAGE(Doxygen) + SET( BUILD_DOC ${Doxygen_FOUND} ) +ENDIF() +SET_PACKAGE_PROPERTIES(Doxygen PROPERTIES URL "http://www.doxygen.org/" DESCRIPTION "Doxygen" TYPE OPTIONAL) + +OPTION( USE_OPENCV "Add OpenCV support" ON ) +SET( OPENCV_OPTFLOW_FOUND OFF ) +IF( USE_OPENCV ) + FIND_PACKAGE( OpenCV REQUIRED core highgui video ) + LIST(APPEND OPENCV_MODULES core highgui video ) + SET(USE_OPENCV ${OpenCV_FOUND}) + ## Check +# LIST(FIND OpenCV_LIB_COMPONENTS opencv_optflow OpenCV_optflow_FOUND) +ENDIF() +SET_PACKAGE_PROPERTIES(OpenCV PROPERTIES URL "http://opencv.willowgarage.com" DESCRIPTION "OpenCV library support in PlaYUVerFrame" TYPE OPTIONAL) + +OPTION( USE_FFMPEG "Add FFMPEG support" ON ) +IF( USE_FFMPEG ) + FIND_PACKAGE( FFmpeg ) + SET(USE_FFMPEG ${FFMPEG_FOUND}) +ENDIF() +SET_PACKAGE_PROPERTIES(FFmpeg PROPERTIES URL "http://ffmpeg.org/" DESCRIPTION "Libav library support in PlaYUVerStream" TYPE OPTIONAL) + +ADD_FEATURE_INFO(DynLoad USE_DYNLOAD "Support for dynamic module load" ) +ADD_FEATURE_INFO(SSE USE_SSE "SSE instructions support" ) +ADD_FEATURE_INFO(WErrors USE_WERROR "Warnings as errors" ) + + +IF( WIN32 ) + SET( USE_STATIC ON ) + INCLUDE( cmake/Win32.cmake ) +ENDIF() + + ###################################################################################### # CMake Defin1itions ###################################################################################### @@ -81,43 +131,6 @@ IF(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8") ENDIF() SET( CMAKE_CXX_FLAGS "" ) -###################################################################################### -# Dependencies -###################################################################################### - -# find_package(Doxygen) -# IF(DOXYGEN_FOUND) -# SET( PLAYUVER_BUILD_DOC ON ) -# ENDIF(DOXYGEN_FOUND) -# SET_PACKAGE_PROPERTIES(Doxygen PROPERTIES URL "http://www.doxygen.org/" DESCRIPTION "Doxygen" TYPE OPTIONAL) - -OPTION( USE_OPENCV "Add OpenCV support" ON ) -SET( OPENCV_OPTFLOW_FOUND OFF ) -IF( USE_OPENCV ) - FIND_PACKAGE( OpenCV ) - SET(USE_OPENCV ${OpenCV_FOUND}) - ## Check - LIST(FIND OpenCV_LIB_COMPONENTS opencv_optflow OpenCV_optflow_FOUND) -ENDIF() -SET_PACKAGE_PROPERTIES(OpenCV PROPERTIES URL "http://opencv.willowgarage.com" DESCRIPTION "OpenCV library support in PlaYUVerFrame" TYPE OPTIONAL) - -OPTION( USE_FFMPEG "Add FFMPEG support" ON ) -IF( USE_FFMPEG ) - FIND_PACKAGE( FFmpeg ) - SET(USE_FFMPEG ${FFMPEG_FOUND}) -ENDIF() -SET_PACKAGE_PROPERTIES(FFmpeg PROPERTIES URL "http://ffmpeg.org/" DESCRIPTION "Libav library support in PlaYUVerStream" TYPE OPTIONAL) - -ADD_FEATURE_INFO(SSE USE_SSE "SSE instructions support" ) -ADD_FEATURE_INFO(WErrors USE_WERROR "Warnings as errors" ) - - -IF( WIN32 ) - SET( USE_STATIC ON ) - INCLUDE( cmake/Win32.cmake ) -ENDIF() -INCLUDE( cmake/ModulesFct.cmake ) - ###################################################################################### # Configure targets ###################################################################################### @@ -141,8 +154,8 @@ SET( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g" ) SET( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2" ) -ADD_FEATURE_INFO(PlaYUVerApp PLAYUVER_BUILD_APP "Build Graphical Interface") -ADD_FEATURE_INFO(PlaYUVerTools PLAYUVER_BUILD_TOOLS "Build Command line tool" ) +ADD_FEATURE_INFO(PlaYUVerApp BUILD_APP "Build Graphical Interface") +ADD_FEATURE_INFO(PlaYUVerTools BUILD_TOOLS "Build Command line tool" ) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h ) @@ -150,21 +163,21 @@ CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_D ADD_SUBDIRECTORY( lib ) ADD_SUBDIRECTORY( modules ) -IF( ${PLAYUVER_BUILD_TOOLS} ) +IF( ${BUILD_TOOLS} ) ADD_SUBDIRECTORY( tools ) ENDIF() -IF( ${PLAYUVER_BUILD_APP} ) +IF( ${BUILD_APP} ) ADD_SUBDIRECTORY( app ) ENDIF() # add a target to generate API documentation with Doxygen -# IF(PLAYUVER_BUILD_DOC) +# IF(BUILD_DOC) # configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) # add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile # WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # COMMENT "Generating API documentation with Doxygen" VERBATIM ) -# ENDIF(PLAYUVER_BUILD_DOC) +# ENDIF(BUILD_DOC) ###################################################################################### diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 9553aff..801e71e 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -2,11 +2,11 @@ ### CMakeLists for playuver app component ### -# This is hard way - please fix INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/external ) -# ${CMAKE_CURRENT_SOURCE_DIR}/../modules -# ${CMAKE_CURRENT_BINARY_DIR}/../modules +OPTION( USE_QT4 "Build with Qt4" OFF ) +OPTION( USE_QTDBUS "Build with QtDBus" ON ) +OPTION( USE_FERVOR "Add Fervor support" OFF ) ##################################################################################### # Qt library @@ -86,7 +86,7 @@ set(PlaYUVer_App_RCC resources/playuver.qrc ) -OPTION( USE_FERVOR "Add Fervor support" OFF ) + IF( USE_FERVOR ) diff --git a/cmake/ModulesFct.cmake b/cmake/ModulesFct.cmake index cc99ac5..2299661 100644 --- a/cmake/ModulesFct.cmake +++ b/cmake/ModulesFct.cmake @@ -14,9 +14,26 @@ MACRO(ADD_MODULE name file ) ENDMACRO() -MACRO(ADD_MODULE_OPENCV name file version ) - IF( ${OpenCV_FOUND} AND ( NOT ( ${OpenCV_VERSION} VERSION_LESS ${version} ) ) ) - ADD_MODULE( ${name} ${file} ) +MACRO(ADD_MODULE_USE_OPENCV name file ) + IF( USE_OPENCV ) + SET( ADD_MODULE_OPENCV_VERSION "2.4" ) + CMAKE_PARSE_ARGUMENTS(ADD_MODULE_OPENCV "" "VERSION" "MODULES" ${ARGN} ) + IF( NOT ( ${OpenCV_VERSION} LESS ${ADD_MODULE_OPENCV_VERSION} ) ) + SET( _HAS_MODULES TRUE ) + FOREACH(opencv_module IN LISTS ADD_MODULE_OPENCV_MODULES ) + string(TOUPPER "${opencv_module}" opencv_moduleUP) + FIND_PACKAGE( OpenCV QUIET COMPONENTS ${opencv_module} ) + IF( NOT ${OPENCV_${opencv_moduleUP}_FOUND} EQUAL "1" ) + SET( _HAS_MODULES FALSE ) + ENDIF() + ENDFOREACH() + IF( _HAS_MODULES ) + ADD_MODULE( ${name} ${file} ) + ENDIF() + UNSET( OPENCV_${opencv_moduleUP}_FOUND ) + UNSET( _HAS_MODULES ) + ENDIF() + UNSET( ADD_MODULE_OPENCV_VERSION ) ENDIF() ENDMACRO() diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index a69dcaa..4ffaf88 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -26,19 +26,20 @@ ADD_MODULE( EightBitsSampling "EightBitsSampling" ) ADD_MODULE( FrameCrop "FrameCrop" ) ADD_MODULE( LumaAverage "LumaAverage" ) ADD_MODULE( WeightedPSNR "WeightedPSNR" ) -IF( OpenCV_optflow_FOUND ) - ADD_MODULE_OPENCV( OpticalFlowDualTVL1 "OpticalFlow" 3.1.0 ) - ADD_MODULE_OPENCV( OpticalFlowSparseToDense "OpticalFlow" 3.1.0 ) - ADD_MODULE_OPENCV( OpticalFlowFarneback "OpticalFlow" 3.1.0 ) -ELSE() - ADD_MODULE_OPENCV( OpticalFlowDualTVL1 "OpticalFlowDualTVL1" 2.4.13.0 ) -ENDIF() -ADD_MODULE_OPENCV( DisparityStereoBM "DisparityStereoBM" 2.4.8 ) -ADD_MODULE_OPENCV( DisparityStereoSGBM "DisparityStereoSGBM" 2.4.8 ) -# ADD_MODULE_OPENCV( DisparityStereoVar "DisparityStereoVar" ) + +ADD_MODULE_USE_OPENCV( MeasureOpticalFlowDualTVL1 "MeasureOpticalFlowDualTVL1" VERSION 2.4.13.0 MODULES video ) + +ADD_MODULE_USE_OPENCV( OpticalFlowDualTVL1 "OpticalFlow" VERSION 3.1.0 MODULES optflow ) +ADD_MODULE_USE_OPENCV( OpticalFlowSparseToDense "OpticalFlow" VERSION 3.1.0 MODULES optflow ) +ADD_MODULE_USE_OPENCV( OpticalFlowFarneback "OpticalFlow" VERSION 3.1.0 MODULES video optflow ) + +ADD_MODULE_USE_OPENCV( DisparityStereoBM "DisparityStereoBM" VERSION 2.4.13.0 MODULES calib3d ) +ADD_MODULE_USE_OPENCV( DisparityStereoSGBM "DisparityStereoSGBM" VERSION 2.4.13.0 MODULES calib3d ) + CREATE_MODULE_MACROS() INCLUDE_DIRECTORIES( ${OpenCV_INCLUDE_DIRS} ) ADD_LIBRARY( PlaYUVerModules ${plaYUver_Mod_SRCS} ) +FIND_PACKAGE( OpenCV COMPONENTS ${OPENCV_MODULES} ) TARGET_LINK_LIBRARIES( PlaYUVerModules PlaYUVerLib ${OpenCV_LIBRARIES} -ldl ) diff --git a/modules/OpticalFlowDualTVL1.cpp b/modules/MeasureOpticalFlowDualTVL1.cpp similarity index 88% rename from modules/OpticalFlowDualTVL1.cpp rename to modules/MeasureOpticalFlowDualTVL1.cpp index 0e99a63..139aa4b 100644 --- a/modules/OpticalFlowDualTVL1.cpp +++ b/modules/MeasureOpticalFlowDualTVL1.cpp @@ -18,11 +18,11 @@ */ /** - * \file OpticalFlowDualTVL1.cpp + * \file MeasureOpticalFlowDualTVL1.cpp * \brief Absolute Frame Difference module */ -#include "OpticalFlowDualTVL1.h" +#include "MeasureOpticalFlowDualTVL1.h" #include using cv::Scalar; @@ -32,13 +32,13 @@ using cv::Ptr; using cv::Point; using cv::Point2f; -OpticalFlowDualTVL1::OpticalFlowDualTVL1() +MeasureOpticalFlowDualTVL1::MeasureOpticalFlowDualTVL1() { /* Module Definition */ m_iModuleAPI = MODULE_API_2; m_iModuleType = FRAME_PROCESSING_MODULE; m_pchModuleCategory = "Measurements"; - m_pchModuleName = "OpticalFlowDualTVL1"; + m_pchModuleName = "MeasureOpticalFlowDualTVL1"; m_pchModuleTooltip = "Measure optical flow"; m_uiNumberOfFrames = MODULE_REQUIRES_TWO_FRAMES; m_uiModuleRequirements = MODULE_REQUIRES_SKIP_WHILE_PLAY | MODULE_REQUIRES_NEW_WINDOW | MODULE_REQUIRES_OPTIONS; @@ -51,7 +51,7 @@ OpticalFlowDualTVL1::OpticalFlowDualTVL1() } -Bool OpticalFlowDualTVL1::create( std::vector apcFrameList ) +Bool MeasureOpticalFlowDualTVL1::create( std::vector apcFrameList ) { _BASIC_MODULE_API_2_CHECK_ @@ -71,7 +71,7 @@ static inline bool isFlowCorrect( Point2f u ) return !cvIsNaN( u.x ) && !cvIsNaN( u.y ) && fabs( u.x ) < 1e9 && fabs( u.y ) < 1e9; } -Void OpticalFlowDualTVL1::drawFlow() +Void MeasureOpticalFlowDualTVL1::drawFlow() { Mat cvMatAfter; m_pcFrameAfter->toMat( cvMatAfter, true ); @@ -105,7 +105,7 @@ Void OpticalFlowDualTVL1::drawFlow() m_pcOutputFrame->fromMat( cvMatAfter ); } -Void OpticalFlowDualTVL1::compensateFlow() +Void MeasureOpticalFlowDualTVL1::compensateFlow() { for( UInt c = 0; c < m_pcOutputFrame->getNumberChannels(); c++ ) { @@ -125,7 +125,7 @@ Void OpticalFlowDualTVL1::compensateFlow() } } -PlaYUVerFrame* OpticalFlowDualTVL1::process( std::vector apcFrameList ) +PlaYUVerFrame* MeasureOpticalFlowDualTVL1::process( std::vector apcFrameList ) { m_pcFrameAfter = apcFrameList[0]; m_pcFramePrev = apcFrameList[1]; @@ -146,7 +146,7 @@ PlaYUVerFrame* OpticalFlowDualTVL1::process( std::vector apcFram } Void -OpticalFlowDualTVL1::destroy() +MeasureOpticalFlowDualTVL1::destroy() { if( m_pcOutputFrame ) delete m_pcOutputFrame; diff --git a/modules/OpticalFlowDualTVL1.h b/modules/MeasureOpticalFlowDualTVL1.h similarity index 81% rename from modules/OpticalFlowDualTVL1.h rename to modules/MeasureOpticalFlowDualTVL1.h index 0623577..3692b0f 100644 --- a/modules/OpticalFlowDualTVL1.h +++ b/modules/MeasureOpticalFlowDualTVL1.h @@ -18,21 +18,21 @@ */ /** - * \file OpticalFlowDualTVL1.h + * \file MeasureOpticalFlowDualTVL1.h * \brief Absolute Frame Difference module */ -#ifndef __OPTICALFLOWDUALTVL1_H__ -#define __OPTICALFLOWDUALTVL1_H__ +#ifndef __MeasureOpticalFlowDualTVL1_H__ +#define __MeasureOpticalFlowDualTVL1_H__ #include #include #include "lib/PlaYUVerModuleIf.h" -class OpticalFlowDualTVL1: public PlaYUVerModuleIf +class MeasureOpticalFlowDualTVL1: public PlaYUVerModuleIf { -REGISTER_CLASS_FACTORY( OpticalFlowDualTVL1 ) +REGISTER_CLASS_FACTORY( MeasureOpticalFlowDualTVL1 ) private: Bool m_bShowReconstruction; @@ -47,8 +47,8 @@ private: Void compensateFlow(); public: - OpticalFlowDualTVL1(); - virtual ~OpticalFlowDualTVL1() + MeasureOpticalFlowDualTVL1(); + virtual ~MeasureOpticalFlowDualTVL1() { } Bool create( std::vector apcFrameList ); @@ -57,5 +57,5 @@ public: }; -#endif // __OPTICALFLOWDUALTVL1_H__ +#endif // __MeasureOpticalFlowDualTVL1_H__ diff --git a/modules/OpticalFlow.cpp b/modules/OpticalFlow.cpp index 95648bc..ba3e24d 100644 --- a/modules/OpticalFlow.cpp +++ b/modules/OpticalFlow.cpp @@ -29,7 +29,6 @@ #include // Opencv -// #include #include using cv::Scalar;