mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	create external framebuffer grabber
cleanup some cmakelist files fix qt5 build Former-commit-id: 024b5b6dc5dc96fcb16f6e8958ad3684a6728504
This commit is contained in:
		@@ -70,11 +70,11 @@ include_directories("${PROJECT_BINARY_DIR}")
 | 
				
			|||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 | 
					set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
ADD_DEFINITIONS ( -DENABLE_QT5 )
 | 
						ADD_DEFINITIONS ( -DENABLE_QT5 )
 | 
				
			||||||
#find_package(Qt5Widgets)
 | 
						#find_package(Qt5Widgets)
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
# Add specific cmake modules to find qt4 (default version finds first available QT which might not be qt4)
 | 
						# Add specific cmake modules to find qt4 (default version finds first available QT which might not be qt4)
 | 
				
			||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/qt4)
 | 
						set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/qt4)
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Define the global output path of binaries
 | 
					# Define the global output path of binaries
 | 
				
			||||||
@@ -97,23 +97,23 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wall")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
#find_package(Qt5Core REQUIRED)
 | 
					#find_package(Qt5Core REQUIRED)
 | 
				
			||||||
find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED)
 | 
						find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED)
 | 
				
			||||||
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}    ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
 | 
						set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}    ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
 | 
				
			||||||
#	set(CMAKE_CXX_FLAGS "-fPIC")
 | 
					#	set(CMAKE_CXX_FLAGS "-fPIC")
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
# Configure the use of QT4
 | 
						# Configure the use of QT4
 | 
				
			||||||
find_package(Qt4 COMPONENTS QtCore QtGui QtNetwork REQUIRED QUIET)
 | 
						find_package(Qt4 COMPONENTS QtCore QtNetwork QtGui REQUIRED QUIET)
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#add libusb and pthreads
 | 
					#add libusb and pthreads
 | 
				
			||||||
find_package(libusb-1.0 REQUIRED)
 | 
					find_package(libusb-1.0 REQUIRED)
 | 
				
			||||||
find_package(Threads REQUIRED)
 | 
					find_package(Threads REQUIRED)
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
#include(${QT_USE_FILE})
 | 
						#include(${QT_USE_FILE})
 | 
				
			||||||
add_definitions(${QT_DEFINITIONS})
 | 
						add_definitions(${QT_DEFINITIONS})
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
include(${QT_USE_FILE})
 | 
						include(${QT_USE_FILE})
 | 
				
			||||||
