Configurable enable DPMS, while black screen is displayed.

This commit is contained in:
master_red 2015-08-10 15:32:25 +02:00 committed by Johns
parent ec58e45607
commit 700c8e8767
5 changed files with 96 additions and 7 deletions

View File

@ -1,5 +1,10 @@
User master_red
Date: Mon Aug 10 15:29:33 CEST 2015
Configurable enable DPMS, while black screen is displayed.
User johns User johns
Date: Date: Tue Jun 30 10:12:09 CET 2015
Fix bug: wrong and crash, if vdr draws pixmaps outside OSD. Fix bug: wrong and crash, if vdr draws pixmaps outside OSD.
Fix bug: wrong version number check for av_frame_alloc(), ... Fix bug: wrong version number check for av_frame_alloc(), ...

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR \n" "Project-Id-Version: VDR \n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2014-10-31 12:36+0100\n" "POT-Creation-Date: 2015-06-10 21:21+0200\n"
"PO-Revision-Date: blabla\n" "PO-Revision-Date: blabla\n"
"Last-Translator: blabla\n" "Last-Translator: blabla\n"
"Language-Team: blabla\n" "Language-Team: blabla\n"
@ -501,6 +501,9 @@ msgstr "Unterbrechen stoppt X11"
msgid "Video" msgid "Video"
msgstr "Video" msgstr "Video"
msgid "Enable Screensaver(DPMS) at black screen"
msgstr "Bildschirmschoner(DPMS) bei schwarzen Bild aktivieren"
msgid "Video background color (RGB)" msgid "Video background color (RGB)"
msgstr "Video Hintergrundfrabe (RGB)" msgstr "Video Hintergrundfrabe (RGB)"

View File

@ -165,6 +165,10 @@ static int ConfigPipAltVideoWidth; ///< config pip alt. video width in %
static int ConfigPipAltVideoHeight = 50; ///< config pip alt. video height in % static int ConfigPipAltVideoHeight = 50; ///< config pip alt. video height in %
#endif #endif
#ifdef USE_SCREENSAVER
static char ConfigEnableDPMSatBlackScreen; ///< Enable DPMS(Screensaver) while displaying black screen(radio)
#endif
static volatile int DoMakePrimary; ///< switch primary device to this static volatile int DoMakePrimary; ///< switch primary device to this
#define SUSPEND_EXTERNAL -1 ///< play external suspend mode #define SUSPEND_EXTERNAL -1 ///< play external suspend mode
@ -764,6 +768,9 @@ class cMenuSetupSoft:public cMenuSetupPage
int PipAltVideoHeight; int PipAltVideoHeight;
#endif #endif
#ifdef USE_SCREENSAVER
int EnableDPMSatBlackScreen;
#endif
/// @} /// @}
private: private:
inline cOsdItem * CollapsedItem(const char *, int &, const char * = NULL); inline cOsdItem * CollapsedItem(const char *, int &, const char * = NULL);
@ -882,6 +889,11 @@ void cMenuSetupSoft::Create(void)
// //
Add(CollapsedItem(tr("Video"), Video)); Add(CollapsedItem(tr("Video"), Video));
if (Video) { if (Video) {
#ifdef USE_SCREENSAVER
Add(new
cMenuEditBoolItem(tr("Enable Screensaver(DPMS) at black screen"),
&EnableDPMSatBlackScreen, trVDR("no"), trVDR("yes")));
#endif
Add(new cMenuEditStraItem(trVDR("4:3 video display format"), Add(new cMenuEditStraItem(trVDR("4:3 video display format"),
&Video4to3DisplayFormat, 3, video_display_formats_4_3)); &Video4to3DisplayFormat, 3, video_display_formats_4_3));
Add(new cMenuEditStraItem(trVDR("16:9+other video display format"), Add(new cMenuEditStraItem(trVDR("16:9+other video display format"),
@ -1198,6 +1210,11 @@ cMenuSetupSoft::cMenuSetupSoft(void)
PipAltVideoWidth = ConfigPipAltVideoWidth; PipAltVideoWidth = ConfigPipAltVideoWidth;
PipAltVideoHeight = ConfigPipAltVideoHeight; PipAltVideoHeight = ConfigPipAltVideoHeight;
#endif #endif
#ifdef USE_SCREENSAVER
EnableDPMSatBlackScreen = ConfigEnableDPMSatBlackScreen;
#endif
Create(); Create();
} }
@ -1362,6 +1379,12 @@ void cMenuSetupSoft::Store(void)
SetupStore("pip.Alt.VideoHeight", ConfigPipAltVideoHeight = SetupStore("pip.Alt.VideoHeight", ConfigPipAltVideoHeight =
PipAltVideoHeight); PipAltVideoHeight);
#endif #endif
#ifdef USE_SCREENSAVER
SetupStore("EnableDPMSatBlackScreen", ConfigEnableDPMSatBlackScreen =
EnableDPMSatBlackScreen);
SetDPMSatBlackScreen(ConfigEnableDPMSatBlackScreen);
#endif
} }
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
@ -3241,6 +3264,15 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value)
return true; return true;
} }
#endif #endif
#ifdef USE_SCREENSAVER
if (!strcasecmp(name, "EnableDPMSatBlackScreen")) {
ConfigEnableDPMSatBlackScreen = atoi(value);
SetDPMSatBlackScreen(ConfigEnableDPMSatBlackScreen);
return true;
}
#endif
return false; return false;
} }

