diff options
author | Jochen Dolze <vdr@dolze.de> | 2010-03-14 16:25:41 +0100 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2010-03-14 16:25:41 +0100 |
commit | c74f0198ce3362a94ebbd9ac03c721ae5a67b434 (patch) | |
tree | ca42b3d845530658b797bc8be6f06521714eb532 | |
parent | 12b0a5aa366f5b08d2cf8c6da935af64f4fbcb53 (diff) | |
download | vdr-plugin-markad-c74f0198ce3362a94ebbd9ac03c721ae5a67b434.tar.gz vdr-plugin-markad-c74f0198ce3362a94ebbd9ac03c721ae5a67b434.tar.bz2 |
Added support for 1.7.0 in standalone version
-rw-r--r-- | demux.cpp | 12 | ||||
-rw-r--r-- | markad-standalone.cpp | 42 | ||||
-rw-r--r-- | markad-standalone.h | 1 | ||||
-rw-r--r-- | pes2es.cpp | 5 | ||||
-rw-r--r-- | recv.cpp | 4 | ||||
-rw-r--r-- | vdr2pkt.cpp | 2 |
6 files changed, 61 insertions, 5 deletions
@@ -52,7 +52,17 @@ void cMarkAdDemux::ProcessVDR(MarkAdPid Pid, uchar *Data, int Count, uchar **Pkt if ((Pid.Type==MARKAD_PIDTYPE_VIDEO_H262) || (Pid.Type==MARKAD_PIDTYPE_VIDEO_H264)) { - if (!pes2videoes) pes2videoes=new cMarkAdPES2ES(recvnumber,"PES2ES video",65536); + if (!pes2videoes) + { + if (Pid.Type==MARKAD_PIDTYPE_VIDEO_H264) + { + pes2videoes=new cMarkAdPES2ES(recvnumber,"PES2H264ES video",393216); + } + else + { + pes2videoes=new cMarkAdPES2ES(recvnumber,"PES2ES video",65536); + } + } if (!pes2videoes) return; pes2videoes->Process(Pid,pkt,pktlen,Pkt,PktLen); } diff --git a/markad-standalone.cpp b/markad-standalone.cpp index 5925097..1453993 100644 --- a/markad-standalone.cpp +++ b/markad-standalone.cpp @@ -425,6 +425,37 @@ bool cMarkAdStandalone::CheckTS(const char *Directory) return true; } +bool cMarkAdStandalone::CheckVDRHD(const char *Directory) +{ + char *buf; + if (asprintf(&buf,"%s/001.vdr",Directory)==-1) return false; + + int fd=open(buf,O_RDONLY); + free(buf); + if (fd==-1) return false; + + uchar pes_buf[32]; + if (read(fd,pes_buf,sizeof(pes_buf))!=sizeof(pes_buf)) + { + close(fd); + return false; + } + close(fd); + + if ((pes_buf[0]==0) && (pes_buf[1]==0) && (pes_buf[2]==1) && ((pes_buf[3] & 0xF0)==0xE0)) + { + int payloadstart=9+pes_buf[8]; + if (payloadstart>23) return false; + uchar *start=&pes_buf[payloadstart]; + if ((start[0]==0) && (start[1]==0) && (start[2]==1) && (start[5]==0) && (start[6]==0) + && (start[7]==0) && (start[8]==1)) + { + return true; + } + } + return false; +} + bool cMarkAdStandalone::CheckPATPMT(const char *Directory) { char *buf; @@ -604,7 +635,16 @@ cMarkAdStandalone::cMarkAdStandalone(const char *Directory) macontext.General.APid.Num=-1; macontext.General.DPid.Num=-1; macontext.General.VPid.Num=-1; - macontext.General.VPid.Type=MARKAD_PIDTYPE_VIDEO_H262; + + if (CheckVDRHD(Directory)) + { + macontext.General.VPid.Type=MARKAD_PIDTYPE_VIDEO_H264; + } + else + { + macontext.General.VPid.Type=MARKAD_PIDTYPE_VIDEO_H262; + } + if (!markFileName[0]) strcpy(markFileName,"marks.vdr"); } diff --git a/markad-standalone.h b/markad-standalone.h index 8edf655..2846fe5 100644 --- a/markad-standalone.h +++ b/markad-standalone.h @@ -164,6 +164,7 @@ unsigned Descriptor_Length: char *IndexToHMSF(int Index); void AddMark(MarkAdMark *Mark); + bool CheckVDRHD(const char *Directory); bool CheckPATPMT(const char *Directory); bool CheckTS(const char *Directory); bool LoadInfo(const char *Directory); @@ -55,10 +55,13 @@ void cMarkAdPES2ES::Process(MarkAdPid Pid, uchar *PESData, int PESSize, uchar ** switch (Pid.Type) { case MARKAD_PIDTYPE_VIDEO_H262: - case MARKAD_PIDTYPE_VIDEO_H264: if ((peshdr->StreamID & 0xF0)!=0xE0) return; type=MA_PACKET_PKT; break; + case MARKAD_PIDTYPE_VIDEO_H264: + if ((peshdr->StreamID & 0xF0)!=0xE0) return; + type=MA_PACKET_H264; + break; case MARKAD_PIDTYPE_AUDIO_AC3: if (peshdr->StreamID!=0xBD) return; type=MA_PACKET_AC3; @@ -58,7 +58,9 @@ cMarkAdReceiver::cMarkAdReceiver(int RecvNumber, const char *Filename, cTimer *T #if APIVERSNUM < 10700 macontext.General.VPid.Type=MARKAD_PIDTYPE_VIDEO_H262; #else -#error "VDR-1.7.0 is not supported" +#error "VDR-1.7.0 is still unsupported" +#error "in plugin version, please use" +#error "standalone version: make markad" #endif #endif diff --git a/vdr2pkt.cpp b/vdr2pkt.cpp index 1a42fd7..4703bce 100644 --- a/vdr2pkt.cpp +++ b/vdr2pkt.cpp @@ -15,7 +15,7 @@ cMarkAdVDR2Pkt::cMarkAdVDR2Pkt(int RecvNumber, const char *QueueName, int QueueS cMarkAdVDR2Pkt::~cMarkAdVDR2Pkt() { -if (queue) delete queue; + if (queue) delete queue; } void cMarkAdVDR2Pkt::Process(MarkAdPid Pid, uchar *VDRData, int VDRSize, uchar **PktData, int *PktSize) |