5 #include "edlsession.h"
7 #include "pluginserver.h"
8 #include "renderengine.h"
9 #include "transportque.h"
10 #include "vattachmentpoint.h"
13 VAttachmentPoint::VAttachmentPoint(RenderEngine *renderengine, Plugin *plugin)
14 : AttachmentPoint(renderengine, plugin, TRACK_VIDEO)
19 VAttachmentPoint::~VAttachmentPoint()
21 delete_buffer_vector();
24 void VAttachmentPoint::delete_buffer_vector()
26 if(!this) printf("VAttachmentPoint::delete_buffer_vector NULL\n");
29 for(int i = 0; i < virtual_plugins.total; i++)
30 delete buffer_vector[i];
31 delete [] buffer_vector;
36 void VAttachmentPoint::new_buffer_vector(int width, int height, int colormodel)
38 if(!this) printf("VAttachmentPoint::new_buffer_vector NULL\n");
40 (width != buffer_vector[0]->get_w() ||
41 height != buffer_vector[0]->get_h() ||
42 colormodel != buffer_vector[0]->get_color_model()))
44 delete_buffer_vector();
49 buffer_vector = new VFrame*[virtual_plugins.total];
50 for(int i = 0; i < virtual_plugins.total; i++)
52 buffer_vector[i] = new VFrame(0,
61 int VAttachmentPoint::get_buffer_size()
66 void VAttachmentPoint::render(VFrame *output,
72 if(!this) printf("VAttachmentPoint::render NULL\n");
73 if(!plugin_server || !plugin->on) return;
76 printf(" VAttachmentPoint::render %s %d\n",
78 plugin_server->multichannel);
80 if(plugin_server->multichannel)
82 // Test against previous parameters for reuse of previous data
84 this->start_position == start_position &&
85 EQUIV(this->frame_rate, frame_rate))
87 output->copy_from(buffer_vector[buffer_number]);
92 this->start_position = start_position;
93 this->frame_rate = frame_rate;
95 // Allocate buffer vector
96 new_buffer_vector(output->get_w(),
98 output->get_color_model());
100 // Create temporary vector with output argument substituted in
101 VFrame **output_temp = new VFrame*[virtual_plugins.total];
102 for(int i = 0; i < virtual_plugins.total; i++)
104 if(i == buffer_number)
105 output_temp[i] = output;
107 output_temp[i] = buffer_vector[i];
111 plugin_servers.values[0]->process_buffer(output_temp,
114 (int64_t)Units::round(plugin->length *
116 renderengine->edl->session->frame_rate),
117 renderengine->command->get_direction());
119 delete [] output_temp;
122 // process single track
124 VFrame *output_temp[1];
125 output_temp[0] = output;
126 plugin_servers.values[buffer_number]->process_buffer(output_temp,
129 (int64_t)Units::round(plugin->length *
131 renderengine->edl->session->frame_rate),
132 renderengine->command->get_direction());