mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
* Detect resolution changes * include Qt5Widgets * find Qt5Widgets Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
parent
22ace55447
commit
c32a4df587
@ -40,7 +40,7 @@ wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/
|
|||||||
|
|
||||||
```
|
```
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
|
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
**on RPI you need the videocore IV headers**
|
**on RPI you need the videocore IV headers**
|
||||||
|
@ -4,14 +4,14 @@ Use a clean Raspbian Stretch Lite (on target) and Ubuntu 18/19 (on host) to exec
|
|||||||
## On the Target system (here Raspberry Pi)
|
## On the Target system (here Raspberry Pi)
|
||||||
Install required additional packages.
|
Install required additional packages.
|
||||||
```
|
```
|
||||||
sudo apt-get install qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite aptitude qt5-default rsync libssl-dev zlib1g-dev
|
sudo apt-get install qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite aptitude qt5-default rsync libssl-dev zlib1g-dev
|
||||||
```
|
```
|
||||||
## On the Host system (here Ubuntu)
|
## On the Host system (here Ubuntu)
|
||||||
Update the Ubuntu environment to the latest stage and install required additional packages.
|
Update the Ubuntu environment to the latest stage and install required additional packages.
|
||||||
```
|
```
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get upgrade
|
sudo apt-get upgrade
|
||||||
sudo apt-get -qq -y install git rsync cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
|
sudo apt-get -qq -y install git rsync cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Refine the target IP or hostname, plus userID as required and set-up cross-compilation environment:
|
Refine the target IP or hostname, plus userID as required and set-up cross-compilation environment:
|
||||||
|
@ -5,7 +5,7 @@ CFG="${2:-Release}"
|
|||||||
INST="$( [ "${3:-}" = "install" ] && echo true || echo false )"
|
INST="$( [ "${3:-}" = "install" ] && echo true || echo false )"
|
||||||
|
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev libturbojpeg0-dev python3-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libssl-dev libjpeg-dev libqt5sql5-sqlite zlib1g-dev || exit 1
|
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev libturbojpeg0-dev python3-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libssl-dev libjpeg-dev libqt5sql5-sqlite zlib1g-dev || exit 1
|
||||||
|
|
||||||
if [ -e /dev/vc-cma -a -e /dev/vc-mem ]
|
if [ -e /dev/vc-cma -a -e /dev/vc-mem ]
|
||||||
then
|
then
|
||||||
|
@ -18,8 +18,11 @@ tar --create --verbose --gzip --absolute-names --show-transformed-names --derefe
|
|||||||
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libX11.so.6" \
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libX11.so.6" \
|
||||||
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXau.so.6" \
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXau.so.6" \
|
||||||
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libxcb.so.1" \
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libxcb.so.1" \
|
||||||
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libxcb-util.so" \
|
||||||
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libxcb-randr.so" \
|
||||||
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXdmcp.so.6" \
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXdmcp.so.6" \
|
||||||
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXext.so.6" \
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXext.so.6" \
|
||||||
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXrandr.so.2" \
|
||||||
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXrender.so.1" \
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXrender.so.1" \
|
||||||
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXt.so.6" \
|
"$IMX6_ROOTFS/usr/lib/arm-linux-gnueabihf/libXt.so.6" \
|
||||||
"./openelec/hyperiond.sh" \
|
"./openelec/hyperiond.sh" \
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <QAbstractEventDispatcher>
|
||||||
|
#include <QAbstractNativeEventFilter>
|
||||||
|
#include <QCoreApplication>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
// Hyperion-utils includes
|
// Hyperion-utils includes
|
||||||
@ -8,12 +10,13 @@
|
|||||||
|
|
||||||
// X11 includes
|
// X11 includes
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/extensions/Xrandr.h>
|
||||||
#include <X11/extensions/Xrender.h>
|
#include <X11/extensions/Xrender.h>
|
||||||
#include <X11/extensions/XShm.h>
|
#include <X11/extensions/XShm.h>
|
||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
|
||||||
class X11Grabber : public Grabber
|
class X11Grabber : public Grabber , public QAbstractNativeEventFilter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -58,8 +61,11 @@ public:
|
|||||||
///
|
///
|
||||||
virtual void setCropping(unsigned cropLeft, unsigned cropRight, unsigned cropTop, unsigned cropBottom);
|
virtual void setCropping(unsigned cropLeft, unsigned cropRight, unsigned cropTop, unsigned cropBottom);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool nativeEventFilter(const QByteArray & eventType, void * message, long int * result) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _XShmAvailable, _XShmPixmapAvailable, _XRenderAvailable;
|
bool _XShmAvailable, _XShmPixmapAvailable, _XRenderAvailable, _XRandRAvailable;
|
||||||
|
|
||||||
XImage* _xImage;
|
XImage* _xImage;
|
||||||
XShmSegmentInfo _shminfo;
|
XShmSegmentInfo _shminfo;
|
||||||
@ -76,6 +82,8 @@ private:
|
|||||||
Picture _srcPicture;
|
Picture _srcPicture;
|
||||||
Picture _dstPicture;
|
Picture _dstPicture;
|
||||||
|
|
||||||
|
int _XRandREventBase;
|
||||||
|
|
||||||
XTransform _transform;
|
XTransform _transform;
|
||||||
int _pixelDecimation;
|
int _pixelDecimation;
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ SET(CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/libsrc/grabber/x11)
|
|||||||
|
|
||||||
# Find X11
|
# Find X11
|
||||||
find_package(X11 REQUIRED)
|
find_package(X11 REQUIRED)
|
||||||
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
|
||||||
include_directories( ${X11_INCLUDES} )
|
include_directories( ${X11_INCLUDES} )
|
||||||
|
|
||||||
@ -18,5 +19,7 @@ add_library(x11-grabber ${X11_SOURCES} )
|
|||||||
target_link_libraries(x11-grabber
|
target_link_libraries(x11-grabber
|
||||||
hyperion
|
hyperion
|
||||||
${X11_LIBRARIES}
|
${X11_LIBRARIES}
|
||||||
|
${X11_Xrandr_LIB}
|
||||||
${X11_Xrender_LIB}
|
${X11_Xrender_LIB}
|
||||||
|
Qt5::Widgets
|
||||||
)
|
)
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
#include <utils/Logger.h>
|
#include <utils/Logger.h>
|
||||||
#include <grabber/X11Grabber.h>
|
#include <grabber/X11Grabber.h>
|
||||||
|
|
||||||
|
#include <xcb/randr.h>
|
||||||
|
#include <xcb/xcb_event.h>
|
||||||
|
|
||||||
X11Grabber::X11Grabber(int cropLeft, int cropRight, int cropTop, int cropBottom, int pixelDecimation)
|
X11Grabber::X11Grabber(int cropLeft, int cropRight, int cropTop, int cropBottom, int pixelDecimation)
|
||||||
: Grabber("X11GRABBER", 0, 0, cropLeft, cropRight, cropTop, cropBottom)
|
: Grabber("X11GRABBER", 0, 0, cropLeft, cropRight, cropTop, cropBottom)
|
||||||
, _x11Display(nullptr)
|
, _x11Display(nullptr)
|
||||||
@ -35,6 +38,10 @@ void X11Grabber::freeResources()
|
|||||||
{
|
{
|
||||||
// Cleanup allocated resources of the X11 grab
|
// Cleanup allocated resources of the X11 grab
|
||||||
XDestroyImage(_xImage);
|
XDestroyImage(_xImage);
|
||||||
|
if (_XRandRAvailable)
|
||||||
|
{
|
||||||
|
qApp->removeNativeEventFilter(this);
|
||||||
|
}
|
||||||
if(_XShmAvailable)
|
if(_XShmAvailable)
|
||||||
{
|
{
|
||||||
XShmDetach(_x11Display, &_shminfo);
|
XShmDetach(_x11Display, &_shminfo);
|
||||||
@ -51,6 +58,11 @@ void X11Grabber::freeResources()
|
|||||||
|
|
||||||
void X11Grabber::setupResources()
|
void X11Grabber::setupResources()
|
||||||
{
|
{
|
||||||
|
if (_XRandRAvailable)
|
||||||
|
{
|
||||||
|
qApp->installNativeEventFilter(this);
|
||||||
|
}
|
||||||
|
|
||||||
if(_XShmAvailable)
|
if(_XShmAvailable)
|
||||||
{
|
{
|
||||||
_xImage = XShmCreateImage(_x11Display, _windowAttr.visual, _windowAttr.depth, ZPixmap, NULL, &_shminfo, _width, _height);
|
_xImage = XShmCreateImage(_x11Display, _windowAttr.visual, _windowAttr.depth, ZPixmap, NULL, &_shminfo, _width, _height);
|
||||||
@ -99,6 +111,7 @@ bool X11Grabber::Setup()
|
|||||||
|
|
||||||
int dummy, pixmaps_supported;
|
int dummy, pixmaps_supported;
|
||||||
|
|
||||||
|
_XRandRAvailable = XRRQueryExtension(_x11Display, &_XRandREventBase, &dummy);
|
||||||
_XRenderAvailable = XRenderQueryExtension(_x11Display, &dummy, &dummy);
|
_XRenderAvailable = XRenderQueryExtension(_x11Display, &dummy, &dummy);
|
||||||
_XShmAvailable = XShmQueryExtension(_x11Display);
|
_XShmAvailable = XShmQueryExtension(_x11Display);
|
||||||
XShmQueryVersion(_x11Display, &dummy, &dummy, &pixmaps_supported);
|
XShmQueryVersion(_x11Display, &dummy, &dummy, &pixmaps_supported);
|
||||||
@ -293,3 +306,20 @@ void X11Grabber::setCropping(unsigned cropLeft, unsigned cropRight, unsigned cro
|
|||||||
Grabber::setCropping(cropLeft, cropRight, cropTop, cropBottom);
|
Grabber::setCropping(cropLeft, cropRight, cropTop, cropBottom);
|
||||||
if(_x11Display != nullptr) updateScreenDimensions(true); // segfault on init
|
if(_x11Display != nullptr) updateScreenDimensions(true); // segfault on init
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool X11Grabber::nativeEventFilter(const QByteArray & eventType, void * message, long int * /*result*/)
|
||||||
|
{
|
||||||
|
if (!_XRandRAvailable || eventType != "xcb_generic_event_t") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
xcb_generic_event_t *e = static_cast<xcb_generic_event_t*>(message);
|
||||||
|
const uint8_t xEventType = XCB_EVENT_RESPONSE_TYPE(e);
|
||||||
|
|
||||||
|
if (xEventType == _XRandREventBase + XCB_RANDR_SCREEN_CHANGE_NOTIFY)
|
||||||
|
{
|
||||||
|
updateScreenDimensions(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -36,10 +36,12 @@ target_link_libraries(${PROJECT_NAME}
|
|||||||
x11-grabber
|
x11-grabber
|
||||||
ssdp
|
ssdp
|
||||||
${X11_LIBRARIES}
|
${X11_LIBRARIES}
|
||||||
|
${X11_Xrandr_LIB}
|
||||||
${X11_Xrender_LIB}
|
${X11_Xrender_LIB}
|
||||||
Qt5::Core
|
Qt5::Core
|
||||||
Qt5::Gui
|
Qt5::Gui
|
||||||
Qt5::Network
|
Qt5::Network
|
||||||
|
Qt5::Widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
install ( TARGETS ${PROJECT_NAME} DESTINATION "share/hyperion/bin" COMPONENT "hyperion_x11" )
|
install ( TARGETS ${PROJECT_NAME} DESTINATION "share/hyperion/bin" COMPONENT "hyperion_x11" )
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
// QT includes
|
// QT includes
|
||||||
#include <QCoreApplication>
|
#include <QApplication>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
|
|
||||||
#include <commandline/Parser.h>
|
#include <commandline/Parser.h>
|
||||||
@ -28,8 +28,7 @@ int main(int argc, char ** argv)
|
|||||||
<< "\tVersion : " << HYPERION_VERSION << " (" << HYPERION_BUILD_ID << ")" << std::endl
|
<< "\tVersion : " << HYPERION_VERSION << " (" << HYPERION_BUILD_ID << ")" << std::endl
|
||||||
<< "\tbuild time: " << __DATE__ << " " << __TIME__ << std::endl;
|
<< "\tbuild time: " << __DATE__ << " " << __TIME__ << std::endl;
|
||||||
|
|
||||||
QCoreApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// create the option parser and initialize all parameters
|
// create the option parser and initialize all parameters
|
||||||
|
Loading…
Reference in New Issue
Block a user