diff --git a/include/utils/GrabbingMode.h b/include/utils/GrabbingMode.h index fe3b09ee..c97aaa8e 100644 --- a/include/utils/GrabbingMode.h +++ b/include/utils/GrabbingMode.h @@ -9,6 +9,7 @@ enum GrabbingMode GRABBINGMODE_OFF, /** Frame grabbing during video */ GRABBINGMODE_VIDEO, + GRABBINGMODE_PAUSE, GRABBINGMODE_PHOTO, GRABBINGMODE_AUDIO, GRABBINGMODE_MENU, diff --git a/include/xbmcvideochecker/XBMCVideoChecker.h b/include/xbmcvideochecker/XBMCVideoChecker.h index 01401093..9ad30c3b 100644 --- a/include/xbmcvideochecker/XBMCVideoChecker.h +++ b/include/xbmcvideochecker/XBMCVideoChecker.h @@ -41,7 +41,7 @@ public: /// @param grabScreensaver Whether or not to grab when the XBMC screensaver is activated /// @param enable3DDetection Wheter or not to enable the detection of 3D movies playing /// - XBMCVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabScreensaver, bool enable3DDetection); + XBMCVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection); /// /// Start polling XBMC @@ -76,7 +76,7 @@ private: void setGrabbingMode(GrabbingMode grabbingMode); void setScreensaverMode(bool isOnScreensaver); - + /// Set the video mode void setVideoMode(VideoMode videoMode); @@ -117,6 +117,9 @@ private: /// Flag indicating whether or not to grab when XBMC is playing nothing (in menu) const bool _grabMenu; + /// Flag indicating whether or not to grab when the XBMC videoplayer is at pause state + const bool _grabPause; + /// Flag indicating whether or not to grab when the XBMC screensaver is activated const bool _grabScreensaver; @@ -125,7 +128,7 @@ private: /// Flag indicating if XBMC is on screensaver bool _previousScreensaverMode; - + /// Previous emitted grab mode GrabbingMode _previousGrabbingMode; diff --git a/libsrc/grabber/amlogic/AmlogicWrapper.cpp b/libsrc/grabber/amlogic/AmlogicWrapper.cpp index eb47e155..51668b69 100644 --- a/libsrc/grabber/amlogic/AmlogicWrapper.cpp +++ b/libsrc/grabber/amlogic/AmlogicWrapper.cpp @@ -78,6 +78,7 @@ void AmlogicWrapper::setGrabbingMode(const GrabbingMode mode) switch (mode) { case GRABBINGMODE_VIDEO: + case GRABBINGMODE_PAUSE: // _frameGrabber->setFlags(DISPMANX_SNAPSHOT_NO_RGB|DISPMANX_SNAPSHOT_FILL); start(); break; diff --git a/libsrc/grabber/dispmanx/DispmanxWrapper.cpp b/libsrc/grabber/dispmanx/DispmanxWrapper.cpp index bad3807f..23bc22f6 100644 --- a/libsrc/grabber/dispmanx/DispmanxWrapper.cpp +++ b/libsrc/grabber/dispmanx/DispmanxWrapper.cpp @@ -74,6 +74,7 @@ void DispmanxWrapper::setGrabbingMode(const GrabbingMode mode) switch (mode) { case GRABBINGMODE_VIDEO: + case GRABBINGMODE_PAUSE: _frameGrabber->setFlags(DISPMANX_SNAPSHOT_NO_RGB|DISPMANX_SNAPSHOT_FILL); start(); break; diff --git a/libsrc/grabber/framebuffer/FramebufferWrapper.cpp b/libsrc/grabber/framebuffer/FramebufferWrapper.cpp index 25a23311..97734deb 100644 --- a/libsrc/grabber/framebuffer/FramebufferWrapper.cpp +++ b/libsrc/grabber/framebuffer/FramebufferWrapper.cpp @@ -62,6 +62,7 @@ void FramebufferWrapper::setGrabbingMode(const GrabbingMode mode) switch (mode) { case GRABBINGMODE_VIDEO: + case GRABBINGMODE_PAUSE: case GRABBINGMODE_AUDIO: case GRABBINGMODE_PHOTO: case GRABBINGMODE_MENU: diff --git a/libsrc/grabber/osx/OsxWrapper.cpp b/libsrc/grabber/osx/OsxWrapper.cpp index 4111ea0b..53463ee3 100644 --- a/libsrc/grabber/osx/OsxWrapper.cpp +++ b/libsrc/grabber/osx/OsxWrapper.cpp @@ -62,6 +62,7 @@ void OsxWrapper::setGrabbingMode(const GrabbingMode mode) switch (mode) { case GRABBINGMODE_VIDEO: + case GRABBINGMODE_PAUSE: case GRABBINGMODE_AUDIO: case GRABBINGMODE_PHOTO: case GRABBINGMODE_MENU: diff --git a/libsrc/hyperion/hyperion.schema.json b/libsrc/hyperion/hyperion.schema.json index f839b7f1..cd716df7 100644 --- a/libsrc/hyperion/hyperion.schema.json +++ b/libsrc/hyperion/hyperion.schema.json @@ -288,6 +288,10 @@ "type" : "boolean", "required" : true }, + "grabPause" : { + "type" : "boolean", + "required" : false + }, "grabScreensaver" : { "type" : "boolean", "required" : false diff --git a/libsrc/xbmcvideochecker/XBMCVideoChecker.cpp b/libsrc/xbmcvideochecker/XBMCVideoChecker.cpp index 667ad4e4..b8d91c22 100644 --- a/libsrc/xbmcvideochecker/XBMCVideoChecker.cpp +++ b/libsrc/xbmcvideochecker/XBMCVideoChecker.cpp @@ -21,7 +21,7 @@ // {"jsonrpc":"2.0","method":"GUI.GetProperties","params":{"properties":["stereoscopicmode"]},"id":669} // {"id":669,"jsonrpc":"2.0","result":{"stereoscopicmode":{"label":"Nebeneinander","mode":"split_vertical"}}} -XBMCVideoChecker::XBMCVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabScreensaver, bool enable3DDetection) : +XBMCVideoChecker::XBMCVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection) : QObject(), _address(QString::fromStdString(address)), _port(port), @@ -35,6 +35,7 @@ XBMCVideoChecker::XBMCVideoChecker(const std::string & address, uint16_t port, b _grabPhoto(grabPhoto), _grabAudio(grabAudio), _grabMenu(grabMenu), + _grabPause(grabPause), _grabScreensaver(grabScreensaver), _enable3DDetection(enable3DDetection), _previousScreensaverMode(false), @@ -73,6 +74,11 @@ void XBMCVideoChecker::receiveReply() setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF); setVideoMode(VIDEO_2D); } + else if (reply.contains("\"method\":\"Player.OnPause\"")) + { + // player at pause + setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF); + } else if (reply.contains("\"method\":\"GUI.OnScreensaverActivated\"")) { setScreensaverMode(!_grabScreensaver); @@ -272,6 +278,9 @@ void XBMCVideoChecker::setGrabbingMode(GrabbingMode newGrabbingMode) case GRABBINGMODE_MENU: std::cout << "KODICHECK INFO: switching to MENU mode" << std::endl; break; + case GRABBINGMODE_PAUSE: + std::cout << "KODICHECK INFO: switching to PAUSE mode" << std::endl; + break; case GRABBINGMODE_OFF: std::cout << "KODICHECK INFO: switching to OFF mode" << std::endl; break; diff --git a/src/hyperiond/hyperiond.cpp b/src/hyperiond/hyperiond.cpp index 838827a9..110244d8 100644 --- a/src/hyperiond/hyperiond.cpp +++ b/src/hyperiond/hyperiond.cpp @@ -178,6 +178,7 @@ void startXBMCVideoChecker(const Json::Value &config, XBMCVideoChecker* &xbmcVid videoCheckerConfig["grabPictures"].asBool(), videoCheckerConfig["grabAudio"].asBool(), videoCheckerConfig["grabMenu"].asBool(), + videoCheckerConfig.get("grabPause", true).asBool(), videoCheckerConfig.get("grabScreensaver", true).asBool(), videoCheckerConfig.get("enable3DDetection", true).asBool());