diff options
Diffstat (limited to 'common.cpp')
-rw-r--r-- | common.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/common.cpp b/common.cpp new file mode 100644 index 0000000..dcddfd9 --- /dev/null +++ b/common.cpp @@ -0,0 +1,95 @@ +/* + * common.cpp: A plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + * + * $Id$ + */ + +#include "common.h" + +cMarkAdCommon::cMarkAdCommon(int RecvNumber,MarkAdContext *maContext) +{ + macontext=maContext; + recvnumber=RecvNumber; + mark.Comment=NULL; + mark.Position=0; +} + +cMarkAdCommon::~cMarkAdCommon() +{ + ResetMark(); +} + +void cMarkAdCommon::ResetMark() +{ + if (mark.Comment) free(mark.Comment); + mark.Comment=NULL; + mark.Position=0; +} + +bool cMarkAdCommon::AddMark(int Position, const char *Comment) +{ + if (!Comment) return false; + if (mark.Comment) + { + int oldlen=strlen(mark.Comment); + mark.Comment=(char *) realloc(mark.Comment,oldlen+10+strlen(Comment)); + if (!mark.Comment) + { + mark.Position=0; + return false; + } + strcat(mark.Comment," ["); + strcat(mark.Comment,Comment); + strcat(mark.Comment,"]"); + } + else + { + mark.Comment=strdup(Comment); + } + mark.Position=Position; + return true; +} + +void cMarkAdCommon::SetTimerMarks(int LastIFrame) +{ + if (!macontext) return; + + if ((time(NULL)>macontext->General.StartTime) && (!macontext->State.ContentStarted)) + { + char *buf=NULL; + asprintf(&buf,"start of %s content (%i)", + macontext->General.ManualRecording ? "user" : "event",LastIFrame); + if (buf) + { + isyslog("markad [%i]: %s",recvnumber,buf); + AddMark(LastIFrame,buf); + free(buf); + } + macontext->State.ContentStarted=LastIFrame; + } + + if ((time(NULL)>macontext->General.EndTime) && + (macontext->State.ContentStarted) && (!macontext->State.ContentStopped)) + { + char *buf=NULL; + asprintf(&buf,"stop of %s content (%i)", + macontext->General.ManualRecording ? "user" : "event",LastIFrame); + if (buf) + { + isyslog("markad [%i]: %s",recvnumber,buf); + AddMark(LastIFrame,buf); + free(buf); + } + macontext->State.ContentStopped=LastIFrame; + } +} + +MarkAdMark *cMarkAdCommon::Process(int LastIFrame) +{ + ResetMark(); + if (!LastIFrame) return NULL; + SetTimerMarks(LastIFrame); + return &mark; +} |