diff --git a/CMakeLists.txt b/CMakeLists.txt index 75a4a1f..38ccf21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,9 +11,15 @@ cmake_minimum_required( VERSION 2.8.9 ) SET( PROJECT_NAME "playuver" ) PROJECT( ${PROJECT_NAME} ) -INCLUDE( cmake/PlaYUVerVersion.cmake ) -INCLUDE( cmake/CMakeMacros.cmake ) + +###################################################################################### +# CMake Definitions +###################################################################################### + +SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ) +INCLUDE(FeatureSummary) +INCLUDE( cmake/PlaYUVerVersion.cmake ) # must go before the project command SET(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE) @@ -22,27 +28,63 @@ IF(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8") ENDIF() SET( CMAKE_CXX_FLAGS "" ) + ###################################################################################### # Variables ###################################################################################### -ADD_OPTION(PLAYUVER_LONGVERSIONNAME "Use long version name in deb" OFF ) -ADD_OPTION(PLAYUVER_WERROR "Warnings as errors" OFF ) -ADD_OPTION(PLAYUVER_THREADED_MODULES "Use threads for modules" OFF ) -ADD_OPTION(USE_QT4 "Build with QT4" OFF ) -ADD_OPTION(USE_FERVOR "Add Fervor support" OFF ) - +OPTION( USE_FERVOR "Add Fervor support" OFF ) +OPTION( PLAYUVER_LONGVERSIONNAME "Use long version name in deb" OFF ) +OPTION( PLAYUVER_WERROR "Warnings as errors" OFF ) +OPTION( PLAYUVER_THREADED_MODULES "Use threads for modules" OFF ) +OPTION( USE_QT4 "Build with QT4" OFF ) +ADD_FEATURE_INFO(Fervor USE_FERVOR "Fervor lib includes check for updates feature.") +ADD_FEATURE_INFO(WErrors PLAYUVER_WERROR "Warnings as errors" ) ###################################################################################### # Dependencies ###################################################################################### -INCLUDE( cmake/LibFervor.cmake ) -INCLUDE( cmake/LibQT.cmake ) -INCLUDE( cmake/LibFFmpeg.cmake ) -INCLUDE( cmake/LibOpenCV.cmake ) +OPTION( USE_OPENCV "Add OpenCV support" OFF ) +IF( USE_OPENCV ) + FIND_PACKAGE( OpenCV ) + SET(USE_OPENCV ${OpenCV_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" OFF ) +IF( USE_FFMPEG ) + FIND_PACKAGE( OpenCV ) + SET(USE_FFMPEG ${FFMPEG_FOUND}) +ENDIF() +SET_PACKAGE_PROPERTIES(FFmpeg PROPERTIES URL "http://ffmpeg.org/" DESCRIPTION "Libav library support in PlaYUVerStream" TYPE OPTIONAL) + +##################################################################################### +# Qt library +###################################################################################### + +IF( USE_QT4 ) + SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}QT4" ) + FIND_PACKAGE( Qt4 REQUIRED QtCore QtGui QtNetwork QtWebKit ) + IF( NOT QT4_FOUND ) + SET(USE_QT4 FALSE) + ELSE() + INCLUDE( ${QT_USE_FILE} ) + ADD_DEFINITIONS( ${QT_DEFINITIONS} ) + SET( QT_LINKER_LIBS ${QT_LIBRARIES} ) + ENDIF() +ENDIF() + +IF( NOT USE_QT4 ) + SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}QT5" ) + FIND_PACKAGE( Qt5 REQUIRED Core Gui Widgets ) + INCLUDE_DIRECTORIES( ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ) + # Add compiler flags for building executables (-fPIE) + SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}" ) + LIST(APPEND QT_LINKER_LIBS Qt5::Core Qt5::Gui Qt5::Widgets ) + LIST(APPEND QT_MODULES Core Gui Widgets ) +ENDIF() ###################################################################################### # Configuration @@ -59,6 +101,7 @@ IF (NOT CMAKE_BUILD_TYPE) ENDIF() SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" ) + IF( PLAYUVER_WERROR ) SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror" ) ENDIF() @@ -71,11 +114,11 @@ ADD_SUBDIRECTORY( modules ) ADD_SUBDIRECTORY( app ) IF( WIN32 ) - SET(MSVC_DLL_DIR "MSVC_DLL_DIR" CACHE PATH "Where to find MSVC dlls") - INSTALL(FILES ${MSVC_DLL_DIR}/msvcr120.dll DESTINATION bin ) - INSTALL(FILES ${MSVC_DLL_DIR}/msvcp120.dll DESTINATION bin ) + INCLUDE( cmake/Win32.cmake ) ENDIF() + + ###################################################################################### # Create deb package ###################################################################################### @@ -88,6 +131,29 @@ SET(CPACK_PACKAGE_VERSION_PATCH ${PLAYUVER_VERSION_PATH}) SET(CPACK_PACKAGE_VERSION ${PLAYUVER_VERSION}) SET(CPACK_PACKAGE_ARCHITECTURE "amd64") +IF( USE_QT4 ) + SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}QT4" ) + LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS "libqtcore4 (>= 4:4.8.5), libqtgui4 (>= 4:4.8.5)" ) + SET( APPEND_VERSION "${APPEND_VERSION}_wQT4" ) +ELSE() + SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}QT5" ) + LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5gui5, libqt5widgets5") + SET( APPEND_VERSION "${APPEND_VERSION}_wQT5" ) +ENDIF() + +IF( USE_OPENCV ) + SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}OPENCV" ) + LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS ",") + LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS "libopencv-dev (>= 2.4.8)") +ENDIF() + +IF( USE_FFMPEG ) + SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}FFMPEG" ) + LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS ",") + LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS "libavformat54, libavcodec54, libavutil52") + SET( APPEND_VERSION "${APPEND_VERSION}_wFFmpeg" ) +ENDIF() + IF( UNIX ) SET(CPACK_GENERATOR "DEB;ZIP") SET(OS "Linux") @@ -115,15 +181,14 @@ INCLUDE(CPack) ###################################################################################### # Final information dump ###################################################################################### -status("Version:" "${PLAYUVER_VERSION}") -status("Configuration:") -status(" Build type:" "${CMAKE_BUILD_TYPE}") -status(" Build flags:" "${CMAKE_CXX_FLAGS}") -status(" Warnings as errors:" USE_WERROR THEN YES ELSE NO) -status(" Package Name:" "${PACKAGE_FILE_NAME}" ) -status("Dependencies:") -status(" QT:" USE_QT4 THEN "QT4" ELSE "QT5") -status(" OpenCV:" USE_OPENCV THEN YES ELSE NO) -status(" FFMPEG:" USE_FFMPEG THEN YES ELSE NO) -status(" Fervor:" USE_FERVOR THEN YES ELSE NO) -status(" Pixfc-sse:" USE_PIXFC THEN YES ELSE NO) +MESSAGE("") +MESSAGE( STATUS "${PROJECT_NAME} INFORMATION" ) +MESSAGE( STATUS "Version: " "${PLAYUVER_VERSION}" ) +MESSAGE( STATUS "Configuration:" ) +MESSAGE( STATUS " Build type:" "${CMAKE_BUILD_TYPE}" ) +MESSAGE( STATUS " Build flags:" "${CMAKE_CXX_FLAGS}" ) +MESSAGE( STATUS " Package Name:" "${PACKAGE_FILE_NAME}" ) + + +FEATURE_SUMMARY(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) + diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 0864231..5677b4f 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -36,6 +36,47 @@ set(plaYUver_App_RCC resources/playuver.qrc ) + +IF( USE_FERVOR ) + IF(EXISTS ${FERVOR_DIR} ) + SET( FERVOR_APP_NAME ${PROJECT_NAME} ) + SET( FERVOR_APP_VERSION ${PLAYUVER_VERSION} ) + ADD_SUBDIRECTORY( ${FERVOR_DIR} ) + INCLUDE_DIRECTORIES( ${FERVOR_DIR} ) + LIST(APPEND APP_LINKER_LIBS "Fervor" ) + + FIND_PACKAGE( Qt5 REQUIRED Network WebKit WebKitWidgets ) + + LIST(APPEND QT_LINKER_LIBS Qt5::Network Qt5::Webkit Qt5::WebKitWidgets ) + LIST(APPEND QT_MODULES Network WebKit WebKitWidgets ) + + LIST(APPEND LINKER_LIBS ${FERVOR_DEPENDENCIES} ) + INCLUDE_DIRECTORIES( ${FERVOR_INCLUDE_DIRS} ) + + SET(QT_USE_QTNETWORK true) + SET(QT_USE_QTWEBKIT true) + + IF( WIN32 ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Network${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5WebKit${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5WebKitWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Quick${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Qml${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Multimedia${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Sql${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Positioning${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Sensors${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5MultimediaWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5OpenGL${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5PrintSupport${QT_DLL_POSTFIX}.dll DESTINATION bin ) + ENDIF() + + ELSE() + MESSAGE( "Fervor lib source code is not find in ${FERVOR_DIR}... Disabling it!" ) + SET( USE_FERVOR False ) + ENDIF() +ENDIF() + IF( USE_QT4 ) QT4_WRAP_UI( plaYUver_App_UI_Wrap ${plaYUver_App_UI} ) QT4_ADD_RESOURCES( plaYUver_App_RCC ${plaYUver_App_RCC} ) @@ -66,7 +107,7 @@ ENDIF() ADD_EXECUTABLE( ${PROJECT_NAME} ${plaYUver_App_SRCS} ${HEADERS_MOC_FILES} ${plaYUver_App_UI_Wrap} ${plaYUver_App_RCC} ${WINDOWS_RES_FILE} ) -TARGET_LINK_LIBRARIES( ${PROJECT_NAME} PlaYUVerLib PlaYUVerModules ${LINKER_LIBS} ) +TARGET_LINK_LIBRARIES( ${PROJECT_NAME} PlaYUVerLib PlaYUVerModules ${QT_LINKER_LIBS} ${APP_LINKER_LIBS} ) IF( NOT USE_QT4 ) QT5_USE_MODULES( ${PROJECT_NAME} ${QT_MODULES} ) diff --git a/cmake/CMakeMacros.cmake b/cmake/CMakeMacros.cmake deleted file mode 100644 index 31b2ceb..0000000 --- a/cmake/CMakeMacros.cmake +++ /dev/null @@ -1,110 +0,0 @@ -###################################################################################### -# Macros definition -###################################################################################### - -macro(ADD_OPTION variable description value) - set(__value ${value}) - set(__condition "") - set(__varname "__value") - foreach(arg ${ARGN}) - if(arg STREQUAL "IF" OR arg STREQUAL "if") - set(__varname "__condition") - else() - list(APPEND ${__varname} ${arg}) - endif() - endforeach() - unset(__varname) - if("${__condition}" STREQUAL "") - set(__condition 2 GREATER 1) - endif() - - if(${__condition}) - if("${__value}" MATCHES ";") - if(${__value}) - option(${variable} "${description}" ON) - else() - option(${variable} "${description}" OFF) - endif() - elseif(DEFINED ${__value}) - if(${__value}) - option(${variable} "${description}" ON) - else() - option(${variable} "${description}" OFF) - endif() - else() - option(${variable} "${description}" ${__value}) - endif() - else() - unset(${variable} CACHE) - endif() - unset(__condition) - unset(__value) -endmacro() - -# Status report function. -# Automatically align right column and selects text based on condition. -# Usage: -# status() -# status( [ ...]) -# status( THEN ELSE ) -function(status text) - set(status_cond) - set(status_then) - set(status_else) - - set(status_current_name "cond") - foreach(arg ${ARGN}) - if(arg STREQUAL "THEN") - set(status_current_name "then") - elseif(arg STREQUAL "ELSE") - set(status_current_name "else") - else() - list(APPEND status_${status_current_name} ${arg}) - endif() - endforeach() - - if(DEFINED status_cond) - set(status_placeholder_length 32) - string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder) - string(LENGTH "${text}" status_text_length) - if(status_text_length LESS status_placeholder_length) - string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text) - elseif(DEFINED status_then OR DEFINED status_else) - message(STATUS ${text}) - set(status_text "${status_placeholder}") - else() - set(status_text "${text}") - endif() - - if(DEFINED status_then OR DEFINED status_else) - if(${status_cond}) - string(REPLACE ";" " " status_then "${status_then}") - string(REGEX REPLACE "^[ \t]+" "" status_then "${status_then}") - message(STATUS "${status_text} ${status_then}") - else() - string(REPLACE ";" " " status_else "${status_else}") - string(REGEX REPLACE "^[ \t]+" "" status_else "${status_else}") - message(STATUS "${status_text} ${status_else}") - endif() - else() - string(REPLACE ";" " " status_cond "${status_cond}") - string(REGEX REPLACE "^[ \t]+" "" status_cond "${status_cond}") - message(STATUS "${status_text} ${status_cond}") - endif() - else() - message(STATUS "${text}") - endif() -endfunction() - - -macro(ADD_MODULE name file ) - set(__modulename "Module${name}") - ADD_OPTION(MODULE_${name} "Use module ${name}" ON ) - if( MODULE_${name} ) - list(APPEND plaYUver_Mod_SRCS ${file} ) - LIST(APPEND MODULES_LIST ${name} ) - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${file}.h\"\n") - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListMacro.h "\\\n REGISTER_MODULE( ${name} ); ") - endif() - unset(__modulename) -endmacro() diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake new file mode 100644 index 0000000..aa0add4 --- /dev/null +++ b/cmake/FindFFmpeg.cmake @@ -0,0 +1,103 @@ +# - Try to find FFMPEG +# Once done this will define +# +# FFMPEG_FOUND - system has FFMPEG +# FFMPEG_INCLUDE_DIR - the include directories +# FFMPEG_LIBRARY_DIR - the directory containing the libraries +# FFMPEG_LIBRARIES - link these to use FFMPEG +# FFMPEG_SWSCALE_FOUND - FFMPEG also has SWSCALE +# + + +# SET( FFMPEG_HEADERS avformat.h avcodec.h avutil.h avdevice.h ) +SET( FFMPEG_HEADERS avformat.h avcodec.h avutil.h ) +SET( FFMPEG_PATH_SUFFIXES libavformat libavcodec libavutil libavdevice libffmpeg ) +SET( FFMPEG_SWS_HEADERS swscale.h ) +SET( FFMPEG_SWS_PATH_SUFFIXES libswscale ) + + +SET( FFMPEG_LIBRARIES avformat avcodec avutil avdevice ) +SET( FFMPEG_SWS_LIBRARIES swscale ) +INCLUDE(FindPkgConfig) +if ( PKG_CONFIG_FOUND ) + pkg_check_modules( AVFORMAT libavformat ) + pkg_check_modules( AVCODEC libavcodec ) + pkg_check_modules( AVUTIL libavutil ) + pkg_check_modules( AVDEVICE libavdevice ) + pkg_check_modules( SWSCALE libswscale ) +endif ( PKG_CONFIG_FOUND ) + +SET( FFMPEG_LIBRARY_DIR ${AVFORMAT_LIBRARY_DIRS} + ${AVCODEC_LIBRARY_DIRS} + ${AVUTIL_LIBRARY_DIRS} + ${AVDEVICE_LIBRARY_DIRS} ) +SET( FFMPEG_INCLUDE_PATHS ${AVFORMAT_INCLUDE_DIRS} + ${AVCODEC_INCLUDE_DIRS} + ${AVUTIL_INCLUDE_DIRS} + ${AVDEVICE_INCLUDE_DIRS} ) + + +# add in swscale if found +IF ( SWSCALE_FOUND ) + SET( FFMPEG_LIBRARY_DIR ${FFMPEG_LIBRARY_DIR} + ${SWSCALE_LIBRARY_DIRS} ) + SET( FFMPEG_INCLUDE_PATHS ${FFMPEG_INCLUDE_PATHS} + ${SWSCALE_INCLUDE_DIRS} ) + SET( FFMPEG_HEADERS ${FFMPEG_HEADERS} + ${FFMPEG_SWS_HEADERS} ) + SET( FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} + ${FFMPEG_SWS_PATH_SUFFIXES} ) + SET( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} + ${FFMPEG_SWS_LIBRARIES} ) +ENDIF ( SWSCALE_FOUND ) + +# find includes +SET( INC_SUCCESS 0 ) +SET( TMP_ TMP-NOTFOUND ) +SET( FFMPEG_INCLUDE_DIR ${FFMPEG_INCLUDE_PATHS} ) +FOREACH( INC_ ${FFMPEG_HEADERS} ) + message( "checking: " ${INC_} ) + + FIND_PATH( TMP_ ${INC_} + PATHS ${FFMPEG_INCLUDE_PATHS} + PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} ) + IF ( TMP_ ) + message( "found: " ${TMP_} ) + MATH( EXPR INC_SUCCESS ${INC_SUCCESS}+1 ) + SET( FFMPEG_INCLUDE_DIR ${FFMPEG_INCLUDE_DIR} ${TMP_} ) + ENDIF ( TMP_ ) + SET( TMP_ TMP-NOTFOUND ) +ENDFOREACH( INC_ ) + +# clear out duplicates +if(NOT "${FFMPEG_INCLUDE_DIR}" MATCHES "") + LIST( REMOVE_DUPLICATES FFMPEG_INCLUDE_DIR ) +endif(NOT "${FFMPEG_INCLUDE_DIR}" MATCHES "") +if(NOT "${FFMPEG_LIBRARY_DIR}" MATCHES "") + LIST( REMOVE_DUPLICATES FFMPEG_LIBRARY_DIR ) +endif(NOT "${FFMPEG_LIBRARY_DIR}" MATCHES "") + +# find the full paths of the libraries +SET( TMP_ TMP-NOTFOUND ) +IF ( NOT WIN32 ) + FOREACH( LIB_ ${FFMPEG_LIBRARIES} ) + FIND_LIBRARY( TMP_ NAMES ${LIB_} PATHS ${FFMPEG_LIBRARY_DIR} ) + IF ( TMP_ ) + SET( FFMPEG_LIBRARIES_FULL ${FFMPEG_LIBRARIES_FULL} ${TMP_} ) + ENDIF ( TMP_ ) + SET( TMP_ TMP-NOTFOUND ) + ENDFOREACH( LIB_ ) + SET ( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES_FULL} ) +ENDIF( NOT WIN32 ) + +unset(${TMP_}) + +LIST( LENGTH FFMPEG_HEADERS LIST_SIZE_ ) + +SET( FFMPEG_FOUND FALSE ) +SET( FFMPEG_SWSCALE_FOUND FALSE ) +IF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} ) + SET( FFMPEG_FOUND TRUE ) + SET( FFMPEG_SWSCALE_FOUND ${SWSCALE_FOUND} ) +ENDIF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} ) + diff --git a/cmake/LibFFmpeg.cmake b/cmake/LibFFmpeg.cmake deleted file mode 100644 index 3da0f72..0000000 --- a/cmake/LibFFmpeg.cmake +++ /dev/null @@ -1,126 +0,0 @@ -# - Try to find FFMPEG -# Once done this will define -# -# FFMPEG_FOUND - system has FFMPEG -# FFMPEG_INCLUDE_DIR - the include directories -# FFMPEG_LIBRARY_DIR - the directory containing the libraries -# FFMPEG_LIBRARIES - link these to use FFMPEG -# FFMPEG_SWSCALE_FOUND - FFMPEG also has SWSCALE -# - -IF( USE_FFMPEG ) - -# SET( FFMPEG_HEADERS avformat.h avcodec.h avutil.h avdevice.h ) - SET( FFMPEG_HEADERS avformat.h avcodec.h avutil.h ) - SET( FFMPEG_PATH_SUFFIXES libavformat libavcodec libavutil libavdevice libffmpeg ) - SET( FFMPEG_SWS_HEADERS swscale.h ) - SET( FFMPEG_SWS_PATH_SUFFIXES libswscale ) - - - SET( FFMPEG_LIBRARIES avformat avcodec avutil avdevice ) - SET( FFMPEG_SWS_LIBRARIES swscale ) - INCLUDE(FindPkgConfig) - if ( PKG_CONFIG_FOUND ) - pkg_check_modules( AVFORMAT libavformat ) - pkg_check_modules( AVCODEC libavcodec ) - pkg_check_modules( AVUTIL libavutil ) - pkg_check_modules( AVDEVICE libavdevice ) - pkg_check_modules( SWSCALE libswscale ) - endif ( PKG_CONFIG_FOUND ) - - SET( FFMPEG_LIBRARY_DIR ${AVFORMAT_LIBRARY_DIRS} - ${AVCODEC_LIBRARY_DIRS} - ${AVUTIL_LIBRARY_DIRS} - ${AVDEVICE_LIBRARY_DIRS} ) - SET( FFMPEG_INCLUDE_PATHS ${AVFORMAT_INCLUDE_DIRS} - ${AVCODEC_INCLUDE_DIRS} - ${AVUTIL_INCLUDE_DIRS} - ${AVDEVICE_INCLUDE_DIRS} ) - - - # add in swscale if found - IF ( SWSCALE_FOUND ) - SET( FFMPEG_LIBRARY_DIR ${FFMPEG_LIBRARY_DIR} - ${SWSCALE_LIBRARY_DIRS} ) - SET( FFMPEG_INCLUDE_PATHS ${FFMPEG_INCLUDE_PATHS} - ${SWSCALE_INCLUDE_DIRS} ) - SET( FFMPEG_HEADERS ${FFMPEG_HEADERS} - ${FFMPEG_SWS_HEADERS} ) - SET( FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} - ${FFMPEG_SWS_PATH_SUFFIXES} ) - SET( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} - ${FFMPEG_SWS_LIBRARIES} ) - ENDIF ( SWSCALE_FOUND ) - - # find includes - SET( INC_SUCCESS 0 ) - SET( TMP_ TMP-NOTFOUND ) - SET( FFMPEG_INCLUDE_DIR ${FFMPEG_INCLUDE_PATHS} ) - FOREACH( INC_ ${FFMPEG_HEADERS} ) - message( "checking: " ${INC_} ) - - FIND_PATH( TMP_ ${INC_} - PATHS ${FFMPEG_INCLUDE_PATHS} - PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} ) - IF ( TMP_ ) - message( "found: " ${TMP_} ) - MATH( EXPR INC_SUCCESS ${INC_SUCCESS}+1 ) - SET( FFMPEG_INCLUDE_DIR ${FFMPEG_INCLUDE_DIR} ${TMP_} ) - ENDIF ( TMP_ ) - SET( TMP_ TMP-NOTFOUND ) - ENDFOREACH( INC_ ) - - # clear out duplicates - if(NOT "${FFMPEG_INCLUDE_DIR}" MATCHES "") - LIST( REMOVE_DUPLICATES FFMPEG_INCLUDE_DIR ) - endif(NOT "${FFMPEG_INCLUDE_DIR}" MATCHES "") - if(NOT "${FFMPEG_LIBRARY_DIR}" MATCHES "") - LIST( REMOVE_DUPLICATES FFMPEG_LIBRARY_DIR ) - endif(NOT "${FFMPEG_LIBRARY_DIR}" MATCHES "") - - # find the full paths of the libraries - SET( TMP_ TMP-NOTFOUND ) - IF ( NOT WIN32 ) - FOREACH( LIB_ ${FFMPEG_LIBRARIES} ) - FIND_LIBRARY( TMP_ NAMES ${LIB_} PATHS ${FFMPEG_LIBRARY_DIR} ) - IF ( TMP_ ) - SET( FFMPEG_LIBRARIES_FULL ${FFMPEG_LIBRARIES_FULL} ${TMP_} ) - ENDIF ( TMP_ ) - SET( TMP_ TMP-NOTFOUND ) - ENDFOREACH( LIB_ ) - SET ( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES_FULL} ) - ENDIF( NOT WIN32 ) - - unset(TMP_) - - LIST( LENGTH FFMPEG_HEADERS LIST_SIZE_ ) - - SET( FFMPEG_FOUND FALSE ) - SET( FFMPEG_SWSCALE_FOUND FALSE ) - IF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} ) - SET( FFMPEG_FOUND TRUE ) - SET( FFMPEG_SWSCALE_FOUND ${SWSCALE_FOUND} ) - ENDIF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} ) - - - - IF( NOT WIN32 ) - IF( NOT FFMPEG_FOUND ) - SET( USE_FFMPEG FALSE ) - ELSE() - SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}FFMPEG" ) - INCLUDE_DIRECTORIES( ffmpeg ) - #SET( CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS ) - INCLUDE_DIRECTORIES(${FFMPEG_INCLUDE_DIR} ${FFMPEG_INCLUDE_DIRS}) - ADD_LIBRARY( FFmpeg lib/ffmpeg/LibAvContextHandle.cpp ) - TARGET_LINK_LIBRARIES( FFmpeg ${FFMPEG_LIBRARIES} ) - LIST(APPEND LINKER_LIBS FFmpeg ) - LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS ",") - LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS "libavformat54, libavcodec54, libavutil52") - SET( APPEND_VERSION "${APPEND_VERSION}_wFFmpeg" ) - ENDIF() - ELSE() - SET( USE_FFMPEG FALSE ) - ENDIF() -ENDIF() - diff --git a/cmake/LibFervor.cmake b/cmake/LibFervor.cmake deleted file mode 100644 index ac13ba5..0000000 --- a/cmake/LibFervor.cmake +++ /dev/null @@ -1,48 +0,0 @@ -##################################################################################### -# Pixfc-sse library cmake file -###################################################################################### -# https://github.com/pixlra/fervor -# git clone https://github.com/pixlra/fervor.git source/lib - -SET( FERVOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source/lib/fervor ) - -IF( USE_FERVOR ) - IF(EXISTS ${FERVOR_DIR} ) - SET( FERVOR_APP_NAME ${PROJECT_NAME} ) - SET( FERVOR_APP_VERSION ${PLAYUVER_VERSION} ) - ADD_SUBDIRECTORY( ${FERVOR_DIR} ) - INCLUDE_DIRECTORIES( ${FERVOR_DIR} ) - LIST(APPEND LINKER_LIBS "Fervor" ) - - FIND_PACKAGE( Qt5Network REQUIRED ) - FIND_PACKAGE( Qt5WebKit REQUIRED ) - FIND_PACKAGE( Qt5WebKitWidgets REQUIRED ) - LIST(APPEND LINKER_LIBS ${FERVOR_DEPENDENCIES} ) - INCLUDE_DIRECTORIES( ${FERVOR_INCLUDE_DIRS} ) - - SET(QT_USE_QTNETWORK true) - SET(QT_USE_QTWEBKIT true) - - IF( WIN32 ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Network${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5WebKit${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5WebKitWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Quick${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Qml${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Multimedia${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Sql${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Positioning${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Sensors${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5MultimediaWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5OpenGL${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5PrintSupport${QT_DLL_POSTFIX}.dll DESTINATION bin ) - - ENDIF() - - LIST(APPEND QT_MODULES Network WebKit WebKitWidgets ) - - ELSE() - MESSAGE( "Fervor lib source code is not find in ${FERVOR_DIR}... Disabling it!" ) - SET( USE_FERVOR False ) - ENDIF() -ENDIF() \ No newline at end of file diff --git a/cmake/LibQT.cmake b/cmake/LibQT.cmake deleted file mode 100644 index a0b2ae8..0000000 --- a/cmake/LibQT.cmake +++ /dev/null @@ -1,55 +0,0 @@ -##################################################################################### -# Qt library cmake file -###################################################################################### - -IF( WIN32 ) - SET(QT_DIR "QT-Dir" CACHE PATH "Where to find QT Lib on Windows") - SET(QT_DLL_POSTFIX "" CACHE STRING "Postfix to dll's name for debug" ) - SET(CMAKE_PREFIX_PATH ${QT_DIR} ) -ENDIF() - -IF( USE_QT4 ) - SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}QT4" ) - FIND_PACKAGE( Qt4 REQUIRED QtCore QtGui QtNetwork QtWebKit ) - IF( NOT QT4_FOUND ) - SET(USE_QT4 FALSE) - ELSE() - INCLUDE( ${QT_USE_FILE} ) - ADD_DEFINITIONS( ${QT_DEFINITIONS} ) - LIST(APPEND LINKER_LIBS ${QT_LIBRARIES} ) - ENDIF() -ENDIF() - -IF( NOT USE_QT4 ) - SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}QT5" ) - FIND_PACKAGE( Qt5Core REQUIRED ) - FIND_PACKAGE( Qt5Gui REQUIRED ) - FIND_PACKAGE( Qt5Widgets REQUIRED ) - INCLUDE_DIRECTORIES( ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ) - # Add compiler flags for building executables (-fPIE) - SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}" ) - LIST(APPEND LINKER_LIBS ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ) - LIST(APPEND QT_MODULES Core Gui Widgets ) - IF( WIN32 ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Core${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Gui${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/Qt5Widgets${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/libGLESv2${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/libEGL${QT_DLL_POSTFIX}.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/icudt52.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/icuin52.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/bin/icuuc52.dll DESTINATION bin ) - INSTALL(FILES ${QT_DIR}/plugins/platforms/qminimal.dll DESTINATION bin/platforms ) - INSTALL(FILES ${QT_DIR}/plugins/platforms/qoffscreen.dll DESTINATION bin/platforms ) - INSTALL(FILES ${QT_DIR}/plugins/platforms/qwindows.dll DESTINATION bin/platforms ) - ENDIF() -ENDIF() - - -IF( USE_QT4 ) - LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS "libqtcore4 (>= 4:4.8.5), libqtgui4 (>= 4:4.8.5)" ) - SET( APPEND_VERSION "${APPEND_VERSION}_wQT4" ) -ELSE() - LIST(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5gui5, libqt5widgets5") - SET( APPEND_VERSION "${APPEND_VERSION}_wQT5" ) -ENDIF() diff --git a/cmake/LibOpenCV.cmake b/cmake/Win32.cmake similarity index 70% rename from cmake/LibOpenCV.cmake rename to cmake/Win32.cmake index 4a69160..c638014 100644 --- a/cmake/LibOpenCV.cmake +++ b/cmake/Win32.cmake @@ -1,20 +1,33 @@ ##################################################################################### -# OpenCV library cmake file +# DLLs and Win32 specific code ###################################################################################### -IF( USE_OPENCV ) - FIND_PACKAGE( OpenCV ) - IF( NOT OpenCV_FOUND) - SET(USE_OPENCV FALSE) - ELSE() - LIST(APPEND LINKER_LIBS ${OpenCV_LIBRARIES} ) - ENDIF() +SET(MSVC_DLL_DIR "MSVC_DLL_DIR" CACHE PATH "Where to find MSVC dlls") +INSTALL(FILES ${MSVC_DLL_DIR}/msvcr120.dll DESTINATION bin ) +INSTALL(FILES ${MSVC_DLL_DIR}/msvcp120.dll DESTINATION bin ) +SET(QT_DIR "QT-Dir" CACHE PATH "Where to find QT Lib on Windows") +SET(QT_DLL_POSTFIX "" CACHE STRING "Postfix to dll's name for debug" ) +SET(CMAKE_PREFIX_PATH ${QT_DIR} ) + + +IF( NOT USE_QT4 ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Core${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Gui${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/Qt5Widgets${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/libGLESv2${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/libEGL${QT_DLL_POSTFIX}.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/icudt52.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/icuin52.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/bin/icuuc52.dll DESTINATION bin ) + INSTALL(FILES ${QT_DIR}/plugins/platforms/qminimal.dll DESTINATION bin/platforms ) + INSTALL(FILES ${QT_DIR}/plugins/platforms/qoffscreen.dll DESTINATION bin/platforms ) + INSTALL(FILES ${QT_DIR}/plugins/platforms/qwindows.dll DESTINATION bin/platforms ) ENDIF() IF( USE_OPENCV ) - SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}OPENCV" ) + SET( DEPENDENCIES_STRING "${DEPENDENCIES_STRING}OPENCV" ) IF( WIN32 ) SET(OpenCV_DLL_DIR "${OpenCV_DIR}/bin" CACHE PATH "Where to find OpenCV dlls") INSTALL(FILES ${OpenCV_DLL_DIR}/opencv_core${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.dll DESTINATION bin ) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index f2e63b7..2329a44 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -4,10 +4,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) -ADD_OPTION(USE_OPENCV "Add OpenCV support" OFF ) -ADD_OPTION(USE_FFMPEG "Add FFMPEG support" OFF ) -ADD_OPTION(USE_PIXFC "Add PIXFC support" OFF ) - set(plaYUver_Lib_SRCS # Frame PlaYUVerFrame.cpp @@ -16,17 +12,30 @@ set(plaYUver_Lib_SRCS PlaYUVerStream.cpp ) +IF( USE_FFMPEG ) + LIST( APPEND plaYUver_Lib_SRCS LibAvContextHandle.cpp ) +ENDIF() + set(plaYUver_Lib_HEADERS PlaYUVerFrame.h PlaYUVerStream.h ) -INCLUDE( LibPixfc.cmake ) +# OPTION( USE_PIXFC "Add PIXFC support" OFF ) +# IF( USE_PIXFC ) +# IF(EXISTS "${EXTERNAL_SRC}/pixfc-sse/build/src/libpixfc-sse.a") +# INCLUDE_DIRECTORIES( ${EXTERNAL_SRC}/pixfc-sse/include ) +# LIST(APPEND LINKER_LIBS ${EXTERNAL_SRC}/pixfc-sse/build/src/libpixfc-sse.a ) +# LIST(APPEND LINKER_LIBS rt) +# ELSE() +# SET( USE_PIXFC OFF ) +# ENDIF() +# ENDIF() CONFIGURE_FILE( PlaYUVerConfig.cmake.in ${CMAKE_BINARY_DIR}/PlaYUVerConfig.cmake @ONLY) ADD_LIBRARY( PlaYUVerLib ${plaYUver_Lib_SRCS} ) -TARGET_LINK_LIBRARIES( PlaYUVerLib ${LINKER_LIBS} ) +TARGET_LINK_LIBRARIES( PlaYUVerLib ${FFMPEG_LIBRARIES} ${OpenCV_LIBRARIES} ) INSTALL(FILES ${plaYUver_Lib_HEADERS} DESTINATION include ) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libPlaYUVerLib.a DESTINATION lib ) diff --git a/lib/ffmpeg/LibAvContextHandle.cpp b/lib/LibAvContextHandle.cpp similarity index 99% rename from lib/ffmpeg/LibAvContextHandle.cpp rename to lib/LibAvContextHandle.cpp index ea9b35e..b29ebe4 100644 --- a/lib/ffmpeg/LibAvContextHandle.cpp +++ b/lib/LibAvContextHandle.cpp @@ -24,8 +24,8 @@ #include #include "LibAvContextHandle.h" -#include "lib/PlaYUVerFrame.h" -#include "lib/PlaYUVerFramePixelFormats.h" +#include "PlaYUVerFrame.h" +#include "PlaYUVerFramePixelFormats.h" #include "LibMemory.h" namespace plaYUVer diff --git a/lib/ffmpeg/LibAvContextHandle.h b/lib/LibAvContextHandle.h similarity index 98% rename from lib/ffmpeg/LibAvContextHandle.h rename to lib/LibAvContextHandle.h index aa3f638..3fd2eeb 100644 --- a/lib/ffmpeg/LibAvContextHandle.h +++ b/lib/LibAvContextHandle.h @@ -44,7 +44,7 @@ extern "C" #include } -#include "lib/PlaYUVerDefs.h" +#include "PlaYUVerDefs.h" namespace plaYUVer { diff --git a/lib/LibPixfc.cmake b/lib/LibPixfc.cmake deleted file mode 100644 index 1d1cfca..0000000 --- a/lib/LibPixfc.cmake +++ /dev/null @@ -1,16 +0,0 @@ -##################################################################################### -# Pixfc-sse library cmake file -###################################################################################### -# https://code.google.com/p/pixfc-sse/ -# svn checkout http://pixfc-sse.googlecode.com/svn/trunk/ pixfc-sse -# Add to folder external - -IF( USE_PIXFC ) - IF(EXISTS "${EXTERNAL_SRC}/pixfc-sse/build/src/libpixfc-sse.a") - INCLUDE_DIRECTORIES( ${EXTERNAL_SRC}/pixfc-sse/include ) - LIST(APPEND LINKER_LIBS ${EXTERNAL_SRC}/pixfc-sse/build/src/libpixfc-sse.a ) - LIST(APPEND LINKER_LIBS rt) - ELSE() - SET( USE_PIXFC OFF ) - ENDIF() -ENDIF() \ No newline at end of file diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 329d4fb..4f8b6fb 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -4,9 +4,19 @@ INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} ) -# set(plaYUver_Mod_SRCS -# PlaYUVerModuleIf.cpp -# ) +MACRO(ADD_MODULE name file ) + set(__modulename "Module${name}") + OPTION(MODULE_${name} "Use module ${name}" ON ) + ADD_FEATURE_INFO(${name} MODULE_${name} "Module ${name}" ) + if( MODULE_${name} ) + list(APPEND plaYUver_Mod_SRCS ${file} ) + LIST(APPEND MODULES_LIST ${name} ) + file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${file}.h\"\n") + file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListMacro.h "\\\n REGISTER_MODULE( ${name} ); ") + endif() + unset(__modulename) +ENDMACRO() + # @@ -42,6 +52,3 @@ file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListMacro.h "\n#endif // __MO file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#endif // __MODULESLISTHEADER_H__\n" ) ADD_LIBRARY( PlaYUVerModules ${plaYUver_Mod_SRCS} ) - - -status("Modules List:" "${MODULES_LIST}" )