diff options
author | Jochen Dolze <vdr@dolze.de> | 2010-10-16 22:56:09 +0200 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2010-10-16 22:56:09 +0200 |
commit | 0acaba790948b737a35293e5a9ac91be5de563b0 (patch) | |
tree | ab714b34c0ff1a8f393b1acc6a2116ee4c486f8e | |
parent | 93dfddbfa472e3521df8b3b2e04e67f849db6e15 (diff) | |
download | vdr-plugin-markad-0acaba790948b737a35293e5a9ac91be5de563b0.tar.gz vdr-plugin-markad-0acaba790948b737a35293e5a9ac91be5de563b0.tar.bz2 |
Use border detection only on non 4:3 broadcasts
Remove aspectratio changes which are to short
-rw-r--r-- | command/Makefile | 2 | ||||
-rw-r--r-- | command/audio.cpp | 4 | ||||
-rw-r--r-- | command/markad-standalone.cpp | 56 | ||||
-rw-r--r-- | command/video.cpp | 6 |
4 files changed, 46 insertions, 22 deletions
diff --git a/command/Makefile b/command/Makefile index 6bbd123..95d7da4 100644 --- a/command/Makefile +++ b/command/Makefile @@ -23,7 +23,7 @@ PKG-INCLUDES += libavcodec libavutil DEFINES += -D_GNU_SOURCE DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DEFINES += -D__STDC_CONSTANT_MACROS +DEFINES += -D__STDC_CONSTANT_MACROS -D__USE_XOPEN_EXTENDED ifdef WITH_OLD_FFMPEG_HEADERS DEFINES += -DUSE_OLD_FFMPEG_HEADERS diff --git a/command/audio.cpp b/command/audio.cpp index dba0f59..bb1b63f 100644 --- a/command/audio.cpp +++ b/command/audio.cpp @@ -162,10 +162,10 @@ MarkAdMark *cMarkAdAudio::Process(int FrameNumber, int FrameNumberNext) } char *buf=NULL; - if (asprintf(&buf,"audio channel change from %i to %i (%i)", channels, + if (asprintf(&buf,"audio channel change from %i to %i (%i)%s", channels, macontext->Audio.Info.Channels, start ? FrameNumberNext : - framelast)!=-1) + framelast, start ? "*" : "")!=-1) { if (start) { diff --git a/command/markad-standalone.cpp b/command/markad-standalone.cpp index ec2f4a0..75afb26 100644 --- a/command/markad-standalone.cpp +++ b/command/markad-standalone.cpp @@ -413,13 +413,11 @@ void cMarkAdStandalone::CheckFirstMark() clMark *second=first->Next(); if (!second) return; - // if first and second mark is ASPECT/BORDER - // wait till its clear, if we use ASPECT - // or BORDER - int ft=first->type & 0xF0; - int st=second->type & 0xF0; - if (((ft==MT_BORDERCHANGE) && (st==MT_ASPECTCHANGE)) || - ((st==MT_BORDERCHANGE) && (ft==MT_ASPECTCHANGE))) return; + if ((marks.Count(MT_BORDERCHANGE,0xF0)>0) && (marks.Count(MT_ASPECTCHANGE,0xF0)>0)) + { + // wait till its clear, if we use ASPECT or BORDER + return; + } if ((second->type & 0xF)==MT_START) { @@ -552,15 +550,31 @@ void cMarkAdStandalone::AddMark(MarkAdMark *Mark) { // check if last mark is an stop mark in short distance clMark *prev=marks.GetLast(); - if ((prev) && ((prev->type & 0xF)==MT_STOP)) + if (prev) { - int MARKDIFF=(int) (macontext.Video.Info.FramesPerSecond*15); - if ((Mark->Position-prev->position)<MARKDIFF) + if ((prev->type & 0xF)==MT_STOP) { - if (Mark->Comment) isyslog("%s",Mark->Comment); - isyslog("double stop mark in short distance, deleting this mark (%i)",prev->position); - marks.Del(prev); - loggedAlready=true; + int MARKDIFF=(int) (macontext.Video.Info.FramesPerSecond*15); + if ((Mark->Position-prev->position)<MARKDIFF) + { + if (Mark->Comment) isyslog("%s",Mark->Comment); + isyslog("double stop mark in short distance, deleting this mark (%i)",prev->position); + marks.Del(prev); + loggedAlready=true; + } + } + if (prev->type==MT_ASPECTSTART) + { + int MARKDIFF=(int) (macontext.Video.Info.FramesPerSecond*240); + if ((Mark->Position-prev->position)<MARKDIFF) + { + if (Mark->Comment) isyslog("%s",Mark->Comment); + double distance=(Mark->Position-prev->position)/macontext.Video.Info.FramesPerSecond; + isyslog("logo distance too short (%.1fs), deleting (%i,%i)",distance, + prev->position,Mark->Position); + marks.Del(prev); + return; + } } } } @@ -701,6 +715,7 @@ void cMarkAdStandalone::AddMark(MarkAdMark *Mark) if (deleteLogoBorder) { bDecodeVideo=false; + macontext.Video.Options.IgnoreLogoDetection=true; macontext.Video.Data.Valid=false; marks.Del((uchar) MT_LOGOSTART); marks.Del((uchar) MT_LOGOSTOP); @@ -2537,6 +2552,13 @@ static void signal_handler(int sig) } } +char *recDir=NULL; + +void freedir(void) +{ + if (recDir) free(recDir); +} + int main(int argc, char *argv[]) { int c; @@ -2545,7 +2567,6 @@ int main(int argc, char *argv[]) int niceLevel = 19; int ioprio_class=2; int ioprio=4; - char *recDir=NULL; char *tok,*str; int ntok; int online=0; @@ -2575,6 +2596,8 @@ int main(int argc, char *argv[]) config.svdrpport=2001; } + atexit(freedir); + while (1) { int option_index = 0; @@ -2925,8 +2948,7 @@ int main(int argc, char *argv[]) { if ( strstr(argv[optind],".rec") != NULL ) { - recDir = argv[optind]; - if (recDir[strlen(recDir)-1]=='/') recDir[strlen(recDir)-1]=0; + recDir=realpath(argv[optind],NULL); } } optind++; diff --git a/command/video.cpp b/command/video.cpp index 525033e..6e58fb8 100644 --- a/command/video.cpp +++ b/command/video.cpp @@ -479,6 +479,8 @@ int cMarkAdBlackBordersHoriz::Process(int FrameNumber, int *BorderIFrame) 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; *BorderIFrame=0; int height=macontext->Video.Info.Height-OFFSET; @@ -911,7 +913,7 @@ MarkAdMark *cMarkAdVideo::Process(int FrameNumber, int FrameNumberNext) (macontext->Video.Info.AspectRatio.Den==macontext->Info.AspectRatio.Den)) { char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)",FrameNumberNext); + snprintf(nbuf,sizeof(nbuf),"%i)*",FrameNumberNext); nbuf[19]=0; strcat(buf,nbuf); AddMark(MT_ASPECTSTART,FrameNumberNext,buf); @@ -928,7 +930,7 @@ MarkAdMark *cMarkAdVideo::Process(int FrameNumber, int FrameNumberNext) else { char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)",FrameNumber); + snprintf(nbuf,sizeof(nbuf),"%i)?",FrameNumber); nbuf[19]=0; strcat(buf,nbuf); |