summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2010-10-16 22:56:09 +0200
committerJochen Dolze <vdr@dolze.de>2010-10-16 22:56:09 +0200
commit0acaba790948b737a35293e5a9ac91be5de563b0 (patch)
treeab714b34c0ff1a8f393b1acc6a2116ee4c486f8e
parent93dfddbfa472e3521df8b3b2e04e67f849db6e15 (diff)
downloadvdr-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/Makefile2
-rw-r--r--command/audio.cpp4
-rw-r--r--command/markad-standalone.cpp56
-rw-r--r--command/video.cpp6
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);