With kind regards,
M.
BOX#1:
libdvbpsi error (PSI decoder): TS discontinuity (received 8, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 11, expected 10)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 8)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 10, expected 12)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 5)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 14)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 14)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 14)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 14)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 12, expected 10)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 14)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 14)
libdvbpsi error (PSI decoder): TS discontinuity (received 12, expected 11)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 2)
libdvbpsi error (PSI decoder): TS discontinuity (received 12, expected 10)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 0)
libdvbpsi error (PSI decoder): TS discontinuity (received 8, expected 7)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 11, expected 9)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 0)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 3, expected 2)
libdvbpsi error (PSI decoder): TS discontinuity (received 3, expected 2)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3)
BOX #2:
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 14, expected 13)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 15)
libdvbpsi error (PSI decoder): TS discontinuity (received 11, expected 10)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 5)
libdvbpsi error (PSI decoder): TS discontinuity (received 10, expected 9)
libdvbpsi error (PSI decoder): TS discontinuity (received 9, expected 8)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 15)
libdvbpsi error (PSI decoder): TS discontinuity (received 1, expected 0)
libdvbpsi error (PSI decoder): TS discontinuity (received 3, expected 2)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 14, expected 13)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 1, expected 0)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 15)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 3, expected 2)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 5)
libdvbpsi error (PSI decoder): TS discontinuity (received 9, expected 8)
libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 5)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3)
libdvbpsi error (PSI decoder): TS discontinuity (received 13, expected 12)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 5)
libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 4)
libdvbpsi error (PSI decoder): TS discontinuity (received 14, expected 13)
libdvbpsi error (PSI decoder): TS discontinuity (received 1, expected 0)
libdvbpsi error (PSI decoder): TS discontinuity (received 13, expected 12)
libdvbpsi error (PSI decoder): TS discontinuity (received 15, expected 14)
libdvbpsi error (PSI decoder): TS discontinuity (received 8, expected 7)
libdvbpsi error (PSI decoder): TS discontinuity (received 13, expected 12)
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1)
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6)
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 5)
On Sun, Feb 02, 2003 at 01:23:31AM +0100, Emard wrote:
HI All
Today I was watching the breaking news on a different
computer with budget card... From packet loss and artefacts
I couldn't follow what's going on, so I said "enough is enough".
It was all because of the improper coding logic
in fidbirq(). Even the recently modified fidbirq()
by Marian couldn't cope with heavy loaded PCI latency.
So I remembered a discussion with Roberto Deza about
fidbirq() that was almost forgotten...
I took the paper and have rewritten fidbirq()
from scrach, having in mind triggering on both edges,
recovery from lost interrupt and the trust in 7146 dma
pointer given the proper pointer arithmetic.
The result is absolutely astonishing: ZERO PACKET LOSS.
(patch and complete the fidbirq attached)
I recommend you all to try this new fidbirq(), and
also to apply it to the dvb-kernel.
Best regards, Emard
diff -pur orig/dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget-core.c dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget-core.c
--- orig/dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget-core.c Thu Jan 23 20:00:03 2003
+++ dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget-core.c Sun Feb 2 00:21:30 2003
@@ -110,27 +110,41 @@ void fidbirq (unsigned long data)
{
struct budget_s *budget = (struct budget_s*) data;
u8 *mem=(u8 *)(budget->grabbing);
- int num=512;
- int field=0x80 & saa7146_read(budget->dev, PSR);
+// int field=0x80 & saa7146_read(budget->dev, PSR);
+ u16 oldblk = budget->ttbp;
+ u16 newblk = saa7146_read(budget->dev, PCI_VDP3)/188; /* PCI_VDP3 = 0..TS_BUFLEN-1 */
+ u8 *olddma = mem + oldblk*188;
+ u8 *newdma = mem + newblk*188; /* rounded to last complete packet */
DEB_EE(("budget: %p\n",budget));
+
+ /* Zero-Packet-Loss fidbirq by EMARD */
- if (field) {
- if (field==budget->tsf)
- num=1024;
- else
- mem+=TS_BUFLEN/2;
- } else {
- if (field==budget->tsf) {
- if (budget->feeding && mem[TS_BUFLEN/2]==0x47)
- dvb_dmx_swfilter_packets(&budget->demux,
- mem+TS_BUFLEN/2, 512 );
- }
- }
+ budget->ttbp = newblk;
+
+ /* exit immediately when the card is not set for feeding
+ ** or when values are out of expected boundaries
+ */
+ if(budget->feeding == 0 ||
+ oldblk >= TS_BUFLEN/188 || newblk >= TS_BUFLEN/188)
+ return;
- budget->tsf=field;
- if (budget->feeding && mem[0]==0x47)
- dvb_dmx_swfilter_packets(&budget->demux, mem, num);
+ if(oldblk < newblk) /* no wraparound - dump in one chunk */
+ if(*olddma == 0x47)
+ dvb_dmx_swfilter_packets(&budget->demux, olddma,
+ newblk-oldblk);
+
+ if(oldblk > newblk) /* wraparound - dump in two chunks */
+ {
+ /* dump from olddma to end of dma window */
+ if(*olddma == 0x47)
+ dvb_dmx_swfilter_packets(&budget->demux, olddma,
+ TS_BUFLEN/188 - oldblk);
+ /* dump from begin of dma window to newdma */
+ if(*mem == 0x47)
+ dvb_dmx_swfilter_packets(&budget->demux, mem,
+ newblk);
+ }
}
inline static void
diff -pur orig/dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget.h dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget.h
--- orig/dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget.h Thu Jan 23 20:00:03 2003
+++ dvb-kernel/linux/drivers/media/dvb/ttpci-budget/budget.h Sun Feb 2 00:22:39 2003
@@ -47,7 +47,7 @@ struct budget_s {
struct semaphore pid_mutex;
int tsf;
- u32 ttbp;
+ u16 ttbp;
int feeding;
int registered;
--------------------------------------------------------------------------
---- ----
---- Marian Durkovic network manager ----
---- ----
---- Slovak Technical University Tel: +421 2 524 51 301 ----
---- Computer Centre, Nam. Slobody 17 Fax: +421 2 524 94 351 ----
---- 812 43 Bratislava, Slovak Republic E-mail: md@bts.sk ----
---- ----
--------------------------------------------------------------------------