2 #include "edlsession.h"
3 #include "pluginserver.h"
4 #include "pluginvclient.h"
9 PluginVClient::PluginVClient(PluginServer *server)
10 : PluginClient(server)
19 project_frame_rate = server->edl->session->frame_rate;
20 frame_rate = project_frame_rate;
24 project_frame_rate = 1.0;
25 frame_rate = project_frame_rate;
29 PluginVClient::~PluginVClient()
34 int PluginVClient::is_video()
39 VFrame* PluginVClient::new_temp(int w, int h, int color_model)
42 (temp->get_w() != w ||
44 temp->get_color_model() != color_model))
52 temp = new VFrame(0, w, h, color_model);
58 void PluginVClient::age_temp()
61 temp->get_w() > PLUGIN_MAX_W &&
62 temp->get_h() > PLUGIN_MAX_H)
69 // Run before every realtime buffer is to be rendered.
70 int PluginVClient::get_render_ptrs()
72 int i, j, double_buffer, fragment_position;
74 for(i = 0; i < total_in_buffers; i++)
76 double_buffer = double_buffer_in_render.values[i];
77 fragment_position = offset_in_render.values[i];
78 input_ptr_render[i] = &input_ptr_master.values[i][double_buffer][fragment_position];
81 for(i = 0; i < total_out_buffers; i++)
83 double_buffer = double_buffer_out_render.values[i];
84 fragment_position = offset_out_render.values[i];
85 output_ptr_render[i] = &output_ptr_master.values[i][double_buffer][fragment_position];
90 // Run after the non realtime plugin is run.
91 int PluginVClient::delete_nonrealtime_parameters()
95 for(i = 0; i < total_in_buffers; i++)
97 for(j = 0; j < in_buffer_size; j++)
99 delete video_in[i][j];
103 for(i = 0; i < total_out_buffers; i++)
105 for(j = 0; j < out_buffer_size; j++)
107 delete video_out[i][j];
116 int PluginVClient::init_realtime_parameters()
118 project_frame_rate = server->edl->session->frame_rate;
119 project_color_model = server->edl->session->color_model;
120 aspect_w = server->edl->session->aspect_w;
121 aspect_h = server->edl->session->aspect_h;
125 int PluginVClient::process_realtime(VFrame **input,
131 int PluginVClient::process_realtime(VFrame *input,
137 int PluginVClient::process_buffer(VFrame **frame,
138 int64_t start_position,
141 for(int i = 0; i < PluginClient::total_in_buffers; i++)
142 read_frame(frame[i], i, start_position, frame_rate);
143 if(is_multichannel())
144 process_realtime(frame, frame);
148 int PluginVClient::process_buffer(VFrame *frame,
149 int64_t start_position,
152 read_frame(frame, 0, start_position, frame_rate);
153 process_realtime(frame, frame);
158 // Replaced by pull method
159 // void PluginVClient::plugin_process_realtime(VFrame **input,
161 // int64_t current_position,
162 // int64_t total_len)
164 // this->source_position = current_position;
165 // this->total_len = total_len;
167 // if(is_multichannel())
168 // process_realtime(input, output);
170 // process_realtime(input[0], output[0]);
173 void PluginVClient::plugin_render_gui(void *data)
178 void PluginVClient::send_render_gui(void *data)
180 server->send_render_gui(data);
183 int PluginVClient::plugin_start_loop(int64_t start,
188 frame_rate = get_project_framerate();
189 return PluginClient::plugin_start_loop(start,
195 int PluginVClient::plugin_get_parameters()
197 frame_rate = get_project_framerate();
198 return PluginClient::plugin_get_parameters();
201 int64_t PluginVClient::local_to_edl(int64_t position)
203 if(position < 0) return position;
204 return (int64_t)Units::round(position *
205 get_project_framerate() /
210 int64_t PluginVClient::edl_to_local(int64_t position)
212 if(position < 0) return position;
213 return (int64_t)Units::round(position *
215 get_project_framerate());
218 int PluginVClient::plugin_process_loop(VFrame **buffers, int64_t &write_length)
222 if(is_multichannel())
223 result = process_loop(buffers);
225 result = process_loop(buffers[0]);
234 int PluginVClient::read_frame(VFrame *buffer,
236 int64_t start_position)
238 return server->read_frame(buffer,
243 int PluginVClient::read_frame(VFrame *buffer,
244 int64_t start_position)
246 return server->read_frame(buffer,
251 int PluginVClient::read_frame(VFrame *buffer,
253 int64_t start_position,
256 return server->read_frame(buffer,
263 double PluginVClient::get_project_framerate()
265 return project_frame_rate;
268 double PluginVClient::get_framerate()