[vdr] MP3/MPlayer plugin 0.9.13 available

Stefan Huelswitt s.huelswitt at gmx.de
Tue Aug 2 18:39:03 CEST 2005


Hi,

appearently there are some problems with OSS replay. In some
cases VDR hangs for 5-6 seconds when skipping between songs.

I think I found a solution, but due to the great variety of OSS
drivers, this has to be tested with as much drivers as possible.
So if you're using OSS, please test the attached patch and report
any failure/weirdness.

Regards.

-- 
Stefan Huelswitt
s.huelswitt at gmx.de  | http://www.muempf.de/
-------------- next part --------------
diff -urN -X mp3-unstable/.exclude mp3-0.9.13/player-mp3.c mp3-unstable/player-mp3.c
--- mp3-0.9.13/player-mp3.c	2005-07-30 14:33:50.000000000 +0200
+++ mp3-unstable/player-mp3.c	2005-08-01 21:47:25.000000000 +0200
@@ -1391,7 +1391,7 @@
 void cOutputOss::Init(void)
 {
   if(fd<0) {
-    fd=open(dspdevice,O_WRONLY);
+    fd=open(dspdevice,O_WRONLY|O_NONBLOCK);
     if(fd>=0) poll.Add(fd,true);
     else esyslog("ERROR: Cannot open dsp device '%s': %s!",dspdevice,strerror(errno));
     }
@@ -1453,15 +1453,19 @@
 
 int cOutputOss::Output(const unsigned char *Data, int Len, bool SOF)
 {
-  int n=0;
-  if(SOF) {
-    struct FrameHeader *fh=(struct FrameHeader *)Data;
-    if(fh->samplerate!=outSr) Reset(fh->samplerate);
-    n=FHS;
-    Data+=n; Len-=n;
+  if(fd>=0) {
+    int n=0;
+    if(SOF) {
+      struct FrameHeader *fh=(struct FrameHeader *)Data;
+      if(fh->samplerate!=outSr) Reset(fh->samplerate);
+      n=FHS;
+      Data+=n; Len-=n;
+      }
+    int r=write(fd,Data,Len);
+    if(r<0 && !FATALERRNO) r=0;
+    if(r>=0) return n+r;
     }
-  int r=fd>=0 ? write(fd,Data,Len) : -1;
-  return (r>=0 ? r+n : -1);
+  return -1;
 }
 
 bool cOutputOss::Poll(void)


More information about the vdr mailing list