]> git.vomp.tv Git - vompclient-marten.git/commitdiff
Windows AC3, live tv banner icon w/s
authorChris Tallon <chris@vomp.tv>
Wed, 23 Apr 2008 23:26:46 +0000 (23:26 +0000)
committerChris Tallon <chris@vomp.tv>
Wed, 23 Apr 2008 23:26:46 +0000 (23:26 +0000)
27 files changed:
channel.cc
channel.h
command.cc
demuxer.cc
demuxer.h
demuxeraudio.cc
demuxeraudio.h
demuxerts.cc
demuxerts.h
player.cc
player.h
playerlive.h
playerliveradio.cc
playerliveradio.h
playerlivetv.cc
playerlivetv.h
playerradio.cc
threadwin.h
vaudioselector.cc
vdr.cc
videowin.cc
vvideolive.cc
vvideolivetv.cc
vvideolivetv.h
vvideorec.cc
wsymbol.cc
wsymbol.h

index 9e98ef075606b37d21252e3042f7b7c95998d3d0..d4367b5c678da4865c5aa4251488d347b383974f 100644 (file)
@@ -31,7 +31,11 @@ Channel::Channel()
 
   index = -1;
   vpid = 0;
+  tpid = 0;
   numAPids = 0;
+  numDPids = 0;
+  numSPids = 0;
+
 }
 
 Channel::~Channel()
@@ -40,6 +44,8 @@ Channel::~Channel()
   index = -1; // just in case
 
   for(ULONG i = 0; i < numAPids; i++) delete[] apids[i].name;
+  for(ULONG i = 0; i < numDPids; i++) delete[] dpids[i].name;
+  for(ULONG i = 0; i < numSPids; i++) delete[] spids[i].name;
 }
 
 void Channel::loadPids()
@@ -49,15 +55,31 @@ void Channel::loadPids()
   {
     for(ULONG i = 0; i < numAPids; i++) delete[] apids[i].name;
     apids.clear();
+    for(ULONG i = 0; i < numDPids; i++) delete[] dpids[i].name;
+    dpids.clear();
+    for(ULONG i = 0; i < numSPids; i++) delete[] spids[i].name;
+    spids.clear();
     vpid = 0;
+    tpid = 0;
     numAPids = 0;
+    numDPids = 0;
+    numSPids = 0;
   }
 
   VDR::getInstance()->getChannelPids(this); // FIXME sort out this system
 
-  Log::getInstance()->log("Channel", Log::DEBUG, "C.%lu loaded, VPid=%lu, numApids=%lu", number, vpid, numAPids);
+  Log::getInstance()->log("Channel", Log::DEBUG, "C.%lu loaded, VPid=%lu, numApids=%lu, numDpids=%lu, numSpids=%lu TPid=%lu",
+      number, vpid, numAPids, numDPids, numSPids, tpid);
   for (ULONG i = 0; i < numAPids; i++)
   {
     Log::getInstance()->log("Channel", Log::DEBUG, "APid %lu %s", apids[i].pid, apids[i].name);
   }
+  for (ULONG i = 0; i < numDPids; i++)
+  {
+    Log::getInstance()->log("Channel", Log::DEBUG, "DPid %lu %s", dpids[i].pid, dpids[i].name);
+  }
+  for (ULONG i = 0; i < numSPids; i++)
+  {
+    Log::getInstance()->log("Channel", Log::DEBUG, "SPid %lu %s", spids[i].pid, spids[i].name);
+  }
 }
index d830bb269046d8c9cb01682b77c94ae340c88d7f..a8134704c2cc88b4196baa8ee7d37e76b5887563 100644 (file)
--- a/channel.h
+++ b/channel.h
@@ -54,6 +54,11 @@ class Channel
     ULONG vpid;
     ULONG numAPids;
     APidList apids;
+    ULONG numDPids;
+    APidList dpids;
+    ULONG numSPids;
+    APidList spids;
+    ULONG tpid;
 };
 
 #endif
