MP3/MPlayer plugin 0.9.13 available

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

 



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@xxxxxx  | 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)

[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