Martin Wache wrote:
Luca Olivetti schrieb:
Martin Wache wrote:
I thought about letting the softdevice sleep even when the buffers are not full, but I think the correct solution would be that vdr sleep in case it doesn't have some frames to send. Or did I get the Poll() function wrong? Should Poll() sleep in any case?
from device.h
virtual bool Poll(cPoller &Poller, int TimeoutMs = 0); ///< Returns true if the device itself or any of the file handles in ///< Poller is ready for further action. ///< If TimeoutMs is not zero, the device will wait up to the given number ///< of milleseconds before returning in case there is no immediate ///< need for data.
I know this header file, I read it many times, but it doesn't answer my question. If you have a closer look at the methods of cDvbDevice and cPoller, you will see that the method Poll() just calls the linux system call poll() with the event POLLOUT. If you now have a look at the man page of poll which states: #define POLLOUT 0x0004 /* Writing now will not block */ wou will see that this is _exactly_ the way the softdevices Poll() method is currently implemented. It will only sleep if a write to the softdevice would block.
Oh, I see, I was too fast and I misinterpreted your request: I though you had the same problem I had with the dxr3 plugin (i.e. it didn't wait when it *couldn't* accept data). Maybe a ff card doesn't have this problem because it doesn't have big buffers, but I also wonder how is it possible that vdr hasn't enough data to give to the device: no matter how big the buffer, once it is filled it should stay more or less full, unless you're at the end of the file.
Bye