diff options
-rw-r--r-- | demux.cpp | 16 | ||||
-rw-r--r-- | queue.cpp | 31 | ||||
-rw-r--r-- | queue.h | 2 |
3 files changed, 41 insertions, 8 deletions
@@ -15,7 +15,7 @@ cMarkAdDemux::cMarkAdDemux() pes2videoes=NULL; pause=false; pause_retval=0; - queue = new cMarkAdPaketQueue("Demux",376); + queue = new cMarkAdPaketQueue(NULL,376); } cMarkAdDemux::~cMarkAdDemux() @@ -36,7 +36,17 @@ void cMarkAdDemux::ProcessVDR(MarkAdPid Pid, uchar *Data, int Count, uchar **Pkt uchar *pkt; int pktlen; - if (!vdr2pkt) vdr2pkt= new cMarkAdVDR2Pkt(); + if (!vdr2pkt) + { + if ((Pid.Type==MARKAD_PIDTYPE_AUDIO_AC3) || (Pid.Type==MARKAD_PIDTYPE_AUDIO_MP2)) + { + vdr2pkt= new cMarkAdVDR2Pkt("VDR2PKT audio"); + } + else + { + vdr2pkt= new cMarkAdVDR2Pkt("VDR2PKT video"); + } + } if (!vdr2pkt) return; vdr2pkt->Process(Pid,Data,Count,&pkt,&pktlen); @@ -81,7 +91,7 @@ void cMarkAdDemux::ProcessTS(MarkAdPid Pid, uchar *Data, int Count, uchar **Pkt, { if (Pid.Type==MARKAD_PIDTYPE_VIDEO_H264) { - ts2pkt=new cMarkAdTS2Pkt("TS2H264",393216); + ts2pkt=new cMarkAdTS2Pkt("TS2H264",819200); } else { @@ -14,17 +14,29 @@ cMarkAdPaketQueue::cMarkAdPaketQueue(const char *Name, int Size) memset(&pktinfo,0,sizeof(pktinfo)); pktinfo.pkthdr=-1; maxqueue=Size; - name=strdup(Name); + if (Name) + { + name=strdup(Name); + } + else + { + name=NULL; + } buffer=(uchar *) malloc(Size+1); if (!buffer) maxqueue=0; scanner=0xFFFFFFFF; scannerstart=-1; percent=-1; + mpercent=0; } cMarkAdPaketQueue::~cMarkAdPaketQueue() { - if (name) free(name); + if (name) + { + tsyslog("buffer usage: %-15s %3i%%",name,mpercent); + free(name); + } if (buffer) free(buffer); } @@ -67,16 +79,25 @@ bool cMarkAdPaketQueue::Put(uchar *Data, int Size) if (!buffer) return false; if ((inptr) && (inptr==outptr)) inptr=outptr=0; - if (((inptr+Size)>maxqueue) && (name)) + if ((inptr+Size)>maxqueue) { - esyslog("buffer %s full",name); - inptr=outptr=0; + if (name) + { + esyslog("buffer %s full",name); + } + else + { + esyslog("buffer full"); + } + Clear(); + return false; } memcpy(&buffer[inptr],Data,Size); inptr+=Size; int npercent=(int) ((inptr*100)/maxqueue); + if (npercent>mpercent) mpercent=npercent; if ((npercent>90) && (name) && (npercent!=percent)) { @@ -9,6 +9,7 @@ #define __queue_h_ #include <vdr/tools.h> // needed for (d/e/i)syslog +#include "debug.h" #ifndef uchar typedef unsigned char uchar; @@ -113,6 +114,7 @@ private: } pktinfo; int percent; + int mpercent; uchar *buffer; int maxqueue; |