/*
* CINELERRA
* Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
- *
+ *
* 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"
void VAttachmentPoint::delete_buffer_vector()
{
- if(!(void *)this) printf("VAttachmentPoint::delete_buffer_vector NULL\n");
+ void *This = this;
+ if(!This) printf("VAttachmentPoint::delete_buffer_vector NULL\n");
if(buffer_vector)
{
for(int i = 0; i < virtual_plugins.total; i++)
void VAttachmentPoint::new_buffer_vector(int width, int height, int colormodel)
{
- if(!(void *)this) printf("VAttachmentPoint::new_buffer_vector NULL\n");
+ void *This = this;
+ if(!This) printf("VAttachmentPoint::new_buffer_vector NULL\n");
if(buffer_vector &&
(width != buffer_vector[0]->get_w() ||
height != buffer_vector[0]->get_h() ||
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);
}
}
}
return 1;
}
-void VAttachmentPoint::render(VFrame *output,
+void VAttachmentPoint::render(VFrame *output,
int buffer_number,
int64_t start_position,
double frame_rate,
int debug_render,
int use_opengl)
{
- if(!(void *)this) printf("VAttachmentPoint::render NULL\n");
+ void *This = this;
+ if(!This) printf("VAttachmentPoint::render NULL\n");
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);
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);
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();
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());
}