X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvattachmentpoint.C;h=c9b491bbe26639fad389bc5a5e9edf13f078b9e1;hb=a6369311556cc1e1877142181d8606e4f68aa803;hp=85250b565c831d3fa032da5f46f86bc907481a53;hpb=bf87166cc5846f96c5be2621e329c1cbc21c1508;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/vattachmentpoint.C b/cinelerra-5.1/cinelerra/vattachmentpoint.C index 85250b56..c9b491bb 100644 --- a/cinelerra-5.1/cinelerra/vattachmentpoint.C +++ b/cinelerra-5.1/cinelerra/vattachmentpoint.C @@ -2,21 +2,21 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #include "bcsignals.h" @@ -74,12 +74,7 @@ void VAttachmentPoint::new_buffer_vector(int width, int height, int colormodel) buffer_vector = new VFrame*[virtual_plugins.total]; for(int i = 0; i < virtual_plugins.total; i++) { - buffer_vector[i] = new VFrame(0, - -1, - width, - height, - colormodel, - -1); + buffer_vector[i] = new VFrame(width, height, colormodel); } } } @@ -89,7 +84,7 @@ int VAttachmentPoint::get_buffer_size() return 1; } -void VAttachmentPoint::render(VFrame *output, +void VAttachmentPoint::render(VFrame *output, int buffer_number, int64_t start_position, double frame_rate, @@ -101,7 +96,7 @@ void VAttachmentPoint::render(VFrame *output, if(!plugin_server || !plugin->on) return; if(debug_render) - printf(" VAttachmentPoint::render \"%s\" multi=%d opengl=%d\n", + printf(" VAttachmentPoint::render \"%s\" multi=%d opengl=%d\n", plugin_server->title, plugin_server->multichannel, use_opengl); @@ -116,7 +111,7 @@ void VAttachmentPoint::render(VFrame *output, this->frame_rate = frame_rate; // Allocate buffer vector for subsequent render calls - new_buffer_vector(output->get_w(), output->get_h(), + new_buffer_vector(output->get_w(), output->get_h(), output->get_color_model()); // Process plugin //printf("VAttachmentPoint::render 1 %d\n", buffer_number); @@ -125,19 +120,21 @@ void VAttachmentPoint::render(VFrame *output, renderengine->video); plugin_servers.values[0]->process_buffer(buffer_vector, start_position, frame_rate, - (int64_t)Units::round(plugin->length * 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 ) { + int opengl_state = buffer_vector[buffer_number]->get_opengl_state(); + if( opengl_state == VFrame::RAM ) { output->copy_from(buffer_vector[buffer_number]); output->set_opengl_state(VFrame::RAM); } - else if(renderengine && renderengine->video) { + else if( opengl_state != VFrame::UNKNOWN && + renderengine && renderengine->video) { // Need to copy PBuffer to texture -// printf("VAttachmentPoint::render temp=%p output=%p\n", +// printf("VAttachmentPoint::render temp=%p output=%p\n", // buffer_vector[buffer_number], // output); VDeviceX11 *x11_device = (VDeviceX11*)renderengine->video->get_output_base(); @@ -155,8 +152,8 @@ void VAttachmentPoint::render(VFrame *output, plugin_servers.values[buffer_number]->process_buffer(output_temp, start_position, frame_rate, - (int64_t)Units::round(plugin->length * - frame_rate / + (int64_t)Units::round(plugin->length * + frame_rate / renderengine->get_edl()->session->frame_rate), renderengine->command->get_direction()); }