index e034e54f854358fe73e878f0e0233b247c9764b2..6710e944b6fb84c0063a72d619b96af4f7f1fa6a 100644 (file)
@@ -886,14 +886,16 @@ void Command::doJustConnected(VConnect* vconnect)
     boxstack->update(vw);
 
     // Enter pre-keys here
-//    handleCommand(Remote::THREE);
+//    handleCommand(Remote::OK);
+//    handleCommand(Remote::ONE);
+//    handleCommand(Remote::ZERO);
+//    handleCommand(Remote::OK);
 //    handleCommand(Remote::UP);
 //    handleCommand(Remote::PLAY);
 //    handleCommand(Remote::DOWN);
 //    handleCommand(Remote::DOWN);
 //    handleCommand(Remote::DOWN);
 //    handleCommand(Remote::OK);
-//    handleCommand(Remote::OK);
 //    handleCommand(Remote::RED);
   }
 }
index 799ec702398e3935ffb9ccc59dc81e55022b0d9f..cdf9cacfcab75d15b0430e74a7c2a54c89cd315e 100644 (file)
@@ -42,19 +42,20 @@ PESPacket::PESPacket()
   init(0);
 }
 
-void PESPacket::init(UCHAR type)
+void PESPacket::init(UCHAR type, UCHAR sub)
 {
-  length = 0; size = 6;
+  length = 0; 
+  size = 6;
   data[3] = type;
   data[4] = data[5] = 0;
   packetType = type;
-  substream = 0;
+  substream = sub;
   seq_header = 1; // Unknown seq_header status
 }
 
 void PESPacket::truncate()
 {
-  init(packetType);
+  init(packetType,substream);
 }
 
 int PESPacket::write(UCHAR *buf, int len)
@@ -341,7 +342,7 @@ void Demuxer::parsePacketDetails(PESPacket& packet)
     unsigned char substream_id = packet[payload_begin];
     unsigned char substream_type = substream_id & 0xF0;
     unsigned char substream_index = substream_id & 0x1F;
-pre_1_3_19_Recording: //This is for old recordings stuff
+pre_1_3_19_Recording: //This is for old recordings stuff and live TV
     if (ispre_1_3_19)
     {
       substream_id = PESTYPE_PRIVATE_1;
@@ -380,7 +381,7 @@ pre_1_3_19_Recording: //This is for old recordings stuff
       default:
         if (!ispre_1_3_19)
         {
-          ispre_1_3_19=true; //switching to compat mode
+          ispre_1_3_19=true; //switching to compat mode and live tv mode
           goto pre_1_3_19_Recording;
         }
         else
index 14aa6ce6ed44257e59d6ca09066c459f615889c8..cda9853e372961ce35103fc43a0fd8777c08ec4a 100644 (file)
--- a/demuxer.h
+++ b/demuxer.h
@@ -40,7 +40,7 @@ class PESPacket
 {
   public:
     PESPacket();
-    void init(UCHAR type);
+    void init(UCHAR type, UCHAR sub=0);
     void truncate();
     int  write(UCHAR* buf, int len);
 
index 545a0192ec557f18d2296788c48a081552f074b9..f3d8bae4de27e79bd33f7869338b4bc3814aece7 100644 (file)
@@ -164,7 +164,7 @@ void DemuxerAudio::setVID(int p_vID)
 {
 }
 
-void DemuxerAudio::setAID(int p_aID)
+void DemuxerAudio::setAID(int p_aID,int type)
 {
 }
 
index 8e106b85229f64a7e581e685cb756b6fe84750fb..6a3f985301552e38873f67b9db932257feb078bd 100644 (file)
@@ -53,7 +53,7 @@ class DemuxerAudio : public Demuxer
     virtual int scan(UCHAR* buf, int len);
     virtual int findPTS(UCHAR* buf, int len, ULLONG* dest);
     virtual void setVID(int p_vID);
-    virtual void setAID(int p_aID);
+    virtual void setAID(int p_aID,int type);
     virtual int put(UCHAR* buf, int len);
 
                //special functions for the audioplayer
index eb8431c74691b17c3b13c95332f1ed8106cd7349..2b1acd2971f98c23c415526c2fb9eec87a2501c9 100644 (file)
@@ -25,6 +25,7 @@ DemuxerTS::DemuxerTS(int p_vID, int p_aID)
 {
   vID = p_vID;
   aID = p_aID;
+  atype = 0;
 }
 
 void DemuxerTS::flush()
@@ -33,14 +34,27 @@ void DemuxerTS::flush()
   parsed = false;
   Demuxer::flush();
   vPacket.init(PESTYPE_VID0);
-  aPacket.init(PESTYPE_AUD0);
+  switch (atype) {
+  case 1:
+  aPacket.init(PESTYPE_PRIVATE_1,PESTYPE_SUBSTREAM_AC30);break;
+  default:
+  case 0:
+  aPacket.init(PESTYPE_AUD0);break;
+  };
   vActive = false;
   aActive = false;
 }
 
 int DemuxerTS::scan(UCHAR *buf, int len)
 {
+  switch (atype) {
+  case 1:
+  return PESTYPE_PRIVATE_1;
+  default:
+  case 0:
   return PESTYPE_AUD0;
+  };
+  
 }
 
 void DemuxerTS::setVID(int p_vID)
@@ -50,10 +64,20 @@ void DemuxerTS::setVID(int p_vID)
   vActive = false;
 }
 
