diff options
author | Jochen Dolze <vdr@dolze.de> | 2011-02-05 10:21:08 +0100 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2011-02-05 10:21:08 +0100 |
commit | 0cdd5f421a5d7ad511473bf5d97a5e8c1c2c9c04 (patch) | |
tree | ce99f433f3898d4eafc5bbc3923c00ccf130566d | |
parent | db484337eb3fac1b6a66eaa71d38b6206b6d97da (diff) | |
download | vdr-plugin-markad-0cdd5f421a5d7ad511473bf5d97a5e8c1c2c9c04.tar.gz vdr-plugin-markad-0cdd5f421a5d7ad511473bf5d97a5e8c1c2c9c04.tar.bz2 |
Changed overlap detection
-rw-r--r-- | command/global.h | 2 | ||||
-rw-r--r-- | command/markad-standalone.cpp | 30 | ||||
-rw-r--r-- | command/video.cpp | 24 |
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) |