mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
* implement make install set CMAKE_INSTALL_PREFIX e.g. to /opt to install to /opt/hyperion set ENABLE_SYSTEM_INSTALL to ON to activate installation after compiling use make install or make install/strip (for performance/size optimized binaries - compile in Release to get best performance) * cleanup cmake files use cmake -DINSTALL_PREFIX=/opt/hyperion .. to install all files to hyperion or cmake -DINSTALL_PREFIX=/usr/ to install to usr. install folders are linux standard. bin go to bin folder and additionals (effects) go to share/hyperion * add uninstall target - be patient with that, this will remove files from your system install service files to share/hyperion - if you want to use them you have to make a symlink to your location of service files * optimize build release script install service files into hyperion share folder (services not activated, this must be done by distribution package script) initial support of cmake option -DPLATFORM= option. This selects platform specific cmake flags. no need for -DENABLE_... options (unless you want some special things) automatic detect for apple build * update submodule * fix cmake error when no platform is given * initial support for deb,rpm and tgz packages - no usefull content atm! * make packeages contain usefull stuff * add license make packes more functional. package specific install missing yet * implement debian postinstall * disable rpm generation until it has a working state * add hypercon compat * add posibility for multiple config files. first one found is taken * remove hyperion comaptlayer services is not started automaticly * rework debian postinstall: - remove /opt compatibility complety. This makes more trouble as it is usefull - when hyperiond already started, restart it - cleanup * add deb package dependencies * wipe out last support for /opt installation * change default effect path in config to /usr * revert service files and config files * remove last occurences of ENABLE_PROTOBUF fix cmake warnings and make it ready for cmake 3 fix refactoring of hyperiond.cpp creates no objects for network services Former-commit-id: 56e3e0d1014999b2555418c7b5a2898ac29fb5f1
This commit is contained in:
parent
e8207cfe31
commit
f2e9193987
@ -4,7 +4,9 @@ project(hyperion)
|
|||||||
# define the minimum cmake version (as required by cmake)
|
# define the minimum cmake version (as required by cmake)
|
||||||
cmake_minimum_required(VERSION 2.8)
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
#set(CMAKE_TOOLCHAIN_FILE /opt/raspberrypi/Toolchain-RaspberryPi.cmake)
|
IF ( POLICY CMP0026 )
|
||||||
|
CMAKE_POLICY( SET CMP0026 OLD )
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
SET ( DEFAULT_AMLOGIC OFF )
|
SET ( DEFAULT_AMLOGIC OFF )
|
||||||
@ -55,8 +57,6 @@ message(STATUS "ENABLE_FB = " ${ENABLE_FB})
|
|||||||
option(ENABLE_OSX "Enable the osx grabber" ${DEFAULT_OSX} )
|
option(ENABLE_OSX "Enable the osx grabber" ${DEFAULT_OSX} )
|
||||||
message(STATUS "ENABLE_OSX = " ${ENABLE_OSX})
|
message(STATUS "ENABLE_OSX = " ${ENABLE_OSX})
|
||||||
|
|
||||||
set(ENABLE_PROTOBUF ON)
|
|
||||||
|
|
||||||
option(ENABLE_SPIDEV "Enable the SPIDEV device" ${DEFAULT_SPIDEV} )
|
option(ENABLE_SPIDEV "Enable the SPIDEV device" ${DEFAULT_SPIDEV} )
|
||||||
message(STATUS "ENABLE_SPIDEV = " ${ENABLE_SPIDEV})
|
message(STATUS "ENABLE_SPIDEV = " ${ENABLE_SPIDEV})
|
||||||
|
|
||||||
|
@ -18,9 +18,6 @@
|
|||||||
// Define to enable the spi-device
|
// Define to enable the spi-device
|
||||||
#cmakedefine ENABLE_TINKERFORGE
|
#cmakedefine ENABLE_TINKERFORGE
|
||||||
|
|
||||||
// Define to enable PROTOBUF server
|
|
||||||
#cmakedefine ENABLE_PROTOBUF
|
|
||||||
|
|
||||||
// Define to enable the framebuffer grabber
|
// Define to enable the framebuffer grabber
|
||||||
#cmakedefine ENABLE_FB
|
#cmakedefine ENABLE_FB
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ macro (QT4_ADD_RESOURCES outfiles )
|
|||||||
# let's make a configured file and add it as a dependency so cmake is run
|
# let's make a configured file and add it as a dependency so cmake is run
|
||||||
# again when dependencies need to be recomputed.
|
# again when dependencies need to be recomputed.
|
||||||
QT4_MAKE_OUTPUT_FILE("${infile}" "" "qrc.depends" out_depends)
|
QT4_MAKE_OUTPUT_FILE("${infile}" "" "qrc.depends" out_depends)
|
||||||
configure_file("${infile}" "${out_depends}" COPY_ONLY)
|
configure_file("${infile}" "${out_depends}" COPYONLY)
|
||||||
else()
|
else()
|
||||||
# The .qrc file does not exist (yet). Let's add a dependency and hope
|
# The .qrc file does not exist (yet). Let's add a dependency and hope
|
||||||
# that it will be generated later
|
# that it will be generated later
|
||||||
|
178
dependencies/CMakeLists.txt
vendored
178
dependencies/CMakeLists.txt
vendored
@ -11,100 +11,98 @@ if(ENABLE_WS281XPWM)
|
|||||||
external/rpi_ws281x/rpihw.c)
|
external/rpi_ws281x/rpihw.c)
|
||||||
endif(ENABLE_WS281XPWM)
|
endif(ENABLE_WS281XPWM)
|
||||||
|
|
||||||
if(ENABLE_PROTOBUF)
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared protobuf library")
|
||||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared protobuf library")
|
add_subdirectory(external/protobuf)
|
||||||
add_subdirectory(external/protobuf)
|
|
||||||
|
|
||||||
if(CMAKE_CROSSCOMPILING)
|
if(CMAKE_CROSSCOMPILING)
|
||||||
# when crosscompiling import the protoc executable targets from a file generated by a native build
|
# when crosscompiling import the protoc executable targets from a file generated by a native build
|
||||||
option(IMPORT_PROTOC "Protoc export file (protoc_export.cmake) from a native build" "IMPORT_PROTOC-FILE_NOT_FOUND")
|
option(IMPORT_PROTOC "Protoc export file (protoc_export.cmake) from a native build" "IMPORT_PROTOC-FILE_NOT_FOUND")
|
||||||
include(${IMPORT_PROTOC})
|
include(${IMPORT_PROTOC})
|
||||||
else()
|
else()
|
||||||
# export the protoc compiler so it can be used when cross compiling
|
# export the protoc compiler so it can be used when cross compiling
|
||||||
export(TARGETS protoc_compiler FILE "${CMAKE_BINARY_DIR}/protoc_export.cmake")
|
export(TARGETS protoc_compiler FILE "${CMAKE_BINARY_DIR}/protoc_export.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# define the include for the protobuf library at the parent scope
|
||||||
|
set(PROTOBUF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/protobuf/src")
|
||||||
|
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
|
||||||
|
|
||||||
|
# define the protoc executable at the parent scope
|
||||||
|
get_property(PROTOBUF_PROTOC_EXECUTABLE TARGET protoc_compiler PROPERTY LOCATION)
|
||||||
|
set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE} PARENT_SCOPE)
|
||||||
|
message(STATUS "Using protobuf compiler: " ${PROTOBUF_PROTOC_EXECUTABLE})
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2009 Kitware, Inc.
|
||||||
|
# Copyright 2009-2011 Philip Lowman <philip@yhbt.com>
|
||||||
|
# Copyright 2008 Esben Mose Hansen, Ange Optimization ApS
|
||||||
|
#
|
||||||
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
|
# see accompanying file Copyright.txt for details.
|
||||||
|
#
|
||||||
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||||
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
# See the License for more information.
|
||||||
|
#=============================================================================
|
||||||
|
# (To distribute this file outside of CMake, substitute the full
|
||||||
|
# License text for the above reference.)
|
||||||
|
function(PROTOBUF_GENERATE_CPP SRCS HDRS)
|
||||||
|
if(NOT ARGN)
|
||||||
|
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
|
||||||
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# define the include for the protobuf library at the parent scope
|
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||||
set(PROTOBUF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/protobuf/src")
|
# Create an include path for each file specified
|
||||||
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
|
|
||||||
|
|
||||||
# define the protoc executable at the parent scope
|
|
||||||
get_property(PROTOBUF_PROTOC_EXECUTABLE TARGET protoc_compiler PROPERTY LOCATION)
|
|
||||||
set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE} PARENT_SCOPE)
|
|
||||||
message(STATUS "Using protobuf compiler: " ${PROTOBUF_PROTOC_EXECUTABLE})
|
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2009 Kitware, Inc.
|
|
||||||
# Copyright 2009-2011 Philip Lowman <philip@yhbt.com>
|
|
||||||
# Copyright 2008 Esben Mose Hansen, Ange Optimization ApS
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
function(PROTOBUF_GENERATE_CPP SRCS HDRS)
|
|
||||||
if(NOT ARGN)
|
|
||||||
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
|
||||||
# Create an include path for each file specified
|
|
||||||
foreach(FIL ${ARGN})
|
|
||||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
|
||||||
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
|
||||||
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
|
||||||
if(${_contains_already} EQUAL -1)
|
|
||||||
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
else()
|
|
||||||
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(DEFINED PROTOBUF_IMPORT_DIRS)
|
|
||||||
foreach(DIR ${PROTOBUF_IMPORT_DIRS})
|
|
||||||
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
|
||||||
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
|
||||||
if(${_contains_already} EQUAL -1)
|
|
||||||
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_CROSSCOMPILING)
|
|
||||||
set(PROTOC_DEPENDENCY ${PROTOBUF_PROTOC_EXECUTABLE})
|
|
||||||
else()
|
|
||||||
set(PROTOC_DEPENDENCY protoc_compiler)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(${SRCS})
|
|
||||||
set(${HDRS})
|
|
||||||
foreach(FIL ${ARGN})
|
foreach(FIL ${ARGN})
|
||||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||||
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
||||||
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||||
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
|
if(${_contains_already} EQUAL -1)
|
||||||
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||||
|
endif()
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h"
|
|
||||||
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
|
|
||||||
ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
|
|
||||||
DEPENDS ${ABS_FIL} ${PROTOC_DEPENDENCY}
|
|
||||||
COMMENT "Running C++ protocol buffer compiler on ${FIL}"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
endforeach()
|
endforeach()
|
||||||
|
else()
|
||||||
|
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
|
if(DEFINED PROTOBUF_IMPORT_DIRS)
|
||||||
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
foreach(DIR ${PROTOBUF_IMPORT_DIRS})
|
||||||
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
||||||
endfunction()
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||||
endif()
|
if(${_contains_already} EQUAL -1)
|
||||||
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CROSSCOMPILING)
|
||||||
|
set(PROTOC_DEPENDENCY ${PROTOBUF_PROTOC_EXECUTABLE})
|
||||||
|
else()
|
||||||
|
set(PROTOC_DEPENDENCY protoc_compiler)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${SRCS})
|
||||||
|
set(${HDRS})
|
||||||
|
foreach(FIL ${ARGN})
|
||||||
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||||
|
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
||||||
|
|
||||||
|
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
|
||||||
|
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h"
|
||||||
|
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
|
||||||
|
ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
|
||||||
|
DEPENDS ${ABS_FIL} ${PROTOC_DEPENDENCY}
|
||||||
|
COMMENT "Running C++ protocol buffer compiler on ${FIL}"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
|
||||||
|
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
||||||
|
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
@ -7,9 +7,7 @@ add_subdirectory(hyperion)
|
|||||||
add_subdirectory(blackborder)
|
add_subdirectory(blackborder)
|
||||||
add_subdirectory(jsonserver)
|
add_subdirectory(jsonserver)
|
||||||
|
|
||||||
if (ENABLE_PROTOBUF)
|
add_subdirectory(protoserver)
|
||||||
add_subdirectory(protoserver)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (ENABLE_ZEROCONF)
|
if (ENABLE_ZEROCONF)
|
||||||
add_subdirectory(bonjour)
|
add_subdirectory(bonjour)
|
||||||
|
@ -9,6 +9,7 @@ target_link_libraries(hyperiond
|
|||||||
effectengine
|
effectengine
|
||||||
jsonserver
|
jsonserver
|
||||||
boblightserver
|
boblightserver
|
||||||
|
protoserver
|
||||||
)
|
)
|
||||||
|
|
||||||
if (ENABLE_DISPMANX)
|
if (ENABLE_DISPMANX)
|
||||||
@ -31,10 +32,6 @@ if (ENABLE_AMLOGIC)
|
|||||||
target_link_libraries(hyperiond amlogic-grabber)
|
target_link_libraries(hyperiond amlogic-grabber)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (ENABLE_PROTOBUF)
|
|
||||||
target_link_libraries(hyperiond protoserver)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (ENABLE_ZEROCONF)
|
if (ENABLE_ZEROCONF)
|
||||||
target_link_libraries(hyperiond bonjour)
|
target_link_libraries(hyperiond bonjour)
|
||||||
endif()
|
endif()
|
||||||
|
@ -186,7 +186,7 @@ void startXBMCVideoChecker(const Json::Value &config, XBMCVideoChecker* xbmcVide
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void startNetworkServices(const Json::Value &config, Hyperion &hyperion, JsonServer* jsonServer, ProtoServer* protoServer, BoblightServer* boblightServer)
|
void startNetworkServices(const Json::Value &config, Hyperion &hyperion, JsonServer* &jsonServer, ProtoServer* &protoServer, BoblightServer* &boblightServer)
|
||||||
{
|
{
|
||||||
// Create Json server if configuration is present
|
// Create Json server if configuration is present
|
||||||
if (config.isMember("jsonServer"))
|
if (config.isMember("jsonServer"))
|
||||||
@ -194,6 +194,7 @@ void startNetworkServices(const Json::Value &config, Hyperion &hyperion, JsonSer
|
|||||||
const Json::Value & jsonServerConfig = config["jsonServer"];
|
const Json::Value & jsonServerConfig = config["jsonServer"];
|
||||||
jsonServer = new JsonServer(&hyperion, jsonServerConfig["port"].asUInt());
|
jsonServer = new JsonServer(&hyperion, jsonServerConfig["port"].asUInt());
|
||||||
std::cout << "INFO: Json server created and started on port " << jsonServer->getPort() << std::endl;
|
std::cout << "INFO: Json server created and started on port " << jsonServer->getPort() << std::endl;
|
||||||
|
|
||||||
#ifdef ENABLE_ZEROCONF
|
#ifdef ENABLE_ZEROCONF
|
||||||
const Json::Value & deviceConfig = config["device"];
|
const Json::Value & deviceConfig = config["device"];
|
||||||
const std::string deviceName = deviceConfig.get("name", "").asString();
|
const std::string deviceName = deviceConfig.get("name", "").asString();
|
||||||
@ -215,6 +216,7 @@ void startNetworkServices(const Json::Value &config, Hyperion &hyperion, JsonSer
|
|||||||
const Json::Value & protoServerConfig = config["protoServer"];
|
const Json::Value & protoServerConfig = config["protoServer"];
|
||||||
protoServer = new ProtoServer(&hyperion, protoServerConfig["port"].asUInt() );
|
protoServer = new ProtoServer(&hyperion, protoServerConfig["port"].asUInt() );
|
||||||
std::cout << "INFO: Proto server created and started on port " << protoServer->getPort() << std::endl;
|
std::cout << "INFO: Proto server created and started on port " << protoServer->getPort() << std::endl;
|
||||||
|
|
||||||
#ifdef ENABLE_ZEROCONF
|
#ifdef ENABLE_ZEROCONF
|
||||||
const Json::Value & deviceConfig = config["device"];
|
const Json::Value & deviceConfig = config["device"];
|
||||||
const std::string deviceName = deviceConfig.get("name", "").asString();
|
const std::string deviceName = deviceConfig.get("name", "").asString();
|
||||||
@ -369,7 +371,7 @@ void startGrabberFramebuffer(const Json::Value &config, Hyperion &hyperion, Prot
|
|||||||
|
|
||||||
|
|
||||||
#ifdef ENABLE_OSX
|
#ifdef ENABLE_OSX
|
||||||
void startGrabberOsx(const Json::Value &config, Hyperion &hyperion, ProtoServer * protoServer, XBMCVideoChecker* xbmcVideoChecker, OsxWrapper * osxGrabber)
|
void startGrabberOsx(const Json::Value &config, Hyperion &hyperion, ProtoServer* protoServer, XBMCVideoChecker* xbmcVideoChecker, OsxWrapper * osxGrabber)
|
||||||
{
|
{
|
||||||
// Construct and start the osx grabber if the configuration is present
|
// Construct and start the osx grabber if the configuration is present
|
||||||
if (config.isMember("osxgrabber") || config.isMember("framegrabber"))
|
if (config.isMember("osxgrabber") || config.isMember("framegrabber"))
|
||||||
@ -472,7 +474,6 @@ int main(int argc, char** argv)
|
|||||||
BoblightServer * boblightServer = nullptr;
|
BoblightServer * boblightServer = nullptr;
|
||||||
startNetworkServices(config, hyperion, jsonServer, protoServer, boblightServer);
|
startNetworkServices(config, hyperion, jsonServer, protoServer, boblightServer);
|
||||||
|
|
||||||
|
|
||||||
// ---- grabber -----
|
// ---- grabber -----
|
||||||
|
|
||||||
#ifdef ENABLE_DISPMANX
|
#ifdef ENABLE_DISPMANX
|
||||||
|
Loading…
Reference in New Issue
Block a user