]> git.vomp.tv Git - vompclient.git/commitdiff
OsdVector sends messages to itself now rather than through Control
authorChris Tallon <chris@vomp.tv>
Mon, 27 Sep 2021 14:48:36 +0000 (15:48 +0100)
committerChris Tallon <chris@vomp.tv>
Mon, 27 Sep 2021 14:48:36 +0000 (15:48 +0100)
control.cc
osdopenvg.cc
osdvector.cc
osdvector.h
osdwinvector.cc

index c5ea16466dc69136e1d83a98cbe754ed62b5a7bb..5e9ce2fe0915456dbd2f900ef1f1a16878d0b720 100644 (file)
@@ -484,22 +484,6 @@ void Control::dispatchMessage(Message* m)
 
         break;
       }
-      case Message::NEW_PICTURE:
-      {
-        // FIXME MQSUB
-
-        //Log::getInstance()->log("Control", Log::DEBUG, "TVMedia NEW_PICTURE");
-        OsdVector* osdv = dynamic_cast<OsdVector*>(Osd::getInstance());
-        if (osdv) osdv->informPicture(m->tag, reinterpret_cast<ImageIndex>(m->data));
-        break;
-      }
-      case Message::NEW_PICTURE_STATIC:
-      {
-        //Log::getInstance()->log("Control", Log::DEBUG, "TVMedia NEW_PICTURE %x %x",m->tag,m->parameter);
-        OsdVector* osdv = dynamic_cast<OsdVector*>(Osd::getInstance());
-        if (osdv) osdv->informPicture(static_cast<unsigned long long>(m->tag) << 32LL, reinterpret_cast<ImageIndex>(m->data));
-        break;
-      }
     }
   }
   else if (m->p_to == Message::BOXSTACK)
index a53df8395990709ce9113bf4ea86ae39192a2536..8717d4e69020f86a372c393d22cfecda28e0dec6 100644 (file)
@@ -26,7 +26,6 @@
 #include "log.h"
 #include "videoomx.h"
 #include "surface.h"
-#include "message.h"
 #include "messagequeue.h"
 #include "teletxt/txtfont.h"
 
@@ -1450,7 +1449,7 @@ unsigned int OsdOpenVG::handleOpenVGCommand(OpenVGCommand& command)
       Message* m = new  Message();
       // We have a pictures! send a message to ourself, to switch to gui thread    // FIXME MQSUB
       m->from = this;
-      m->p_to = Message::CONTROL;
+      m->to = this;
       m->data = reinterpret_cast<void*>(handle);
 
       if (!static_image)
@@ -1463,7 +1462,6 @@ unsigned int OsdOpenVG::handleOpenVGCommand(OpenVGCommand& command)
         m->message = Message::NEW_PICTURE_STATIC;
         m->tag = info->lindex >> 32LL;
       }
-
       MessageQueue::getInstance()->postMessage(m); // inform control about new picture
 
       delete info;
@@ -1495,7 +1493,7 @@ unsigned int OsdOpenVG::handleOpenVGCommand(OpenVGCommand& command)
 
       Message* m = new  Message();
       m->from = this;
-      m->p_to = Message::CONTROL;
+      m->to = this;
       m->data = reinterpret_cast<void*>(info->handle);
 
       if (!static_image)
@@ -1508,7 +1506,6 @@ unsigned int OsdOpenVG::handleOpenVGCommand(OpenVGCommand& command)
         m->message = Message::NEW_PICTURE_STATIC;
         m->tag = info->lindex >> 32LL;
       }
-
       MessageQueue::getInstance()->postMessage(m); // inform command about new picture
 
       delete info;
index cd86d35bb9eb1685512d7a22d526404ce7d64d8d..57621a70e13dde187f0aa634ed80a011d845539d 100644 (file)
@@ -120,6 +120,12 @@ OsdVector::OsdVector()
 #ifdef PICTURE_DECODER_MAGICK
   reader.addDecoder(new MagickDecoder(&reader));
 #endif
+  MessageQueue::getInstance()->addReceiver(this);
+}
+
+OsdVector::~OsdVector()
+{
+  MessageQueue::getInstance()->removeReceiver(this);
 }
 
 bool OsdVector::screenShot(const char* fileName)
@@ -812,6 +818,25 @@ void OsdVector::informPicture(LoadIndex index, ImageIndex imageIndex)
   surfaces_mutex.unlock();
 }
 
+void OsdVector::processMessage(Message* m)
+{
+  switch(m->message)
+  {
+    case Message::NEW_PICTURE:
+    {
+      //LogNT::getInstance()->debug(TAG, "TVMedia NEW_PICTURE");
+      informPicture(m->tag, reinterpret_cast<ImageIndex>(m->data));
+      break;
+    }
+    case Message::NEW_PICTURE_STATIC:
+    {
+      //LogNT::getInstance()->debug(TAG, "TVMedia NEW_PICTURE {:#x} {:#x}", m->tag, m->parameter);
+      informPicture(static_cast<unsigned long long>(m->tag) << 32LL, reinterpret_cast<ImageIndex>(m->data));
+      break;
+    }
+  }
+}
+
 /*
 ImageIndex OsdVector::getJpegRef(const char* fileName, int *width,int *height)
 {
index 34b62239bae43871f389801bab118a214459b5df..d9aa510408793022774fdd9e2ba1134aca40860a 100644 (file)
@@ -29,6 +29,7 @@
 #include <mutex>
 
 #include "defines.h"
+#include "messagequeue.h"
 #include "threadsystem.h"
 #include "osd.h"
 #include "colour.h"
@@ -207,10 +208,11 @@ struct SurfaceInfo
   float x, y, w, h;
 };
 
-class OsdVector : public Osd
+class OsdVector : public Osd, public MessageReceiver
 {
   public:
     OsdVector();
+    virtual ~OsdVector();
 
     int restore();
 
@@ -247,6 +249,7 @@ class OsdVector : public Osd
 
     // should be only called from control thread
     void informPicture(LoadIndex index, ImageIndex i_index);
+    void processMessage(Message* m);
 
 
     int charSet() {return 2;}; //UTF-8
index 1f60b9e4e3ee828bd8b9343c25fbe13368a5d554..46b166b05be3db0e7ccb11a1ad03e27f8ef61b2d 100644 (file)
@@ -1237,10 +1237,10 @@ void  OsdWinVector::createPicture(struct PictureInfo& pict_inf)
                bool static_image = true;
                if (pict_inf.lindex & 0xffffffff) static_image = false;
 
-               Message* m = new  Message();
+               Message* m = new Message();
                // We have a pictures! send a message to ourself, to switch to gui thread
                m->from = this;
-               m->p_to = Message::CONTROL;
+               m->to = this;
                m->data = pict_inf.reference;
                if (!static_image) {
                        m->message = Message::NEW_PICTURE;