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)