int64_t total_len)
{
if( !plugin_open ) return;
+ if (total_len == 0) return;
PluginVClient *vclient = (PluginVClient*)client;
+ to_ram(input);
+ to_ram(output);
vclient->source_position = current_position;
vclient->source_start = 0;
PluginGUIs::PluginGUIs(MWindow *mwindow)
{
this->mwindow = mwindow;
- this->next_id = 0;
}
PluginGUIs::~PluginGUIs()
{
void PluginGUIs::append(PluginServer *server)
{
- server->gui_id = next_id++;
+ server->gui_id = EDL::next_id();
ArrayList<PluginServer*>::append(server);
}
return use_opengl;
}
+int PluginServer::to_ram(VFrame *vframe)
+{
+ if( vframe->get_opengl_state() == VFrame::RAM ) return 0;
+ if( !vdevice ) return -1;
+ VDeviceX11 *vdevice_x11 = (VDeviceX11*) vdevice->get_output_base();
+ int vw = vframe->get_w(), vh = vframe->get_h();
+ vdevice_x11->do_camera(vframe, vframe, 0,0,vw,vh, 0,0,vw,vh); // copy to ram
+ return 1;
+}
void PluginServer::run_opengl(PluginClient *plugin_client)
{
switch( plugin_type ) {
case PLUGIN_TYPE_FFMPEG:
case PLUGIN_TYPE_LV2:
- strcpy(string2, client->plugin_title());
+ strcpy(string2, title);
break;
case PLUGIN_TYPE_BUILTIN:
case PLUGIN_TYPE_LADSPA:
}
-void PluginServer::apply_keyframe(KeyFrame *src)
-{
- Plugin *plugin = edl->tracks->plugin_exists(plugin_id);
- if( !plugin )
- keyframe->copy_data(src);
- else if( plugin->is_transition() )
- plugin->get_keyframe()->copy_data(src);
- else
-// Span keyframes
- plugin->keyframes->update_parameter(src);
+void PluginServer::apply_keyframe(Plugin *plugin, KeyFrame *src)
+{
+ KeyFrame* dst = !plugin ? keyframe :
+ plugin->is_transition() ? plugin->get_keyframe() : 0;
+ if( !dst ) {
+ if( edl->session->span_keyframes ) {
+ double selection_start = edl->local_session->get_selectionstart(0);
+ double selection_end = edl->local_session->get_selectionend(0);
+ selection_start = edl->align_to_frame(selection_start, 0);
+ selection_end = edl->align_to_frame(selection_end, 0);
+ Track *track = plugin->track;
+ int64_t start = track->to_units(selection_start, 1);
+ int64_t end = track->to_units(selection_end, 1);
+ if( start != end ) {
+ client->span_keyframes(src, start, end);
+ return;
+ }
+ }
+ dst = get_keyframe();
+ }
+ if( dst )
+ dst->copy_data(src);
}