-void DemuxerTS::setAID(int p_aID)
+void DemuxerTS::setAID(int p_aID, int type)
 {
   aID = p_aID;
+  atype = type;
+  switch (atype) {
+  case 1:
+  aPacket.init(PESTYPE_PRIVATE_1,PESTYPE_SUBSTREAM_AC30);
+  setAudioStream(PESTYPE_SUBSTREAM_AC30);break;
+  default:
+  case 0:
   aPacket.init(PESTYPE_AUD0);
+  setAudioStream(PESTYPE_AUD0);
+  break;
+  };
   aActive = false;
 }
 
@@ -222,7 +246,13 @@ int DemuxerTS::processTS(UCHAR* buf)
     }
     if (pid == aID)
     {
-      aPacket.init(PESTYPE_AUD0);
+      switch (atype) {
+      case 1:
+          aPacket.init(PESTYPE_PRIVATE_1,PESTYPE_SUBSTREAM_AC30);break;
+      default:
+      case 0:
+      aPacket.init(PESTYPE_AUD0);break;
+      };
       buf += 6; datalen -= 6;
     }
   }
index ea68e0d1bcecf5c184cb12af0de32218dc4ab043..e58ef7b3d18013a1163e3c89233ea13de531c795 100644 (file)
@@ -35,7 +35,7 @@ class DemuxerTS : public Demuxer
     int scan(UCHAR* buf, int len);
     int findPTS(UCHAR* buf, int len, ULLONG* dest);
     void setVID(int p_vID);
-    void setAID(int p_aID);
+    void setAID(int p_aID, int type);
     int  getVID() { return vID; }
     int  getAID() { return aID; }
     int put(UCHAR* buf, int len);
@@ -49,6 +49,7 @@ class DemuxerTS : public Demuxer
     PESPacket vPacket; // Video PES packet under construction
     PESPacket aPacket; // Audio PES packet under construction
     int vID, aID;      // TS IDs for video/audio
+    int atype;
     bool vActive, aActive; // Whether video/audio is actively being captured
 };
 
index 9c846104c7b6e34e2c4fdf1d066e934e496028d4..3937d203c4c856faa3d4698733e63c02d10f5f4b 100644 (file)
--- a/player.cc
+++ b/player.cc
@@ -173,12 +173,12 @@ int Player::getCurrentAudioChannel()
     return ((DemuxerTS*)demuxer)->getAID();
 }
 