52
video.c
View File

@ -430,6 +430,11 @@ static int OsdDirtyHeight; ///< osd dirty area height
static int64_t VideoDeltaPTS; ///< FIXME: fix pts static int64_t VideoDeltaPTS; ///< FIXME: fix pts
#ifdef USE_SCREENSAVER
static char DPMSDisabled; ///< flag we have disabled dpms
static char EnableDPMSatBlackScreen; ///< flag we should enable dpms at black screen
#endif
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// Common Functions // Common Functions
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -438,6 +443,13 @@ static void VideoThreadLock(void); ///< lock video thread
static void VideoThreadUnlock(void); ///< unlock video thread static void VideoThreadUnlock(void); ///< unlock video thread
static void VideoThreadExit(void); ///< exit/kill video thread static void VideoThreadExit(void); ///< exit/kill video thread
#ifdef USE_SCREENSAVER
static void X11SuspendScreenSaver(xcb_connection_t *, int);
static int X11HaveDPMS(xcb_connection_t *);
static void X11DPMSReenable(xcb_connection_t *);
static void X11DPMSDisable(xcb_connection_t *);
#endif
/// ///
/// Update video pts. /// Update video pts.
/// ///
@ -4909,7 +4921,20 @@ static void VaapiDisplayFrame(void)
decoder->LastSurface = decoder->BlackSurface; decoder->LastSurface = decoder->BlackSurface;
#endif #endif
VaapiMessage(3, "video/vaapi: black surface displayed\n"); VaapiMessage(3, "video/vaapi: black surface displayed\n");
#ifdef USE_SCREENSAVER
if (EnableDPMSatBlackScreen && DPMSDisabled) {
Debug(3, "Black surface, DPMS enabled");
X11DPMSReenable(Connection);
X11SuspendScreenSaver(Connection, 1);
}
#endif
continue; continue;
#ifdef USE_SCREENSAVER
} else if (!DPMSDisabled) { // always disable
Debug(3, "DPMS disabled");
X11DPMSDisable(Connection);
X11SuspendScreenSaver(Connection, 0);
#endif
} }
surface = decoder->SurfacesRb[decoder->SurfaceRead]; surface = decoder->SurfacesRb[decoder->SurfaceRead];
@ -8605,8 +8630,21 @@ static void VdpauDisplayFrame(void)
|| decoder->Closing < -300) { || decoder->Closing < -300) {
VdpauBlackSurface(decoder); VdpauBlackSurface(decoder);
VdpauMessage(3, "video/vdpau: black surface displayed\n"); VdpauMessage(3, "video/vdpau: black surface displayed\n");
#ifdef USE_SCREENSAVER
if (EnableDPMSatBlackScreen && DPMSDisabled) {
VdpauMessage(3, "Black surface, DPMS enabled\n");
X11DPMSReenable(Connection);
X11SuspendScreenSaver(Connection, 1);
}
#endif
} }
continue; continue;
#ifdef USE_SCREENSAVER
} else if (!DPMSDisabled) { // always disable
VdpauMessage(3, "DPMS disabled\n");
X11DPMSDisable(Connection);
X11SuspendScreenSaver(Connection, 0);
#endif
} }
VdpauMixVideo(decoder, i); VdpauMixVideo(decoder, i);
@ -10572,8 +10610,6 @@ void VideoGetVideoSize(VideoHwDecoder * hw_decoder, int *width, int *height,
// DPMS / Screensaver // DPMS / Screensaver
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static char DPMSDisabled; ///< flag we have disabled dpms
/// ///
/// Suspend X11 screen saver. /// Suspend X11 screen saver.
/// ///
@ -10664,11 +10700,11 @@ static void X11DPMSDisable(xcb_connection_t * connection)
if (reply) { if (reply) {
if (reply->state) { if (reply->state) {
Debug(3, "video: dpms was enabled\n"); Debug(3, "video: dpms was enabled\n");
DPMSDisabled = 1;
xcb_dpms_disable(connection); // monitor powersave off xcb_dpms_disable(connection); // monitor powersave off
} }
free(reply); free(reply);
} }
DPMSDisabled = 1;
} }
} }
@ -11303,6 +11339,16 @@ void VideoSetAutoCrop(int interval, int delay, int tolerance)
#endif #endif
} }
///
/// Set EnableDPMSatBlackScreen
///
/// Currently this only choose the driver.
///
void SetDPMSatBlackScreen(int enable)
{
EnableDPMSatBlackScreen = enable;
}
/// ///
/// Raise video window. /// Raise video window.
/// ///

View File

@ -222,7 +222,10 @@ extern int VideoDecodeInput(VideoStream *);
/// Get number of input buffers. /// Get number of input buffers.
extern int VideoGetBuffers(const VideoStream *); extern int VideoGetBuffers(const VideoStream *);
/// Raise the frontend window /// Set DPMS at Blackscreen switch
extern int VideoRaiseWindow(); extern void SetDPMSatBlackScreen(int);
/// Raise the frontend window
extern int VideoRaiseWindow(void);
/// @} /// @}