summaryrefslogtreecommitdiff
path: root/command/markad-standalone.cpp
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2010-06-20 23:11:24 +0200
committerJochen Dolze <vdr@dolze.de>2010-06-20 23:11:24 +0200
commit0f47971de0782234b534ec623203b56684d80c52 (patch)
treef74f9b2e007f51e8048657adf5f7d1ae2096688d /command/markad-standalone.cpp
parentbef61eb0094f10d9bc453dcd6b13750d2a53c6bb (diff)
downloadvdr-plugin-markad-0f47971de0782234b534ec623203b56684d80c52.tar.gz
vdr-plugin-markad-0f47971de0782234b534ec623203b56684d80c52.tar.bz2
Added STDC_CONSTANT_MACROS to Makefile
Added function CheckLogoMarks
Diffstat (limited to 'command/markad-standalone.cpp')
-rw-r--r--command/markad-standalone.cpp47
1 files changed, 42 insertions, 5 deletions
diff --git a/command/markad-standalone.cpp b/command/markad-standalone.cpp
index 1fdb5d1..26bd2c8 100644
--- a/command/markad-standalone.cpp
+++ b/command/markad-standalone.cpp
@@ -210,6 +210,31 @@ void cMarkAdStandalone::CheckStartStop(int lastiframe)
}
}
+void cMarkAdStandalone::CheckLogoMarks()
+{
+ clMark *mark=marks.GetFirst();
+ while (mark)
+ {
+ if ((mark->type==MT_LOGOSTOP) && mark->Next() && mark->Next()->type==MT_LOGOSTART)
+ {
+ int MARKDIFF=(int) (macontext.Video.Info.FramesPerSecond*35);
+ if (abs(mark->Next()->position-mark->position)<=MARKDIFF)
+ {
+ double distance=(mark->Next()->position-mark->position)/
+ macontext.Video.Info.FramesPerSecond;
+ isyslog("logo distance too short (%.1fs), deleting (%i,%i)",distance,
+ mark->position,mark->Next()->position);
+ clMark *tmp=mark;
+ mark=mark->Next()->Next();
+ marks.Del(tmp->Next());
+ marks.Del(tmp);
+ continue;
+ }
+ }
+ mark=mark->Next();
+ }
+}
+
void cMarkAdStandalone::CheckLastMark()
{
clMark *last=marks.GetLast();
@@ -358,11 +383,22 @@ void cMarkAdStandalone::AddMark(MarkAdMark *Mark)
{
clMark *last=NULL;
int MINMARKDIFF=(int) (macontext.Video.Info.FramesPerSecond*180);
- if ((iStart>0) && (abs(Mark->Position-iStart)<=MINMARKDIFF) && ((Mark->Type & 0x0F)==MT_START))
+ if (iStart>0)
{
- last=marks.GetPrev(Mark->Position,MT_START,0xF);
- if (!last) last=marks.GetPrev(Mark->Position,MT_ASPECTCHANGE);
- if ((last) && (abs(last->position-iStart)>MINMARKDIFF)) last=NULL;
+ if (abs(Mark->Position-iStart)<=MINMARKDIFF)
+ {
+ if ((Mark->Type & 0x0F)==MT_START)
+ {
+ last=marks.GetPrev(Mark->Position,MT_START,0xF);
+ if (!last) last=marks.GetPrev(Mark->Position,MT_ASPECTCHANGE);
+ if ((last) && (abs(last->position-iStart)>MINMARKDIFF)) last=NULL;
+ }
+ }
+ else
+ {
+ marks.DelTill(iStart);
+ iStart=0;
+ }
}
if (iStop>0)
@@ -714,7 +750,7 @@ bool cMarkAdStandalone::ProcessFile(const char *Directory, int Number)
{
lastiframe=iframe;
CheckStartStop(lastiframe);
- if (lastiframe>chkLEFT) CheckInfoAspectRatio();
+ if (lastiframe>chkLEFT) CheckInfoAspectRatio();
iframe=framecnt-1;
dRes=true;
@@ -910,6 +946,7 @@ void cMarkAdStandalone::Process(const char *Directory)
}
CheckLastMark();
+ CheckLogoMarks();
gettimeofday(&tv2,&tz);
time_t sec;