-void Player::setAudioChannel(int newChannel)
+void Player::setAudioChannel(int newChannel, int type)
 {
   if (isRecording)
     demuxer->setAudioChannel(newChannel);
   else
-    ((DemuxerTS*)demuxer)->setAID(newChannel);
+    ((DemuxerTS*)demuxer)->setAID(newChannel,type);
 }
 
 // ----------------------------------- Externally called events
@@ -188,7 +188,7 @@ void Player::play(ULONG Vpid, ULONG Apid)
   // TS mode
   DemuxerTS* dts = (DemuxerTS*)demuxer;
   dts->setVID(Vpid);
-  dts->setAID(Apid);
+  dts->setAID(Apid,0);
   play();
 }
 
index 0d1ddcc3c7c6bce7e3af5ed05e2551009903b353..b2e88445c6bec1fdf42736232e91c9d138ddfed8 100644 (file)
--- a/player.h
+++ b/player.h
@@ -57,7 +57,7 @@ class Player : public Thread_TYPE, public Callback
     void setStartFrame(ULONG frameNum);
     void setLengthBytes(ULLONG length);
     void setLengthFrames(ULONG length);
-    void setAudioChannel(int newChannel);
+    void setAudioChannel(int newChannel, int type);
 
     void play();                         // Recording
     void play(ULONG vpid, ULONG apid);   // Live TV
index 4321c77dfc41dda9170a4f33b2a3135213ebc485..88beca299e2a8f8453af0adf910deb94def2868d 100644 (file)
@@ -46,7 +46,7 @@ class PlayerLive
     virtual void go(ULONG index)=0;
     virtual void setChannel(ULONG index)=0;
     virtual void stop()=0;
-    virtual void setAudioChannel(int newChannel)=0;
+    virtual void setAudioChannel(int newChannel,int type)=0;
 
     virtual bool* getDemuxerMpegAudioChannels()=0;
     virtual bool* getDemuxerAc3AudioChannels()=0;
index f4846a7e7fc244b87fe47b92412e38bc52fad9a3..cafd5392b91f7970d0847819e06dc72cebe72388 100644 (file)
@@ -103,9 +103,9 @@ int PlayerLiveRadio::getCurrentAudioChannel()
   return demuxer->getAID();
 }
 
-void PlayerLiveRadio::setAudioChannel(int newChannel)
+void PlayerLiveRadio::setAudioChannel(int newChannel, int type)
 {
-  return demuxer->setAID(newChannel);
+  return demuxer->setAID(newChannel, type);
 }
 
 // ----------------------------------- Externally called events
@@ -357,7 +357,7 @@ void PlayerLiveRadio::threadMethod()
 
         if (chan->numAPids > 0) 
         {
-          demuxer->setAID(chan->apids[0].pid);
+          demuxer->setAID(chan->apids[0].pid,0);
           logger->log("PlayerLiveRadio", Log::DEBUG, "Demuxer pids: %u %u", chan->vpid, chan->apids[0].pid);
         }
         else 
index 794d502e2e4cdd937164149f2358f26ac5851652..97e29fbf21e9350279ed18373d187833351653ba 100644 (file)
@@ -60,7 +60,7 @@ class PlayerLiveRadio : public PlayerLive, public Thread_TYPE, public Callback,
     virtual void go(ULONG index);
     virtual void setChannel(ULONG index);
     virtual void stop();
-    virtual void setAudioChannel(int newChannel);
+    virtual void setAudioChannel(int newChannel, int type);
 
     virtual bool* getDemuxerMpegAudioChannels();
     virtual bool* getDemuxerAc3AudioChannels();
index 2ac7f4b870c03db60c2c1b9c8f4184173bd5382d..9e83595cf7d0d38f8148c7f34acb0b06349ef01e 100644 (file)
@@ -109,9 +109,9 @@ int PlayerLiveTV::getCurrentAudioChannel()
   return demuxer->getAID();
 }
 
