Changes in signaloff/on and doreboot, enhance hardware deinitialisation
authorMarten Richter <marten.richter@freenet.de>
Sun, 28 Oct 2012 09:58:17 +0000 (10:58 +0100)
committerMarten Richter <marten.richter@freenet.de>
Sun, 28 Oct 2012 09:58:17 +0000 (10:58 +0100)
command.cc
osd.h
osdopenvg.cc
osdopenvg.h
videoomx.cc
videoomx.h

index 77b9d7485c76d1ddb291b70a00289cc5c3fa6bed..cbdd0a8d1ed558017566fe5f3580085fca980a97 100644 (file)
@@ -35,6 +35,7 @@
 #include "led.h"\r
 #include "video.h"\r
 #include "audio.h"\r
+#include "mtd.h"\r
 #include "vdr.h"\r
 #include "vvolume.h"\r
 #include "vserverselect.h"\r
@@ -611,7 +612,17 @@ void Command::doReboot()
   logger->log("Command", Log::NOTICE, "Reboot");\r
 #ifndef WIN32\r
 #ifndef VOMP_HAS_EXIT\r
+  // some plattforms, want a proper deinitialisation of their hardware before reboot\r
+  Osd::getInstance()->shutdown();\r
+  Audio::getInstance()->shutdown();\r
+  Video::getInstance()->shutdown();\r
+  Remote::getInstance()->shutdown();\r
+\r
   reboot(LINUX_REBOOT_CMD_RESTART);\r
+  // if  reboot is not allowed -> stop\r
+  stop();\r
+\r
+\r
 #else\r
   stop();\r
 \r
diff --git a/osd.h b/osd.h
index 5f339fcbfbbaee423c7371c1f405687246cd9de6..cf3a8717dd675a8e60a729934b397b157388ba40 100644 (file)
--- a/osd.h
+++ b/osd.h
@@ -35,6 +35,7 @@ class Osd
     virtual int init(void* device)=0;\r
     virtual int shutdown()=0;\r
     virtual int restore(){return 1;};\r
+    virtual int stopUpdate() {return 1;};\r
 \r
     virtual Surface * createNewSurface()=0; // For Boxx\r
     virtual int charSet() {return 1;};\r
index 809227f2e982f969a06560af78253705ec8e01dc..709fa360f2edd1935fe255bfba5003c98c41d827 100644 (file)
@@ -230,9 +230,9 @@ int OsdOpenVG::init(void* device)
   initted = 1; // must set this here or create surface won't work\r
 \r
 \r
-  if (((VideoOMX*)Video::getInstance())->initUsingOSDObjects()!=1) { //call Video for init  stuff\r
+  /*if (((VideoOMX*)Video::getInstance())->initUsingOSDObjects()!=1) { //call Video for init  stuff\r
          return 0;\r
-  }\r
+  }*/\r
   InitializeMagick("");\r
 \r
   pthread_cond_init(&vgtaskCond, NULL);\r
@@ -293,6 +293,13 @@ void OsdOpenVG::destroyPaths()
 \r
 }\r
 \r
+int OsdOpenVG::stopUpdate()\r
+{\r
+       threadStop();\r
+       processTasks();\r
+       return 1;\r
+}\r
+\r
 \r
 int OsdOpenVG::shutdown()\r
 {\r
@@ -307,7 +314,7 @@ int OsdOpenVG::shutdown()
 \r
   taskmutex.Lock();\r
   vgmutex.Lock();\r
-  (((VideoOMX*)Video::getInstance())->shutdownUsingOSDObjects());\r
+  //(((VideoOMX*)Video::getInstance())->shutdownUsingOSDObjects());\r
 \r
   FT_Done_Face(ft_face);\r
   vgDestroyFont(vgfont);\r
index 67357cd21def1e3ab8c00cdb0f80f41488c95add..97b19a475fe68c67144c5532b3bce18f5be91450 100644 (file)
@@ -76,6 +76,7 @@ class OsdOpenVG : public OsdVector, public Thread_TYPE
 \r
     int init(void* device);\r
     int shutdown();\r
+    int stopUpdate();\r
 \r
 \r
 \r
index b0452c10e1de46b4eba8a4904282bdfa0676d061..b582c15761ad4719008a6feb8cfa021d6b6b0b69 100644 (file)
@@ -26,6 +26,7 @@
 #include "woptionpane.h"
 #include "osdopenvg.h"
 #include "boxstack.h"
+#include "remote.h"
 
 #include <linux/fb.h>
 
@@ -83,6 +84,14 @@ int VideoOMX::init(UCHAR tformat)
   setTVsize(ASPECT4X3);
   selectVideoMode(0);
 
+  OMX_ERRORTYPE error;
+       error = OMX_Init();
+       if (error != OMX_ErrorNone) {
+               Log::getInstance()->log("Video", Log::DEBUG, "Init OMX failed %x",
+                               error);
+               return 0;
+       }
+
 
 
 
@@ -94,19 +103,7 @@ int VideoOMX::init(UCHAR tformat)
   return 1;
 }
 
-int VideoOMX::initUsingOSDObjects()
-{
-
-// we are called before the audio
-       OMX_ERRORTYPE error;
-       error=OMX_Init();
-       if (error!=OMX_ErrorNone) {
-               Log::getInstance()->log("Video", Log::DEBUG, "Init OMX failed %x", error);
-               return 0;
-       }
 
-       return 1;
-}
 
 
 OMX_ERRORTYPE VideoOMX::EventHandler_OMX(OMX_IN OMX_HANDLETYPE handle,OMX_IN OMX_PTR appdata,
@@ -541,6 +538,7 @@ int VideoOMX::signalOff()
        //TODO reinit osd
        Log::getInstance()->log("Video", Log::NOTICE, "signalOff");
        vc_tv_power_off();
+       Osd::getInstance()->stopUpdate(); // turn off drawing thread
        signalon=false;
     return 1;
 }
@@ -548,8 +546,11 @@ int VideoOMX::signalOff()
 int VideoOMX::signalOn()
 {
   if (!signalon)  {
+         Log::getInstance()->log("Video", Log::NOTICE, "signalOn");
          Osd::getInstance()->shutdown();
+         Remote::getInstance()->shutdown();
          selectVideoMode(0);
+         Remote::getInstance()->init("");
          Osd::getInstance()->restore();
          Osd::getInstance()->init((void*)"");
          BoxStack::getInstance()->redrawAllBoxes();
index 6feee0dcf9479982d32f9761a7cc2de7517ac68a..fe931d83d799c56519832d0def3cb995534c744d 100644 (file)
@@ -126,8 +126,7 @@ class VideoOMX : public Video
     int test2();\r
 #endif\r
 \r
-    int initUsingOSDObjects();\r
-    int shutdownUsingOSDObjects() {return shutdown();};\r
+\r
 \r
     static inline OMX_TICKS intToOMXTicks(long long pts) {\r
        OMX_TICKS temp;\r