Re: [ANNOUNCE] VDR developer version 1.7.24

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 20.02.2012 10:18, schrieb Klaus Schmidinger:
> On 20.02.2012 00:06, Joerg Riechardt wrote:
>> With dvbplayer.[hc] from version 1.7.23 and adjusted menu.[hc] it is
>> ok again.
>> Other patches were not involved.
>> Jörg
> 
> Well, then I guess it's best if I revoke that change.
> Any objections? Or maybe a fix for the vdr-xine problem?
> 
> (See also
> http://www.vdr-portal.de/board16-video-disk-recorder/board8-vdr-grundlagen/p1054305-geloest-timeshift-problem-mit-1-7-x/#post1054305).

I'm also seeing (hearing) reproducible glitches on playback with a
TT-6400, on 1.7.24. I've reverted just the changes from the patch at
vdr-portal, and the glitches were gone. So +1 for reverting.

For ease of use the attached patch sums up the revert. Because of an
indenting issue the original patch doesn't revert cleanly.


Cheers,

Udo
--- vdr-1.7.24/dvbplayer.c.bak	2012-02-20 22:51:24.000000000 +0100
+++ vdr-1.7.24/dvbplayer.c	2012-02-20 22:55:26.000000000 +0100
@@ -87,7 +87,6 @@
 private:
   cUnbufferedFile *f;
   uchar *buffer;
-  uchar *result;
   int wanted;
   int length;
   cCondWait newSet;
@@ -101,7 +100,7 @@
   void Clear(void);
   void Request(cUnbufferedFile *File, int Length);
   int Result(uchar **Buffer);
-  bool Reading(void) { return result; }
+  bool Reading(void) { return buffer; }
   bool WaitForDataMs(int msToWait);
   };
 
@@ -110,7 +109,6 @@
 {
   f = NULL;
   buffer = NULL;
-  result = NULL;
   wanted = length = 0;
   Start();
 }
@@ -120,7 +118,6 @@
   newSet.Signal();
   Cancel(3);
   free(buffer);
-  free(result);
 }
 
 void cNonBlockingFileReader::Clear(void)
@@ -129,8 +126,6 @@
   f = NULL;
   free(buffer);
   buffer = NULL;
-  free(result);
-  result = NULL;
   wanted = length = 0;
   Unlock();
 }
@@ -142,18 +137,18 @@
   wanted = Length;
   buffer = MALLOC(uchar, wanted);
   f = File;
-  newSet.Signal();
   Unlock();
+  newSet.Signal();
 }
 
 int cNonBlockingFileReader::Result(uchar **Buffer)
 {
   LOCK_THREAD;
-  if (result && length == wanted) {
-     *Buffer = result;
-     result = NULL;
+  if (buffer && length == wanted) {
+     *Buffer = buffer;
+     buffer = NULL;
      return wanted;
-  }
+     }
   errno = EAGAIN;
   return -1;
 }
@@ -177,8 +172,6 @@
               length = wanted = r; // this will forward the error status to the caller
               }
            if (length == wanted) {
-              result = buffer;
-              buffer = NULL;
               cMutexLock NewDataLock(&newDataMutex);
               newDataCond.Broadcast();
               }
@@ -190,9 +183,9 @@
 
 bool cNonBlockingFileReader::WaitForDataMs(int msToWait)
 {
-  if (result && length == wanted)
-     return true;
   cMutexLock NewDataLock(&newDataMutex);
+  if (buffer && length == wanted)
+     return true;
   return newDataCond.TimedWait(newDataMutex, msToWait);
 }
 
@@ -415,13 +408,13 @@
      Goto(0, true);
   while (Running()) {
         if (WaitingForData)
-           nonBlockingFileReader->WaitForDataMs(10); // this keeps the CPU load low, but reacts immediately on new data
+           nonBlockingFileReader->WaitForDataMs(3); // this keeps the CPU load low, but reacts immediately on new data
         else if (Sleep) {
            cPoller Poller;
            DevicePoll(Poller, 10);
            Sleep = false;
            if (playMode == pmStill || playMode == pmPause)
-              cCondWait::SleepMs(10);
+              cCondWait::SleepMs(3);
            }
         {
           LOCK_THREAD;
@@ -483,15 +476,7 @@
                    }
                 if (!eof) {
                    uchar *b = NULL;
-                   int Retries = 5;
-                   int r;
-                   while (true) {
-                         r = nonBlockingFileReader->Result(&b);
-                         if (r == -1 && errno == EAGAIN && --Retries)
-                            nonBlockingFileReader->WaitForDataMs(10); 
-                         else 
-                            break;
-                         }
+                   int r = nonBlockingFileReader->Result(&b);
                    if (r > 0) {
                       WaitingForData = false;
                       uint32_t Pts = 0;
_______________________________________________
vdr mailing list
vdr@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux