]> git.vomp.tv Git - vompclient-marten.git/commitdiff
Live TV updates
authorChris Tallon <chris@vomp.tv>
Sun, 2 Dec 2007 21:46:24 +0000 (21:46 +0000)
committerChris Tallon <chris@vomp.tv>
Sun, 2 Dec 2007 21:46:24 +0000 (21:46 +0000)
playerlivetv.cc
playerlivetv.h

index 22a10fbe5fff722d55a02dd866472b54e1d5b173..806a5bdec0ed7bd6578c829441c5dd0cd2b48f3e 100644 (file)
@@ -202,27 +202,6 @@ void PlayerLiveTV::call(void* caller)
       threadSignalNoLock();
     }
   }
-  /*
-  else if (caller == &vfeed)
-  {
-    if (videoStartup2)
-    {
-      logger->log("PlayerLiveTV", Log::DEBUG, "Video startup %i", videoStartup2count);
-      
-      if (++videoStartup2count == 2)
-      {
-        videoStartup2 = false;
-
-        video->unPause();
-        audio->unPause();
-        
-        audio->systemMuteOff();
-      }
-    }
-
-    threadSignalNoLock();
-  }
-*/
 }
 
 // -----------------------------------
@@ -280,76 +259,82 @@ void PlayerLiveTV::switchState(UCHAR newState)
     {
       switch(newState)
       {
-        case S_PREBUFFERING:
+        case S_VIDEOSTARTUP:
         {
           video->blank();
+          video->reset();
+          video->sync();
+          video->play();
+          video->pause();
+
           audio->stop();
           audio->unPause();
           audio->reset();
-
           audio->setStreamType(Audio::MPEG2_PES);
-          audio->systemMuteOff();
-          video->reset();
+          audio->sync();
+          audio->play();
+          audio->pause();
+
           demuxer->reset();
           demuxer->seek();
+
+          afeed.start();
+          vfeed.start();
+          
           state = newState;
           return;
         }
+        default:
+        {
+          logger->log("PlayerLiveTV", Log::EMERG, "Thread called state %u to state %u which is not supported", state, newState);
+          abort();
+          break;
+        }
       }
     }
-    
-    case S_PREBUFFERING:    // FROM S_PREBUFFERING
+
+    case S_VIDEOSTARTUP:     // FROM S_VIDEOSTARTUP
     {
       switch(newState)
       {
-        case S_STOP:
-        {
-          vdr->stopStreaming();
-          clearStreamChunks();
-          state = newState;          
-          return;
-        }      
         case S_PREBUFFERING:
         {
-          vdr->stopStreaming();
-          clearStreamChunks();
+          logger->log("PlayerLiveTV", Log::DEBUG, "doing ss to ss2");
+          vfeed.release();
           state = newState;
           return;
         }
-        case S_VIDEOSTARTUP:
+        default:
         {
-          logger->log("PlayerLiveTV", Log::DEBUG, "doing ss to videostartup");
-
-          audio->sync();
-          audio->play();
-          //audio->systemMuteOn();
-          video->sync();
-          video->pause();
-          afeed.start();
-          vfeed.start();
-          state = newState;
-          return;
-        }
+          logger->log("PlayerLiveTV", Log::EMERG, "Thread called state %u to state %u which is not supported", state, newState);
+          abort();
+          break;
+        }        
       }
     }
     
-    case S_VIDEOSTARTUP:     // FROM S_VIDEOSTARTUP
+    case S_PREBUFFERING:    // FROM S_PREBUFFERING
     {
       switch(newState)
       {
         case S_PLAY:
         {
-          logger->log("PlayerLiveTV", Log::DEBUG, "doing ss to play");
-          video->reset();
-          video->play();
-          video->sync();
-          vfeed.release();
+          logger->log("PlayerLiveTV", Log::DEBUG, "doing ss2 to ss3");
+          audio->unPause();
+          video->unPause();
           state = newState;
           return;
         }
+        default:
+        {
+          logger->log("PlayerLiveTV", Log::EMERG, "Thread called state %u to state %u which is not supported", state, newState);
+          abort();
+          break;
+        }        
       }
     }
     