-void PlayerLiveTV::setAudioChannel(int newChannel)
+void PlayerLiveTV::setAudioChannel(int newChannel, int type)
 {
-  return demuxer->setAID(newChannel);
+  return demuxer->setAID(newChannel,type);
 }
 
 // ----------------------------------- Externally called events
@@ -524,7 +524,7 @@ void PlayerLiveTV::threadMethod()
         demuxer->setVID(chan->vpid);
         if (chan->numAPids > 0) 
         {
-          demuxer->setAID(chan->apids[0].pid);
+          demuxer->setAID(chan->apids[0].pid,0);
           logger->log("PlayerLiveTV", Log::DEBUG, "Demuxer pids: %u %u", chan->vpid, chan->apids[0].pid);
         }
         else 
@@ -551,8 +551,19 @@ void PlayerLiveTV::threadMethod()
       chunkToDemuxer();
 
       if (state == S_PREBUFFERING)
-      {        
-        if (++preBufferCount == preBufferAmount)
+      {
+        ++preBufferCount;
+        ULONG percentDone = (ULONG)(preBufferCount / (float)preBufferAmount * 100);
+        
+        Message* m = new Message();
+        m->from = this;
+        m->to = messageReceiver;
+        m->message = Message::PLAYER_EVENT;
+        m->parameter = PlayerLiveTV::PREBUFFERING;
+        m->tag = percentDone;
+        messageQueue->postMessageFromOuterSpace(m);
+
+        if (preBufferCount == preBufferAmount)
         {
           switchState(S_PLAY);
         }
index a1321a854d729b558a237bb3acd979c41f45a89b..c06a55b8fdce1def2b7f6152975a98bf6b6230db 100644 (file)
@@ -62,7 +62,7 @@ class PlayerLiveTV : public PlayerLive, public Thread_TYPE, public Callback, pub
     virtual void go(ULONG index);
     virtual void setChannel(ULONG index);
     virtual void stop();
-    virtual void setAudioChannel(int newChannel);
+    virtual void setAudioChannel(int newChannel,int type);
 
     virtual bool* getDemuxerMpegAudioChannels();
     virtual bool* getDemuxerAc3AudioChannels();
@@ -81,6 +81,7 @@ class PlayerLiveTV : public PlayerLive, public Thread_TYPE, public Callback, pub
     const static UCHAR STREAM_END = 3;
     const static UCHAR ASPECT43 = 4;
     const static UCHAR ASPECT169 = 5;
+    const static UCHAR PREBUFFERING = 6;
 
   protected:
     void threadMethod();
index c86771a0f73c7bf8d64b143856cd1ad99b2e2eff..783276b7139c8e768b112b5a301819f6fc2dbd0e 100644 (file)
@@ -207,7 +207,7 @@ void PlayerRadio::play(ULONG Apid)
 {
   // TS mode
   DemuxerTS* dts = (DemuxerTS*)demuxer;
-  dts->setAID(Apid);
+  dts->setAID(Apid,0/*Radio is always mpeg?*/);
   play();
 }
 
index 4fb48f809f1e3ab2527eadf7d96141962fd18d51..9a87fec65594657870b75c5515bdc612196456a0 100644 (file)
@@ -38,10 +38,10 @@ class ThreadWin : public Thread
 {
   protected:
     // Override this method in derived classes
+       
     virtual void threadMethod()=0;
     virtual void threadPostStopCleanup()=0;
-
-    ThreadWin();
+         ThreadWin();
      ~ThreadWin();
 
     // Methods to use from outside the thread
@@ -76,3 +76,4 @@ class ThreadWin : public Thread
 };
 
 #endif
+
index a12397b89300dd4eb51c3c928ecc713a0d9fe1a1..857d10a8d7203772cf23a00bbcc1058f86f6aefd 100644 (file)
@@ -23,6 +23,7 @@
 #include "remote.h"
 #include "colour.h"
 #include "video.h"
+#include "audio.h"
 #include "boxstack.h"
 #include "i18n.h"
 #include "message.h"
@@ -213,6 +214,17 @@ VAudioSelector::VAudioSelector(void* tparent, Channel* channel, int currentAudio
     ac->pestype = channel->apids[i].pid;
     acl.push_back(ac);
   }
+  if (Audio::getInstance()->supportsAc3()) {
+      for (UINT i = 0; i < channel->numDPids; i++)
+      {
+          AudioChannel* ac = new AudioChannel();
+          ac->type = 1;
+          ac->name = new char[strlen(channel->dpids[i].name) + 1];
+          strcpy(ac->name, channel->dpids[i].name);
+          ac->pestype = channel->dpids[i].pid;
+          acl.push_back(ac);
+      }
+  }
     
   int audioChannelListSize = acl.size();
 
@@ -283,7 +295,7 @@ int VAudioSelector::handleCommand(int command)
       m->from = this;
       m->to = parent;
       m->message = Message::AUDIO_CHANGE_CHANNEL;
-      m->parameter = ((AudioChannel*)sl.getCurrentOptionData())->pestype;
+      m->parameter = (((AudioChannel*)sl.getCurrentOptionData())->pestype &0xFFFF)|(((AudioChannel*)sl.getCurrentOptionData())->type &0xFF)<<16 ;
       Command::getInstance()->postMessageNoLock(m);
 
       return 2;
@@ -300,7 +312,7 @@ int VAudioSelector::handleCommand(int command)
       m->from = this;
       m->to = parent;
       m->message = Message::AUDIO_CHANGE_CHANNEL;
-      m->parameter = ((AudioChannel*)sl.getCurrentOptionData())->pestype;
+      m->parameter = (((AudioChannel*)sl.getCurrentOptionData())->pestype &0xFFFF)|(((AudioChannel*)sl.getCurrentOptionData())->type &0xFF)<<16 ;
       Command::getInstance()->postMessageNoLock(m);
 
       return 2;
@@ -319,12 +331,13 @@ void VAudioSelector::processMessage(Message* m)
     {
       sl.draw();
       BoxStack::getInstance()->update(this);
-      if ((int)lastsel!=sl.getCurrentOption()) {
+      if ((int)lastsel!=sl.getCurrentOption()) 
+      { 
         Message* m2 = new Message();
         m2->from = this;
         m2->to = parent;
         m2->message = Message::AUDIO_CHANGE_CHANNEL;
-        m2->parameter = (((AudioChannel*)sl.getCurrentOptionData())->pestype&0xFF)|(((AudioChannel*)sl.getCurrentOptionData())->type &0xFF)<<8 ;
+        m2->parameter = (((AudioChannel*)sl.getCurrentOptionData())->pestype &0xFFFF)|(((AudioChannel*)sl.getCurrentOptionData())->type &0xFF)<<16 ;
         Command::getInstance()->postMessageNoLock(m2);
       }
     }
diff --git a/vdr.cc b/vdr.cc
index ae10df105a51b11967e3b6d79750a93ef34e022b..1c1fe83de74e1c313833c25b2e50a0879501202f 100644 (file)
--- a/vdr.cc
+++ b/vdr.cc
@@ -969,6 +969,27 @@ void VDR::getChannelPids(Channel* channel)
     channel->apids.push_back(newapid);
   }
 
+  channel->numDPids = vresp->extractULONG();
+
+  for (ULONG i = 0; i < channel->numDPids; i++)
+  {
+    apid newdpid;
+    newdpid.pid = vresp->extractULONG();
+    newdpid.name = vresp->extractString();
+    channel->dpids.push_back(newdpid);
+  }
+
+  channel->numSPids = vresp->extractULONG();
+
+  for (ULONG i = 0; i < channel->numSPids; i++)
+  {
+    apid newspid;
+    newspid.pid = vresp->extractULONG();
+    newspid.name = vresp->extractString();
+    channel->spids.push_back(newspid);
+  }
+  channel->tpid = vresp->extractULONG();
+
   delete vresp;
   
   return ;
index c3f8fe3d0e239847e37cd11ae9114cfddde8e00b..7834751ce4e3443362bc967ffd11a26882897c45 100644 (file)
@@ -800,7 +800,7 @@ int VideoWin::dsInitVideoFilter()
         return 1;
     }
 #endif 
-    return 1;
+       return 1;
 }
 
 int VideoWin::setAudioStreamType(UCHAR type)
