diff options
Diffstat (limited to 'command/audio.cpp')
-rw-r--r-- | command/audio.cpp | 159 |
1 files changed, 25 insertions, 134 deletions
diff --git a/command/audio.cpp b/command/audio.cpp index 46fa57a..0a9c133 100644 --- a/command/audio.cpp +++ b/command/audio.cpp @@ -11,182 +11,73 @@ #include <stdlib.h> #include <string.h> -extern "C" -{ -#include "debug.h" -} - #include "audio.h" cMarkAdAudio::cMarkAdAudio(MarkAdContext *maContext) { macontext=maContext; - mark.Comment=NULL; mark.Position=0; mark.Type=0; - result.CommentBefore=NULL; - result.CommentAfter=NULL; Clear(); } cMarkAdAudio::~cMarkAdAudio() { + resetmark(); Clear(); - ResetMark(); } -void cMarkAdAudio::ResetMark() -{ - if (mark.Comment) free(mark.Comment); - mark.Comment=NULL; - mark.Position=0; - mark.Type=0; -} - -bool cMarkAdAudio::AddMark(int Type, int Position, const char *Comment) +void cMarkAdAudio::Clear() { - 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; - mark.Type=Type; - return true; + channels=0; } -bool cMarkAdAudio::AnalyzeGain(int FrameNumber) +void cMarkAdAudio::resetmark() { - if (!macontext->Audio.Data.Valid) return false; - - int samples=macontext->Audio.Data.SampleBufLen/ - sizeof(*macontext->Audio.Data.SampleBuf)/ - macontext->Audio.Info.Channels; - - double left[samples]; - double right[samples]; - - for (int i=0; i<samples; i++) - { - left[i]=macontext->Audio.Data.SampleBuf[0+(i*2)]; - right[i]=macontext->Audio.Data.SampleBuf[1+(i*2)]; - } - - if (FrameNumber!=lastframe_gain) - { - if ((lastframe_gain>0) && (audiogain.AnalyzedSamples()>=(3*samples))) - { - double gain = audiogain.GetGain(); - printf("%05i %+.2f db\n",lastframe_gain,gain); - } - audiogain.Init(macontext->Audio.Info.SampleRate); - lastframe_gain=-1; - } - - if (audiogain.AnalyzeSamples(left,right,samples,2)!=GAIN_ANALYSIS_OK) - { - lastframe_gain=-1; - return false; - } - else - { - lastframe_gain=FrameNumber; - } - return true; + if (!mark.Type) return; + memset(&mark,0,sizeof(mark)); } -void cMarkAdAudio::Clear() +void cMarkAdAudio::setmark(int type, int position, int channelsbefore, int channelsafter) { - channels=0; - lastframe_gain=-1; - if (result.CommentBefore) free(result.CommentBefore); - if (result.CommentAfter) free(result.CommentAfter); - memset(&result,0,sizeof(result)); + mark.ChannelsBefore=channelsbefore; + mark.ChannelsAfter=channelsafter; + mark.Position=position; + mark.Type=type; } -bool cMarkAdAudio::ChannelChange(int a, int b) +bool cMarkAdAudio::channelchange(int a, int b) { if ((a==0) || (b==0)) return false; if (a!=b) return true; return false; } -MarkAdPos *cMarkAdAudio::Process2ndPass(int FrameNumber) -{ - if (!FrameNumber) return NULL; -#if 0 - if (AnalyzeGain(FrameNumber)) - { - if (result.CommentBefore) free(result.CommentBefore); - if (asprintf(&result.CommentBefore,"audio silence detection (%i)",FrameNumber)==-1) - { - result.CommentBefore=NULL; - } - result.FrameNumberBefore=FrameNumber; - return &result; - } -#endif - return NULL; -} - MarkAdMark *cMarkAdAudio::Process(int FrameNumber, int FrameNumberNext) { if ((!FrameNumber) || (!FrameNumberNext)) return NULL; - ResetMark(); + resetmark(); - if (ChannelChange(macontext->Audio.Info.Channels,channels)) + if (channelchange(macontext->Audio.Info.Channels,channels)) { - char *buf=(char *) calloc(1,256); - if (!buf) return NULL; - - snprintf(buf,255,"audio channel change from %i to %i (", channels, - macontext->Audio.Info.Channels); - - if (macontext->Info.Channels) + if (macontext->Audio.Info.Channels>2) { - if (macontext->Info.Channels==macontext->Audio.Info.Channels) - { - char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)*",FrameNumberNext); - nbuf[19]=0; - strcat(buf,nbuf); - AddMark(MT_CHANNELSTART,FrameNumberNext,buf); - } - else - { - char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)",framelast); - nbuf[19]=0; - strcat(buf,nbuf); - AddMark(MT_CHANNELSTOP,framelast,buf); - } + setmark(MT_CHANNELSTART,FrameNumberNext,channels,macontext->Audio.Info.Channels); } else { - char nbuf[20]; - snprintf(nbuf,sizeof(nbuf),"%i)?",FrameNumber); - nbuf[19]=0; - strcat(buf,nbuf); - AddMark(MT_CHANNELCHANGE,FrameNumber,buf); + setmark(MT_CHANNELSTOP,framelast,channels,macontext->Audio.Info.Channels); } - free(buf); } channels=macontext->Audio.Info.Channels; framelast=FrameNumber; - return &mark; + if (mark.Position) + { + return &mark; + } + else + { + return NULL; + } } - |