[vdr] FF card AV sync problems, possible fix to VDR

Oliver Endriss o.endriss at gmx.de
Thu Feb 1 02:54:46 CET 2007


Klaus Schmidinger wrote:
> VDR User wrote:
> > On 1/31/07, *Klaus Schmidinger* <Klaus.Schmidinger at cadsoft.de
> > <mailto:Klaus.Schmidinger at cadsoft.de>> wrote:
> > 
> >     VDR User wrote:
> >     > From what he's saying, the problem is buffer overrun's, not
> >     underrun's.

Afaics this is just a guess. We need a sample recording and track down
what happens in the driver/firmware.

> >     > Too much data is being sent and the device isn't able to keep up.  If
> >     > that's the case then it would make sense for vdr to have a user
> >     setting
> >     > to limit how many seconds (or milliseconds perhaps?) worth of data is
> >     > sent to the buffer.  I can't think of any reason not to add such a
> >     > feature if it means better usability for the end-user.
> > 
> >     If the device can't take any more data, it should just refuse to
> >     accept it and return from the write() call without anything written.

Code from the driver:
|        ...
|        if (nonblock && !FREE_COND)
|                return -EWOULDBLOCK;
|
|        while (todo > 0) {
|                if (!FREE_COND) {
|                        if (nonblock)
|                                return count - todo;
|                        if (wait_event_interruptible(av7110->avout.queue,
|                                                     FREE_COND))
|                                return count - todo;
|                }
|         ...

Looks ok to me. The driver does not accept more data than it can handle.

> > I disagree.  Simply returning from write() implies the data was written
> > and the device is ready for more.
> 
> The write() function returns the number of bytes actually written,
> which is not necessarily the same as the number of bytes the caller
> wanted to write. So the device can chose not to accept all of the data.
> If the device is currently unable to accept any data (and the file handle
> is in O_NONBLOCK mode) it shall return EAGAIN to inform the caller that
> it is currently busy and that the caller should try again later.
> 
> >  If this is not true then you risk
> > making the sync even worse.  I consulted with people familiar with this
> > type of stuff and it was suggested the problem could (and should) be
> > fixed at the driver level so I'm following up on that now.
> 
> Well, that's exactly what I was suggesting. The write() function has
> everything it takes to block data from coming into the device if its
> buffer is full. No need for the caller to do any funny estimates here.

Fullack. There is no reason to add workarounds like this to VDR.

@all:
Don't panic. Provide samples. :-)

Oliver

-- 
--------------------------------------------------------
VDR Remote Plugin 0.3.9 available at
http://www.escape-edv.de/endriss/vdr/
--------------------------------------------------------




More information about the vdr mailing list