Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[vdr] Re: DD/AC3 dropouts with Teletext Plugin
On Thu, Mar 13, 2003 at 09:08:59AM +0100, Christian Jacobsen wrote:
> Hallo,
>
> I was wondering if I am the only one having this or if it is a known
> problem.
>
> If I use Bitstream or AC3overDVB togehter with the Teletext pluggin I have
> sound dropouts on Pro7 and in Replaying AC3/DD recordings !?
>
> I think that the Teletext plugin in the background does something that takes
> to long and thereby "steals" time from bitstream so that the sound drops.
> After that the Sound and picture on pro7 is out of sync :(
>
> I cannot remeber if Pro7 sound was out of sync with AC3overDVB - but
> replaying recodings was having dropouts.
>
> Tested in these konfigurations :
> VDR 1.1.20 + DVB 1.0.0 pre2 + Bitstream 0.43c + Teletext 0.7.6 + VDRC 0.0.8
> + Mplayer 0.7.8
> VDR 1.1.25 + DVB 1.0.0 pre2 + Bitstream 0.43c + Teletext 0.7.6 + VDRC 0.0.8
> + Mplayer (don't remember what version)
> VDR 1.1.25 + DVB 1.0.0 pre2 + Ac3overDVB 0.1.3 + Teletext 0.7.6 + VDRC 0.0.8
>
> When i don't load the Teletext-plugin the problem is gone
The problem is the Receiver function of the Teletext plugin, see txtrecv.c:
void cTxtReceiver::Receive(uchar *Data, int Length)
{
uchar *Datai=(uchar *)malloc(Length+60);
memset(Datai,0x00,Length);
memcpy(Datai,Data,Length);
for (int i=0; i < 4; i++)
{
if (Datai[4+i*46]==2) {
for (int j=(8+i*46);j<(50+i*46);j++)
Datai[j]=invtab[Datai[j]];
DecodeTXT(&Datai[i*46]);
}
}
free(Datai);
}
.. in other words the CPU time which is required for decoding will block
any other Receiver attachted to the device.
IMHO a ring buffer would be the correct solution. OK this would also
require an other thread for decoding:
<cite src="vdr-1.1.25/receiver.h">
virtual void Receive(uchar *Data, int Length) = 0;
// This function is called from the cDevice we are attached to, and
// delivers one TS packet from the set of PIDs the cReceiver has requested.
// The data packet must be accepted immediately, and the call must return
// as soon as possible, without any unnecessary delay. Each TS packet
// will be delivered only ONCE, so the cReceiver must make sure that
// it will be able to buffer the data if necessary.
</cite>
Werner
--
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe vdr" as subject.
Home |
Main Index |
Thread Index