diff options
Diffstat (limited to 'rotord/rotor.cpp')
| -rw-r--r-- | rotord/rotor.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/rotord/rotor.cpp b/rotord/rotor.cpp index cd288e3..73577f4 100644 --- a/rotord/rotor.cpp +++ b/rotord/rotor.cpp @@ -30,7 +30,10 @@ void Render_context::runTask() { if (load_audio(audio_filename,processors)) { state=AUDIO_READY; } - else state=IDLE; + else { + //an error occurred: TODO have to clean up allocated data. autoptr? + state=IDLE; + } } sleep(100); } @@ -326,7 +329,10 @@ bool Render_context::load_audio(const string &filename,vector<Base_audio_process std::cout << "The data is in format " <<codecContext->sample_fmt<< " (aka "<< av_get_sample_fmt_name(codecContext->sample_fmt) << ") "<<std::endl; for (auto p: processors) { - p->init(codecContext->channels,16,samples,codecContext->sample_rate); + if(!p->init(codecContext->channels,16,samples,codecContext->sample_rate) ){ + cerr<<"Plugin failed to initialse"<<endl; + return false; + } } AVPacket packet; @@ -397,6 +403,10 @@ bool Render_context::load_audio(const string &filename,vector<Base_audio_process cerr << "finished processing: "<<sample_processed << " samples of "<<samples<<", "<<((double)sample_processed*100)/samples<<"%"<< std::endl; // Clean up! + for (auto p: processors) { + p->cleanup(); + } + av_free(frame); avcodec_close(codecContext); av_close_input_file(formatContext); @@ -469,7 +479,7 @@ Node_factory::Node_factory(){ add_type("==",new Is_new_integer()); add_type("signal_output",new Signal_output()); } -void Audio_thumbnailer::init(int _channels,int _bits,int _samples,int _rate) { +bool Audio_thumbnailer::init(int _channels,int _bits,int _samples,int _rate) { //base_audio_processor::init(_channels,_bits,_samples); channels=_channels; bits=_bits; @@ -482,6 +492,7 @@ void Audio_thumbnailer::init(int _channels,int _bits,int _samples,int _rate) { sample=0; samples=0; accum=0.0; + return true; } int Audio_thumbnailer::process_frame(uint8_t *_data,int samples_in_frame){ //begin by processing remaining samples @@ -539,13 +550,13 @@ string Audio_thumbnailer::print(){ } return output; } -void Audio_analysis::init(int _channels,int _bits,int _samples, int _rate) { +bool Audio_analysis::init(int _channels,int _bits,int _samples, int _rate) { //need these to make sense of data channels=_channels; bits=_bits; samples=_samples; - - analyser.init(soname,id,_rate); + + return analyser.init(soname,id,_channels,_bits,_samples,_rate); //attempt to load vamp plugin and prepare to receive frames of data //should the audio analysis contain a vamphost or should it inherit? @@ -553,6 +564,9 @@ void Audio_analysis::init(int _channels,int _bits,int _samples, int _rate) { } int Audio_analysis::process_frame(uint8_t *data,int samples_in_frame) { - //the standard vamp process takes a file + analyser.process_frame(data,samples_in_frame); return 1; } +void Audio_analysis::cleanup() { + analyser.cleanup(); +} |
