#include "preferences.h"
#include "renderengine.h"
#include "track.h"
+#include "tracks.h"
#include "transportque.h"
#include <stdio.h>
PluginClientThread::~PluginClientThread()
{
- join();
delete window;
delete init_complete;
}
window->lock_window("PluginClientThread::run");
//printf("PluginClientThread::run %p %d\n", this, __LINE__);
window->hide_window(1);
+ client->save_defaults_xml(); // needs window lock
window->unlock_window();
window->done_event(result);
-// Can't save defaults in the destructor because it's not called immediately
-// after closing.
- /* if(client->defaults) */ client->save_defaults_xml();
/* This is needed when the GUI is closed from itself */
if(result) client->client_side_close();
}
client->window_x /* - w / 2 */, client->window_y /* - h / 2 */,
w, h, min_w, min_h, allow_resize, 0, 1)
{
+ char title[BCTEXTLEN];
+
this->client = client;
+
+// *** CONTEXT_HELP ***
+ if(client) {
+ strcpy(title, client->plugin_title());
+ if(! strcmp(title, "Overlay")) {
+ // "Overlay" plugin title is ambiguous
+ if(client->is_audio()) strcat(title, " \\(Audio\\)");
+ if(client->is_video()) strcat(title, " \\(Video\\)");
+ }
+ if(client->server->is_ffmpeg()) {
+ // FFmpeg plugins can be audio or video
+ if(client->is_audio())
+ strcpy(title, "FFmpeg Audio Plugins");
+ if(client->is_video())
+ strcpy(title, "FFmpeg Video Plugins");
+ }
+ context_help_set_keyword(title);
+ }
}
PluginClientWindow::PluginClientWindow(const char *title,
: BC_Window(title, x, y, w, h, min_w, min_h, allow_resize, 0, 1)
{
this->client = 0;
+// *** CONTEXT_HELP ***
+ context_help_set_keyword(title);
}
PluginClientWindow::~PluginClientWindow()
{
if(thread && thread->window)
{
-//printf("PluginClient::delete_thread %d\n", __LINE__);
-/* This is needed when the GUI is closed from elsewhere than itself */
-/* Since we now use autodelete, this is all that has to be done, thread will take care of itself ... */
-/* Thread join will wait if this was not called from the thread itself or go on if it was */
thread->window->lock_window("PluginClient::hide_gui");
thread->window->set_done(0);
-//printf("PluginClient::hide_gui %d thread->window=%p\n", __LINE__, thread->window);
thread->window->unlock_window();
}
}
const char *PluginClient::get_source_path()
{
- if( server->plugin ) return 0;
- int64_t source_position = server->plugin->startproject;
- Edit *edit = server->plugin->track->edits->editof(source_position,PLAY_FORWARD,0);
+ Plugin *plugin = server->edl->tracks->plugin_exists(server->plugin_id);
+ int64_t source_position = plugin->startproject;
+ Edit *edit = plugin->track->edits->editof(source_position,PLAY_FORWARD,0);
Indexable *indexable = edit ? edit->get_source() : 0;
return indexable ? indexable->path : 0;
}
return server->get_use_opengl();
}
+int PluginClient::to_ram(VFrame *vframe)
+{
+ return server->to_ram(vframe);
+}
+
int PluginClient::get_total_buffers()
{
return total_in_buffers;
if(server->mwindow)
server->mwindow->undo->update_undo_before(_("tweek"), this);
#ifdef USE_KEYFRAME_SPANNING
- KeyFrame keyframe;
+ EDL *edl = server->edl;
+ Plugin *plugin = edl->tracks->plugin_exists(server->plugin_id);
+ KeyFrames *keyframes = plugin ? plugin->keyframes : 0;
+ KeyFrame keyframe(edl, keyframes);
save_data(&keyframe);
- server->apply_keyframe(&keyframe);
+ server->apply_keyframe(plugin, &keyframe);
#else
KeyFrame* keyframe = server->get_keyframe();
// Call save routine in plugin
return 0;
}
+// virtual default spanning keyframe update. If a range is selected,
+// then changed parameters are copied to (prev + selected) keyframes.
+// redefine per client for custom keyframe updates, see tracer, sketcher, crikey
+void PluginClient::span_keyframes(KeyFrame *src, int64_t start, int64_t end)
+{
+ src->span_keyframes(start, end);
+}
+
KeyFrame* PluginClient::get_prev_keyframe(int64_t position, int is_local)
{
EDL *edl = get_edl();
projector_x += edl->session->output_w / 2;
projector_y += edl->session->output_h / 2;
- Track *track = server->plugin ? server->plugin->track : 0;
+ Plugin *plugin = edl->tracks->plugin_exists(server->plugin_id);
+ Track *track = plugin ? plugin->track : 0;
int track_w = track ? track->track_w : edl->session->output_w;
int track_h = track ? track->track_h : edl->session->output_h;
tx = (ox - projector_x) / projector_z + track_w / 2;
EDL *edl = get_edl();
projector_x += edl->session->output_w / 2;
projector_y += edl->session->output_h / 2;
- Track *track = server->plugin ? server->plugin->track : 0;
+ Plugin *plugin = edl->tracks->plugin_exists(server->plugin_id);
+ Track *track = plugin ? plugin->track : 0;
int track_w = track ? track->track_w : edl->session->output_w;
int track_h = track ? track->track_h : edl->session->output_h;
ox = (tx - track_w / 2) * projector_z + projector_x;
return server->gui_open();
}
+