[vdr-plugin-markad] 02/07: Imported Upstream version 0.1.4+git20150212
Tobias Grimm
tiber-guest at moszumanska.debian.org
Thu Feb 12 21:35:31 UTC 2015
This is an automated email from the git hooks/post-receive script.
tiber-guest pushed a commit to branch master
in repository vdr-plugin-markad.
commit 661d5dea3456850a32d9e1aa1ae8f802865129ab
Author: etobi <git at e-tobi.net>
Date: Thu Feb 12 22:00:01 2015 +0100
Imported Upstream version 0.1.4+git20150212
---
.gitignore | 15 ++
AUTHORS | 1 +
Makefile | 7 +-
command/Makefile | 5 +-
command/decoder.cpp | 116 +++++----
command/decoder.h | 1 +
command/demux.cpp | 37 +--
command/demux.h | 1 +
command/global.h | 1 +
...LS_4_Austria-A16_9-P0.pgm => 3sat-A16_9-P0.pgm} | Bin 19219 -> 19254 bytes
command/logos/ATV-A16_9-P0.pgm | Bin 10018 -> 19219 bytes
command/logos/ATV-A16_9-P2.pgm | Bin 2497 -> 4817 bytes
...el_eins_HD-A16_9-P0.pgm => ATV_HD-A16_9-P0.pgm} | 4 +-
...ustria-A16_9-P0.pgm => AXN_Action-A16_9-P0.pgm} | 2 +-
command/logos/DMAX-A16_9-P0.pgm | Bin 10728 -> 11218 bytes
...L_HD-A16_9-P0.pgm => Das_Erste_HD-A16_9-P0.pgm} | 6 +-
...HD-A16_9-P0.pgm => Deluxe_Music_HD-A3_2-P0.pgm} | 4 +-
...ia-A16_9-P0.pgm => Disney_Channel-A16_9-P0.pgm} | 6 +-
...-A16_9-P0.pgm => Disney_Channel_HD-A4_3-P0.pgm} | 4 +-
..._Austria-A16_9-P0.pgm => EinsPlus-A16_9-P1.pgm} | 4 +-
..._Austria-A16_9-P0.pgm => EinsPlus-A16_9-P2.pgm} | 4 +-
...Austria-A16_9-P0.pgm => Fox_Serie-A16_9-P0.pgm} | 2 +-
..._Austria-A16_9-P0.pgm => Fox_Serie-A4_3-P0.pgm} | 2 +-
...stria-A16_9-P1.pgm => MDR_Sachsen-A16_9-P0.pgm} | Bin 4817 -> 4817 bytes
...S_4_Austria-A16_9-P0.pgm => N24_HD-A4_3-P0.pgm} | 4 +-
...S_4_Austria-A16_9-P1.pgm => N24_HD-A4_3-P1.pgm} | Bin 4817 -> 6417 bytes
...S_4_Austria-A16_9-P1.pgm => N24_HD-A4_3-P2.pgm} | Bin 4817 -> 6417 bytes
...Austria-A16_9-P0.pgm => NDR_FS_HH-A16_9-P0.pgm} | Bin 19219 -> 19254 bytes
...Austria-A16_9-P0.pgm => NDR_FS_MV-A16_9-P0.pgm} | Bin 19219 -> 19254 bytes
...ustria-A16_9-P0.pgm => NDR_FS_NDS-A16_9-P0.pgm} | Bin 19219 -> 19254 bytes
...Austria-A16_9-P0.pgm => NDR_FS_SH-A16_9-P0.pgm} | Bin 19219 -> 19254 bytes
...4_Austria-A16_9-P0.pgm => ORF1_HD-A16_9-P0.pgm} | 6 +-
...ustria-A16_9-P0.pgm => PHOENIX_HD-A16_9-P0.pgm} | Bin 19219 -> 20019 bytes
...ustria-A16_9-P1.pgm => PHOENIX_HD-A16_9-P1.pgm} | Bin 4817 -> 5018 bytes
...ustria-A16_9-P1.pgm => PHOENIX_HD-A16_9-P2.pgm} | Bin 4817 -> 5018 bytes
command/logos/PULS_4_Austria-A16_9-P0.pgm | Bin 19219 -> 10258 bytes
command/logos/PULS_4_Austria-A16_9-P1.pgm | Bin 4817 -> 2577 bytes
command/logos/PULS_4_Austria-A16_9-P2.pgm | Bin 4817 -> 2577 bytes
..._Austria-A16_9-P0.pgm => ProSieben-A4_3-P0.pgm} | Bin 19219 -> 19254 bytes
command/logos/ProSieben_MAXX-A16_9-P0.pgm | Bin 0 -> 7212 bytes
...A16_9-P0.pgm => ProSieben_MAXX_HD-A16_9-P0.pgm} | 4 +-
...{SIXX-A16_9-P0.pgm => RSI_LA_1_HD-A16_9-P0.pgm} | Bin 13193 -> 17266 bytes
.../logos/{SIXX-A16_9-P0.pgm => RTL-A16_9-P0.pgm} | Bin 13193 -> 12018 bytes
...{SIXX-A16_9-P0.pgm => RTS_Deux_HD-A16_9-P0.pgm} | Bin 13193 -> 14418 bytes
.../{ATV-A16_9-P0.pgm => RTS_Un_HD-A16_9-P0.pgm} | Bin 10018 -> 11538 bytes
...-A16_9-P0.pgm => SAT_1_HD_Austria-A16_9-P0.pgm} | 4 +-
command/logos/SF_1_HD-A16_9-P0.pgm | 5 +
command/logos/SF_zwei_HD-A16_9-P0.pgm | 5 +
command/logos/SF_zwei_HD-A16_9-P1.pgm | Bin 0 -> 6882 bytes
command/logos/SF_zwei_HD-A16_9-P2.pgm | Bin 0 -> 6882 bytes
command/logos/SIXX-A16_9-P0.pgm | Bin 13193 -> 13193 bytes
command/logos/SIXX_HD-A16_9-P0.pgm | 4 +-
..._eins_HD-A16_9-P0.pgm => SPORT1_HD-A4_3-P0.pgm} | 4 +-
..._Austria-A16_9-P0.pgm => SUPER_RTL-A4_3-P0.pgm} | 4 +-
command/logos/SUPER_RTL_HD-A16_9-P0.pgm | 4 +-
...ULS_4_Austria-A16_9-P0.pgm => ZDF-A16_9-P0.pgm} | Bin 19219 -> 19219 bytes
...ustria-A16_9-P0.pgm => ZDFinfo_HD-A16_9-P0.pgm} | 6 +-
...ER_RTL_HD-A16_9-P0.pgm => arte_HD-A16_9-P0.pgm} | 4 +-
command/logos/kabel_eins_HD-A16_9-P0.pgm | 4 +-
command/logos/kabel_eins_HD-A16_9-P1.pgm | Bin 10537 -> 12978 bytes
command/logos/kabel_eins_HD-A16_9-P2.pgm | Bin 10537 -> 12978 bytes
...ria-A16_9-P0.pgm => zdf_kultur_HD-A16_9-P0.pgm} | 6 +-
command/markad-standalone.cpp | 280 +++++++++++++++------
command/markad-standalone.h | 4 +-
command/markad.1 | 2 +-
command/marks.cpp | 1 +
command/streaminfo.cpp | 16 ++
command/video.cpp | 183 ++++++++++----
command/video.h | 40 ++-
plugin/HISTORY | 1 +
plugin/Makefile | 7 +-
plugin/README | 1 +
plugin/markad.cpp | 1 +
plugin/po/de_DE.po | 5 +-
plugin/po/es_ES.po | 5 +-
plugin/po/fi_FI.po | 5 +-
plugin/po/it_IT.po | 5 +-
plugin/po/sk_SK.po | 5 +-
plugin/setup.cpp | 61 +++--
plugin/setup.h | 4 +-
plugin/status.cpp | 53 +++-
plugin/status.h | 2 +-
version.h => version.dist | 2 +-
83 files changed, 664 insertions(+), 305 deletions(-)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c69f42b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+.gitignore
+
+command/markad
+command/.dependencies
+command/*.o
+command/*~
+command/po/*.pot
+command/po/*.mo
+
+plugin/.dependencies
+plugin/*.o
+plugin/*.so
+plugin/*~
+plugin/po/*.pot
+plugin/po/*.mo
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..8d8e8df
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Jochen Dolze <vdr at dolze.de>
diff --git a/Makefile b/Makefile
index 3118e11..52812c1 100644
--- a/Makefile
+++ b/Makefile
@@ -6,6 +6,7 @@
DIRS = command plugin
+$(shell GITVERSION=`git rev-parse --short HEAD 2> /dev/null`; if [ "$$GITVERSION" ]; then sed "s/\";/ ($$GITVERSION)\";/" version.dist > version.h; else cp version.dist version.h; fi)
VERSION = $(shell grep 'static const char \*VERSION *=' version.h | awk '{ print $$6 }' | sed -e 's/[";]//g')
TMPDIR = /tmp
@@ -31,13 +32,13 @@ dist:
@cp -a plugin/dist/* $(TMPDIR)/$(ARCHIVE)/plugin/dist
@cp -a plugin/po/*.po $(TMPDIR)/$(ARCHIVE)/plugin/po
@cp -a command/*.cpp command/*.h command/*.1 command/Makefile $(TMPDIR)/$(ARCHIVE)/command
- @cp -a command/logos/*.pgm $(TMPDIR)/$(ARCHIVE)/command/logos
+ @cp -u command/logos/*.pgm $(TMPDIR)/$(ARCHIVE)/command/logos
@cp -a command/po/*.po $(TMPDIR)/$(ARCHIVE)/command/po
- @cp -a *.h COPYING HISTORY README INSTALL Makefile $(TMPDIR)/$(ARCHIVE)
+ @cp -a *.dist *.h COPYING HISTORY README INSTALL Makefile $(TMPDIR)/$(ARCHIVE)
@tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE)
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@echo Distribution package created as $(PACKAGE).tgz
clean:
for i in $(DIRS); do make -C $$i clean; done
- @-rm -f $(PACKAGE).tgz
+ @-rm -f version.h $(PACKAGE).tgz
diff --git a/command/Makefile b/command/Makefile
index 648e1f9..6a445d0 100644
--- a/command/Makefile
+++ b/command/Makefile
@@ -7,6 +7,7 @@
### The version number of this plugin (taken from the main source file):
+$(shell GITVERSION=`git rev-parse --short HEAD 2> /dev/null`; if [ "$$GITVERSION" ]; then sed "s/\";/ ($$GITVERSION)\";/" ../version.dist > ../version.h; else cp ../version.dist ../version.h; fi)
VERSION = $(shell grep 'static const char \*VERSION *=' ../version.h | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
@@ -83,7 +84,7 @@ i18n: $(I18Npot)
### Targets:
markad: $(OBJS)
- $(CXX) $(CXXFLAGS) $(OBJS) $(LIBS) -o $@
+ $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
MANDIR = $(DESTDIR)/usr/share/man
@@ -96,7 +97,7 @@ install: install-doc markad $(I18Nmsgs)
@cp --remove-destination markad $(DESTDIR)/usr/bin/markad
@$(STRIP) $(DESTDIR)/usr/bin/markad
@mkdir -p $(DESTDIR)/var/lib/markad
- @cp -a logos/* $(DESTDIR)/var/lib/markad
+ @cp -u logos/* $(DESTDIR)/var/lib/markad
@echo markad installed
clean:
diff --git a/command/decoder.cpp b/command/decoder.cpp
index 4b112c8..cbd8055 100644
--- a/command/decoder.cpp
+++ b/command/decoder.cpp
@@ -6,6 +6,7 @@
*/
#include <stdint.h>
+#include <stdio.h>
#include <sched.h>
#include <errno.h>
#include <sys/types.h>
@@ -101,9 +102,22 @@ fail:
}
#endif
+#ifndef AV_CODEC_ID_H264
+#define AV_CODEC_ID_H264 CODEC_ID_H264
+#endif
+#ifndef AV_CODEC_ID_MPEG2VIDEO
+#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO
+#endif
+#ifndef AV_CODEC_ID_MPEG2VIDEO_XVMC
+#define AV_CODEC_ID_MPEG2VIDEO_XVMC CODEC_ID_MPEG2VIDEO_XVMC
+#endif
+#ifndef AV_CODEC_ID_NONE
+#define AV_CODEC_ID_NONE CODEC_ID_NONE
+#endif
+
cMarkAdDecoder::cMarkAdDecoder(bool useH264, int Threads)
{
-#if LIBAVCODEC_VERSION_INT < ((53<<16)+(7<<8)+1)
+#if LIBAVCODEC_VERSION_INT < ((53<<16)+(7<<8)+1)
avcodec_init();
#endif
avcodec_register_all();
@@ -111,6 +125,7 @@ cMarkAdDecoder::cMarkAdDecoder(bool useH264, int Threads)
last_qscale_table=NULL;
skipframes=true;
+ addPkt=false;
noticeERRVID=false;
cpu_set_t cpumask;
@@ -151,45 +166,54 @@ cMarkAdDecoder::cMarkAdDecoder(bool useH264, int Threads)
}
video_codec=NULL;
+#if LIBAVCODEC_VERSION_INT >= ((54<<16)+(51<<8)+100)
+ AVCodecID video_codecid;
+#else
CodecID video_codecid;
+#endif
if (useH264)
{
- video_codecid=CODEC_ID_H264;
+ video_codecid=AV_CODEC_ID_H264;
}
else
{
- video_codecid=CODEC_ID_MPEG2VIDEO_XVMC;
+ video_codecid=AV_CODEC_ID_MPEG2VIDEO_XVMC;
}
video_codec = avcodec_find_decoder(video_codecid);
- if ((!video_codec) && (video_codecid==CODEC_ID_MPEG2VIDEO_XVMC))
+ if ((!video_codec) && (video_codecid==AV_CODEC_ID_MPEG2VIDEO_XVMC))
{
// fallback to MPEG2VIDEO
- video_codecid=CODEC_ID_MPEG2VIDEO;
+ video_codecid=AV_CODEC_ID_MPEG2VIDEO;
video_codec=avcodec_find_decoder(video_codecid);
}
if (video_codec)
{
+#if LIBAVCODEC_VERSION_INT >= ((54<<16)+(51<<8)+100)
+ video_context = avcodec_alloc_context3(NULL);
+#else
video_context = avcodec_alloc_context();
+#endif
if (video_context)
{
if (video_codec->capabilities & CODEC_CAP_TRUNCATED)
video_context->flags|=CODEC_FLAG_TRUNCATED; // we do not send complete frames
-
+ video_context->flags|=CODEC_FLAG_LOW_DELAY;
video_context->flags2|=CODEC_FLAG2_FAST; // really?
video_context->skip_idct=AVDISCARD_ALL;
- av_log_set_level(AV_LOG_FATAL); // silence decoder output
-
- if (video_codecid==CODEC_ID_H264)
- {
- video_context->flags2|=CODEC_FLAG2_CHUNKS; // needed for H264!
- }
- else
+ if (video_codecid!=AV_CODEC_ID_H264)
{
video_context->skip_frame=AVDISCARD_NONKEY; // just I-frames
+ } else {
+ video_context->flags2|=CODEC_FLAG2_CHUNKS;
+#if LIBAVCODEC_VERSION_INT >= ((52<<16)+(47<<8)+0)
+ av_log_set_level(AV_LOG_FATAL); // silence decoder output
+#else
+ av_log_set_level(AV_LOG_QUIET);
+#endif
}
video_context->codec_id = video_codecid;
video_context->codec_type = AVMEDIA_TYPE_VIDEO;
@@ -198,15 +222,15 @@ cMarkAdDecoder::cMarkAdDecoder(bool useH264, int Threads)
#else
int ret=avcodec_open(video_context, video_codec);
#endif
- if ((ret < 0) && (video_codecid==CODEC_ID_MPEG2VIDEO_XVMC))
+ if ((ret < 0) && (video_codecid==AV_CODEC_ID_MPEG2VIDEO_XVMC))
{
// fallback to MPEG2VIDEO
- video_codecid=CODEC_ID_MPEG2VIDEO;
+ video_codecid=AV_CODEC_ID_MPEG2VIDEO;
video_codec=avcodec_find_decoder(video_codecid);
if (video_codec)
{
video_context->codec_type=AVMEDIA_TYPE_UNKNOWN;
- video_context->codec_id=CODEC_ID_NONE;
+ video_context->codec_id=AV_CODEC_ID_NONE;
video_context->codec_tag=0;
memset(video_context->codec_name,0,sizeof(video_context->codec_name));
#if LIBAVCODEC_VERSION_INT >= ((53<<16)+(5<<8)+0)
@@ -225,13 +249,13 @@ cMarkAdDecoder::cMarkAdDecoder(bool useH264, int Threads)
{
switch (video_codecid)
{
- case CODEC_ID_H264:
+ case AV_CODEC_ID_H264:
esyslog("could not open codec for H264");
break;
- case CODEC_ID_MPEG2VIDEO_XVMC:
+ case AV_CODEC_ID_MPEG2VIDEO_XVMC:
esyslog("could not open codec MPEG2 (XVMC)");
break;
- case CODEC_ID_MPEG2VIDEO:
+ case AV_CODEC_ID_MPEG2VIDEO:
esyslog("could not open codec MPEG2");
break;
default:
@@ -286,13 +310,13 @@ cMarkAdDecoder::cMarkAdDecoder(bool useH264, int Threads)
{
switch (video_codecid)
{
- case CODEC_ID_H264:
+ case AV_CODEC_ID_H264:
esyslog("codec for H264 not found");
break;
- case CODEC_ID_MPEG2VIDEO_XVMC:
+ case AV_CODEC_ID_MPEG2VIDEO_XVMC:
esyslog("codec for MPEG2 (XVMC) not found");
break;
- case CODEC_ID_MPEG2VIDEO:
+ case AV_CODEC_ID_MPEG2VIDEO:
esyslog("codec for MPEG2 not found");
break;
default:
@@ -321,7 +345,11 @@ bool cMarkAdDecoder::Clear()
{
avcodec_flush_buffers(video_context);
AVCodecContext *dest;
+#if LIBAVCODEC_VERSION_INT >= ((54<<16)+(51<<8)+100)
+ dest=avcodec_alloc_context3(NULL);
+#else
dest=avcodec_alloc_context();
+#endif
if (dest)
{
if (avcodec_copy_context(dest,video_context)!=0) ret=false;
@@ -384,26 +412,18 @@ bool cMarkAdDecoder::DecodeVideo(MarkAdContext *maContext,uchar *pkt, int plen)
if (!video_frame) return false;
maContext->Video.Data.Valid=false;
- if ((video_context->codec_id==CODEC_ID_H264) && (!video_context->skip_frame))
- {
- // with H264 we cannot set skip_frame just to NONKEY, is depends on Interlaced...
- if (maContext->Video.Info.Height)
- {
- if (maContext->Video.Info.Interlaced)
- {
- video_context->skip_frame=AVDISCARD_BIDIR; // just P/I-frames
- video_context->skip_loop_filter=AVDISCARD_BIDIR;
- }
- else
- {
- video_context->skip_frame=AVDISCARD_NONKEY; // just I-frames
- video_context->skip_loop_filter=AVDISCARD_NONKEY;
- }
+ if (video_context->codec_id==AV_CODEC_ID_H264) {
+ if (plen>=5) {
+ if (((pkt[4] & 0x1F)==9) && (pkt[5]==0x10)) addPkt=true;
}
- else
- {
- return false;
+ if (!addPkt) return false;
+ }
+
+ if (video_context->codec_id==AV_CODEC_ID_MPEG2VIDEO) {
+ if (plen>=5) {
+ if (!pkt[0] && !pkt[1] && (pkt[2]==1) && !pkt[3] && ((pkt[5] & 8)==8)) addPkt=true;
}
+ if (!addPkt) return false;
}
AVPacket avpkt;
@@ -436,6 +456,7 @@ bool cMarkAdDecoder::DecodeVideo(MarkAdContext *maContext,uchar *pkt, int plen)
{
esyslog("error decoding video");
noticeERRVID=true;
+ addPkt=false;
}
break;
}
@@ -446,19 +467,10 @@ bool cMarkAdDecoder::DecodeVideo(MarkAdContext *maContext,uchar *pkt, int plen)
}
if (video_frame_ready)
{
- if (video_context->skip_frame!=AVDISCARD_DEFAULT)
- {
- if (last_qscale_table!=video_frame->qscale_table)
- {
- if (SetVideoInfos(maContext,video_context,video_frame)) ret=true;
- last_qscale_table=video_frame->qscale_table;
- }
- }
- else
- {
- if (SetVideoInfos(maContext,video_context,video_frame)) ret=true;
- }
+ if (SetVideoInfos(maContext,video_context,video_frame)) ret=true;
}
+ if (!len) break;
}
+ if (ret) addPkt=false;
return ret;
}
diff --git a/command/decoder.h b/command/decoder.h
index 707ca56..416f74c 100644
--- a/command/decoder.h
+++ b/command/decoder.h
@@ -51,6 +51,7 @@ private:
bool SetVideoInfos(MarkAdContext *maContext,AVCodecContext *Video_Context,
AVFrame *Video_Frame);
bool noticeERRVID;
+ bool addPkt;
public:
bool DecodeVideo(MarkAdContext *maContext, uchar *pkt, int plen);
bool Clear();
diff --git a/command/demux.cpp b/command/demux.cpp
index b136d17..0423f2c 100644
--- a/command/demux.cpp
+++ b/command/demux.cpp
@@ -112,6 +112,7 @@ int cPaketQueue::findpktheader(int start, int *streamsize,int *headersize, bool
{
if (scanner==1L)
{
+ if (buffer[i]==0xE0) longstartcode=false;
found=true;
break;
}
@@ -149,6 +150,7 @@ int cPaketQueue::findpktheader(int start, int *streamsize,int *headersize, bool
{
if (scanner==1L)
{
+ if (buffer[i]==0xE0) longstartcode=false;
found=true;
}
if ((scanner & 0xFFFFFFF0)==0x1E0L)
@@ -389,9 +391,9 @@ bool cPaketQueue::Put(uchar *Data, int Size)
if (outptr>(inptr-outptr))
{
memcpy(buffer,&buffer[outptr],inptr-outptr);
- if (scannerstart==inptr) scannerstart-=outptr;
+ scannerstart-=outptr;
inptr-=outptr;
- if (pktinfo.pkthdr==outptr) pktinfo.pkthdr=0;
+ if (pktinfo.pkthdr>0) pktinfo.pkthdr-=outptr;
outptr=0;
}
}
@@ -540,6 +542,7 @@ uchar *cPaketQueue::GetPacket(int *Size, int Type)
else
{
scannerstart=pkthdr+pktsyncsize;
+ if (pktsyncsize>4) scanner=0xFFFFFFFF;
}
uchar *ptr=&buffer[pktinfo.pkthdr];
@@ -602,7 +605,7 @@ void cTS2Pkt::Clear(AvPacket *Pkt)
Pkt->Type=0;
Pkt->Stream=0;
}
- sync=false;
+ firstsync=sync=false;
counter=-1;
if (queue) queue->Clear();
}
@@ -683,10 +686,16 @@ bool cTS2Pkt::Process(uchar *TSData, int TSSize, AvPacket *Pkt)
return true;
}
- if ((tshdr->TError) && (lasterror!=ERR_HDRBIT))
+ if (tshdr->TError)
{
- lasterror=ERR_HDRBIT;
- esyslog("stream error bit set (0x%04x)",pid);
+ if (lasterror!=ERR_HDRBIT) {
+ lasterror=ERR_HDRBIT;
+ esyslog("stream error bit set (0x%04x)",pid);
+ }
+ Clear(Pkt);
+ skipped+=queue->Skipped();
+ skipped+=TS_SIZE;
+ return true;
}
int buflen=TS_SIZE+1;
@@ -969,7 +978,7 @@ void cDemux::Clear()
if (ts2pkt_apid) ts2pkt_apid->Clear();
if (queue) queue->Clear();
- offset=0;
+ offset=rawoffset=0;
vdroffset=0;
last_bplen=0;
from_oldfile=0;
@@ -1186,7 +1195,7 @@ bool cDemux::vdraddpatpmt(uchar *data, int count)
// a picture starts @376, vdr outputs 0 (!)
int pid;
if (checkts(data,count,pid)!=0) return false;
- if ((!pid) || (pid==132))
+ if ((!pid) || (pid==132)) // 0=PAT 132=PMT
{
last_bplen=0;
vdroffset+=count;
@@ -1242,10 +1251,7 @@ int cDemux::Process(uchar *Data, int Count, AvPacket *pkt)
if ((raw) && (!Data) && (!Count))
{
uchar Dummy[6];
- if (TS)
- {
- }
- else
+ if (!TS)
{
Dummy[0]=0;
Dummy[1]=0;
@@ -1269,6 +1275,7 @@ int cDemux::Process(uchar *Data, int Count, AvPacket *pkt)
bpkt=queue->Get(&bplen);
if (!bpkt) return -1;
last_bplen=bplen;
+ rawoffset+=bplen;
if ((vdrcount) && (TS)) vdraddpatpmt(bpkt,bplen);
}
@@ -1337,7 +1344,7 @@ int cDemux::Process(uchar *Data, int Count, AvPacket *pkt)
break;
}
}
- if (TS)
+ else
{
if (stream_or_pid==vpid)
{
@@ -1345,7 +1352,7 @@ int cDemux::Process(uchar *Data, int Count, AvPacket *pkt)
{
if (h264)
{
- ts2pkt_vpid=new cTS2Pkt(vpid,"TS2H264",524288,true);
+ ts2pkt_vpid=new cTS2Pkt(vpid,"TS2H264",819200,true);
}
else
{
@@ -1363,7 +1370,7 @@ int cDemux::Process(uchar *Data, int Count, AvPacket *pkt)
ts2pkt_vpid->Resize(3*tpkt.Length,"TS2PES");
if (h264)
{
- pes2videoes=new cPES2ES(PACKET_H264,"PES2H264ES",524288);
+ pes2videoes=new cPES2ES(PACKET_H264,"PES2H264ES",589824);
}
else
{
diff --git a/command/demux.h b/command/demux.h
index ba71e30..8385b3e 100644
--- a/command/demux.h
+++ b/command/demux.h
@@ -326,6 +326,7 @@ private:
bool h264;
bool TS;
uint64_t offset;
+ uint64_t rawoffset;
int from_oldfile;
int last_bplen;
diff --git a/command/global.h b/command/global.h
index aad3c62..116fc4d 100644
--- a/command/global.h
+++ b/command/global.h
@@ -67,6 +67,7 @@ typedef struct config
int ignoreInfo;
int svdrpport;
int threads;
+ int astopoffs;
bool DecodeVideo;
bool DecodeAudio;
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/3sat-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/3sat-A16_9-P0.pgm
index 573b282..2da0b4d 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/3sat-A16_9-P0.pgm differ
diff --git a/command/logos/ATV-A16_9-P0.pgm b/command/logos/ATV-A16_9-P0.pgm
index daa2553..5ed6ff4 100644
Binary files a/command/logos/ATV-A16_9-P0.pgm and b/command/logos/ATV-A16_9-P0.pgm differ
diff --git a/command/logos/ATV-A16_9-P2.pgm b/command/logos/ATV-A16_9-P2.pgm
index 92bf091..0bfba9a 100644
Binary files a/command/logos/ATV-A16_9-P2.pgm and b/command/logos/ATV-A16_9-P2.pgm differ
diff --git a/command/logos/kabel_eins_HD-A16_9-P0.pgm b/command/logos/ATV_HD-A16_9-P0.pgm
similarity index 72%
copy from command/logos/kabel_eins_HD-A16_9-P0.pgm
copy to command/logos/ATV_HD-A16_9-P0.pgm
index c113e45..11816db 100644
--- a/command/logos/kabel_eins_HD-A16_9-P0.pgm
+++ b/command/logos/ATV_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-315 135
+321 127
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/AXN_Action-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/AXN_Action-A16_9-P0.pgm
index 573b282..49ffa8f 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/AXN_Action-A16_9-P0.pgm
@@ -2,4 +2,4 @@ P5
#C1
192 100
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/DMAX-A16_9-P0.pgm b/command/logos/DMAX-A16_9-P0.pgm
index c79317f..310bc48 100644
Binary files a/command/logos/DMAX-A16_9-P0.pgm and b/command/logos/DMAX-A16_9-P0.pgm differ
diff --git a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm b/command/logos/Das_Erste_HD-A16_9-P0.pgm
similarity index 73%
copy from command/logos/SUPER_RTL_HD-A16_9-P0.pgm
copy to command/logos/Das_Erste_HD-A16_9-P0.pgm
index 82767f5..57db041 100644
--- a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm
+++ b/command/logos/Das_Erste_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
-#C0
-445 137
+#C1
+288 180
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/kabel_eins_HD-A16_9-P0.pgm b/command/logos/Deluxe_Music_HD-A3_2-P0.pgm
similarity index 58%
copy from command/logos/kabel_eins_HD-A16_9-P0.pgm
copy to command/logos/Deluxe_Music_HD-A3_2-P0.pgm
index c113e45..0996626 100644
--- a/command/logos/kabel_eins_HD-A16_9-P0.pgm
+++ b/command/logos/Deluxe_Music_HD-A3_2-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-315 135
+210 190
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/Disney_Channel-A16_9-P0.pgm
similarity index 63%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/Disney_Channel-A16_9-P0.pgm
index 573b282..a97ae87 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/Disney_Channel-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
-#C1
-192 100
+#C0
+168 120
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
diff --git a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm b/command/logos/Disney_Channel_HD-A4_3-P0.pgm
similarity index 72%
copy from command/logos/SUPER_RTL_HD-A16_9-P0.pgm
copy to command/logos/Disney_Channel_HD-A4_3-P0.pgm
index 82767f5..55b70c1 100644
--- a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm
+++ b/command/logos/Disney_Channel_HD-A4_3-P0.pgm
@@ -1,5 +1,5 @@
P5
#C0
-445 137
+314 207
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/EinsPlus-A16_9-P1.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/EinsPlus-A16_9-P1.pgm
index 573b282..9845de6 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/EinsPlus-A16_9-P1.pgm
@@ -1,5 +1,5 @@
P5
-#C1
+# CREATOR: GIMP PNM Filter Version 1.1
192 100
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/EinsPlus-A16_9-P2.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/EinsPlus-A16_9-P2.pgm
index 573b282..660934a 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/EinsPlus-A16_9-P2.pgm
@@ -1,5 +1,5 @@
P5
-#C1
+# CREATOR: GIMP PNM Filter Version 1.1
192 100
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/Fox_Serie-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/Fox_Serie-A16_9-P0.pgm
index 573b282..e3b528b 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/Fox_Serie-A16_9-P0.pgm
@@ -2,4 +2,4 @@ P5
#C1
192 100
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/Fox_Serie-A4_3-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/Fox_Serie-A4_3-P0.pgm
index 573b282..6c498dc 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/Fox_Serie-A4_3-P0.pgm
@@ -2,4 +2,4 @@ P5
#C1
192 100
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P1.pgm b/command/logos/MDR_Sachsen-A16_9-P0.pgm
similarity index 66%
copy from command/logos/PULS_4_Austria-A16_9-P1.pgm
copy to command/logos/MDR_Sachsen-A16_9-P0.pgm
index 4c921ab..b8ed473 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P1.pgm and b/command/logos/MDR_Sachsen-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/N24_HD-A4_3-P0.pgm
similarity index 52%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/N24_HD-A4_3-P0.pgm
index 573b282..380f4aa 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/N24_HD-A4_3-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-192 100
+160 160
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P1.pgm b/command/logos/N24_HD-A4_3-P1.pgm
similarity index 50%
copy from command/logos/PULS_4_Austria-A16_9-P1.pgm
copy to command/logos/N24_HD-A4_3-P1.pgm
index 4c921ab..1dbcfca 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P1.pgm and b/command/logos/N24_HD-A4_3-P1.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P1.pgm b/command/logos/N24_HD-A4_3-P2.pgm
similarity index 50%
copy from command/logos/PULS_4_Austria-A16_9-P1.pgm
copy to command/logos/N24_HD-A4_3-P2.pgm
index 4c921ab..8cf8504 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P1.pgm and b/command/logos/N24_HD-A4_3-P2.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/NDR_FS_HH-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/NDR_FS_HH-A16_9-P0.pgm
index 573b282..bb04c7c 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/NDR_FS_HH-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/NDR_FS_MV-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/NDR_FS_MV-A16_9-P0.pgm
index 573b282..bb04c7c 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/NDR_FS_MV-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/NDR_FS_NDS-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/NDR_FS_NDS-A16_9-P0.pgm
index 573b282..bb04c7c 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/NDR_FS_NDS-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/NDR_FS_SH-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/NDR_FS_SH-A16_9-P0.pgm
index 573b282..bb04c7c 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/NDR_FS_SH-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/ORF1_HD-A16_9-P0.pgm
similarity index 58%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/ORF1_HD-A16_9-P0.pgm
index 573b282..a5f9389 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/ORF1_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
-#C1
-192 100
+#C0
+256 90
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/PHOENIX_HD-A16_9-P0.pgm
similarity index 51%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/PHOENIX_HD-A16_9-P0.pgm
index 573b282..fe5cee3 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/PHOENIX_HD-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P1.pgm b/command/logos/PHOENIX_HD-A16_9-P1.pgm
similarity index 63%
copy from command/logos/PULS_4_Austria-A16_9-P1.pgm
copy to command/logos/PHOENIX_HD-A16_9-P1.pgm
index 4c921ab..96bbdbb 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P1.pgm and b/command/logos/PHOENIX_HD-A16_9-P1.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P1.pgm b/command/logos/PHOENIX_HD-A16_9-P2.pgm
similarity index 63%
copy from command/logos/PULS_4_Austria-A16_9-P1.pgm
copy to command/logos/PHOENIX_HD-A16_9-P2.pgm
index 4c921ab..6862d8b 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P1.pgm and b/command/logos/PHOENIX_HD-A16_9-P2.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/PULS_4_Austria-A16_9-P0.pgm
index 573b282..8eb6ff9 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/PULS_4_Austria-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P1.pgm b/command/logos/PULS_4_Austria-A16_9-P1.pgm
index 4c921ab..6d862e8 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P1.pgm and b/command/logos/PULS_4_Austria-A16_9-P1.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P2.pgm b/command/logos/PULS_4_Austria-A16_9-P2.pgm
index 934f6aa..1979b42 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P2.pgm and b/command/logos/PULS_4_Austria-A16_9-P2.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/ProSieben-A4_3-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/ProSieben-A4_3-P0.pgm
index 573b282..366590c 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/ProSieben-A4_3-P0.pgm differ
diff --git a/command/logos/ProSieben_MAXX-A16_9-P0.pgm b/command/logos/ProSieben_MAXX-A16_9-P0.pgm
new file mode 100644
index 0000000..8f4a96a
Binary files /dev/null and b/command/logos/ProSieben_MAXX-A16_9-P0.pgm differ
diff --git a/command/logos/kabel_eins_HD-A16_9-P0.pgm b/command/logos/ProSieben_MAXX_HD-A16_9-P0.pgm
similarity index 72%
copy from command/logos/kabel_eins_HD-A16_9-P0.pgm
copy to command/logos/ProSieben_MAXX_HD-A16_9-P0.pgm
index c113e45..d593a9e 100644
--- a/command/logos/kabel_eins_HD-A16_9-P0.pgm
+++ b/command/logos/ProSieben_MAXX_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-315 135
+299 156
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/SIXX-A16_9-P0.pgm b/command/logos/RSI_LA_1_HD-A16_9-P0.pgm
similarity index 50%
copy from command/logos/SIXX-A16_9-P0.pgm
copy to command/logos/RSI_LA_1_HD-A16_9-P0.pgm
index 9fe88b1..af080b5 100644
Binary files a/command/logos/SIXX-A16_9-P0.pgm and b/command/logos/RSI_LA_1_HD-A16_9-P0.pgm differ
diff --git a/command/logos/SIXX-A16_9-P0.pgm b/command/logos/RTL-A16_9-P0.pgm
similarity index 70%
copy from command/logos/SIXX-A16_9-P0.pgm
copy to command/logos/RTL-A16_9-P0.pgm
index 9fe88b1..a3f7ba6 100644
Binary files a/command/logos/SIXX-A16_9-P0.pgm and b/command/logos/RTL-A16_9-P0.pgm differ
diff --git a/command/logos/SIXX-A16_9-P0.pgm b/command/logos/RTS_Deux_HD-A16_9-P0.pgm
similarity index 64%
copy from command/logos/SIXX-A16_9-P0.pgm
copy to command/logos/RTS_Deux_HD-A16_9-P0.pgm
index 9fe88b1..52c710f 100644
Binary files a/command/logos/SIXX-A16_9-P0.pgm and b/command/logos/RTS_Deux_HD-A16_9-P0.pgm differ
diff --git a/command/logos/ATV-A16_9-P0.pgm b/command/logos/RTS_Un_HD-A16_9-P0.pgm
similarity index 67%
copy from command/logos/ATV-A16_9-P0.pgm
copy to command/logos/RTS_Un_HD-A16_9-P0.pgm
index daa2553..616b922 100644
Binary files a/command/logos/ATV-A16_9-P0.pgm and b/command/logos/RTS_Un_HD-A16_9-P0.pgm differ
diff --git a/command/logos/kabel_eins_HD-A16_9-P0.pgm b/command/logos/SAT_1_HD_Austria-A16_9-P0.pgm
similarity index 58%
copy from command/logos/kabel_eins_HD-A16_9-P0.pgm
copy to command/logos/SAT_1_HD_Austria-A16_9-P0.pgm
index c113e45..03d24ba 100644
--- a/command/logos/kabel_eins_HD-A16_9-P0.pgm
+++ b/command/logos/SAT_1_HD_Austria-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-315 135
+215 167
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/SF_1_HD-A16_9-P0.pgm b/command/logos/SF_1_HD-A16_9-P0.pgm
new file mode 100644
index 0000000..bc2b058
--- /dev/null
+++ b/command/logos/SF_1_HD-A16_9-P0.pgm
@@ -0,0 +1,5 @@
+P5
+#C1
+210 110
+255
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/SF_zwei_HD-A16_9-P0.pgm b/command/logos/SF_zwei_HD-A16_9-P0.pgm
new file mode 100644
index 0000000..136611d
--- /dev/null
+++ b/command/logos/SF_zwei_HD-A16_9-P0.pgm
@@ -0,0 +1,5 @@
+P5
+#C1
+264 104
+255
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/SF_zwei_HD-A16_9-P1.pgm b/command/logos/SF_zwei_HD-A16_9-P1.pgm
new file mode 100644
index 0000000..9bae231
Binary files /dev/null and b/command/logos/SF_zwei_HD-A16_9-P1.pgm differ
diff --git a/command/logos/SF_zwei_HD-A16_9-P2.pgm b/command/logos/SF_zwei_HD-A16_9-P2.pgm
new file mode 100644
index 0000000..fd061aa
Binary files /dev/null and b/command/logos/SF_zwei_HD-A16_9-P2.pgm differ
diff --git a/command/logos/SIXX-A16_9-P0.pgm b/command/logos/SIXX-A16_9-P0.pgm
index 9fe88b1..e9d0917 100644
Binary files a/command/logos/SIXX-A16_9-P0.pgm and b/command/logos/SIXX-A16_9-P0.pgm differ
diff --git a/command/logos/SIXX_HD-A16_9-P0.pgm b/command/logos/SIXX_HD-A16_9-P0.pgm
index aaa038b..9b9297e 100644
--- a/command/logos/SIXX_HD-A16_9-P0.pgm
+++ b/command/logos/SIXX_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-365 171
+312 106
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/kabel_eins_HD-A16_9-P0.pgm b/command/logos/SPORT1_HD-A4_3-P0.pgm
similarity index 57%
copy from command/logos/kabel_eins_HD-A16_9-P0.pgm
copy to command/logos/SPORT1_HD-A4_3-P0.pgm
index c113e45..cd6d304 100644
--- a/command/logos/kabel_eins_HD-A16_9-P0.pgm
+++ b/command/logos/SPORT1_HD-A4_3-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-315 135
+360 160
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/SUPER_RTL-A4_3-P0.pgm
similarity index 70%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/SUPER_RTL-A4_3-P0.pgm
index 573b282..c927f91 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/SUPER_RTL-A4_3-P0.pgm
@@ -1,5 +1,5 @@
P5
-#C1
+#C0
192 100
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm b/command/logos/SUPER_RTL_HD-A16_9-P0.pgm
index 82767f5..ee1880f 100644
--- a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm
+++ b/command/logos/SUPER_RTL_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
#C0
-445 137
+389 110
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/ZDF-A16_9-P0.pgm
similarity index 69%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/ZDF-A16_9-P0.pgm
index 573b282..8894c26 100644
Binary files a/command/logos/PULS_4_Austria-A16_9-P0.pgm and b/command/logos/ZDF-A16_9-P0.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/ZDFinfo_HD-A16_9-P0.pgm
similarity index 51%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/ZDFinfo_HD-A16_9-P0.pgm
index 573b282..0b756fe 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/ZDFinfo_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
-#C1
-192 100
+#C0
+248 104
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm b/command/logos/arte_HD-A16_9-P0.pgm
similarity index 77%
copy from command/logos/SUPER_RTL_HD-A16_9-P0.pgm
copy to command/logos/arte_HD-A16_9-P0.pgm
index 82767f5..5c2a08d 100644
--- a/command/logos/SUPER_RTL_HD-A16_9-P0.pgm
+++ b/command/logos/arte_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
#C0
-445 137
+288 180
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/kabel_eins_HD-A16_9-P0.pgm b/command/logos/kabel_eins_HD-A16_9-P0.pgm
index c113e45..0d16006 100644
--- a/command/logos/kabel_eins_HD-A16_9-P0.pgm
+++ b/command/logos/kabel_eins_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
#C1
-315 135
+288 180
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/logos/kabel_eins_HD-A16_9-P1.pgm b/command/logos/kabel_eins_HD-A16_9-P1.pgm
index 3863ef1..72430b9 100644
Binary files a/command/logos/kabel_eins_HD-A16_9-P1.pgm and b/command/logos/kabel_eins_HD-A16_9-P1.pgm differ
diff --git a/command/logos/kabel_eins_HD-A16_9-P2.pgm b/command/logos/kabel_eins_HD-A16_9-P2.pgm
index 53adb1b..03a9ae3 100644
Binary files a/command/logos/kabel_eins_HD-A16_9-P2.pgm and b/command/logos/kabel_eins_HD-A16_9-P2.pgm differ
diff --git a/command/logos/PULS_4_Austria-A16_9-P0.pgm b/command/logos/zdf_kultur_HD-A16_9-P0.pgm
similarity index 55%
copy from command/logos/PULS_4_Austria-A16_9-P0.pgm
copy to command/logos/zdf_kultur_HD-A16_9-P0.pgm
index 573b282..a13caeb 100644
--- a/command/logos/PULS_4_Austria-A16_9-P0.pgm
+++ b/command/logos/zdf_kultur_HD-A16_9-P0.pgm
@@ -1,5 +1,5 @@
P5
-#C1
-192 100
+#C0
+272 88
255
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
\ No newline at end of file
diff --git a/command/markad-standalone.cpp b/command/markad-standalone.cpp
index cb84f2b..4ca71cd 100644
--- a/command/markad-standalone.cpp
+++ b/command/markad-standalone.cpp
@@ -94,6 +94,7 @@ cOSDMessage::cOSDMessage(const char *Host, int Port)
msg=NULL;
host=strdup(Host);
port=Port;
+ send(this);
}
cOSDMessage::~cOSDMessage()
@@ -103,10 +104,14 @@ cOSDMessage::~cOSDMessage()
if (host) free((void*) host);
}
-bool cOSDMessage::readreply(int fd)
+bool cOSDMessage::readreply(int fd, char **reply)
{
usleep(400000);
char c=' ';
+ int repsize=0;
+ int msgsize=0;
+ bool skip=false;
+ if (reply) *reply=NULL;
do
{
struct pollfd fds;
@@ -118,6 +123,22 @@ bool cOSDMessage::readreply(int fd)
if (ret<=0) return false;
if (fds.revents!=POLLIN) return false;
if (read(fd,&c,1)<0) return false;
+ if ((reply) && (!skip) && (c!=10) && (c!=13)) {
+ msgsize++;
+ while ((msgsize+5)>repsize) {
+ repsize+=80;
+ char *tmp=(char *) realloc(*reply,repsize);
+ if (!tmp) {
+ free(*reply);
+ *reply=NULL;
+ skip=true;
+ } else {
+ *reply=tmp;
+ }
+ }
+ (*reply)[msgsize-1]=c;
+ (*reply)[msgsize]=0;
+ }
}
while (c!='\n');
return true;
@@ -150,21 +171,39 @@ void *cOSDMessage::send(void *posd)
return NULL;
}
- if (!osd->readreply(sock))
+ char *reply=NULL;
+ if (!osd->readreply(sock,&reply))
{
+ if (reply) free(reply);
close(sock);
return NULL;
}
ssize_t ret;
- ret=write(sock,"MESG ",5);
- if (ret!=(ssize_t)-1) ret=write(sock,osd->msg,strlen(osd->msg));
- if (ret!=(ssize_t)-1) ret=write(sock,"\r\n",2);
+ if (osd->msg) {
+ if (reply) free(reply);
+ ret=write(sock,"MESG ",5);
+ if (ret!=(ssize_t)-1) ret=write(sock,osd->msg,strlen(osd->msg));
+ if (ret!=(ssize_t)-1) ret=write(sock,"\r\n",2);
- if (!osd->readreply(sock) || (ret==(ssize_t)-1))
- {
- close(sock);
- return NULL;
+ if (!osd->readreply(sock) || (ret==(ssize_t)-1))
+ {
+ close(sock);
+ return NULL;
+ }
+ } else {
+ if (reply) {
+ char *cs=strrchr(reply,';');
+ if (cs) {
+ cs+=2;
+ trcs(cs);
+ } else {
+ trcs("UTF-8"); // just a guess
+ }
+ free(reply);
+ } else {
+ trcs("UTF-8"); // just a guess
+ }
}
ret=write(sock,"QUIT\r\n",6);
@@ -195,9 +234,11 @@ void cMarkAdStandalone::CalculateCheckPositions(int startframe)
int delta=macontext.Video.Info.FramesPerSecond*MAXRANGE;
int len_in_frames=macontext.Video.Info.FramesPerSecond*length;
+ int len_in_framesA=macontext.Video.Info.FramesPerSecond*(length+macontext.Config->astopoffs);
iStart=-startframe;
iStop=-(startframe+len_in_frames);
+ iStopA=-(startframe+len_in_framesA);
chkSTART=-iStart+delta;
chkSTOP=-iStop+(3*delta);
}
@@ -220,17 +261,18 @@ void cMarkAdStandalone::CheckStop()
{
MarkAdMark mark;
memset(&mark,0,sizeof(mark));
- mark.Position=iStop;
+ mark.Position=iStopA;
mark.Type=MT_ASSUMEDSTOP;
AddMark(&mark);
+ marks.DelTill(iStopA,false);
}
else
{
isyslog("removing marks from position %i, if any",iStop);
+ marks.DelTill(iStop,false);
}
- marks.DelTill(iStop,false);
}
- iStop=0;
+ iStop=iStopA=0;
gotendmark=true;
}
@@ -278,28 +320,29 @@ void cMarkAdStandalone::CheckStart()
}
macontext.Info.Channels=macontext.Audio.Info.Channels;
- if (macontext.Info.Channels==6)
- {
- isyslog("DolbyDigital5.1 audio detected. logo/border/aspect detection disabled");
- bDecodeVideo=false;
- macontext.Video.Options.IgnoreAspectRatio=true;
- macontext.Video.Options.IgnoreLogoDetection=true;
- marks.Del(MT_ASPECTSTART);
- marks.Del(MT_ASPECTSTOP);
- // start mark must be around istart
- begin=marks.GetAround(INT_MAX,iStart,MT_CHANNELSTART);
- }
- else
- {
- if (macontext.Info.DPid.Num)
+ if (macontext.Config->DecodeAudio) {
+ if (macontext.Info.Channels==6)
{
- if (macontext.Info.Channels)
- isyslog("broadcast with %i audio channels, disabling AC3 decoding",macontext.Info.Channels);
- macontext.Info.DPid.Num=0;
- demux->DisableDPid();
+ isyslog("DolbyDigital5.1 audio detected. logo/border/aspect detection disabled");
+ bDecodeVideo=false;
+ macontext.Video.Options.IgnoreAspectRatio=true;
+ macontext.Video.Options.IgnoreLogoDetection=true;
+ marks.Del(MT_ASPECTSTART);
+ marks.Del(MT_ASPECTSTOP);
+ // start mark must be around istart
+ begin=marks.GetAround(INT_MAX,iStart,MT_CHANNELSTART);
+ }
+ else
+ {
+ if (macontext.Info.DPid.Num)
+ {
+ if (macontext.Info.Channels)
+ isyslog("broadcast with %i audio channels, disabling AC3 decoding",macontext.Info.Channels);
+ macontext.Info.DPid.Num=0;
+ demux->DisableDPid();
+ }
}
}
-
if ((macontext.Info.AspectRatio.Num) && ((macontext.Info.AspectRatio.Num!=
macontext.Video.Info.AspectRatio.Num) || (macontext.Info.AspectRatio.Den!=
macontext.Video.Info.AspectRatio.Den)))
@@ -312,22 +355,28 @@ void cMarkAdStandalone::CheckStart()
macontext.Info.AspectRatio.Num=macontext.Video.Info.AspectRatio.Num;
macontext.Info.AspectRatio.Den=macontext.Video.Info.AspectRatio.Den;
- isyslog("aspectratio of %i:%i detected. %s",
- macontext.Video.Info.AspectRatio.Num,
- macontext.Video.Info.AspectRatio.Den,
- ((macontext.Video.Info.AspectRatio.Num==4) &&
- (macontext.Video.Info.AspectRatio.Den==3)) ?
- "logo/border detection disabled" : "");
+ if (macontext.Info.VPid.Type==MARKAD_PIDTYPE_VIDEO_H264) {
+ isyslog("aspectratio of %i:%i detected",
+ macontext.Video.Info.AspectRatio.Num,
+ macontext.Video.Info.AspectRatio.Den);
+ } else {
+ isyslog("aspectratio of %i:%i detected%s",
+ macontext.Video.Info.AspectRatio.Num,
+ macontext.Video.Info.AspectRatio.Den,
+ ((macontext.Video.Info.AspectRatio.Num==4) &&
+ (macontext.Video.Info.AspectRatio.Den==3)) ?
+ ". logo/border detection disabled" : "");
- if ((macontext.Video.Info.AspectRatio.Num==4) &&
- (macontext.Video.Info.AspectRatio.Den==3))
- {
- bDecodeVideo=false;
- macontext.Video.Options.IgnoreLogoDetection=true;
- marks.Del(MT_CHANNELSTART);
- marks.Del(MT_CHANNELSTOP);
- // start mark must be around iStart
- begin=marks.GetAround(macontext.Video.Info.FramesPerSecond*(MAXRANGE*4),iStart,MT_ASPECTSTART);
+ if ((macontext.Video.Info.AspectRatio.Num==4) &&
+ (macontext.Video.Info.AspectRatio.Den==3))
+ {
+ bDecodeVideo=false;
+ macontext.Video.Options.IgnoreLogoDetection=true;
+ marks.Del(MT_CHANNELSTART);
+ marks.Del(MT_CHANNELSTOP);
+ // start mark must be around iStart
+ begin=marks.GetAround(macontext.Video.Info.FramesPerSecond*(MAXRANGE*4),iStart,MT_ASPECTSTART);
+ }
}
if (!bDecodeVideo)
@@ -572,13 +621,21 @@ void cMarkAdStandalone::CheckIndexGrowing()
if (!indexFile) return;
if (macontext.Config->logoExtraction!=-1) return;
- if (sleepcnt>=2) return; // we already slept too much
+ if (sleepcnt>=2) {
+ dsyslog("slept too much");
+ return; // we already slept too much
+ }
bool notenough=true;
do
{
struct stat statbuf;
- if (stat(indexFile,&statbuf)==-1) return;
+ if (stat(indexFile,&statbuf)==-1) {
+ if (!macontext.Config->GenIndex) {
+ esyslog("failed to stat %s",indexFile);
+ }
+ return;
+ }
int maxframes=statbuf.st_size/8;
if (maxframes<(framecnt+200))
@@ -590,6 +647,7 @@ void cMarkAdStandalone::CheckIndexGrowing()
if (time(NULL)>(startTime+(time_t) length))
{
// "old" recording
+ dsyslog("assuming old recording, now>startTime+length");
return;
}
else
@@ -602,13 +660,30 @@ void cMarkAdStandalone::CheckIndexGrowing()
else
{
// "old" recording
+ dsyslog("assuming old recording - no length and startTime");
return;
}
}
marks.Save(directory,macontext.Video.Info.FramesPerSecond,isTS);
- sleep(WAITTIME); // now we sleep and hopefully the index will grow
- waittime+=WAITTIME;
- if (errno==EINTR) return;
+ unsigned int sleeptime=WAITTIME;
+ time_t sleepstart=time(NULL);
+ double slepttime=0;
+ while ((unsigned int)slepttime<sleeptime) {
+ while (sleeptime>0) {
+ errno=0;
+ unsigned int ret=sleep(sleeptime); // now we sleep and hopefully the index will grow
+ if ((errno) && (ret)) {
+ esyslog("got errno %i while waiting for new data",errno);
+ if (errno!=EINTR) return;
+ }
+ sleeptime=ret;
+ }
+ slepttime=difftime(time(NULL),sleepstart);
+ if (slepttime<WAITTIME) {
+ esyslog("what's wrong with your system? we just slept %.0fs",slepttime);
+ }
+ }
+ waittime+=(int) slepttime;
sleepcnt++;
if (sleepcnt>=2)
{
@@ -696,6 +771,7 @@ bool cMarkAdStandalone::ProcessFile2ndPass(clMark **Mark1, clMark **Mark2,int Nu
iframe=Frame;
int actframe=Frame;
int framecounter=0;
+ int pframe=-1;
MarkAdPos *pos=NULL;
@@ -774,23 +850,17 @@ bool cMarkAdStandalone::ProcessFile2ndPass(clMark **Mark1, clMark **Mark2,int Nu
if (macontext.Video.Info.Pict_Type==MA_I_TYPE)
{
lastiframe=iframe;
- if (macontext.Info.VPid.Type==MARKAD_PIDTYPE_VIDEO_H264)
- {
- iframe=actframe;
- }
- else
- {
- iframe=actframe-1;
- }
+ iframe=actframe-1;
dRes=true;
}
}
if (pn>mSTART) dRes=decoder->DecodeVideo(&macontext,pkt.Data,pkt.Length);
if (dRes)
{
- if ((actframe-iframe)<=3)
+ if (pframe!=lastiframe)
{
- if (pn>mSTART) pos=video->ProcessOverlap(lastiframe,Frames,(pn==mBEFORE));
+ if (pn>mSTART) pos=video->ProcessOverlap(lastiframe,Frames,(pn==mBEFORE),
+ (macontext.Info.VPid.Type==MARKAD_PIDTYPE_VIDEO_H264));
framecounter++;
}
if ((pos) && (pn==mAFTER))
@@ -800,6 +870,7 @@ bool cMarkAdStandalone::ProcessFile2ndPass(clMark **Mark1, clMark **Mark2,int Nu
close(f);
return true;
}
+ pframe=lastiframe;
}
}
tspkt+=len;
@@ -912,21 +983,37 @@ bool cMarkAdStandalone::ProcessFile(int Number)
char *fbuf;
if (isTS)
{
- if (asprintf(&fbuf,"%s/%05i.ts",directory,Number)==-1) return false;
+ if (asprintf(&fbuf,"%s/%05i.ts",directory,Number)==-1) {
+ esyslog("failed to allocate string, out of memory?");
+ return false;
+ }
}
else
{
- if (asprintf(&fbuf,"%s/%03i.vdr",directory,Number)==-1) return false;
+ if (asprintf(&fbuf,"%s/%03i.vdr",directory,Number)==-1) {
+ esyslog("failed to allocate string, out of memory?");
+ return false;
+ }
}
int f=open(fbuf,O_RDONLY);
free(fbuf);
- if (f==-1) return false;
+ if (f==-1) {
+ if (isTS) {
+ dsyslog("failed to open %05i.ts",Number);
+ } else {
+ dsyslog("failed to open %03i.vdr",Number);
+ }
+ return false;
+ }
int dataread;
dsyslog("processing file %05i",Number);
+ int pframe=-1;
+
demux->NewFile();
+again:
while ((dataread=read(f,data,datalen))>0)
{
if (abort) break;
@@ -974,7 +1061,6 @@ bool cMarkAdStandalone::ProcessFile(int Number)
{
CalculateCheckPositions(tStart*macontext.Video.Info.FramesPerSecond);
}
-
if (macontext.Config->GenIndex)
{
marks.WriteIndex(directory,isTS,demux->Offset(),macontext.Video.Info.Pict_Type,Number);
@@ -997,16 +1083,19 @@ bool cMarkAdStandalone::ProcessFile(int Number)
iStop=lastiframe;
iStopinBroadCast=inBroadCast;
}
+ if ((iStopA<0) && (lastiframe>-iStopA))
+ {
+ iStopA=lastiframe;
+ }
iframe=framecnt-1;
dRes=true;
}
}
-
if ((decoder) && (bDecodeVideo))
dRes=decoder->DecodeVideo(&macontext,pkt.Data,pkt.Length);
if (dRes)
{
- if ((framecnt-iframe)<=3)
+ if (pframe!=lastiframe)
{
MarkAdMarks *vmarks=video->Process(lastiframe,iframe);
if (vmarks)
@@ -1017,15 +1106,15 @@ bool cMarkAdStandalone::ProcessFile(int Number)
}
}
//SaveFrame(lastiframe); // TODO: JUST FOR DEBUGGING!
-
if (iStart>0)
{
if ((inBroadCast) && (lastiframe>chkSTART)) CheckStart();
}
- if (iStop>0)
+ if ((iStop>0) && (iStopA>0))
{
if (lastiframe>chkSTOP) CheckStop();
}
+ pframe=lastiframe;
}
}
}
@@ -1069,6 +1158,8 @@ bool cMarkAdStandalone::ProcessFile(int Number)
return false;
}
}
+ if ((dataread==-1) && (errno==EINTR)) goto again; // i know this is ugly ;)
+
close(f);
return true;
}
@@ -1120,7 +1211,7 @@ void cMarkAdStandalone::ProcessFile()
if (!abort)
{
CheckLogoMarks();
- if (iStop>0) CheckStop(); // no stopmark till now?
+ if ((iStop>0) && (iStopA>0)) CheckStop(); // no stopmark till now?
if ((inBroadCast) && (!gotendmark) && (lastiframe))
{
MarkAdMark tempmark;
@@ -1147,7 +1238,7 @@ void cMarkAdStandalone::Process()
{
if (length && startTime)
{
- if (time(NULL)>(startTime+(time_t) length))
+ if ((time(NULL)>(startTime+(time_t) length)) || (gotendmark))
{
int iIndexError=false;
int tframecnt=macontext.Config->GenIndex ? framecnt : 0;
@@ -1457,22 +1548,25 @@ time_t cMarkAdStandalone::GetBroadcastStart(time_t start, int fd)
if ((useatime) && (stat(directory,&statbuf)!=-1))
{
- isyslog("getting broadcast start from directory atime");
- return statbuf.st_atime;
+ if (fabs(difftime(start,statbuf.st_atime))<7200)
+ {
+ isyslog("getting broadcast start from directory atime");
+ return statbuf.st_atime;
+ }
}
// try to get from mtime
// (and hope info.vdr has not changed after the start of the recording)
if (fstat(fd,&statbuf)!=-1)
{
- if (fabs(difftime(start,statbuf.st_mtime))<1800)
+ if (fabs(difftime(start,statbuf.st_mtime))<7200)
{
isyslog("getting broadcast start from info mtime");
return (time_t) statbuf.st_mtime;
}
}
- // fallback to the directory -> worst starttime we can use!
+ // fallback to the directory
const char *timestr=strrchr(directory,'/');
if (timestr)
{
@@ -1489,7 +1583,7 @@ time_t cMarkAdStandalone::GetBroadcastStart(time_t start, int fd)
t.tm_mon--;
t.tm_sec=0;
t.tm_isdst=-1;
- isyslog("getting broadcast start from directory (can be wrong)");
+ isyslog("getting broadcast start from directory (can be wrong!)");
return mktime(&t);
}
}
@@ -1647,7 +1741,7 @@ bool cMarkAdStandalone::LoadInfo()
if ((length) && (!bIgnoreTimerInfo) && (startTime))
{
- time_t rStart=GetBroadcastStart(startTime,fileno(f));
+ time_t rStart=GetBroadcastStart(startTime, fileno(f));
if (rStart)
{
tStart=(int) (startTime-rStart);
@@ -2050,7 +2144,7 @@ cMarkAdStandalone::cMarkAdStandalone(const char *Directory, const MarkAdConfig *
bDecodeVideo=config->DecodeVideo;
bDecodeAudio=config->DecodeAudio;
- tStart=iStart=iStop=0;
+ tStart=iStart=iStop=iStopA=0;
if ((config->ignoreInfo & IGNORE_TIMERINFO)==IGNORE_TIMERINFO)
{
@@ -2175,7 +2269,7 @@ cMarkAdStandalone::cMarkAdStandalone(const char *Directory, const MarkAdConfig *
esyslog("failed loading info - logo %s%sdisabled",
(config->logoExtraction!=-1) ? "extraction" : "detection",
bIgnoreTimerInfo ? " " : " and pre-/post-timer ");
- tStart=iStart=iStop=0;
+ tStart=iStart=iStop=iStopA=0;
macontext.Video.Options.IgnoreLogoDetection=true;
macontext.Video.Options.WeakMarksOk=true;
}
@@ -2196,7 +2290,10 @@ cMarkAdStandalone::cMarkAdStandalone(const char *Directory, const MarkAdConfig *
inBroadCast=true;
}
- if (tStart>1) isyslog("pre-timer %im",tStart/60);
+ if (tStart>1) {
+ if (tStart<60) tStart=60;
+ isyslog("pre-timer %im",tStart/60);
+ }
if (length) isyslog("broadcast length %im",length/60);
if (title[0])
@@ -2211,7 +2308,7 @@ cMarkAdStandalone::cMarkAdStandalone(const char *Directory, const MarkAdConfig *
if (config->OSD)
{
osd= new cOSDMessage(config->svdrphost,config->svdrpport);
- if (osd) osd->Send("%s %s",tr("starting markad for"),ptitle);
+ if (osd) osd->Send("%s '%s'",tr("starting markad for"),ptitle);
}
else
{
@@ -2256,6 +2353,8 @@ cMarkAdStandalone::cMarkAdStandalone(const char *Directory, const MarkAdConfig *
streaminfo = new cMarkAdStreamInfo;
if (macontext.Info.ChannelName)
isyslog("channel %s",macontext.Info.ChannelName);
+ if (macontext.Info.VPid.Type==MARKAD_PIDTYPE_VIDEO_H264)
+ macontext.Video.Options.IgnoreAspectRatio=true;
}
framecnt=0;
@@ -2298,11 +2397,11 @@ cMarkAdStandalone::~cMarkAdStandalone()
{
if (abort)
{
- osd->Send("%s %s",tr("markad aborted for"),ptitle);
+ osd->Send("%s '%s'",tr("markad aborted for"),ptitle);
}
else
{
- osd->Send("%s %s",tr("markad finished for"),ptitle);
+ osd->Send("%s '%s'",tr("markad finished for"),ptitle);
}
}
@@ -2401,6 +2500,8 @@ int usage(int svdrpport)
" ip/hostname of a remote VDR for OSD messages\n"
" --svdrpport=<port> (default is %i)\n"
" port of a remote VDR for OSD messages\n"
+ " --astopoffs=<value> (default is 100)\n"
+ " assumed stop offset in seconds range from 0 to 240\n"
"\ncmd: one of\n"
"- dummy-parameter if called directly\n"
"after markad starts to analyze the recording\n"
@@ -2488,6 +2589,7 @@ int main(int argc, char *argv[])
config.logoWidth=-1;
config.logoHeight=-1;
config.threads=-1;
+ config.astopoffs=100;
strcpy(config.svdrphost,"127.0.0.1");
strcpy(config.logoDirectory,"/var/lib/markad");
@@ -2524,6 +2626,7 @@ int main(int argc, char *argv[])
{"verbose", 0, 0, 'v'},
{"asd",0,0,6},
+ {"astopoffs",1,0,12},
{"loglevel",1,0,2},
{"markfile",1,0,1},
{"nopid",0,0,5},
@@ -2835,6 +2938,17 @@ int main(int argc, char *argv[])
}
break;
+ case 12: // --astopoffs
+ if (isnumber(optarg) && atoi(optarg) >= 0 && atoi(optarg) <= 240)
+ {
+ config.astopoffs=atoi(optarg);
+ }
+ else
+ {
+ fprintf(stderr, "markad: invalid astopoffs value: %s\n", optarg);
+ return 2;
+ }
+ break;
default:
printf ("? getopt returned character code 0%o ? (option_index %d)\n", c,option_index);
diff --git a/command/markad-standalone.h b/command/markad-standalone.h
index 0a339e7..2d1becc 100644
--- a/command/markad-standalone.h
+++ b/command/markad-standalone.h
@@ -16,6 +16,7 @@
#include "streaminfo.h"
#include "marks.h"
+#define trcs(c) bind_textdomain_codeset("markad",c)
#define tr(s) dgettext("markad",s)
#define IGNORE_VIDEOINFO 1
@@ -34,7 +35,7 @@ private:
char *msg;
pthread_t tid;
static void *send(void *osd);
- bool readreply(int fd);
+ bool readreply(int fd, char **reply=NULL);
public:
int Send(const char *format, ...);
cOSDMessage(const char *Host, int Port);
@@ -209,6 +210,7 @@ unsigned Descriptor_Length:
int tStart; // pretimer in seconds
int iStart; // pretimer in frames (negative if unset)
int iStop; // endposition in frames (negative if unset)
+ int iStopA; // assumed endposition in frames (negative if unset)
bool iStopinBroadCast; // in broadcast @ iStop position?
void CheckStop();
diff --git a/command/markad.1 b/command/markad.1
index 1c4fbd8..5d9b33a 100644
--- a/command/markad.1
+++ b/command/markad.1
@@ -97,7 +97,7 @@ if online is 1, markad starts online for live\-recordings
only, online=2 starts markad online for every recording
live\-recordings are identified by having a '@' in the
filename so the entry 'Mark instant recording' in the menu
-'Setup \- Recording' of the vdr should be set to 'yes'
+\fISetup \- Recording\fR of the vdr should be set to 'yes'
.TP
.BI \-\-pass1only
process only first pass, setting of marks
diff --git a/command/marks.cpp b/command/marks.cpp
index f8a9b85..b212ef0 100644
--- a/command/marks.cpp
+++ b/command/marks.cpp
@@ -735,5 +735,6 @@ bool clMarks::Save(const char *Directory, double FrameRate, bool isTS, bool Forc
}
}
free(fpath);
+ savedcount=count;
return true;
}
diff --git a/command/streaminfo.cpp b/command/streaminfo.cpp
index 62beb6f..6defb45 100644
--- a/command/streaminfo.cpp
+++ b/command/streaminfo.cpp
@@ -134,15 +134,31 @@ bool cMarkAdStreamInfo::FindH264VideoInfos(MarkAdContext *maContext, uchar *pkt,
if (pkt[5]==0x10)
{
maContext->Video.Info.Pict_Type=MA_I_TYPE;
+ H264.use_field=false;
return true;
}
else
{
+ /*
+ if (maContext->Video.Info.Interlaced)
+ {
+ if (H264.use_field) {
+ H264.use_field=false;
+ return true;
+ } else {
+ H264.use_field=true;
+ }
+ } else {
+ return true;
+ }
+ */
+
if (maContext->Video.Info.Interlaced) {
if (H264.use_field) return true;
} else {
return true;
}
+
}
}
diff --git a/command/video.cpp b/command/video.cpp
index eb6198e..1cfbd37 100644
--- a/command/video.cpp
+++ b/command/video.cpp
@@ -84,7 +84,7 @@ int cMarkAdLogo::Load(const char *directory, char *file, int plane)
}
int width,height;
- if (fscanf(pFile, "P5\n#C%1i %3i\n%3d %3d\n255\n#", &area.corner,&area.mpixel[plane],&width,&height)!=4)
+ if (fscanf(pFile, "P5\n#C%1i %4i\n%3d %3d\n255\n#", &area.corner,&area.mpixel[plane],&width,&height)!=4)
{
fclose(pFile);
return -2;
@@ -336,10 +336,13 @@ int cMarkAdLogo::Detect(int framenumber, int *logoframenumber)
if (extract) return LOGO_NOCHANGE;
if (!processed) return LOGO_ERROR;
+ tsyslog("rp=%5i mp=%5i mpV=%5.f mpI=%5.f i=%3i s=%i",rpixel,mpixel,(mpixel*LOGO_VMARK),(mpixel*LOGO_IMARK),area.intensity,area.status);
+
if (processed==1)
{
- if ((area.intensity>100) || (area.status!=LOGO_VISIBLE) &&
- (area.intensity>180)) return LOGO_NOCHANGE;
+ // if we only have one plane we are "vulnerable"
+ // to very bright pictures, so ignore them...
+ if (area.intensity>180) return LOGO_NOCHANGE;
}
int ret=LOGO_NOCHANGE;
@@ -475,7 +478,6 @@ int cMarkAdLogo::Process(int FrameNumber, int *LogoFrameNumber)
cMarkAdBlackBordersHoriz::cMarkAdBlackBordersHoriz(MarkAdContext *maContext)
{
macontext=maContext;
-
Clear();
}
@@ -489,15 +491,15 @@ int cMarkAdBlackBordersHoriz::Process(int FrameNumber, int *BorderIFrame)
{
#define CHECKHEIGHT 20
#define BRIGHTNESS 20
-#define OFFSET 5
+#define VOFFSET 5
if (!macontext) return 0;
if (!macontext->Video.Data.Valid) return 0;
if (macontext->Video.Info.FramesPerSecond==0) return 0;
// Assumption: If we have 4:3, we should have aspectratio-changes!
- //if (macontext->Video.Info.AspectRatio.Num==4) return 0;
+ //if (macontext->Video.Info.AspectRatio.Num==4) return 0; // seems not to be true in all countries?
*BorderIFrame=0;
- int height=macontext->Video.Info.Height-OFFSET;
+ int height=macontext->Video.Info.Height-VOFFSET;
int start=(height-CHECKHEIGHT)*macontext->Video.Data.PlaneLinesize[0];
int end=height*macontext->Video.Data.PlaneLinesize[0];
@@ -519,8 +521,8 @@ int cMarkAdBlackBordersHoriz::Process(int FrameNumber, int *BorderIFrame)
if (fbottom)
{
- start=OFFSET*macontext->Video.Data.PlaneLinesize[0];
- end=macontext->Video.Data.PlaneLinesize[0]*(CHECKHEIGHT+OFFSET);
+ start=VOFFSET*macontext->Video.Data.PlaneLinesize[0];
+ end=macontext->Video.Data.PlaneLinesize[0]*(CHECKHEIGHT+VOFFSET);
val=0;
cnt=0;
xz=0;
@@ -538,59 +540,111 @@ int cMarkAdBlackBordersHoriz::Process(int FrameNumber, int *BorderIFrame)
if (val>BRIGHTNESS) ftop=false;
}
- if ((fbottom) && (ftop))
- {
- if (borderframenumber==-1)
- {
+ if ((fbottom) && (ftop)) {
+ if (borderframenumber==-1) {
borderframenumber=FrameNumber;
- }
- else
- {
-#define MINSECS 240
- switch (borderstatus)
- {
- case HBORDER_UNINITIALIZED:
- if (FrameNumber>(borderframenumber+macontext->Video.Info.FramesPerSecond*MINSECS))
- {
- borderstatus=HBORDER_VISIBLE;
- }
- break;
-
- case HBORDER_INVISIBLE:
+ } else {
+ if (borderstatus!=HBORDER_VISIBLE) {
if (FrameNumber>(borderframenumber+macontext->Video.Info.FramesPerSecond*MINSECS))
{
*BorderIFrame=borderframenumber;
borderstatus=HBORDER_VISIBLE;
return 1; // detected start of black border
}
- break;
-
- case HBORDER_VISIBLE:
- borderframenumber=FrameNumber;
- break;
}
}
+ } else {
+ if (borderstatus==HBORDER_VISIBLE)
+ {
+ *BorderIFrame=FrameNumber;
+ borderstatus=HBORDER_INVISIBLE;
+ borderframenumber=-1;
+ return -1; // detected stop of black border
+ } else {
+ borderframenumber=-1; // restart from scratch
+ }
}
- else
- {
- if (borderframenumber!=-1)
+ return 0;
+}
+
+cMarkAdBlackBordersVert::cMarkAdBlackBordersVert(MarkAdContext *maContext)
+{
+ macontext=maContext;
+ Clear();
+}
+
+void cMarkAdBlackBordersVert::Clear()
+{
+ borderstatus=VBORDER_UNINITIALIZED;
+ borderframenumber=-1;
+}
+
+int cMarkAdBlackBordersVert::Process(int FrameNumber, int *BorderIFrame)
+{
+#define CHECKWIDTH 32
+#define BRIGHTNESS 20
+#define HOFFSET 50
+ if (!macontext) return 0;
+ if (!macontext->Video.Data.Valid) return 0;
+ if (macontext->Video.Info.FramesPerSecond==0) return 0;
+ // Assumption: If we have 4:3, we should have aspectratio-changes!
+ //if (macontext->Video.Info.AspectRatio.Num==4) return 0; // seems not to be true in all countries?
+ *BorderIFrame=0;
+
+ bool fleft=true,fright=true;
+ int val=0,cnt=0;
+
+ int end=macontext->Video.Data.PlaneLinesize[0]*macontext->Video.Info.Height;
+ int i=0;
+ while (i<end) {
+ for (int x=0; x<CHECKWIDTH; x++)
{
- if (borderstatus==HBORDER_VISIBLE)
+ val+=macontext->Video.Data.Plane[0][HOFFSET+x+i];
+ cnt++;
+ }
+ i+=macontext->Video.Data.PlaneLinesize[0];
+ }
+ val/=cnt;
+ if (val>BRIGHTNESS) fleft=false;
+
+ if (fleft)
+ {
+ val=cnt=i=0;
+ int w=macontext->Video.Info.Width-HOFFSET;
+ while (i<end) {
+ for (int x=0; x<CHECKWIDTH; x++)
{
- *BorderIFrame=borderframenumber;
- borderstatus=HBORDER_INVISIBLE;
- borderframenumber=-1;
- return -1; // detected stop of black border
+ val+=macontext->Video.Data.Plane[0][w+x+i];
+ cnt++;
}
- else
- {
- borderframenumber=-1;
+ i+=macontext->Video.Data.PlaneLinesize[0];
+ }
+ val/=cnt;
+ if (val>BRIGHTNESS) fright=false;
+ }
+
+ if ((fleft) && (fright)) {
+ if (borderframenumber==-1) {
+ borderframenumber=FrameNumber;
+ } else {
+ if (borderstatus!=VBORDER_VISIBLE) {
+ if (FrameNumber>(borderframenumber+macontext->Video.Info.FramesPerSecond*MINSECS))
+ {
+ *BorderIFrame=borderframenumber;
+ borderstatus=VBORDER_VISIBLE;
+ return 1; // detected start of black border
+ }
}
}
- else
+ } else {
+ if (borderstatus==VBORDER_VISIBLE)
{
+ *BorderIFrame=FrameNumber;
+ borderstatus=VBORDER_INVISIBLE;
borderframenumber=-1;
- borderstatus=HBORDER_INVISIBLE;
+ return -1; // detected stop of black border
+ } else {
+ borderframenumber=-1; // restart from scratch
}
}
return 0;
@@ -717,11 +771,12 @@ MarkAdPos *cMarkAdOverlap::Detect()
return &result;
}
-MarkAdPos *cMarkAdOverlap::Process(int FrameNumber, int Frames, bool BeforeAd)
+MarkAdPos *cMarkAdOverlap::Process(int FrameNumber, int Frames, bool BeforeAd, bool H264)
{
if ((lastframenumber>0) && (!similarMaxCnt))
{
similarCutOff=50000; // lower is harder!
+ if (H264) similarCutOff*=6;
similarMaxCnt=4;
}
@@ -775,6 +830,7 @@ cMarkAdVideo::cMarkAdVideo(MarkAdContext *maContext)
memset(&marks,0,sizeof(marks));
hborder=new cMarkAdBlackBordersHoriz(maContext);
+ vborder=new cMarkAdBlackBordersVert(maContext);
logo = new cMarkAdLogo(maContext);
overlap = NULL;
Clear();
@@ -784,6 +840,7 @@ cMarkAdVideo::~cMarkAdVideo()
{
resetmarks();
if (hborder) delete hborder;
+ if (vborder) delete vborder;
if (logo) delete logo;
if (overlap) delete overlap;
}
@@ -795,6 +852,7 @@ void cMarkAdVideo::Clear()
framelast=0;
framebeforelast=0;
if (hborder) hborder->Clear();
+ if (vborder) vborder->Clear();
if (logo) logo->Clear();
}
@@ -842,13 +900,13 @@ bool cMarkAdVideo::aspectratiochange(MarkAdAspectRatio &a, MarkAdAspectRatio &b,
}
-MarkAdPos *cMarkAdVideo::ProcessOverlap(int FrameNumber, int Frames, bool BeforeAd)
+MarkAdPos *cMarkAdVideo::ProcessOverlap(int FrameNumber, int Frames, bool BeforeAd, bool H264)
{
if (!FrameNumber) return NULL;
if (!overlap) overlap=new cMarkAdOverlap(macontext);
if (!overlap) return NULL;
- return overlap->Process(FrameNumber, Frames, BeforeAd);
+ return overlap->Process(FrameNumber, Frames, BeforeAd, H264);
}
MarkAdMarks *cMarkAdVideo::Process(int FrameNumber, int FrameNumberNext)
@@ -860,16 +918,29 @@ MarkAdMarks *cMarkAdVideo::Process(int FrameNumber, int FrameNumberNext)
int hborderframenumber;
int hret=hborder->Process(FrameNumber,&hborderframenumber);
- if ((hret>0) && (hborderframenumber))
+ if ((hret>0) && (hborderframenumber!=-1))
{
addmark(MT_HBORDERSTART,hborderframenumber);
}
- if ((hret<0) && (hborderframenumber))
+ if ((hret<0) && (hborderframenumber!=-1))
{
addmark(MT_HBORDERSTOP,hborderframenumber);
}
+ int vborderframenumber;
+ int vret=vborder->Process(FrameNumber,&vborderframenumber);
+
+ if ((vret>0) && (vborderframenumber!=-1))
+ {
+ addmark(MT_VBORDERSTART,vborderframenumber);
+ }
+
+ if ((vret<0) && (vborderframenumber!=-1))
+ {
+ addmark(MT_VBORDERSTOP,vborderframenumber);
+ }
+
if (!macontext->Video.Options.IgnoreAspectRatio)
{
bool start;
@@ -881,6 +952,18 @@ MarkAdMarks *cMarkAdVideo::Process(int FrameNumber, int FrameNumberNext)
logo->SetStatusLogoInvisible();
}
+ if ((vborder->Status()==VBORDER_VISIBLE) && (!start))
+ {
+ addmark(MT_VBORDERSTOP,framebeforelast);
+ vborder->SetStatusBorderInvisible();
+ }
+
+ if ((hborder->Status()==HBORDER_VISIBLE) && (!start))
+ {
+ addmark(MT_HBORDERSTOP,framebeforelast);
+ hborder->SetStatusBorderInvisible();
+ }
+
if ((macontext->Video.Info.AspectRatio.Num==4) &&
(macontext->Video.Info.AspectRatio.Den==3))
{
diff --git a/command/video.h b/command/video.h
index 74f866e..05ad796 100644
--- a/command/video.h
+++ b/command/video.h
@@ -34,15 +34,22 @@ enum
enum
{
- HBORDER_ERROR=-3,
HBORDER_UNINITIALIZED=-2,
HBORDER_INVISIBLE=-1,
- HBORDER_NOCHANGE=0,
HBORDER_VISIBLE=1
};
enum
{
+ VBORDER_UNINITIALIZED=-2,
+ VBORDER_INVISIBLE=-1,
+ VBORDER_VISIBLE=1
+};
+
+#define MINSECS 240
+
+enum
+{
OV_BEFORE=0,
OV_AFTER=1
};
@@ -75,7 +82,7 @@ private:
public:
cMarkAdOverlap(MarkAdContext *maContext);
~cMarkAdOverlap();
- MarkAdPos *Process(int FrameNumber, int Frames, bool BeforeAd);
+ MarkAdPos *Process(int FrameNumber, int Frames, bool BeforeAd, bool H264);
};
class cMarkAdLogo
@@ -156,6 +163,30 @@ public:
{
return borderstatus;
}
+ void SetStatusBorderInvisible() {
+ borderstatus=HBORDER_INVISIBLE;
+ borderframenumber=-1;
+ }
+ void Clear();
+};
+
+class cMarkAdBlackBordersVert
+{
+private:
+ int borderstatus;
+ int borderframenumber;
+ MarkAdContext *macontext;
+public:
+ cMarkAdBlackBordersVert(MarkAdContext *maContext);
+ int Process(int FrameNumber,int *BorderFrameNumber);
+ int Status()
+ {
+ return borderstatus;
+ }
+ void SetStatusBorderInvisible() {
+ borderstatus=VBORDER_INVISIBLE;
+ borderframenumber=-1;
+ }
void Clear();
};
@@ -167,6 +198,7 @@ private:
MarkAdAspectRatio aspectratio;
cMarkAdBlackBordersHoriz *hborder;
+ cMarkAdBlackBordersVert *vborder;
cMarkAdLogo *logo;
cMarkAdOverlap *overlap;
@@ -181,7 +213,7 @@ private:
public:
cMarkAdVideo(MarkAdContext *maContext);
~cMarkAdVideo();
- MarkAdPos *ProcessOverlap(int FrameNumber, int Frames, bool BeforeAd);
+ MarkAdPos *ProcessOverlap(int FrameNumber, int Frames, bool BeforeAd, bool H264);
MarkAdMarks *Process(int FrameNumber, int FrameNumberNext);
void Clear();
};
diff --git a/plugin/HISTORY b/plugin/HISTORY
new file mode 120000
index 0000000..ec72466
--- /dev/null
+++ b/plugin/HISTORY
@@ -0,0 +1 @@
+../HISTORY
\ No newline at end of file
diff --git a/plugin/Makefile b/plugin/Makefile
index c5a95c2..2f51502 100644
--- a/plugin/Makefile
+++ b/plugin/Makefile
@@ -12,6 +12,7 @@ PLUGIN = markad
### The version number of this plugin (taken from the main source file):
+$(shell GITVERSION=`git rev-parse --short HEAD 2> /dev/null`; if [ "$$GITVERSION" ]; then sed "s/\";/ ($$GITVERSION)\";/" ../version.dist > ../version.h; else cp ../version.dist ../version.h; fi)
VERSION = $(shell grep 'static const char \*VERSION *=' ../version.h | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
@@ -21,9 +22,9 @@ CXXFLAGS ?= -fPIC -g -O2 -Wall -Wextra -Woverloaded-virtual -Wno-parentheses
### The directory environment:
-VDRDIR = ../../../..
-LIBDIR = ../../../lib
-TMPDIR = /tmp
+VDRDIR ?= ../../../..
+LIBDIR ?= ../../../lib
+TMPDIR ?= /tmp
### Make sure that necessary options are included:
diff --git a/plugin/README b/plugin/README
new file mode 120000
index 0000000..59a23c4
--- /dev/null
+++ b/plugin/README
@@ -0,0 +1 @@
+../README
\ No newline at end of file
diff --git a/plugin/markad.cpp b/plugin/markad.cpp
index cf35156..e7ebfb0 100644
--- a/plugin/markad.cpp
+++ b/plugin/markad.cpp
@@ -200,6 +200,7 @@ bool cPluginMarkAd::SetupParse(const char *Name, const char *Value)
else if (!strcasecmp(Name,"Log2Rec")) setup.Log2Rec=atoi(Value);
else if (!strcasecmp(Name,"LogoOnly")) setup.LogoOnly=atoi(Value);
else if (!strcasecmp(Name,"SaveInfo")) setup.SaveInfo=atoi(Value);
+ else if (!strcasecmp(Name,"DeferredShutdown")) setup.DeferredShutdown=atoi(Value);
else return false;
return true;
}
diff --git a/plugin/po/de_DE.po b/plugin/po/de_DE.po
index 6c2a6e8..f5f9c84 100644
--- a/plugin/po/de_DE.po
+++ b/plugin/po/de_DE.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2012-05-17 12:42+0200\n"
+"POT-Creation-Date: 2013-04-01 12:17+0200\n"
"PO-Revision-Date: 2009-08-27 14:18+0200\n"
"Last-Translator: Jochen Dolze <vdr at dolze.de>\n"
"Language-Team: German <vdr at linuxtv.org>\n"
@@ -55,6 +55,9 @@ msgstr "danach"
msgid "during"
msgstr "während"
+msgid "never"
+msgstr "nie"
+
msgid "execution"
msgstr "Ausführung"
diff --git a/plugin/po/es_ES.po b/plugin/po/es_ES.po
index eee5681..d12277e 100644
--- a/plugin/po/es_ES.po
+++ b/plugin/po/es_ES.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2012-05-17 12:42+0200\n"
+"POT-Creation-Date: 2013-04-01 12:17+0200\n"
"PO-Revision-Date: 2011-02-12 11:30+0100\n"
"Last-Translator: Javier Bradineras <jbradi at hotmail.com>\n"
"Language-Team: Spanish <vdr at linuxtv.org>\n"
@@ -58,6 +58,9 @@ msgstr "Después"
msgid "during"
msgstr "Durante"
+msgid "never"
+msgstr ""
+
msgid "execution"
msgstr "Ejecución"
diff --git a/plugin/po/fi_FI.po b/plugin/po/fi_FI.po
index 57576b1..7ed6755 100644
--- a/plugin/po/fi_FI.po
+++ b/plugin/po/fi_FI.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2012-05-17 12:42+0200\n"
+"POT-Creation-Date: 2013-04-01 12:17+0200\n"
"PO-Revision-Date: 2011-02-27 02:27+0200\n"
"Last-Translator: Rolf Ahrenberg\n"
"Language-Team: Finnish <vdr at linuxtv.org>\n"
@@ -56,6 +56,9 @@ msgstr "jälkeen"
msgid "during"
msgstr "aikana"
+msgid "never"
+msgstr ""
+
msgid "execution"
msgstr "Suorita tehtävä tallennuksen"
diff --git a/plugin/po/it_IT.po b/plugin/po/it_IT.po
index 6d6403a..8e3465b 100644
--- a/plugin/po/it_IT.po
+++ b/plugin/po/it_IT.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2012-05-17 12:42+0200\n"
+"POT-Creation-Date: 2013-04-01 12:17+0200\n"
"PO-Revision-Date: 2011-07-10 00:56+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian at tiscali.it>\n"
"Language-Team: Italian <vdr at linuxtv.org>\n"
@@ -58,6 +58,9 @@ msgstr "dopo"
msgid "during"
msgstr "durante"
+msgid "never"
+msgstr ""
+
msgid "execution"
msgstr "Esecuzione"
diff --git a/plugin/po/sk_SK.po b/plugin/po/sk_SK.po
index 5bb67a9..9397d51 100644
--- a/plugin/po/sk_SK.po
+++ b/plugin/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: markad\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2012-05-17 12:42+0200\n"
+"POT-Creation-Date: 2013-04-01 12:17+0200\n"
"PO-Revision-Date: 2011-03-01 20:26+0100\n"
"Last-Translator: milan hrala <hrala.milan at gmail.com>\n"
"Language-Team: milan hrala <grala.milan at gmail.com>\n"
@@ -58,6 +58,9 @@ msgstr "po"
msgid "during"
msgstr "priebežne"
+msgid "never"
+msgstr ""
+
msgid "execution"
msgstr "vykonávať"
diff --git a/plugin/setup.cpp b/plugin/setup.cpp
index 8b54d54..8835735 100644
--- a/plugin/setup.cpp
+++ b/plugin/setup.cpp
@@ -27,6 +27,7 @@ cSetupMarkAd::cSetupMarkAd(struct setup *Setup)
processTexts[0]=tr("after");
processTexts[1]=tr("during");
+ processTexts[2]=tr("never");
lpos=0;
@@ -37,33 +38,37 @@ void cSetupMarkAd::write(void)
{
int current=Current();
Clear();
- cMenuEditStraItem *first=new cMenuEditStraItem(tr("execution"),&processduring,2,processTexts);
+ cMenuEditStraItem *first=new cMenuEditStraItem(tr("execution"),&processduring,3,processTexts);
if (!first) return;
Add(first);
- if (!processduring)
- {
- Add(new cMenuEditBoolItem(tr(" during another recording"),&whilerecording));
- Add(new cMenuEditBoolItem(tr(" while replaying"),&whilereplaying));
- }
- Add(new cMenuEditBoolItem(tr("scan only channels with logo"),&logoonly),true);
- lpos=Current();
- Add(new cMenuEditBoolItem(tr("deferred shutdown"),&deferredshutdown));
- Add(new cMenuEditBoolItem(tr("ignore timer margins"),&nomargins));
- Add(new cMenuEditBoolItem(tr("detect overlaps"),&secondpass));
- Add(new cMenuEditBoolItem(tr("recreate index"),&genindex));
- Add(new cMenuEditBoolItem(tr("correct info file"),&saveinfo));
- Add(new cMenuEditBoolItem(tr("OSD message"),&osdmsg));
- Add(new cMenuEditBoolItem(tr("verbose logging"),&verbose));
- Add(new cMenuEditBoolItem(tr("log to recording directory"),&log2rec));
- Add(new cMenuEditBoolItem(tr("hide mainmenu entry"),&hidemainmenuentry));
-
- if (current==-1)
- {
- SetCurrent(first);
- }
- else
- {
- SetCurrent(Get(current));
+ if (processduring!=2) {
+ if (!processduring)
+ {
+ Add(new cMenuEditBoolItem(tr(" during another recording"),&whilerecording));
+ Add(new cMenuEditBoolItem(tr(" while replaying"),&whilereplaying));
+ }
+ Add(new cMenuEditBoolItem(tr("scan only channels with logo"),&logoonly),true);
+ lpos=Current();
+ Add(new cMenuEditBoolItem(tr("deferred shutdown"),&deferredshutdown));
+ Add(new cMenuEditBoolItem(tr("ignore timer margins"),&nomargins));
+ Add(new cMenuEditBoolItem(tr("detect overlaps"),&secondpass));
+ Add(new cMenuEditBoolItem(tr("recreate index"),&genindex));
+ Add(new cMenuEditBoolItem(tr("correct info file"),&saveinfo));
+ Add(new cMenuEditBoolItem(tr("OSD message"),&osdmsg));
+ Add(new cMenuEditBoolItem(tr("verbose logging"),&verbose));
+ Add(new cMenuEditBoolItem(tr("log to recording directory"),&log2rec));
+ Add(new cMenuEditBoolItem(tr("hide mainmenu entry"),&hidemainmenuentry));
+
+ if (current==-1)
+ {
+ SetCurrent(first);
+ }
+ else
+ {
+ SetCurrent(Get(current));
+ }
+ } else {
+ lpos=-1;
}
Display();
}
@@ -109,6 +114,10 @@ eOSState cSetupMarkAd::ProcessKey(eKeys Key)
void cSetupMarkAd::Store(void)
{
SetupStore("Execution",processduring);
+ if (processduring!=0) {
+ whilerecording=1;
+ whilereplaying=1;
+ }
SetupStore("whileRecording",whilerecording);
SetupStore("whileReplaying",whilereplaying);
SetupStore("IgnoreMargins",nomargins);
@@ -122,7 +131,7 @@ void cSetupMarkAd::Store(void)
SetupStore("SaveInfo",saveinfo);
SetupStore("DeferredShutdown",deferredshutdown);
- setup->ProcessDuring=(bool) processduring;
+ setup->ProcessDuring=(int) processduring;
setup->whileRecording=(bool) whilerecording;
setup->whileReplaying=(bool) whilereplaying;
setup->OSDMessage=(bool) osdmsg;
diff --git a/plugin/setup.h b/plugin/setup.h
index d22460a..6677d6f 100644
--- a/plugin/setup.h
+++ b/plugin/setup.h
@@ -11,7 +11,7 @@
struct setup
{
- bool ProcessDuring;
+ int ProcessDuring;
bool whileRecording;
bool whileReplaying;
bool OSDMessage;
@@ -31,7 +31,7 @@ struct setup
class cSetupMarkAd : public cMenuSetupPage
{
private:
- const char *processTexts[2];
+ const char *processTexts[3];
struct setup *setup;
int processduring;
int whilerecording;
diff --git a/plugin/status.cpp b/plugin/status.cpp
index 7ec8fe5..a691477 100644
--- a/plugin/status.cpp
+++ b/plugin/status.cpp
@@ -56,6 +56,7 @@ bool cStatusMarkAd::Replaying()
void cStatusMarkAd::Replaying(const cControl *UNUSED(Control), const char *UNUSED(Name),
const char *UNUSED(FileName), bool On)
{
+ if (setup->ProcessDuring!=0) return;
if (setup->whileReplaying) return;
if (On)
{
@@ -70,12 +71,17 @@ void cStatusMarkAd::Replaying(const cControl *UNUSED(Control), const char *UNUSE
bool cStatusMarkAd::Start(const char *FileName, const char *Name, const bool Direct)
{
if ((Direct) && (Get(FileName)!=-1)) return false;
+
cString cmd = cString::sprintf("\"%s\"/markad %s%s%s%s%s%s%s -l \"%s\" %s \"%s\"",
bindir,
setup->Verbose ? " -v " : "",
setup->SaveInfo ? " -I " : "",
setup->GenIndex ? " -G " : "",
- setup->OSDMessage ? " -O " : "",
+#if VDRVERSNUM < 10715
+ setup->OSDMessage ? " -O --svdrpport=2001 " : "",
+#else
+ setup->OSDMessage ? " -O --svdrpport=6419 " : "",
+#endif
setup->NoMargins ? " -i 4 " : "",
setup->SecondPass ? "" : " --pass1only ",
setup->Log2Rec ? " -R " : "",
@@ -88,7 +94,7 @@ bool cStatusMarkAd::Start(const char *FileName, const char *Name, const bool Dir
int pos=Add(FileName,Name);
if (getPid(pos) && getStatus(pos))
{
- if (!setup->ProcessDuring)
+ if (setup->ProcessDuring==0)
{
if (!Direct)
{
@@ -125,24 +131,35 @@ void cStatusMarkAd::TimerChange(const cTimer *Timer, eTimerChange Change)
{
if (!Timer) return;
if (Change!=tcDel) return;
+ if (setup->ProcessDuring==2) return;
if (time(NULL)>=Timer->StopTime()) return; // don't react on normal VDR timer deletion after recording
Remove(Timer->File(),true);
}
-bool cStatusMarkAd::LogoExists(const char *Name)
+bool cStatusMarkAd::LogoExists(const cDevice *Device,const char *FileName)
{
- if (!Name) return false;
+ if (!FileName) return false;
cTimer *timer=NULL;
for (cTimer *Timer = Timers.First(); Timer; Timer=Timers.Next(Timer))
{
- if (Timer->Recording() && (!strcmp(Timer->ToDescr(),Name)))
+#if APIVERSNUM>=10722
+ if (Timer->Recording() && const_cast<cDevice *>(Device)->IsTunedToTransponder(Timer->Channel()) &&
+ (difftime(time(NULL),Timer->StartTime())<60))
+ {
+ timer=Timer;
+ break;
+ }
+#else
+ if (Timer->Recording() && Device->IsTunedToTransponder(Timer->Channel()) &&
+ (difftime(time(NULL),Timer->StartTime())<60))
{
timer=Timer;
break;
}
+#endif
}
if (!timer) {
- esyslog("markad: cannot find timer for '%s'",Name);
+ esyslog("markad: cannot find timer for '%s'",FileName);
return false;
}
@@ -187,16 +204,21 @@ bool cStatusMarkAd::LogoExists(const char *Name)
return true;
}
-void cStatusMarkAd::Recording(const cDevice *UNUSED(Device), const char *Name,
+void cStatusMarkAd::Recording(const cDevice *Device, const char *Name,
const char *FileName, bool On)
{
if (!FileName) return; // we cannot operate without a filename
if (!bindir) return; // we cannot operate without bindir
if (!logodir) return; // we dont want to operate without logodir
+ if (setup->ProcessDuring==2) {
+ dsyslog("markad: deactivated by user");
+ return; // markad deactivated
+ }
+
if (On)
{
- if (setup->LogoOnly && !LogoExists(Name)) {
+ if (setup->LogoOnly && !LogoExists(Device,FileName)) {
dsyslog("markad: no logo found for %s",Name);
return;
}
@@ -298,8 +320,13 @@ bool cStatusMarkAd::GetNextActive(struct recs **RecEntry)
{
if (getStatus(actpos))
{
- *RecEntry=&recs[actpos++];
- return true;
+ /* check if recording directory still exists */
+ if (access(recs[actpos].FileName,R_OK)==-1) {
+ Remove(actpos,true);
+ } else {
+ *RecEntry=&recs[actpos++];
+ return true;
+ }
}
}
actpos++;
@@ -355,10 +382,12 @@ void cStatusMarkAd::Remove(int Position, bool Kill)
{
if ((recs[Position].Status=='R') || (recs[Position].Status=='S'))
{
+ dsyslog("markad: terminating pid %i",recs[Position].Pid);
kill(recs[Position].Pid,SIGTERM);
}
else
{
+ dsyslog("markad: killing pid %i",recs[Position].Pid);
kill(recs[Position].Pid,SIGKILL);
}
}
@@ -401,6 +430,7 @@ void cStatusMarkAd::Pause(const char *FileName)
if ((recs[i].FileName) && (!strcmp(recs[i].FileName,FileName)) &&
(recs[i].Pid) && (!recs[i].ChangedbyUser))
{
+ dsyslog("markad: pausing pid %i",recs[i].Pid);
kill(recs[i].Pid,SIGTSTP);
}
}
@@ -408,6 +438,7 @@ void cStatusMarkAd::Pause(const char *FileName)
{
if ((recs[i].Pid) && (!recs[i].ChangedbyUser))
{
+ dsyslog("markad: pausing pid %i",recs[i].Pid);
kill(recs[i].Pid,SIGTSTP);
}
}
@@ -423,6 +454,7 @@ void cStatusMarkAd::Continue(const char *FileName)
if ((recs[i].FileName) && (!strcmp(recs[i].FileName,FileName)) &&
(recs[i].Pid) && (!recs[i].ChangedbyUser) )
{
+ dsyslog("markad: resume pid %i",recs[i].Pid);
kill(recs[i].Pid,SIGCONT);
}
}
@@ -430,6 +462,7 @@ void cStatusMarkAd::Continue(const char *FileName)
{
if ((recs[i].Pid) && (!recs[i].ChangedbyUser))
{
+ dsyslog("markad: resume pid %i",recs[i].Pid);
kill(recs[i].Pid,SIGCONT);
}
}
diff --git a/plugin/status.h b/plugin/status.h
index 1989a33..b7635b4 100644
--- a/plugin/status.h
+++ b/plugin/status.h
@@ -47,7 +47,7 @@ private:
void Remove(const char *Name, bool Kill=false);
void Pause(const char *FileName);
void Continue(const char *FileName);
- bool LogoExists(const char *Name);
+ bool LogoExists(const cDevice *Device, const char *FileName);
protected:
virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On);
virtual void Replaying(const cControl *Control, const char *Name, const char *FileName, bool On);
diff --git a/version.h b/version.dist
similarity index 80%
rename from version.h
rename to version.dist
index b0a7f9d..8a6a088 100644
--- a/version.h
+++ b/version.dist
@@ -8,6 +8,6 @@
#ifndef __version_h_
#define __version_h_
-static const char *VERSION = "0.1.4";
+static const char *VERSION = "0.1.5pre";
#endif
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vdr-dvb/vdr-plugin-markad.git
More information about the pkg-vdr-dvb-changes
mailing list