From 1447209846a47f16a6d53470afeebb3dc978d2c6 Mon Sep 17 00:00:00 2001 From: "T.van der Zwan" Date: Sat, 8 Aug 2015 08:13:37 +0200 Subject: [PATCH] Added tool to create screenshot for amlogic grabber Former-commit-id: d403deab3f931d01bec97b726d8e70b73d3a0012 --- src/CMakeLists.txt | 19 ++++---- src/hyperion-aml/CMakeLists.txt | 46 ++++++++++++++++++ src/hyperion-aml/hyperion-aml.cpp | 80 +++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 src/hyperion-aml/CMakeLists.txt create mode 100644 src/hyperion-aml/hyperion-aml.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 098a08d3..2a291850 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,13 +3,16 @@ add_subdirectory(hyperion-remote) # The following clients depend on the protobuf library if(ENABLE_PROTOBUF) - # Add the 'Video 4 Linux' grabber if it is enabled - if(ENABLE_V4L2) - add_subdirectory(hyperion-v4l2) - endif() + if (ENABLE_AMLOGIC) + add_subdirectory(hyperion-aml) + endif() + # Add the 'Video 4 Linux' grabber if it is enabled + if(ENABLE_V4L2) + add_subdirectory(hyperion-v4l2) + endif() - # Add the X11 grabber if it is enabled - if(ENABLE_X11) - add_subdirectory(hyperion-x11) - endif() + # Add the X11 grabber if it is enabled + if(ENABLE_X11) + add_subdirectory(hyperion-x11) + endif() endif() diff --git a/src/hyperion-aml/CMakeLists.txt b/src/hyperion-aml/CMakeLists.txt new file mode 100644 index 00000000..d6f88a90 --- /dev/null +++ b/src/hyperion-aml/CMakeLists.txt @@ -0,0 +1,46 @@ +# Configure minimum CMAKE version +cmake_minimum_required(VERSION 2.8) + +# Set the project name +project(hyperion-aml) + +# find Qt4 +find_package(Qt4 REQUIRED QtCore QtGui QtNetwork) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR}/../../libsrc/protoserver + ${QT_INCLUDES} + ${PROTOBUF_INCLUDE_DIRS} +) + +set(Hyperion_AML_QT_HEADERS +) + +set(Hyperion_AML_HEADERS +) + +set(Hyperion_AML_SOURCES + hyperion-aml.cpp +) + +QT4_WRAP_CPP(Hyperion_AML_HEADERS_MOC ${Hyperion_AML_QT_HEADERS}) + +add_executable(hyperion-amlogic + ${Hyperion_AML_HEADERS} + ${Hyperion_AML_SOURCES} + ${Hyperion_AML_HEADERS_MOC} +) + +target_link_libraries(hyperion-amlogic + getoptPlusPlus + blackborder + hyperion-utils + protoserver + amlogic-grabber + pthread +) + +qt4_use_modules(hyperion-amlogic + Core + Gui + Network) diff --git a/src/hyperion-aml/hyperion-aml.cpp b/src/hyperion-aml/hyperion-aml.cpp new file mode 100644 index 00000000..b9ad29b6 --- /dev/null +++ b/src/hyperion-aml/hyperion-aml.cpp @@ -0,0 +1,80 @@ + + +// QT includes +#include +#include + +// getoptPlusPLus includes +#include + +#include "../../libsrc/grabber/amlogic/AmlogicGrabber.h" + +using namespace vlofgren; + +// save the image as screenshot +void saveScreenshot(const char * filename, const Image & 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 ('f', "framerate", "Capture frame rate [default=10]"); + IntParameter & argWidth = parameters.add (0x0, "width", "Width of the captured image [default=128]"); + IntParameter & argHeight = parameters.add (0x0, "height", "Height of the captured image [default=128]"); + SwitchParameter<> & argScreenshot = parameters.add> (0x0, "screenshot", "Take a single screenshot, save it to file and quit"); + StringParameter & argAddress = parameters.add ('a', "address", "Set the address of the hyperion server [default: 127.0.0.1:19445]"); + IntParameter & argPriority = parameters.add ('p', "priority", "Use the provided priority channel (the lower the number, the higher the priority) [default: 800]"); + //SwitchParameter<> & argSkipReply = parameters.add> (0x0, "skip-reply", "Do not receive and check reply messages from Hyperion"); + SwitchParameter<> & argHelp = parameters.add> ('h', "help", "Show this help message and exit"); + + // set defaults + argWidth.setDefault(64); + argHeight.setDefault(64); + argAddress.setDefault("127.0.0.1:19445"); + argPriority.setDefault(800); + + // parse all options + optionParser.parse(argc, const_cast(argv)); + + // check if we need to display the usage. exit if we do. + if (argHelp.isSet()) + { + optionParser.usage(); + return 0; + } + + if (argScreenshot.isSet()) + { + // Create the grabber + AmlogicGrabber amlGrabber(argWidth.getValue(), argHeight.getValue()); + + // Capture a single screenshot and finish + Image screenshot; + amlGrabber.grabFrame(screenshot); + saveScreenshot("screenshot.png", screenshot); + } + else + { + // TODO[TvdZ]: Implement the proto-client mechanisme + } + + } + catch (const std::runtime_error & e) + { + // An error occured. Display error and quit + std::cerr << e.what() << std::endl; + return -1; + } + return 0; +}