From ff59340614ec150e4bd84d3554081e666970aef2 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Fri, 3 May 2013 18:25:26 +0100 Subject: elusive hang while rendering --- rotord/rendercontext.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'rotord/rendercontext.cpp') diff --git a/rotord/rendercontext.cpp b/rotord/rendercontext.cpp index d6469bd..d0fa5bd 100644 --- a/rotord/rendercontext.cpp +++ b/rotord/rendercontext.cpp @@ -19,17 +19,19 @@ void Render_context::runTask() { processors.push_back(dynamic_cast(a)); } if (load_audio(audio_filename,processors)) { - state=AUDIO_READY; + audio_loaded=true; + state=IDLE; } else { //an error occurred: TODO have to clean up allocated data. autoptr? + audio_loaded=false; state=IDLE; } } if(cmd==RENDER) { state=RENDERING; - if(graph.video_render(output_filename,audio_filename,output_framerate)){ - state=RENDER_READY; + if(graph.video_render(output_filename,audio_filename,output_framerate,progress)){ + state=IDLE; } else { //an error occurred: TODO have to clean up allocated data. autoptr? @@ -88,7 +90,7 @@ Command_response Render_context::session_command(const std::vector& sprintf(c,"%02f",progress); response.description+=""+string(c)+"\n"; } - if (state==AUDIO_READY) { + else if (audio_loaded) { //not sure about this-- should this state be retained? //can the data only be read once? //for now @@ -97,7 +99,10 @@ Command_response Render_context::session_command(const std::vector& response.description+=""; - state=IDLE; + } + else { + response.status=HTTPResponse::HTTP_BAD_REQUEST; + response.description="Rotor: no audio loaded\n"; } } if (command[0]=="DELETE") { @@ -230,8 +235,8 @@ Command_response Render_context::session_command(const std::vector& if (command[0]=="GET") { //DUMMY RESPONSE response.status=HTTPResponse::HTTP_OK; - response.description="DUMMY RESPONSE Rotor: rendering video\n"; - response.description+="25.2\n"; + response.description="Rotor: rendering video\n"; + response.description+=""+ofToString(progress)+"\n"; } if (command[0]=="PUT") { if (command.size()>2) { @@ -383,9 +388,9 @@ bool Render_context::load_audio(const string &filename,vectorprocess_frame(frame->data[0],frame->nb_samples); } sample_processed+=frame->nb_samples; - mutex.lock(); - progress=((double)sample_processed)/samples; - mutex.unlock(); + //mutex.lock(); + progress=((float)sample_processed)/samples; + //mutex.unlock(); } } // You *must* call av_free_packet() after each call to av_read_frame() or else you'll leak memory -- cgit v1.2.3