Index: mpeg2decoder.c
===================================================================
RCS file: /cvsroot/softdevice/softdevice/mpeg2decoder.c,v
retrieving revision 1.71
diff -p -u -r1.71 mpeg2decoder.c
--- mpeg2decoder.c	28 Jan 2007 19:29:53 -0000	1.71
+++ mpeg2decoder.c	30 Jan 2007 16:35:23 -0000
@@ -1639,12 +1639,17 @@ int cMpeg2Decoder::BufferFill(int Stream
 int cMpeg2Decoder::Decode(const uchar *Data, int Length)
 {
   BUFDEB("Decode %p, Length %d\n",Data,Length);
+#if VDRVERSNUM >= 10501 || defined PATCH_SHUTDOWN_REWRITE
+  bool shouldSuspend = setupStore.doSuspend;
+#else
+  int shouldSuspend = setupStore.shouldSuspend;
+#endif
 
-  if (running && !IsSuspended && setupStore.shouldSuspend)
+  if (running && !IsSuspended && shouldSuspend)
      // still running and should suspend
      Suspend();
 
-  if (!running && IsSuspended && !setupStore.shouldSuspend)
+  if (!running && IsSuspended && !shouldSuspend)
      // not running and should resume
      Resume();
 
Index: setup-softdevice.c
===================================================================
RCS file: /cvsroot/softdevice/softdevice/setup-softdevice.c,v
retrieving revision 1.49
diff -p -u -r1.49 setup-softdevice.c
--- setup-softdevice.c	10 Feb 2007 00:02:14 -0000	1.49
+++ setup-softdevice.c	25 Feb 2007 19:51:31 -0000
@@ -96,6 +96,9 @@ cSetupStore::cSetupStore ()
   ppQuality   = 0;
   syncOnFrames  = 0;
   avOffset      = 0;
+#if VDRVERSNUM >= 10501 || defined PATCH_SHUTDOWN_REWRITE
+  doSuspend = false;
+#endif
   shouldSuspend = 0;
   ac3Mode       = 0;
   useMixer      = 0;
Index: setup-softdevice.h
===================================================================
RCS file: /cvsroot/softdevice/softdevice/setup-softdevice.h,v
retrieving revision 1.37
diff -p -u -r1.37 setup-softdevice.h
--- setup-softdevice.h	10 Feb 2007 00:02:14 -0000	1.37
+++ setup-softdevice.h	25 Feb 2007 19:51:31 -0000
@@ -157,6 +157,9 @@ class cSetupStore {
     int   tripleBuffering;
     int   useStretchBlit;
     bool  stretchBlitLocked;
+#if VDRVERSNUM >= 10501 || defined PATCH_SHUTDOWN_REWRITE
+    bool  doSuspend;
+#endif
     int   shouldSuspend;
     int   osdMode;
     int   ac3Mode;
Index: softdevice.c
===================================================================
RCS file: /cvsroot/softdevice/softdevice/softdevice.c,v
retrieving revision 1.78
diff -p -u -r1.78 softdevice.c
--- softdevice.c	9 Feb 2007 23:55:22 -0000	1.78
+++ softdevice.c	12 Feb 2007 20:04:42 -0000
@@ -15,6 +15,9 @@
 
 #include <vdr/osd.h>
 #include <vdr/dvbspu.h>
+#if VDRVERSNUM >= 10501 || defined PATCH_SHUTDOWN_REWRITE
+# include <vdr/shutdown.h>
+#endif
 
 #include <sys/mman.h>
 #include <sys/ioctl.h>
@@ -506,6 +509,12 @@ bool cSoftDevice::Flush(int TimeoutMs)
   return  decoder->BufferFill() == 0;
 };
 
+#if VDRVERSNUM >= 10501 || defined PATCH_SHUTDOWN_REWRITE
+# define SHOULD_SUSPEND setupStore.doSuspend
+#else
+# define SHOULD_SUSPEND setupStore.shouldSuspend
+#endif
+
 #if VDRVERSNUM < 10318
 /* ----------------------------------------------------------------------------
  */
@@ -526,7 +535,7 @@ int cSoftDevice::PlayAudio(const uchar *
 {
   SOFTDEB("PlayAudio... %p length %d\n",Data,Length);
 #if VDRVERSNUM >= 10342
-  if (setupStore.shouldSuspend && !Transferring()) {
+  if (SHOULD_SUSPEND && !Transferring()) {
     usleep(10000); // avoid burning CPU
     return 0;
   }
@@ -587,7 +596,7 @@ int cSoftDevice::PlayVideo(const uchar *
 {
   SOFTDEB("PlayVideo %x length %d\n",Data,Length);
 #if VDRVERSNUM >= 10342
-  if (setupStore.shouldSuspend && !Transferring()) {
+  if (SHOULD_SUSPEND && !Transferring()) {
     usleep(10000); // avoid burning CPU
     return 0;
   }
@@ -1150,5 +1159,13 @@ bool cPluginSoftDevice::SetupParse(const
   // Parse your own setup parameters and store their values.
   return setupStore.SetupParse(Name, Value);
 }
+
+#if VDRVERSNUM >= 10501 || defined PATCH_SHUTDOWN_REWRITE
+void cPluginSoftDevice::MainThreadHook(void)
+{
+  setupStore.doSuspend =
+    setupStore.shouldSuspend || ShutdownHandler.IsUserInactive();
+}
+#endif
 
 VDRPLUGINCREATOR(cPluginSoftDevice); // Don't touch this!
Index: softdevice.h
===================================================================
RCS file: /cvsroot/softdevice/softdevice/softdevice.h,v
retrieving revision 1.13
diff -p -u -r1.13 softdevice.h
--- softdevice.h	11 Nov 2006 08:45:17 -0000	1.13
+++ softdevice.h	30 Jan 2007 16:35:24 -0000
@@ -58,6 +58,9 @@ public:
   virtual cOsdObject *MainMenuAction(void);
   virtual cMenuSetupPage *SetupMenu(void);
   virtual bool SetupParse(const char *Name, const char *Value);
+#if VDRVERSNUM >= 10501 || defined PATCH_SHUTDOWN_REWRITE
+  virtual void MainThreadHook(void);
+#endif
 #if VDRVERSNUM >= 10330
   virtual bool Service(const char *Id, void *Data = NULL);
 #endif

