dynamic keyframes, textbox rework, andrea ffmpeg.opts, perpetual chkpt undo, lv2...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / pluginlv2client.C
index 6163f2dfd9867e1c7e16550d465acc15e51c785a..289eed4ea98541b06a3df7198e537a0a787628ea 100644 (file)
 #include "bchash.h"
 #include "clip.h"
 #include "cstrdup.h"
+#include "edl.h"
+#include "edlsession.h"
 #include "file.h"
+#include "filesystem.h"
 #include "filexml.h"
 #include "language.h"
 #include "mainerror.h"
@@ -164,8 +167,15 @@ NEW_WINDOW_MACRO(PluginLV2Client, PluginLV2ClientWindow)
 
 int PluginLV2Client::init_lv2()
 {
+       int bfrsz = block_length;
+       EDL *edl = server->edl;
+       if( edl ) {
+               PlaybackConfig *playback_config = edl->session->playback_config;
+               bfrsz = playback_config->aconfig->fragment_size;
+       }
        int sample_rate = get_project_samplerate();
-       return PluginLV2::init_lv2(config, sample_rate);
+       if( sample_rate < 64 ) sample_rate = samplerate;
+       return PluginLV2::init_lv2(config, sample_rate, bfrsz);
 }
 
 int PluginLV2Client::load_configuration()
@@ -219,7 +229,7 @@ char* PluginLV2Client::to_string(char *string, const char *input)
 void PluginLV2Client::save_data(KeyFrame *keyframe)
 {
        FileXML output;
-       output.set_shared_output(keyframe->get_data(), MESSAGESIZE);
+       output.set_shared_output(keyframe->xbuf);
        char name[BCTEXTLEN];  to_string(name, plugin_title());
        output.tag.set_title(name);
        for( int i=0; i<config.size(); ++i ) {
@@ -233,7 +243,7 @@ void PluginLV2Client::save_data(KeyFrame *keyframe)
 void PluginLV2Client::read_data(KeyFrame *keyframe)
 {
        FileXML input;
-       input.set_shared_input(keyframe->get_data(), strlen(keyframe->get_data()));
+       input.set_shared_input(keyframe->xbuf);
        char name[BCTEXTLEN];  to_string(name, plugin_title());
 
        while( !input.read_tag() ) {
@@ -332,8 +342,9 @@ PluginLV2BlackList::~PluginLV2BlackList()
 
 int PluginLV2BlackList::is_badboy(const char *uri)
 {
+       FileSystem fs;
        for( int i=size(); --i>=0; )
-               if( !strcmp(uri, get(i)) ) return 1;
+               if( !fs.test_filter(uri, get(i)) ) return 1;
        return 0;
 }
 
@@ -390,7 +401,7 @@ PluginLV2ParentUI::PluginLV2ParentUI(Plugin *plugin)
        output_bfr = new Condition(0, "PluginLV2ParentUI::output_bfr", 1);
        client = 0;
        gui = 0;
-       hidden = 1;
+       hidden = -1;
 }
 
 PluginLV2ParentUI::~PluginLV2ParentUI()
@@ -407,6 +418,8 @@ void PluginLV2ParentUI::start_parent(PluginLV2Client *client)
        char bfr[len];  memset(bfr, 0, len);
        open_bfr_t *open_bfr = (open_bfr_t *)bfr;
        open_bfr->sample_rate = client->get_project_samplerate();
+       PlaybackConfig *playback_config = client->server->edl->session->playback_config;
+       open_bfr->bfrsz = playback_config->aconfig->fragment_size;
        strcpy(open_bfr->path, path);
        send_child(LV2_OPEN, open_bfr, len);
        PluginLV2ClientConfig &conf = client->config;
@@ -426,6 +439,8 @@ int PluginLV2ParentUI::handle_parent()
                hidden = 1;
                break; }
        case LV2_SHOW: {
+               if( hidden < 0 )
+                       gui->lv2_ui_enable();
                hidden = 0;
                break; }
        case LV2_SHMID: {