diff options
author | Jochen Dolze <vdr@dolze.de> | 2009-09-26 11:49:41 +0200 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2009-09-26 11:49:41 +0200 |
commit | da52aedb6aa039cd3488b13e63a4648b73e465bf (patch) | |
tree | 12d4ba30a1a23a3028fdfc77f66836b90065fbb4 | |
parent | 404b1e87e9d1f8854cbbd5a438ec4791b6ed296b (diff) | |
download | vdr-plugin-markad-da52aedb6aa039cd3488b13e63a4648b73e465bf.tar.gz vdr-plugin-markad-da52aedb6aa039cd3488b13e63a4648b73e465bf.tar.bz2 |
Ignore duplicate pakets
-rw-r--r-- | markad-standalone.cpp | 18 | ||||
-rw-r--r-- | recv.cpp | 10 | ||||
-rw-r--r-- | recv.h | 2 | ||||
-rw-r--r-- | ts2pkt.cpp | 5 |
4 files changed, 28 insertions, 7 deletions
diff --git a/markad-standalone.cpp b/markad-standalone.cpp index 3e6e8d1..7bd293e 100644 --- a/markad-standalone.cpp +++ b/markad-standalone.cpp @@ -312,16 +312,22 @@ cMarkAdStandalone::cMarkAdStandalone(const char *Directory) macontext.General.VPid.Type=MARKAD_PIDTYPE_VIDEO_H262; } - macontext.General.VPid.Num=0x3ff; -// macontext.General.DPid.Num=0x403; - macontext.General.APid.Num=0x0; + macontext.General.VPid.Num=0xa5; + //macontext.General.DPid.Num=0x403; + macontext.General.APid.Num=0x78; video_demux = new cMarkAdDemux(255); -// mp2_demux = new cMarkAdDemux(255); - mp2_demux=NULL; + if (macontext.General.APid.Num) + { + mp2_demux = new cMarkAdDemux(255); + } + + if (macontext.General.DPid.Num) + { + ac3_demux = new cMarkAdDemux(255); + } - ac3_demux = new cMarkAdDemux(255); decoder = new cMarkAdDecoder(255,index->isTS(), macontext.General.DPid.Num!=0); video = new cMarkAdVideo(255,&macontext); @@ -13,7 +13,7 @@ cMarkAdReceiver::cMarkAdReceiver(int RecvNumber, const char *Filename, cTimer *T cReceiver(Timer->Channel()->GetChannelID(), -1, Timer->Channel()->Vpid(),Timer->Channel()->Apids(), Timer->Channel()->Dpids()),cThread("markad"), - buffer(MEGABYTE(3)), running(false) // 3MB Buffer + buffer(MEGATS(3)), running(false) // 3MB Buffer { if ((!Filename) || (!Timer)) return; @@ -249,6 +249,14 @@ void cMarkAdReceiver::Action() uchar *tspkt = frame->Data(); int tslen = frame->Count(); +#if 0 +int w=open("/tmp/test.ts",O_CREAT|O_RDWR|O_APPEND,0644); +if (w!=-1) { +write(w,tspkt,tslen); +close(w); +} +#endif + while (tslen>0) { int len=video_demux->Process(macontext.General.VPid,tspkt,tslen,&pkt,&pktlen); @@ -25,6 +25,8 @@ #include <linux/dvb/frontend.h> #endif +#define MEGATS(n) ((n)*1024*1880) + class cMarkAdRingBuffer : public cRingBufferFrame { private: @@ -190,6 +190,11 @@ int cMarkAdTS2Pkt::Process(MarkAdPid Pid, uchar *TSData, int TSSize, uchar **Pkt if ((counter!=-1) && (((counter+1) & 0xF)!=tshdr->Counter)) { + if (counter==tshdr->Counter) + { + // duplicate paket -> just ignore + return TS_SIZE; + } // sequence error Reset(MA_ERR_SEQ); return TS_SIZE; |