add_definitions(${QT_DEFINITIONS})
 | 
						add_definitions(${QT_DEFINITIONS})
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO[TvdZ]: This linking directory should only be added if we are cross compiling
 | 
					# TODO[TvdZ]: This linking directory should only be added if we are cross compiling
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ SET(FramebufferGrabberQT_HEADERS
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SET(FramebufferGrabberHEADERS
 | 
					SET(FramebufferGrabberHEADERS
 | 
				
			||||||
		${CURRENT_SOURCE_DIR}/FramebufferFrameGrabber.h
 | 
							${CURRENT_HEADER_DIR}/FramebufferFrameGrabber.h
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SET(FramebufferGrabberSOURCES
 | 
					SET(FramebufferGrabberSOURCES
 | 
				
			||||||
@@ -22,9 +22,9 @@ SET(FramebufferGrabberSOURCES
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
QT5_WRAP_CPP(FramebufferGrabberHEADERS_MOC ${FramebufferGrabberQT_HEADERS})
 | 
						QT5_WRAP_CPP(FramebufferGrabberHEADERS_MOC ${FramebufferGrabberQT_HEADERS})
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
QT4_WRAP_CPP(FramebufferGrabberHEADERS_MOC ${FramebufferGrabberQT_HEADERS})
 | 
						QT4_WRAP_CPP(FramebufferGrabberHEADERS_MOC ${FramebufferGrabberQT_HEADERS})
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_library(framebuffer-grabber
 | 
					add_library(framebuffer-grabber
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@
 | 
				
			|||||||
#include <iostream>
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Local includes
 | 
					// Local includes
 | 
				
			||||||
#include "FramebufferFrameGrabber.h"
 | 
					#include <grabber/FramebufferFrameGrabber.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FramebufferFrameGrabber::FramebufferFrameGrabber(const std::string & device, const unsigned width, const unsigned height) :
 | 
					FramebufferFrameGrabber::FramebufferFrameGrabber(const std::string & device, const unsigned width, const unsigned height) :
 | 
				
			||||||
	_fbfd(0),
 | 
						_fbfd(0),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Framebuffer grabber includes
 | 
					// Framebuffer grabber includes
 | 
				
			||||||
#include <grabber/FramebufferWrapper.h>
 | 
					#include <grabber/FramebufferWrapper.h>
 | 
				
			||||||
#include "FramebufferFrameGrabber.h"
 | 
					#include <grabber/FramebufferFrameGrabber.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FramebufferWrapper::FramebufferWrapper(const std::string & device, const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz, const int priority, Hyperion * hyperion) :
 | 
					FramebufferWrapper::FramebufferWrapper(const std::string & device, const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz, const int priority, Hyperion * hyperion) :
 | 
				
			||||||
	_updateInterval_ms(1000/updateRate_Hz),
 | 
						_updateInterval_ms(1000/updateRate_Hz),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,4 +20,8 @@ if(ENABLE_PROTOBUF)
 | 
				
			|||||||
		add_subdirectory(hyperion-dispmanx)
 | 
							add_subdirectory(hyperion-dispmanx)
 | 
				
			||||||
	endif()
 | 
						endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(ENABLE_FB)
 | 
				
			||||||
 | 
							add_subdirectory(hyperion-framebuffer)
 | 
				
			||||||
 | 
						endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,8 +4,12 @@ cmake_minimum_required(VERSION 2.8)
 | 
				
			|||||||
# Set the project name
 | 
					# Set the project name
 | 
				
			||||||
project(hyperion-aml)
 | 
					project(hyperion-aml)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# find Qt4
 | 
					# find QT
 | 
				
			||||||
find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
 | 
						find_package(Qt5Widgets REQUIRED)
 | 
				
			||||||
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
 | 
						find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
				
			||||||
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include_directories(
 | 
					include_directories(
 | 
				
			||||||
	${CMAKE_CURRENT_BINARY_DIR}/../../libsrc/protoserver
 | 
						${CMAKE_CURRENT_BINARY_DIR}/../../libsrc/protoserver
 | 
				
			||||||
@@ -31,13 +35,13 @@ else(ENABLE_QT5)
 | 
				
			|||||||
	QT4_WRAP_CPP(Hyperion_AML_HEADERS_MOC ${Hyperion_AML_QT_HEADERS})
 | 
						QT4_WRAP_CPP(Hyperion_AML_HEADERS_MOC ${Hyperion_AML_QT_HEADERS})
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_executable(hyperion-amlogic
 | 
					add_executable(${PROJECT_NAME}
 | 
				
			||||||
	${Hyperion_AML_HEADERS}
 | 
						${Hyperion_AML_HEADERS}
 | 
				
			||||||
	${Hyperion_AML_SOURCES}
 | 
						${Hyperion_AML_SOURCES}
 | 
				
			||||||
	${Hyperion_AML_HEADERS_MOC}
 | 
						${Hyperion_AML_HEADERS_MOC}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target_link_libraries(hyperion-amlogic
 | 
					target_link_libraries(${PROJECT_NAME}
 | 
				
			||||||
	getoptPlusPlus
 | 
						getoptPlusPlus
 | 
				
			||||||
	blackborder
 | 
						blackborder
 | 
				
			||||||
	hyperion-utils
 | 
						hyperion-utils
 | 
				
			||||||
@@ -46,7 +50,8 @@ target_link_libraries(hyperion-amlogic
 | 
				
			|||||||
	pthread
 | 
						pthread
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qt4_use_modules(hyperion-amlogic
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
	Core
 | 
						qt5_use_modules(${PROJECT_NAME} Widgets Core Gui Network)
 | 
				
			||||||
	Gui
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
	Network)
 | 
						qt4_use_modules(${PROJECT_NAME} Core Gui Network )
 | 
				
			||||||
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,10 @@ cmake_minimum_required(VERSION 2.8)
 | 
				
			|||||||
# Set the project name
 | 
					# Set the project name
 | 
				
			||||||
project(hyperion-dispmanx)
 | 
					project(hyperion-dispmanx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# find QT
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
	find_package(Qt5Widgets REQUIRED)
 | 
						find_package(Qt5Widgets REQUIRED)
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
	# find Qt4
 | 
					 | 
				
			||||||
	find_package(Qt4 REQUIRED QtCore QtGui QtNetwork )
 | 
						find_package(Qt4 REQUIRED QtCore QtGui QtNetwork )
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -55,11 +55,7 @@ target_link_libraries( ${PROJECT_NAME}
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
	qt5_use_modules(hyperion-dispmanx Widgets Core Gui Network)
 | 
						qt5_use_modules(${PROJECT_NAME} Widgets Core Gui Network)
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
	qt4_use_modules(hyperion-dispmanx
 | 
						qt4_use_modules(${PROJECT_NAME} Core Gui Network )
 | 
				
			||||||
		Core
 | 
					 | 
				
			||||||
		Gui
 | 
					 | 
				
			||||||
		Network
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										57
									
								
								src/hyperion-framebuffer/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/hyperion-framebuffer/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					# Configure minimum CMAKE version
 | 
				
			||||||
 | 
					cmake_minimum_required(VERSION 2.8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the project name
 | 
				
			||||||
 | 
					project(hyperion-framebuffer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# find QT
 | 
				
			||||||
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
 | 
						find_package(Qt5Widgets REQUIRED)
 | 
				
			||||||
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
 | 
						find_package(Qt4 REQUIRED QtCore QtGui QtNetwork )
 | 
				
			||||||
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include_directories(
 | 
				
			||||||
 | 
						${CMAKE_CURRENT_BINARY_DIR}/../../libsrc/protoserver
 | 
				
			||||||
 | 
						${QT_INCLUDES}
 | 
				
			||||||
 | 
						${PROTOBUF_INCLUDE_DIRS}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(Hyperion_FB_QT_HEADERS
 | 
				
			||||||
 | 
						FramebufferWrapper.h
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(Hyperion_FB_HEADERS
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(Hyperion_FB_SOURCES
 | 
				
			||||||
 | 
						hyperion-framebuffer.cpp
 | 
				
			||||||
 | 
						FramebufferWrapper.cpp
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
 | 
						QT5_WRAP_CPP(Hyperion_FB_HEADERS_MOC ${Hyperion_FB_QT_HEADERS})
 | 
				
			||||||
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
 | 
						QT4_WRAP_CPP(Hyperion_FB_HEADERS_MOC ${Hyperion_FB_QT_HEADERS})
 | 
				
			||||||
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_executable( ${PROJECT_NAME}
 | 
				
			||||||
 | 
						${Hyperion_FB_HEADERS}
 | 
				
			||||||
 | 
						${Hyperion_FB_SOURCES}
 | 
				
			||||||
 | 
						${Hyperion_FB_HEADERS_MOC}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					target_link_libraries( ${PROJECT_NAME}
 | 
				
			||||||
 | 
						getoptPlusPlus
 | 
				
			||||||
 | 
						blackborder
 | 
				
			||||||
 | 
						hyperion-utils
 | 
				
			||||||
 | 
						protoserver
 | 
				
			||||||
 | 
						framebuffer-grabber
 | 
				
			||||||
 | 
						pthread
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
 | 
						qt5_use_modules(${PROJECT_NAME} Widgets Core Gui Network)
 | 
				
			||||||
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
 | 
						qt4_use_modules(${PROJECT_NAME} Core Gui Network )
 | 
				
			||||||
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
							
								
								
									
										37
									
								
								src/hyperion-framebuffer/FramebufferWrapper.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/hyperion-framebuffer/FramebufferWrapper.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					// Hyperion-AmLogic includes
 | 
				
			||||||
 | 
					#include "FramebufferWrapper.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FramebufferWrapper::FramebufferWrapper(const std::string & device, const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz) :
 | 
				
			||||||
 | 
					    _timer(this),
 | 
				
			||||||
 | 
					    _grabber(device,grabWidth, grabHeight)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _timer.setSingleShot(false);
 | 
				
			||||||
 | 
					    _timer.setInterval(updateRate_Hz);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Connect capturing to the timeout signal of the timer
 | 
				
			||||||
 | 
					    connect(&_timer, SIGNAL(timeout()), this, SLOT(capture()));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Image<ColorRgb> & FramebufferWrapper::getScreenshot()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						capture();
 | 
				
			||||||
 | 
						return _screenshot;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FramebufferWrapper::start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _timer.start();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FramebufferWrapper::stop()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _timer.stop();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void FramebufferWrapper::capture()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						_grabber.grabFrame(_screenshot);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						emit sig_screenshot(_screenshot);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										42
									
								
								src/hyperion-framebuffer/FramebufferWrapper.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/hyperion-framebuffer/FramebufferWrapper.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					// QT includes
 | 
				
			||||||
 | 
					#include <QTimer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Hyperion-Dispmanx includes
 | 
				
			||||||
 | 
					#include <grabber/FramebufferFrameGrabber.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FramebufferWrapper : public QObject
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Q_OBJECT
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						FramebufferWrapper(const std::string & device, const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const Image<ColorRgb> & getScreenshot();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						///
 | 
				
			||||||
 | 
						/// Starts the timed capturing of screenshots
 | 
				
			||||||
 | 
						///
 | 
				
			||||||
 | 
						void start();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void stop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signals:
 | 
				
			||||||
 | 
						void sig_screenshot(const Image<ColorRgb> & screenshot);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private slots:
 | 
				
			||||||
 | 
						///
 | 
				
			||||||
 | 
						/// Performs a single screenshot capture and publishes the capture screenshot on the screenshot signal.
 | 
				
			||||||
 | 
						///
 | 
				
			||||||
 | 
						void capture();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						/// The QT timer to generate capture-publish events
 | 
				
			||||||
 | 
						QTimer _timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/// The grabber for creating screenshots
 | 
				
			||||||
 | 
						FramebufferFrameGrabber   _grabber;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// image buffers
 | 
				
			||||||
 | 
						Image<ColorRgb>  _screenshot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										101
									
								
								src/hyperion-framebuffer/hyperion-framebuffer.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/hyperion-framebuffer/hyperion-framebuffer.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// QT includes
 | 
				
			||||||
 | 
					#include <QCoreApplication>
 | 
				
			||||||
 | 
					#include <QImage>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// getoptPlusPLus includes
 | 
				
			||||||
 | 
					#include <getoptPlusPlus/getoptpp.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <protoserver/ProtoConnectionWrapper.h>
 | 
				
			||||||
 | 
					#include "FramebufferWrapper.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace vlofgren;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// save the image as screenshot
 | 
				
			||||||
 | 
					void saveScreenshot(const char * filename, const Image<ColorRgb> & image)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// store as PNG
 | 
				
			||||||
 | 
						QImage pngImage((const uint8_t *) image.memptr(), image.width(), image.height(), 3*image.width(), QImage::Format_RGB888);
 | 
				
			||||||
 | 
						pngImage.save(filename);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char ** argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						QCoreApplication app(argc, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						try
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// create the option parser and initialize all parameters
 | 
				
			||||||
 | 
							OptionsParser optionParser("X11 capture application for Hyperion");
 | 
				
			||||||
 | 
							ParameterSet & parameters = optionParser.getParameters();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							IntParameter           & argFps             = parameters.add<IntParameter>          ('f', "framerate",        "Capture frame rate [default=10]");
 | 
				
			||||||
 | 
							IntParameter           & argWidth           = parameters.add<IntParameter>          (0x0, "width",            "Width of the captured image [default=128]");
 | 
				
			||||||
 | 
							IntParameter           & argHeight          = parameters.add<IntParameter>          (0x0, "height",           "Height of the captured image [default=128]");
 | 
				
			||||||
 | 
							SwitchParameter<>      & argScreenshot      = parameters.add<SwitchParameter<>>     (0x0, "screenshot",       "Take a single screenshot, save it to file and quit");
 | 
				
			||||||
 | 
							StringParameter        & argAddress         = parameters.add<StringParameter>       ('a', "address",          "Set the address of the hyperion server [default: 127.0.0.1:19445]");
 | 
				
			||||||
 | 
							StringParameter        & argDevice          = parameters.add<StringParameter>       ('a', "device",           "Set the video device (default: /dev/video0)");
 | 
				
			||||||
 | 
							IntParameter           & argPriority        = parameters.add<IntParameter>          ('p', "priority",         "Use the provided priority channel (the lower the number, the higher the priority) [default: 800]");
 | 
				
			||||||
 | 
							SwitchParameter<>      & argSkipReply       = parameters.add<SwitchParameter<>>     (0x0, "skip-reply",       "Do not receive and check reply messages from Hyperion");
 | 
				
			||||||
 | 
							SwitchParameter<>      & argHelp            = parameters.add<SwitchParameter<>>     ('h', "help",             "Show this help message and exit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// set defaults
 | 
				
			||||||
 | 
							argFps.setDefault(10);
 | 
				
			||||||
 | 
							argWidth.setDefault(160);
 | 
				
			||||||
 | 
							argHeight.setDefault(160);
 | 
				
			||||||
 | 
							argAddress.setDefault("127.0.0.1:19445");
 | 
				
			||||||
 | 
							argPriority.setDefault(800);
 | 
				
			||||||
 | 
							argDevice.setDefault("/dev/video0");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// parse all options
 | 
				
			||||||
 | 
							optionParser.parse(argc, const_cast<const char **>(argv));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// check if we need to display the usage. exit if we do.
 | 
				
			||||||
 | 
							if (argHelp.isSet())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								optionParser.usage();
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							int width  = argWidth.getValue();
 | 
				
			||||||
 | 
							int height = argHeight.getValue();
 | 
				
			||||||
 | 
							if (width < 160 || height < 160)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								std::cout << "Minimum width and height is 160" << std::endl;
 | 
				
			||||||
 | 
								width  = std::max(160, width);
 | 
				
			||||||
 | 
								height = std::max(160, height);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							int grabInterval = 1000 / argFps.getValue();
 | 
				
			||||||
 | 
							FramebufferWrapper fbWrapper(argDevice.getValue(), argWidth.getValue(), argHeight.getValue(), grabInterval);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (argScreenshot.isSet())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// Capture a single screenshot and finish
 | 
				
			||||||
 | 
								const Image<ColorRgb> & screenshot = fbWrapper.getScreenshot();
 | 
				
			||||||
 | 
								saveScreenshot("screenshot.png", screenshot);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// Create the Proto-connection with hyperiond
 | 
				
			||||||
 | 
								ProtoConnectionWrapper protoWrapper(argAddress.getValue(), argPriority.getValue(), 1000, argSkipReply.isSet());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Connect the screen capturing to the proto processing
 | 
				
			||||||
 | 
								QObject::connect(&fbWrapper, SIGNAL(sig_screenshot(const Image<ColorRgb> &)), &protoWrapper, SLOT(receiveImage(Image<ColorRgb>)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Start the capturing
 | 
				
			||||||
 | 
								fbWrapper.start();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Start the application
 | 
				
			||||||
 | 
								app.exec();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						catch (const std::runtime_error & e)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// An error occured. Display error and quit
 | 
				
			||||||
 | 
							std::cerr << e.what() << std::endl;
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -2,13 +2,13 @@ cmake_minimum_required(VERSION 2.8)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
project(hyperion-remote)
 | 
					project(hyperion-remote)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# find Qt4
 | 
					# find Qt
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED)
 | 
						find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED)
 | 
				
			||||||
#	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}    ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
 | 
					#	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}    ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
 | 
				
			||||||
#	set(CMAKE_CXX_FLAGS "-fPIC")
 | 
					#	set(CMAKE_CXX_FLAGS "-fPIC")
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
						find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The following I do not undrstand completely...
 | 
					# The following I do not undrstand completely...
 | 
				
			||||||
@@ -27,15 +27,17 @@ set(hyperion-remote_SOURCES
 | 
				
			|||||||
	hyperion-remote.cpp
 | 
						hyperion-remote.cpp
 | 
				
			||||||
	JsonConnection.cpp)
 | 
						JsonConnection.cpp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_executable(hyperion-remote
 | 
					add_executable(${PROJECT_NAME}
 | 
				
			||||||
	${hyperion-remote_HEADERS}
 | 
						${hyperion-remote_HEADERS}
 | 
				
			||||||
	${hyperion-remote_SOURCES})
 | 
						${hyperion-remote_SOURCES})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					target_link_libraries(${PROJECT_NAME}
 | 
				
			||||||
qt5_use_modules(hyperion-remote Widgets Network)
 | 
					 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
target_link_libraries(hyperion-remote
 | 
					 | 
				
			||||||
	jsoncpp
 | 
						jsoncpp
 | 
				
			||||||
	getoptPlusPlus
 | 
						getoptPlusPlus
 | 
				
			||||||
	${QT_LIBRARIES})
 | 
						${QT_LIBRARIES})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
 | 
						qt5_use_modules(${PROJECT_NAME} Widgets Core Network)
 | 
				
			||||||
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
 | 
						qt4_use_modules(${PROJECT_NAME} Core Gui Network )
 | 
				
			||||||
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,13 @@ cmake_minimum_required(VERSION 2.8)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
project(hyperion-v4l2)
 | 
					project(hyperion-v4l2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# find Qt4
 | 
					# find Qt
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
find_package(Qt5Widgets REQUIRED)
 | 
						find_package(Qt5Widgets REQUIRED)
 | 
				
			||||||
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}    ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
 | 
						set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}    ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
 | 
				
			||||||
#	set(CMAKE_CXX_FLAGS "-fPIC")
 | 
					#	set(CMAKE_CXX_FLAGS "-fPIC")
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
						find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,19 +32,19 @@ set(Hyperion_V4L2_SOURCES
 | 
				
			|||||||
	ScreenshotHandler.cpp
 | 
						ScreenshotHandler.cpp
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
QT5_WRAP_CPP(Hyperion_V4L2_MOC_SOURCES ${Hyperion_V4L2_QT_HEADERS})
 | 
						QT5_WRAP_CPP(Hyperion_V4L2_MOC_SOURCES ${Hyperion_V4L2_QT_HEADERS})
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
QT4_WRAP_CPP(Hyperion_V4L2_MOC_SOURCES ${Hyperion_V4L2_QT_HEADERS})
 | 
						QT4_WRAP_CPP(Hyperion_V4L2_MOC_SOURCES ${Hyperion_V4L2_QT_HEADERS})
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_executable(hyperion-v4l2
 | 
					add_executable(${PROJECT_NAME}
 | 
				
			||||||
	${Hyperion_V4L2_HEADERS}
 | 
						${Hyperion_V4L2_HEADERS}
 | 
				
			||||||
	${Hyperion_V4L2_SOURCES}
 | 
						${Hyperion_V4L2_SOURCES}
 | 
				
			||||||
	${Hyperion_V4L2_QT_HEADERS}
 | 
						${Hyperion_V4L2_QT_HEADERS}
 | 
				
			||||||
	${Hyperion_V4L2_MOC_SOURCES}
 | 
						${Hyperion_V4L2_MOC_SOURCES}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target_link_libraries(hyperion-v4l2
 | 
					target_link_libraries(${PROJECT_NAME}
 | 
				
			||||||
	v4l2-grabber
 | 
						v4l2-grabber
 | 
				
			||||||
	getoptPlusPlus
 | 
						getoptPlusPlus
 | 
				
			||||||
	blackborder
 | 
						blackborder
 | 
				
			||||||
@@ -53,3 +53,9 @@ target_link_libraries(hyperion-v4l2
 | 
				
			|||||||
	pthread
 | 
						pthread
 | 
				
			||||||
	${QT_LIBRARIES}
 | 
						${QT_LIBRARIES}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
 | 
						qt5_use_modules(${PROJECT_NAME} Widgets Core Gui Network)
 | 
				
			||||||
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
 | 
						qt4_use_modules(${PROJECT_NAME} Core Gui Network )
 | 
				
			||||||
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,11 +4,11 @@ cmake_minimum_required(VERSION 2.8)
 | 
				
			|||||||
# Set the project name
 | 
					# Set the project name
 | 
				
			||||||
project(hyperion-x11)
 | 
					project(hyperion-x11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# find QT
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
find_package(Qt5Widgets REQUIRED)
 | 
						find_package(Qt5Widgets REQUIRED)
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
# find Qt4
 | 
						find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
				
			||||||
find_package(Qt4 REQUIRED QtCore QtGui QtNetwork)
 | 
					 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Find X11
 | 
					# Find X11
 | 
				
			||||||
@@ -33,18 +33,19 @@ set(Hyperion_X11_SOURCES
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
QT5_WRAP_CPP(Hyperion_X11_HEADERS_MOC ${Hyperion_X11_QT_HEADERS})
 | 
						QT5_WRAP_CPP(Hyperion_X11_HEADERS_MOC ${Hyperion_X11_QT_HEADERS})
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
QT4_WRAP_CPP(Hyperion_X11_HEADERS_MOC ${Hyperion_X11_QT_HEADERS})
 | 
						QT4_WRAP_CPP(Hyperion_X11_HEADERS_MOC ${Hyperion_X11_QT_HEADERS})
 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_executable(hyperion-x11
 | 
					
 | 
				
			||||||
 | 
					add_executable(${PROJECT_NAME}
 | 
				
			||||||
	${Hyperion_X11_HEADERS}
 | 
						${Hyperion_X11_HEADERS}
 | 
				
			||||||
	${Hyperion_X11_SOURCES}
 | 
						${Hyperion_X11_SOURCES}
 | 
				
			||||||
	${Hyperion_X11_HEADERS_MOC}
 | 
						${Hyperion_X11_HEADERS_MOC}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target_link_libraries(hyperion-x11
 | 
					target_link_libraries(${PROJECT_NAME}
 | 
				
			||||||
	getoptPlusPlus
 | 
						getoptPlusPlus
 | 
				
			||||||
	blackborder
 | 
						blackborder
 | 
				
			||||||
	hyperion-utils
 | 
						hyperion-utils
 | 
				
			||||||
@@ -55,10 +56,7 @@ target_link_libraries(hyperion-x11
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(ENABLE_QT5)
 | 
					if(ENABLE_QT5)
 | 
				
			||||||
qt5_use_modules(hyperion-x11 Widgets Core Gui Network)
 | 
						qt5_use_modules(${PROJECT_NAME} Widgets Core Gui Network)
 | 
				
			||||||
else(ENABLE_QT5)
 | 
					else(ENABLE_QT5)
 | 
				
			||||||
qt4_use_modules(hyperion-x11
 | 
						qt4_use_modules(${PROJECT_NAME} Core Gui Network )
 | 
				
			||||||
	Core
 | 
					 | 
				
			||||||
	Gui
 | 
					 | 
				
			||||||
	Network)
 | 
					 | 
				
			||||||
endif(ENABLE_QT5)
 | 
					endif(ENABLE_QT5)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user