summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demux.cpp16
-rw-r--r--queue.cpp31
-rw-r--r--queue.h2
3 files changed, 41 insertions, 8 deletions
diff --git a/demux.cpp b/demux.cpp
index e581511..55113a8 100644
--- a/demux.cpp
+++ b/demux.cpp
@@ -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
{
diff --git a/queue.cpp b/queue.cpp
index fd015b2..a50e925 100644
--- a/queue.cpp
+++ b/queue.cpp
@@ -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))
{
diff --git a/queue.h b/queue.h
index ef3eb0e..f550e62 100644
--- a/queue.h
+++ b/queue.h
@@ -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;