index d7c754c6800f3b32d8e2f51fc810b90894f9949c..a35303460f73c019d92c6a2010495630ddc03b2e 100644 (file)
@@ -312,7 +312,7 @@ void VVideoLive::processMessage(Message* m)
   else if (m->message == Message::AUDIO_CHANGE_CHANNEL)
   {
     Log::getInstance()->log("VVideoLive", Log::DEBUG, "Received change audio channel to %i", m->parameter);
-    ((Player*)player)->setAudioChannel(m->parameter);
+    ((Player*)player)->setAudioChannel(m->parameter&0xFFFF,(m->parameter&0xFF0000)>>16);
   }
   else if (m->message == Message::PLAYER_EVENT)
   {
index f1bbcbf9e6ef52b1f2e698d8aba477bcb9230768..8a939e3547969a3fd45a76214bff52910d8cd749 100644 (file)
@@ -206,6 +206,11 @@ VVideoLiveTV::VVideoLiveTV(ChannelList* tchanList, ULONG initialChannelNumber, V
   summaryBlackLine.setSize(summary.getWidth(), 4);
   summary.add(&summaryBlackLine);
   
+  sAspectRatio.setPosition(osd.getWidth() - 90, clock.getY2()+4);
+  sAspectRatio.nextColour = Colour::YELLOW;
+  sAspectRatio.setVisible(false);
+  osd.add(&sAspectRatio);
+  
   // FIXME painful
   Region r1 = summary.getRegionR();
   Region r2 = osd.getRegionR();
@@ -831,7 +836,7 @@ void VVideoLiveTV::processMessage(Message* m)
   else if (m->message == Message::AUDIO_CHANGE_CHANNEL)
   {
     Log::getInstance()->log("VVideoLiveTV", Log::DEBUG, "Received change audio channel to %i", m->parameter);
-    player->setAudioChannel(m->parameter);
+    player->setAudioChannel((m->parameter & 0xFFFF),(m->parameter & 0xFF0000)>>16);
   }
   else if (m->message == Message::PLAYER_EVENT)
   {
@@ -869,6 +874,12 @@ void VVideoLiveTV::processMessage(Message* m)
           wss.draw();
           BoxStack::getInstance()->update(this, &wssRegion);
         }
+        
+        sAspectRatio.nextSymbol = WSymbol::VIDEOASPECT43;
+        sAspectRatio.setVisible(true);
+        osd.draw();
+        BoxStack::getInstance()->update(this, osd.getRegion());
+        
         break;
       }
       case PlayerLiveTV::ASPECT169:
@@ -880,8 +891,18 @@ void VVideoLiveTV::processMessage(Message* m)
           wss.draw();
           BoxStack::getInstance()->update(this, &wssRegion);
         }
