X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.0%2Fcinelerra%2Fvattachmentpoint.C;h=062db5bb826567ff27ff2d9f1782c8253a1529f6;hp=fd1bec75c8e38ecc5dd0af784fb40969cd668f54;hb=a3a59f63fdfbcf94c561595f515951fdfd4bea30;hpb=48f43d501344bd185f8877329a47c64600187a72 diff --git a/cinelerra-5.0/cinelerra/vattachmentpoint.C b/cinelerra-5.0/cinelerra/vattachmentpoint.C index fd1bec75..062db5bb 100644 --- a/cinelerra-5.0/cinelerra/vattachmentpoint.C +++ b/cinelerra-5.0/cinelerra/vattachmentpoint.C @@ -106,64 +106,40 @@ void VAttachmentPoint::render(VFrame *output, if(plugin_server->multichannel) { // Test against previous parameters for reuse of previous data - if(is_processed && - this->start_position == start_position && - EQUIV(this->frame_rate, frame_rate)) - { + if( !is_processed || this->start_position != start_position || + !EQUIV(this->frame_rate, frame_rate)) { + is_processed = 1; + this->start_position = start_position; + this->frame_rate = frame_rate; + +// Allocate buffer vector for subsequent render calls + new_buffer_vector(output->get_w(), output->get_h(), + output->get_color_model()); +// Process plugin +//printf("VAttachmentPoint::render 1 %d\n", buffer_number); + if(renderengine) + plugin_servers.values[0]->set_use_opengl(use_opengl, + renderengine->video); + plugin_servers.values[0]->process_buffer(buffer_vector, + start_position, frame_rate, + (int64_t)Units::round(plugin->length * frame_rate / + renderengine->get_edl()->session->frame_rate), + renderengine->command->get_direction()); + } +//printf("VAttachmentPoint::render 3\n"); // Need to copy PBuffer if OpenGL, regardless of use_opengl - if(buffer_vector[buffer_number]->get_opengl_state() == VFrame::RAM) - { - output->copy_from(buffer_vector[buffer_number]); - output->set_opengl_state(VFrame::RAM); - } - else - if(renderengine && renderengine->video) - { + if( buffer_vector[buffer_number]->get_opengl_state() == VFrame::RAM ) { + output->copy_from(buffer_vector[buffer_number]); + output->set_opengl_state(VFrame::RAM); + } + else if(renderengine && renderengine->video) { // Need to copy PBuffer to texture // printf("VAttachmentPoint::render temp=%p output=%p\n", // buffer_vector[buffer_number], // output); - VDeviceX11 *x11_device = (VDeviceX11*)renderengine->video->get_output_base(); - x11_device->copy_frame(output, buffer_vector[buffer_number]); - } - return; - } - - is_processed = 1; - this->start_position = start_position; - this->frame_rate = frame_rate; - -// Allocate buffer vector for subsequent render calls - new_buffer_vector(output->get_w(), - output->get_h(), - output->get_color_model()); - -// Create temporary vector with output argument substituted in - VFrame **output_temp = new VFrame*[virtual_plugins.total]; - for(int i = 0; i < virtual_plugins.total; i++) - { - if(i == buffer_number) - output_temp[i] = output; - else - output_temp[i] = buffer_vector[i]; + VDeviceX11 *x11_device = (VDeviceX11*)renderengine->video->get_output_base(); + x11_device->copy_frame(output, buffer_vector[buffer_number]); } - -// Process plugin -//printf("VAttachmentPoint::render 1 %d\n", buffer_number); - if(renderengine) - plugin_servers.values[0]->set_use_opengl(use_opengl, - renderengine->video); - plugin_servers.values[0]->process_buffer(output_temp, - start_position, - frame_rate, - (int64_t)Units::round(plugin->length * - frame_rate / - renderengine->get_edl()->session->frame_rate), - renderengine->command->get_direction()); -//printf("VAttachmentPoint::render 2\n"); - - delete [] output_temp; -//printf("VAttachmentPoint::render 3\n"); } else // process single track