X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvrender.C;h=43893b2770106845d2fbe6533eadb657bc1e3d81;hp=42f83ef87e7d86e57a2c84a8bf7b4781fad41984;hb=HEAD;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/vrender.C b/cinelerra-5.1/cinelerra/vrender.C index 42f83ef8..03b1421d 100644 --- a/cinelerra-5.1/cinelerra/vrender.C +++ b/cinelerra-5.1/cinelerra/vrender.C @@ -22,6 +22,7 @@ #include "asset.h" #include "bcsignals.h" #include "cache.h" +#include "canvas.h" #include "clip.h" #include "condition.h" #include "datatype.h" @@ -61,7 +62,7 @@ VRender::VRender(RenderEngine *renderengine) { data_type = TRACK_VIDEO; transition_temp = 0; - overlayer = new OverlayFrame(renderengine->preferences->processors); + overlayer = new OverlayFrame(renderengine->preferences->project_smp); input_temp = 0; vmodule_render_fragment = 0; playback_buffer = 0; @@ -69,14 +70,20 @@ VRender::VRender(RenderEngine *renderengine) asynchronous = 0; // render 1 frame at a time framerate_counter = 0; video_out = 0; + track_w = track_h = 0; + output_w = output_h = 0; + first_frame = 0; + output_offset = 0; + source_length = 0; render_strategy = -1; } VRender::~VRender() { - if(input_temp) delete input_temp; - if(transition_temp) delete transition_temp; - if(overlayer) delete overlayer; + renderengine->wait_done(); + delete overlayer; + delete input_temp; + delete transition_temp; } @@ -97,10 +104,9 @@ Module* VRender::new_module(Track *track) int VRender::flash_output() { - if(video_out) - return renderengine->video->write_buffer(video_out, renderengine->get_edl()); - else - return 0; + if( !video_out ) return 0; + renderengine->update_scope(video_out); + return renderengine->video->write_buffer(video_out, renderengine->get_edl()); } int VRender::process_buffer(VFrame *video_out, @@ -132,7 +138,8 @@ int VRender::process_buffer(int64_t input_position, int use_vconsole = 1; int use_brender = 0; int result = 0; - int use_cache = renderengine->command->single_frame(); + int use_cache = renderengine->command->single_frame() ? 1 : + renderengine->command->get_direction() == PLAY_REVERSE ? -1 : 0; // int use_asynchronous = // renderengine->command->realtime && // renderengine->get_edl()->session->video_every_frame && @@ -287,7 +294,7 @@ int VRender::get_colormodel(VEdit *playable_edit, int use_vconsole, int use_bren void VRender::run() { - int reconfigure; + int reconfigure = 1; const int debug = 0; // Want to know how many samples rendering each frame takes. @@ -321,13 +328,13 @@ void VRender::run() // Want the condition before, since only 1 frame is rendered // and the number of frames skipped after this frame varies. current_input_length = 1; - - reconfigure = vconsole->test_reconfigure(current_position, - current_input_length); - - + if( !reconfigure ) reconfigure = + vconsole->test_reconfigure(current_position, current_input_length); if(debug) printf("VRender::run %d\n", __LINE__); - if(reconfigure) restart_playback(); + if( reconfigure ) { + restart_playback(); + reconfigure = 0; + } if(debug) printf("VRender::run %d\n", __LINE__); process_buffer(current_position, use_opengl); @@ -481,8 +488,9 @@ void VRender::run() framerate_timer.update(); } if(debug) printf("VRender::run %d done=%d\n", __LINE__, done); - if( !interrupt ) - interrupt = renderengine->video->interrupt; + if( !interrupt ) interrupt = renderengine->interrupted; + if( !interrupt ) interrupt = renderengine->video->interrupt; + if( !interrupt ) interrupt = vconsole->interrupt; }