summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2011-02-05 10:21:08 +0100
committerJochen Dolze <vdr@dolze.de>2011-02-05 10:21:08 +0100
commit0cdd5f421a5d7ad511473bf5d97a5e8c1c2c9c04 (patch)
treece99f433f3898d4eafc5bbc3923c00ccf130566d
parentdb484337eb3fac1b6a66eaa71d38b6206b6d97da (diff)
downloadvdr-plugin-markad-0cdd5f421a5d7ad511473bf5d97a5e8c1c2c9c04.tar.gz
vdr-plugin-markad-0cdd5f421a5d7ad511473bf5d97a5e8c1c2c9c04.tar.bz2
Changed overlap detection
-rw-r--r--command/global.h2
-rw-r--r--command/markad-standalone.cpp30
-rw-r--r--command/video.cpp24
3 files changed, 32 insertions, 24 deletions
diff --git a/command/global.h b/command/global.h
index 51da106..d55633f 100644
--- a/command/global.h
+++ b/command/global.h
@@ -82,8 +82,6 @@ typedef struct MarkAdPos
{
int FrameNumberBefore;
int FrameNumberAfter;
- char *CommentBefore;
- char *CommentAfter;
} MarkAdPos;
typedef struct MarkAdAspectRatio
diff --git a/command/markad-standalone.cpp b/command/markad-standalone.cpp
index d4c6e22..c32e9a1 100644
--- a/command/markad-standalone.cpp
+++ b/command/markad-standalone.cpp
@@ -659,17 +659,25 @@ void cMarkAdStandalone::ChangeMarks(clMark **Mark1, clMark **Mark2, MarkAdPos *N
if ((*Mark1)->position!=NewPos->FrameNumberBefore)
{
+ char *buf=NULL;
+ if (asprintf(&buf,"overlap before %i, moved to %i",(*Mark1)->position,
+ NewPos->FrameNumberBefore)==-1) return;
+ isyslog("%s",buf);
marks.Del(*Mark1);
- *Mark1=marks.Add(MT_MOVED,NewPos->FrameNumberBefore,NewPos->CommentBefore);
+ *Mark1=marks.Add(MT_MOVED,NewPos->FrameNumberBefore,buf);
+ free(buf);
save=true;
}
- if (NewPos->CommentBefore) isyslog("%s",NewPos->CommentBefore);
if (Mark2 && (*Mark2) && (*Mark2)->position!=NewPos->FrameNumberAfter)
{
+ char *buf=NULL;
+ if (asprintf(&buf,"overlap after %i, moved to %i",(*Mark2)->position,
+ NewPos->FrameNumberAfter)==-1) return;
+ isyslog("%s",buf);
marks.Del(*Mark2);
- *Mark2=marks.Add(MT_MOVED,NewPos->FrameNumberAfter,NewPos->CommentAfter);
- if (NewPos->CommentAfter) isyslog("%s",NewPos->CommentAfter);
+ *Mark2=marks.Add(MT_MOVED,NewPos->FrameNumberAfter,buf);
+ free(buf);
save=true;
}
if (save) marks.Save(directory,macontext.Video.Info.FramesPerSecond,isTS,true);
@@ -737,7 +745,14 @@ bool cMarkAdStandalone::ProcessFile2ndPass(clMark **Mark1, clMark **Mark2,int Nu
}
else
{
- dsyslog("processing file %05i %s",Number,(pn==mAFTER) ? "(after mark)" : "(before mark)");
+ if (pn==mBEFORE)
+ {
+ dsyslog("processing file %05i (before mark %i)",Number,(*Mark1)->position);
+ }
+ else
+ {
+ dsyslog("processing file %05i (after mark %i)",Number,(*Mark2)->position);
+ }
}
if (lseek(f,Offset,SEEK_SET)!=Offset)
@@ -890,6 +905,11 @@ void cMarkAdStandalone::Process2ndPass()
if (!ProcessFile2ndPass(&p1,&p2,number,offset,frame,iframes)) break;
}
}
+ else
+ {
+ esyslog("error reading index");
+ return;
+ }
p1=p2->Next();
if (p1)
diff --git a/command/video.cpp b/command/video.cpp
index 0f34617..d896847 100644
--- a/command/video.cpp
+++ b/command/video.cpp
@@ -590,8 +590,6 @@ cMarkAdOverlap::cMarkAdOverlap(MarkAdContext *maContext)
histbuf[OV_BEFORE]=NULL;
histbuf[OV_AFTER]=NULL;
- result.CommentBefore=NULL;
- result.CommentAfter=NULL;
Clear();
}
@@ -616,8 +614,6 @@ void cMarkAdOverlap::Clear()
delete[] histbuf[OV_AFTER];
histbuf[OV_AFTER]=NULL;
}
- if (result.CommentBefore) free(result.CommentBefore);
- if (result.CommentAfter) free(result.CommentAfter);
memset(&result,0,sizeof(result));
similarCutOff=0;
similarMaxCnt=0;
@@ -660,19 +656,22 @@ MarkAdPos *cMarkAdOverlap::Detect()
{
for (int A=start; A<histcnt[OV_AFTER]; A++)
{
- //printf("%6i %6i ",histbuf[BEFORE][B].framenumber,histbuf[AFTER][A].framenumber);
+ //printf("%6i %6i ",histbuf[OV_BEFORE][B].framenumber,histbuf[OV_AFTER][A].framenumber);
bool simil=areSimilar(histbuf[OV_BEFORE][B].histogram,histbuf[OV_AFTER][A].histogram);
if (simil)
{
tmpA=A;
tmpB=B;
start=A+1;
- simcnt++;
+ if (simil<(similarCutOff/2)) simcnt+=2;
+ else if (simil<(similarCutOff/4)) simcnt+=4;
+ else if (simil<(similarCutOff/6)) simcnt+=6;
+ else simcnt++;
break;
}
else
{
- //if (simcnt) printf("%i %i %i\n",simcnt,histbuf[BEFORE][B].framenumber,histbuf[AFTER][A].framenumber);
+ //if (simcnt) printf("simcnt=%i\n",simcnt);
if (simcnt>similarMaxCnt)
{
@@ -699,15 +698,6 @@ MarkAdPos *cMarkAdOverlap::Detect()
return NULL;
}
}
-
- if (asprintf(&result.CommentBefore,"detected overlap before (%i)",result.FrameNumberBefore)==-1)
- {
- result.CommentBefore=NULL;
- }
- if (asprintf(&result.CommentAfter,"detected overlap after (%i)",result.FrameNumberAfter)==-1)
- {
- result.CommentAfter=NULL;
- }
return &result;
}
@@ -716,7 +706,7 @@ MarkAdPos *cMarkAdOverlap::Process(int FrameNumber, int Frames, bool BeforeAd)
if ((lastframenumber>0) && (!similarMaxCnt))
{
similarCutOff=50000; // lower is harder!
- similarMaxCnt=6;
+ similarMaxCnt=4;
}
if (BeforeAd)