+        
+        sAspectRatio.nextSymbol = WSymbol::VIDEOASPECT169;
+        sAspectRatio.setVisible(true);
+        osd.draw();
+        BoxStack::getInstance()->update(this, osd.getRegion());
+                
         break;
       }
+      case PlayerLiveTV::PREBUFFERING:
+      {
+        Log::getInstance()->log("VVideoRec", Log::DEBUG, "Prebuffering - %u", m->tag);
+      }
     }
   }
 }
index c1c2aabac5646d0424e2d118afc946339712a43b..c814a1f17165a656af3e8305ca71bac249b39977 100644 (file)
@@ -32,6 +32,7 @@
 #include "wtextbox.h"
 #include "wselectlist.h"
 #include "timerreceiver.h"
+#include "wsymbol.h"
 
 class VChannelList;
 class Video;
@@ -123,6 +124,7 @@ class VVideoLiveTV : public Boxx, public TimerReceiver
     WTextbox textGreen;
     WTextbox textYellow;
     WTextbox textBlue;
+    WSymbol sAspectRatio;
     
     Boxx summary;
     WTextbox textSummary;
index 391a39758d4db76f7a37954c955b9dcbe6fa3f4a..cea94c284b6721be77bbc5de9595dfbae3cd2f21 100644 (file)
@@ -514,7 +514,7 @@ void VVideoRec::processMessage(Message* m)
   else if (m->message == Message::AUDIO_CHANGE_CHANNEL)
   {
     Log::getInstance()->log("VVideoRec", Log::DEBUG, "Received change audio channel to %i", m->parameter);
-    player->setAudioChannel(m->parameter);
+    player->setAudioChannel(m->parameter&0xFFFF,(m->parameter&0xFF0000)>> 16 );
   }
   else if (m->message == Message::CHILD_CLOSE)
   {
index 16f8913bf00e92df4465f2b7b07766cb27a04930..6d124760ea2c9e572b10d8afcd613d8056ca4978 100644 (file)
@@ -22,8 +22,8 @@
 
 #include "colour.h"
 
-UCHAR WSymbol::widths[] = { 2, 2, 4, 4, 1, 1, 3, 3, 3, 3, 3, 4, 4, 2, 2, 3, 5, 5, 4, 4, 2, 2};
-UCHAR WSymbol::heights[] = { 8, 8, 12, 12, 24, 4, 18, 18, 18, 18, 18, 30, 30, 16, 16, 18, 18, 18, 16, 16, 8, 8};
+UCHAR WSymbol::widths[] = { 2, 2, 4, 4, 1, 1, 3, 3, 3, 3, 3, 4, 4, 2, 2, 3, 5, 5, 4, 4, 2, 2, 5, 5};
+UCHAR WSymbol::heights[] = { 8, 8, 12, 12, 24, 4, 18, 18, 18, 18, 18, 30, 30, 16, 16, 18, 18, 18, 16, 16, 8, 8, 16, 16};
 
 UCHAR WSymbol::symbols[] = {
 
@@ -836,6 +836,82 @@ UCHAR WSymbol::symbols[] = {
 0x03, 0xC0,
 0x01, 0x80,
 
+/*
+11111111 11111111 11111111 11111111 11111111
+11111111 11111111 11111111 11111111 11111111
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11000000 01111111 11111111 11111110 00000011
+11111111 11111111 11111111 11111111 11111111
+11111111 11111111 11111111 11111111 11111111
+*/
+
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xC0, 0x1F, 0xFF, 0xF8, 0x03,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+/*
+11111111 11111111 11111111 11111111 11111111
+11111111 11111111 11111111 11111111 11111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111110 01111111 11111111 11111110 01111111
+11111111 11111111 11111111 11111111 11111111
+11111111 11111111 11111111 11111111 11111111
+*/
+
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFE, 0x7F, 0xFF, 0xFE, 0x7F,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
 };
 
 WSymbol::WSymbol()
index fdb6fa003a2bbce72e430a0fc69e2205e6b52779..d11080219080faf8863c1a058c5bc4c96f1c9d97 100644 (file)
--- a/wsymbol.h
+++ b/wsymbol.h
@@ -57,7 +57,9 @@ class WSymbol : public Boxx
     const static UCHAR FFWD = 19;
     const static UCHAR SMALLUP = 20;
     const static UCHAR SMALLDOWN = 21;
-
+    const static UCHAR VIDEOASPECT43 = 22;
+    const static UCHAR VIDEOASPECT169 = 23;
+    
   private:
     static UCHAR symbols[];
     static UCHAR widths[];