+    
     case S_PLAY:     // FROM S_PLAY
     {
       switch(newState)
@@ -369,7 +354,7 @@ void PlayerLiveTV::switchState(UCHAR newState)
           state = newState;
           return;
         }
-        case S_PREBUFFERING:
+        case S_VIDEOSTARTUP:
         {
           vdr->stopStreaming();
           clearStreamChunks();
@@ -381,20 +366,34 @@ void PlayerLiveTV::switchState(UCHAR newState)
           audio->unPause();
           audio->reset();
 
-          audio->setStreamType(Audio::MPEG2_PES);
-   //       audio->systemMuteOn();
           video->reset();
+          video->sync();
+          video->play();
+          video->pause();
+
+          audio->setStreamType(Audio::MPEG2_PES);
+          audio->sync();
+          audio->play();
+          audio->pause();
+
           demuxer->reset();
           demuxer->seek();
+
+          afeed.start();
+          vfeed.start();
+
           state = newState;
           return;
         }
+        default:
+        {
+          logger->log("PlayerLiveTV", Log::EMERG, "Thread called state %u to state %u which is not supported", state, newState);
+          abort();
+          break;
+        }        
       }
     }    
   }  
-  
-  logger->log("PlayerLiveTV", Log::EMERG, "Thread called state %u to state %u which is not supported", state, newState);
-  abort();
 }
 
 void PlayerLiveTV::threadMethod()
@@ -405,8 +404,9 @@ void PlayerLiveTV::threadMethod()
   {
     if (videoStartup) // we are in S_VIDEOSTARTUP, afeed has signalled that it has written some data
     {
-      switchState(S_PLAY);
+      switchState(S_PREBUFFERING);
       videoStartup = false;
+      videoStartup2Counter = 0;
     }  
   
     while(!instructions.empty())
@@ -421,7 +421,7 @@ void PlayerLiveTV::threadMethod()
       {
         logger->log("PlayerLiveTV", Log::DEBUG, "start new stream");
 
-        switchState(S_PREBUFFERING);
+        switchState(S_VIDEOSTARTUP);
 
         Channel* chan = (*chanList)[i.channelIndex];
         chan->loadPids();
@@ -443,20 +443,18 @@ void PlayerLiveTV::threadMethod()
 
     if (stopNow) break;
 
-    if (streamChunks.size())
+    while(streamChunks.size())
     {
+      chunkToDemuxer();
+
       if (state == S_PREBUFFERING)
       {
-        if (streamChunks.size() > 9)
+        logger->log("PlayerLiveTV", Log::DEBUG, "video startup2 buffering...");
+        if (++videoStartup2Counter == 3)
         {
-          while(streamChunks.size()) chunkToDemuxer();
-          switchState(S_VIDEOSTARTUP);
+          switchState(S_PLAY);
         }
       }
-      else if (state == S_PLAY || state == S_VIDEOSTARTUP)
-      {
-        while(streamChunks.size()) chunkToDemuxer();
-      }
     }
     
     threadLock();
index ef28aa5c0f5d8a632bc6eb0c474ee7a85ba9c413..3ee74d8bae13e858a216da7c8d4cb054faac09d3 100644 (file)
@@ -116,14 +116,16 @@ class PlayerLiveTV : public Thread_TYPE, public Callback, public StreamReceiver
 
     UCHAR state;
     const static UCHAR S_STOP = 1;
-    const static UCHAR S_PREBUFFERING = 2;
-    const static UCHAR S_VIDEOSTARTUP = 3;
+    const static UCHAR S_VIDEOSTARTUP = 2;
+    const static UCHAR S_PREBUFFERING = 3;
     const static UCHAR S_PLAY = 4;
     void switchState(UCHAR newState);
 
     bool videoStartup;
     bool stopNow;
 
+    int videoStartup2Counter;
+
         
     void clearStreamChunks();
     void chunkToDemuxer();