ffmpeg seek fixes, asset only pastes, plugin info, remove vocoder, misc fixes
authorGood Guy <good1.2guy@gmail.com>
Sat, 22 Jul 2017 23:05:46 +0000 (17:05 -0600)
committerGood Guy <good1.2guy@gmail.com>
Sat, 22 Jul 2017 23:05:46 +0000 (17:05 -0600)
28 files changed:
cinelerra-5.1/Makefile.am
cinelerra-5.1/cinelerra/Makefile
cinelerra-5.1/cinelerra/aboutprefs.C
cinelerra-5.1/cinelerra/assetpopup.C
cinelerra-5.1/cinelerra/awindow.C
cinelerra-5.1/cinelerra/awindow.h
cinelerra-5.1/cinelerra/awindowgui.C
cinelerra-5.1/cinelerra/awindowgui.h
cinelerra-5.1/cinelerra/effectlist.C [new file with mode: 0644]
cinelerra-5.1/cinelerra/effectlist.h [new file with mode: 0644]
cinelerra-5.1/cinelerra/effectlist.inc [new file with mode: 0644]
cinelerra-5.1/cinelerra/ffmpeg.C
cinelerra-5.1/cinelerra/labelpopup.C
cinelerra-5.1/cinelerra/loadmode.inc
cinelerra-5.1/cinelerra/menueffects.C
cinelerra-5.1/cinelerra/mwindow.C
cinelerra-5.1/cinelerra/mwindow.h
cinelerra-5.1/cinelerra/mwindowedit.C
cinelerra-5.1/cinelerra/pluginserver.C
cinelerra-5.1/cinelerra/pluginserver.h
cinelerra-5.1/cinelerra/record.C
cinelerra-5.1/cinelerra/render.C
cinelerra-5.1/guicast/bclistbox.C
cinelerra-5.1/guicast/bclistbox.h
cinelerra-5.1/info/plugins.txt [new file with mode: 0644]
cinelerra-5.1/msg/txt [moved from cinelerra-5.1/msg.txt with 100% similarity]
cinelerra-5.1/plugins/Makefile
cinelerra-5.1/thirdparty/src/ffmpeg.patch5 [new file with mode: 0644]

index 067f1b63b2af9b8ae443f0b03a03cacafeab2ac8..7e00103038cdfb62b4c83c0bce0485a16ce99592 100644 (file)
@@ -31,7 +31,7 @@ export mkinstalldirs install_sh inst_sh
 
 # install to bin
 binstall:      install-recursive
-       cp -a COPYING README models ffmpeg msg.txt tips bin/.
+       cp -a COPYING README models ffmpeg msg info tips bin/.
        sed -e 's/\<cin\>/$(WANT_CIN)/g' < image/cin.desktop \
                > "bin/applications/$(WANT_CIN).desktop"
        cp -a image/cin.svg "bin/pixmaps/$(WANT_CIN)".svg
@@ -48,7 +48,7 @@ cinstall:
        cd bin; $(inst_sh) "$(DESTDIR)$(WANT_CINLIB_DIR)" \
                bdwrite cutads hveg2enc mpeg2enc mplex mplexlo
        cd bin; $(inst_sh) "$(DESTDIR)$(datadir)/$(WANT_CIN)" \
-               COPYING README msg.txt ffmpeg doc models tips
+               COPYING README models ffmpeg msg info tips doc
        cd bin/locale; $(inst_sh) "$(DESTDIR)$(localedir)" .
        cd bin/plugins; $(inst_sh) "$(DESTDIR)$(WANT_PLUGIN_DIR)" .
        cd bin/ladspa; $(inst_sh) "$(DESTDIR)$(WANT_LADSPA_DIR)" .
index 846e8284a1496b8b1e11822074a76fb21df2e05e..d6ed0a74ee0e9ed409a377c5fa78702d8e45008b 100644 (file)
@@ -94,6 +94,7 @@ OBJS = \
        $(OBJDIR)/edits.o \
        $(OBJDIR)/edl.o \
        $(OBJDIR)/edlsession.o \
+       $(OBJDIR)/effectlist.o \
        $(OBJDIR)/exportedl.o \
        $(OBJDIR)/fadeengine.o \
        $(OBJDIR)/ffmpeg.o \
index 0d2d76ea8b7317840bf44a95f9553870c86415f4..f70e3fbd6d53c31fa6c0804328132a060d6146ee 100644 (file)
@@ -74,16 +74,27 @@ void AboutPrefs::create_objects()
 
        const char *cfg_path = File::get_cindat_path();
        char msg_path[BCTEXTLEN];
-       snprintf(msg_path, sizeof(msg_path), "%s/msg.txt", cfg_path);
-       FILE *fp = fopen(msg_path, "r");
+       FILE *fp = 0;
+       if( BC_Resources::language[0] ) {
+               snprintf(msg_path, sizeof(msg_path), "%s/msg/%s",
+                       cfg_path, BC_Resources::language);
+               fp = fopen(msg_path, "r");
+       }
+       if( !fp ) {
+               snprintf(msg_path, sizeof(msg_path), "%s/msg/txt",
+                       cfg_path);
+               fp = fopen(msg_path, "r");
+       }
        if( fp ) {
                set_font(LARGEFONT);
                draw_text(x, y, _("About:"));
                y += get_text_height(LARGEFONT);
                char msg[BCTEXTLEN];
-               while( fgets(msg, sizeof(msg), fp) )
+               while( fgets(msg, sizeof(msg), fp) ) {
+                       int len = strlen(msg);
+                       if( len > 0 && msg[len-1] == '\n' ) msg[len-1] = 0;
                        about.append(new BC_ListBoxItem(msg));
-
+               }
                BC_ListBox *listbox;
                add_subwindow(listbox = new BC_ListBox(x, y, 300, 280,
                        LISTBOX_TEXT, &about, 0, 0, 1));
index bc556ae61a09936e6f75570219ef95e40f0fabcf..670e088299dbd96a59081759ed36ad0e673e4922 100644 (file)
@@ -515,9 +515,9 @@ AssetListPaste::~AssetListPaste()
 int AssetListPaste::handle_event()
 {
        if( !paste_dialog )
-               paste_dialog->close_window();
-       else
                paste_dialog = new AssetPasteDialog(this);
+       else
+               paste_dialog->close_window();
        int cur_x, cur_y;
        gui->get_abs_cursor_xy(cur_x, cur_y, 0);
        paste_dialog->start(cur_x, cur_y);
index e416b13060bfea362c73a876e9bcb7b4b515285f..bc6ba19375139cce5f0e61c7757498fadd7a4dc1 100644 (file)
@@ -25,6 +25,7 @@
 #include "awindowgui.h"
 #include "bcsignals.h"
 #include "clipedit.h"
+#include "effectlist.h"
 #include "labeledit.h"
 #include "labelpopup.h"
 
@@ -63,6 +64,7 @@ void AWindow::create_objects()
        asset_edit = new AssetEdit(mwindow);
        clip_edit = new ClipEdit(mwindow, this, 0);
        label_edit = new LabelEdit(mwindow, this, 0);
+       effect_tip = new EffectTipDialog(mwindow, this);
 }
 
 int AWindow::save_defaults(BC_Hash *defaults)
index 3a3af095c14d8a2d8b18e87f36704db867135fd7..e7003f9a56d7efee8f0e0cce7c0dbb9c780a6bbe 100644 (file)
@@ -28,6 +28,7 @@
 #include "bchash.inc"
 #include "bcwindowbase.inc"
 #include "clipedit.inc"
+#include "effectlist.inc"
 #include "labeledit.inc"
 #include "labelpopup.inc"
 #include "mwindow.inc"
@@ -52,6 +53,7 @@ public:
        AssetRemoveThread *asset_remove;
        ClipEdit *clip_edit;
        LabelEdit *label_edit;
+       EffectTipDialog *effect_tip;
 };
 
 #endif
index f7aa770dbd368f295fa1df80e7a016fa4f05efc8..6ae38bb2c90b7932910826dc385e9ae43e2bfdda 100644 (file)
@@ -35,6 +35,7 @@
 #include "cwindow.h"
 #include "edl.h"
 #include "edlsession.h"
+#include "effectlist.h"
 #include "file.h"
 #include "filesystem.h"
 #include "folderlistmenu.h"
@@ -342,7 +343,7 @@ void AssetPicon::create_objects()
        }
        else
        if( plugin ) {
-               strcpy(name, _(plugin->title));
+               strcpy(name,  plugin->title);
                set_text(name);
                icon_vframe = plugin->get_picon();
                if( icon_vframe )
@@ -438,6 +439,7 @@ AWindowGUI::AWindowGUI(MWindow *mwindow, AWindow *awindow)
        plugin_visibility = ((uint64_t)1<<(8*sizeof(uint64_t)-1))-1;
        newfolder_thread = 0;
        asset_menu = 0;
+       effectlist_menu = 0;
        assetlist_menu = 0;
        cliplist_menu = 0;
        labellist_menu = 0;
@@ -481,6 +483,7 @@ AWindowGUI::~AWindowGUI()
        delete asset_menu;
        delete clip_menu;
        delete label_menu;
+       delete effectlist_menu;
        delete assetlist_menu;
        delete cliplist_menu;
        delete labellist_menu;
@@ -634,6 +637,8 @@ SET_TRACE
        add_subwindow(label_menu = new LabelPopup(mwindow, this));
        label_menu->create_objects();
 
+       add_subwindow(effectlist_menu = new EffectListMenu(mwindow, this));
+       effectlist_menu->create_objects();
        add_subwindow(assetlist_menu = new AssetListMenu(mwindow, this));
        assetlist_menu->create_objects();
        add_subwindow(cliplist_menu = new ClipListMenu(mwindow, this));
@@ -1538,6 +1543,13 @@ int AWindowAssets::button_press_event()
                BC_ListBox::deactivate_selection();
                int folder = mwindow->edl->session->awindow_folder;
                switch( folder ) {
+               case AW_AEFFECT_FOLDER:
+               case AW_VEFFECT_FOLDER:
+               case AW_ATRANSITION_FOLDER:
+               case AW_VTRANSITION_FOLDER:
+                       gui->effectlist_menu->update();
+                       gui->effectlist_menu->activate_menu();
+                       break;
                case AW_LABEL_FOLDER:
                        gui->labellist_menu->update();
                        gui->labellist_menu->activate_menu();
@@ -1546,7 +1558,7 @@ int AWindowAssets::button_press_event()
                        gui->cliplist_menu->update();
                        gui->cliplist_menu->activate_menu();
                        break;
-               default:
+               case AW_MEDIA_FOLDER:
                        gui->assetlist_menu->update_titles();
                        gui->assetlist_menu->activate_menu();
                        break;
@@ -1596,8 +1608,8 @@ int AWindowAssets::selection_changed()
                case AW_VEFFECT_FOLDER:
                case AW_ATRANSITION_FOLDER:
                case AW_VTRANSITION_FOLDER:
-                       gui->assetlist_menu->update_titles();
-                       gui->assetlist_menu->activate_menu();
+                       gui->effectlist_menu->update();
+                       gui->effectlist_menu->activate_menu();
                        break;
                case AW_LABEL_FOLDER:
                        if( !item->label ) break;
index 2b4a69a9de3e347399a4afc363c55af7285ea374..501de6dcc611ae0578ee89e6d0ee2f195b37ab8b 100644 (file)
@@ -31,6 +31,7 @@
 #include "awindowgui.inc"
 #include "clippopup.inc"
 #include "edl.inc"
+#include "effectlist.inc"
 #include "folderlistmenu.inc"
 #include "guicast.h"
 #include "labeledit.inc"
@@ -211,6 +212,7 @@ public:
        AssetPopup *asset_menu;
        ClipPopup *clip_menu;
        LabelPopup *label_menu;
+       EffectListMenu *effectlist_menu;
        AssetListMenu *assetlist_menu;
        ClipListMenu *cliplist_menu;
        LabelListMenu *labellist_menu;
diff --git a/cinelerra-5.1/cinelerra/effectlist.C b/cinelerra-5.1/cinelerra/effectlist.C
new file mode 100644 (file)
index 0000000..11354a0
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * CINELERRA
+ * Copyright (C) 2006 Pierre Dumuid
+ * Copyright (C) 1997-2012 Adam Williams <broadcast at earthling dot net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include "awindow.h"
+#include "awindowgui.h"
+#include "clip.h"
+#include "cstrdup.h"
+#include "effectlist.h"
+#include "guicast.h"
+#include "language.h"
+#include "mwindow.h"
+#include "pluginserver.h"
+
+EffectTipDialog::EffectTipDialog(MWindow *mwindow, AWindow *awindow)
+ : BC_DialogThread()
+{
+       this->mwindow = mwindow;
+       this->awindow = awindow;
+       effect = 0;
+       text = 0;
+}
+
+EffectTipDialog::~EffectTipDialog()
+{
+       close_window();
+       delete [] effect;
+       delete [] text;
+}
+
+void EffectTipDialog::start(int x, int y, const char *effect, const char *text)
+{
+       close_window();
+       AWindowGUI *gui = awindow->gui;
+       char string[BCTEXTLEN];
+       sprintf(string, _("Effect info: %s"), effect);
+       int effect_w = BC_Title::calculate_w(gui, string);
+       int text_w = BC_Title::calculate_w(gui, text);
+       int text_h = BC_Title::calculate_h(gui, text);
+       this->w = bmax(text_w + 30, bmax(effect_w + 30, 120));
+       this->h = bmax(text_h + 100, 120);
+       this->x = x - this->w / 2;
+       this->y = y - this->h / 2;
+       delete [] this->effect;  this->effect = cstrdup(string);
+       delete [] this->text;    this->text = cstrdup(text);
+       BC_DialogThread::start();
+}
+
+BC_Window* EffectTipDialog::new_gui()
+{
+       AWindowGUI *gui = awindow->gui;
+       effect_gui = new EffectTipWindow(gui, this);
+       effect_gui->create_objects();
+       return effect_gui;
+};
+
+
+EffectTipWindow::EffectTipWindow(AWindowGUI *gui, EffectTipDialog *thread)
+ : BC_Window(_(PROGRAM_NAME ": Effect Info"),
+       thread->x + thread->w/2, thread->y + thread->h/2,
+       thread->w, thread->h, thread->w, thread->h, 0, 0, 1)
+{
+       this->gui = gui;
+        this->thread = thread;
+}
+EffectTipWindow::~EffectTipWindow()
+{
+}
+
+void EffectTipWindow::create_objects()
+{
+       int x = 10, y = 10;
+       BC_Title *title;
+       add_subwindow(title = new BC_Title(x, y, thread->effect));
+       y += title->get_h() + 10;
+       add_subwindow(tip_text = new BC_Title(x+5, y, thread->text));
+       add_subwindow(new BC_OKButton(this));
+       show_window(1);
+};
+
+EffectTipItem::EffectTipItem(AWindowGUI *gui)
+ : BC_MenuItem(_("Info"))
+{
+       this->gui = gui;
+}
+EffectTipItem::~EffectTipItem()
+{
+}
+
+int EffectTipItem::handle_event()
+{
+       AssetPicon *result = (AssetPicon*)gui->asset_list->get_selection(0,0);
+       if( result && result->plugin ) {
+               const char *info = result->plugin->tip;
+               if( !info ) info = _("No info available");
+               int cur_x, cur_y;
+               gui->get_abs_cursor_xy(cur_x, cur_y, 0);
+               gui->awindow->effect_tip->start(cur_x, cur_y,
+                       result->plugin->title, info);
+       }
+       return 1;
+}
+
+
+EffectListMenu::EffectListMenu(MWindow *mwindow, AWindowGUI *gui)
+ : BC_PopupMenu(0, 0, 0, "", 0)
+{
+       this->mwindow = mwindow;
+       this->gui = gui;
+}
+
+EffectListMenu:: ~EffectListMenu()
+{
+}
+
+void EffectListMenu::create_objects()
+{
+       add_item(new EffectTipItem(gui));
+       add_item(format = new AWindowListFormat(mwindow, gui));
+       add_item(new AWindowListSort(mwindow, gui));
+}
+
+void EffectListMenu::update()
+{
+       format->update();
+}
+
diff --git a/cinelerra-5.1/cinelerra/effectlist.h b/cinelerra-5.1/cinelerra/effectlist.h
new file mode 100644 (file)
index 0000000..7ae1185
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * CINELERRA
+ * Copyright (C) 2006 Pierre Dumuid
+ * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#ifndef EFFECTLIST_H
+#define EFFECTLIST_H
+
+#include "awindowgui.inc"
+#include "guicast.h"
+#include "effectlist.inc"
+#include "mwindow.inc"
+
+class EffectTipDialog : public BC_DialogThread
+{
+public:
+       EffectTipDialog(MWindow *mwindow, AWindow *awindow);
+       ~EffectTipDialog();
+       void start(int x, int y, const char *effect, const char *text);
+       BC_Window* new_gui();
+
+       MWindow *mwindow;
+       AWindow *awindow;
+       EffectTipWindow *effect_gui;
+       int x, y, w, h;
+       const char *effect, *text;
+};
+
+class EffectTipWindow : public BC_Window
+{
+public:
+       EffectTipWindow(AWindowGUI *gui, EffectTipDialog *thread);
+       ~EffectTipWindow();
+       void create_objects();
+
+       AWindowGUI *gui;
+       EffectTipDialog *thread;
+       BC_Title *tip_text;
+};
+
+class EffectTipItem : public BC_MenuItem
+{
+public:
+       EffectTipItem(AWindowGUI *gui);
+       ~EffectTipItem();
+       int handle_event();
+
+       AWindowGUI *gui;
+};
+
+class EffectListMenu : public BC_PopupMenu
+{
+public:
+       EffectListMenu(MWindow *mwindow, AWindowGUI *gui);
+       ~EffectListMenu();
+       void create_objects();
+       void update();
+
+       MWindow *mwindow;
+       AWindowGUI *gui;
+       AWindowListFormat *format;
+};
+
+#endif
diff --git a/cinelerra-5.1/cinelerra/effectlist.inc b/cinelerra-5.1/cinelerra/effectlist.inc
new file mode 100644 (file)
index 0000000..2f2a57a
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * CINELERRA
+ * Copyright (C) 2006 Pierre Dumuid
+ * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#ifndef EFFECTLIST_INC
+#define EFFECTLIST_INC
+
+class EffectTipDialog;
+class EffectTipWindow;
+class EffectTipItem;
+class EffectListMenu;
+
+#endif
index f79a240ef5c844d091070f205e3dd68e1a799ee5..547b7f074f1276262838c65b5d6d5f8a361ce424 100644 (file)
@@ -491,7 +491,6 @@ int FFStream::flush()
 
 int FFStream::seek(int64_t no, double rate)
 {
-       int64_t tstmp = -INT64_MAX+1;
 // default ffmpeg native seek
        int npkts = 1;
        int64_t pos = no, pkt_pos = -1;
@@ -509,11 +508,18 @@ int FFStream::seek(int64_t no, double rate)
                }
        }
        if( pos == curr_pos ) return 0;
-       if( pos > 0 && st->time_base.num > 0 ) {
-               double secs = pos / rate;
-               tstmp = secs * st->time_base.den / st->time_base.num;
-               if( nudge != AV_NOPTS_VALUE ) tstmp += nudge;
-       }
+       double secs = pos < 0 ? 0. : pos / rate;
+       AVRational time_base = st->time_base;
+       int64_t tstmp = time_base.num > 0 ? secs * time_base.den/time_base.num : 0;
+       if( nudge != AV_NOPTS_VALUE ) tstmp += nudge;
+       int idx = st->index;
+#if 0
+// seek all streams using the default timebase.
+//   this is how ffmpeg and ffplay work.  stream seeks are less tested.
+       tstmp = av_rescale_q(tstmp, time_base, AV_TIME_BASE_Q);
+       idx = -1;
+#endif
+
        avcodec_flush_buffers(avctx);
        avformat_flush(fmt_ctx);
 #if 0
@@ -523,9 +529,9 @@ int FFStream::seek(int64_t no, double rate)
                seek = pkt_pos;
                flags = AVSEEK_FLAG_BYTE;
        }
-        int ret = avformat_seek_file(fmt_ctx, st->index, -INT64_MAX, seek, INT64_MAX, flags);
+       int ret = avformat_seek_file(fmt_ctx, st->index, -INT64_MAX, seek, INT64_MAX, flags);
 #else
-       int ret = av_seek_frame(fmt_ctx, st->index, tstmp, AVSEEK_FLAG_ANY);
+       int ret = av_seek_frame(fmt_ctx, idx, tstmp, AVSEEK_FLAG_ANY);
 #endif
        int retry = MAX_RETRY;
        while( ret >= 0 ) {
@@ -559,7 +565,7 @@ int FFStream::seek(int64_t no, double rate)
        if( ret < 0 ) {
 printf("** seek fail %jd, %jd\n", pos, tstmp);
                seeked = need_packet = 0;
-               st_eof(flushed=1);
+               st_eof(flushed=1);
                return -1;
        }
 //printf("seeked pos = %ld, %ld\n", pos, tstmp);
index cbac067bd7ac68670d1674889025cd6617e193ef..65128cf7446be67aee878fd6bbacce9058e99410 100644 (file)
@@ -75,10 +75,11 @@ LabelPopupEdit::~LabelPopupEdit()
 int LabelPopupEdit::handle_event()
 {
        AssetPicon *result = (AssetPicon*)gui->asset_list->get_selection(0,0);
-       int cur_x, cur_y;
-       gui->get_abs_cursor_xy(cur_x, cur_y, 0);
-       if( result && result->label )
+       if( result && result->label ) {
+               int cur_x, cur_y;
+               gui->get_abs_cursor_xy(cur_x, cur_y, 0);
                gui->awindow->label_edit->start(result->label, cur_x, cur_y);
+       }
        return 1;
 }
 
index e68a7261eadb4e8aaf7f42592bad03d23d4af434..bd4d78cb7ebcec01ab351827ce5a4a560f06e564 100644 (file)
@@ -24,6 +24,9 @@
 
 class LoadMode;
 
+// used in paste_edls to only add assets, not clips
+#define LOADMODE_ASSETSONLY -1
+
 // Load modes for loading files, importing recordings, importing effects
 // Be sure to change mode_images in LoadMode::create_objects if you change this.
 #define LOADMODE_NOTHING 0
index 6705e4006e37f3a84a8f19e67b7cfd288559ad24..bc089e7f5848f5155449856233d13d722f942e69 100644 (file)
@@ -518,12 +518,7 @@ void MenuEffectThread::run()
                if(load_mode == LOADMODE_PASTE)
                        mwindow->clear(0);
 
-
-               mwindow->load_assets(&assets,
-                       -1,
-                       load_mode,
-                       0,
-                       0,
+               mwindow->load_assets(&assets, -1, load_mode, 0, 0,
                        mwindow->edl->session->labels_follow_edits,
                        mwindow->edl->session->plugins_follow_edits,
                        mwindow->edl->session->autos_follow_edits,
@@ -532,17 +527,9 @@ void MenuEffectThread::run()
                mwindow->save_backup();
                mwindow->undo->update_undo_after(title, LOAD_ALL);
 
-
-
                mwindow->restart_brender();
                mwindow->update_plugin_guis();
-               mwindow->gui->update(1,
-                       2,
-                       1,
-                       1,
-                       1,
-                       1,
-                       0);
+               mwindow->gui->update(1, 2, 1, 1, 1, 1, 0);
                mwindow->sync_parameters(CHANGE_ALL);
                mwindow->gui->unlock_window();
 
index 33cee066a515ecfff676d5b8ea90cc600d298f7d..107ef1669a8036f0e7b8fedd57d90ceecc0f58b4 100644 (file)
@@ -733,6 +733,66 @@ void MWindow::add_plugins(ArrayList<PluginServer*> &plugins)
        plugins.remove_all();
 }
 
+void MWindow::init_plugin_tips(ArrayList<PluginServer*> &plugins)
+{
+       const char *cfg_path = File::get_cindat_path();
+       char msg_path[BCTEXTLEN];  int txt = 0;
+       FILE *fp = 0;
+       if( BC_Resources::language[0] ) {
+               snprintf(msg_path, sizeof(msg_path), "%s/info/plugins.%s",
+                       cfg_path, BC_Resources::language);
+               fp = fopen(msg_path, "r");
+       }
+       if( !fp ) {
+               txt = 1;
+               snprintf(msg_path, sizeof(msg_path), "%s/info/plugins.txt",
+                       cfg_path);
+               fp = fopen(msg_path, "r");
+       }
+       if( !fp ) return;
+       char text[BCTEXTLEN];
+       char *tp = text, *ep = tp + sizeof(text)-1;
+       char title[BCTEXTLEN];
+       title[0] = 0;
+       int no = 0;
+       for(;;) {
+               ++no;  int done = 1;
+               char line[BCTEXTLEN], *cp = line;
+               if( fgets(line,sizeof(line)-1,fp) ) {
+                       if( *cp == '#' ) continue;
+                       done = *cp == ' ' || *cp == '\t' ? 0 : -1;
+               }
+               if( done ) {
+                       if( tp > text && *--tp == '\n' ) *tp = 0;
+                       if( title[0] ) {
+                               tp = !txt ? title : _(title);
+                               int idx = plugins.size();
+                               while( --idx>=0 && strcmp(plugins[idx]->title, tp) );
+                               if( idx >= 0 ) {
+                                       delete [] plugins[idx]->tip;
+                                       plugins[idx]->tip = cstrdup(text);
+                               }
+                               title[0] = 0;
+                       }
+                       if( done > 0 ) break;
+                       tp = text;  *tp = 0;
+                       char *dp = strchr(cp, ':');
+                       if( !dp ) {
+                               printf("plugin tips: error on line %d\n", no);
+                               continue;
+                       }
+                       char *bp = title;
+                       while( cp < dp ) *bp++ = *cp++;
+                       *bp = 0;
+                       ++cp;
+               }
+
+               while( *cp == ' ' || *cp == '\t' ) ++cp;
+               for( ; tp<ep && (*tp=*cp)!=0; ++tp,++cp );
+       }
+       fclose(fp);
+}
+
 void MWindow::delete_plugins()
 {
        plugindb->remove_all_objects();
@@ -1665,10 +1725,7 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
                                        edl->session->autos_follow_edits);
                }
 
-               paste_edls(&new_edls,
-                       load_mode,
-                       0,
-                       -1,
+               paste_edls(&new_edls, load_mode, 0, -1,
                        edl->session->labels_follow_edits,
                        edl->session->plugins_follow_edits,
                        edl->session->autos_follow_edits,
@@ -1952,6 +2009,7 @@ void MWindow::create_objects(int want_gui,
        if(debug) PRINT_TRACE
        init_ladspa_plugins(this, preferences);
        if(debug) PRINT_TRACE
+       init_plugin_tips(*plugindb);
        if(splash_window)
                splash_window->operation->update(_("Initializing GUI"));
        if(debug) PRINT_TRACE
index 2d041fbc45372f26355e00970e29bd12951e12cb..3de297cac87357cfd67a139f40a37be3667a89d4 100644 (file)
@@ -647,6 +647,7 @@ public:
        static void get_plugin_path(char *path, const char *plug_dir, const char *fs_path);
        static int init_plugins(MWindow *mwindow, Preferences *preferences);
        static int init_ladspa_plugins(MWindow *mwindow, Preferences *preferences);
+       static void init_plugin_tips(ArrayList<PluginServer*> &plugins);
        static int check_plugin_index(ArrayList<PluginServer*> &plugins,
                const char *plug_dir, const char *plug_path);
        static void init_plugin_index(MWindow *mwindow, Preferences *preferences,
index a12321546dbd36aee6ce3c725e851ac211716e2c..9e53bde729a8d62cf0fd56f3e5bf7409c8512541 100644 (file)
@@ -1153,15 +1153,11 @@ int MWindow::paste_assets(double position, Track *dest_track, int overwrite)
 }
 
 void MWindow::load_assets(ArrayList<Indexable*> *new_assets,
-       double position,
-       int load_mode,
-       Track *first_track,
-       RecordLabels *labels,
-       int edit_labels,
-       int edit_plugins,
-       int edit_autos,
-       int overwrite)
+       double position, int load_mode, Track *first_track, RecordLabels *labels,
+       int edit_labels, int edit_plugins, int edit_autos, int overwrite)
 {
+       if( load_mode == LOADMODE_RESOURCESONLY )
+               load_mode = LOADMODE_ASSETSONLY;
 const int debug = 0;
 if( debug ) printf("MWindow::load_assets %d\n", __LINE__);
        if( position < 0 ) position = edl->local_session->get_selectionstart();
@@ -1444,7 +1440,8 @@ int MWindow::paste_edls(ArrayList<EDL*> *new_edls, int load_mode,
                }
 //PRINT_TRACE
 // Insert edl
-               if( load_mode != LOADMODE_RESOURCESONLY ) {
+               if( load_mode != LOADMODE_RESOURCESONLY &&
+                   load_mode != LOADMODE_ASSETSONLY ) {
 // Insert labels
 //printf("MWindow::paste_edls %f %f\n", current_position, edl_length);
                        if( load_mode == LOADMODE_PASTE ||
index 0c72a3582d145d324ce94784001807911ace3bef..9995a4a7a47dc43de079e8a044666786aa74cebf 100644 (file)
@@ -79,6 +79,7 @@ void PluginServer::init()
        plugin_obj = new PluginObj();
        modules = new ArrayList<Module*>;
        nodes = new ArrayList<VirtualNode*>;
+       tip = 0;
 }
 
 PluginServer::PluginServer()
@@ -107,6 +108,7 @@ PluginServer::PluginServer(PluginServer &that)
        plugin_obj = that.plugin_obj;
        plugin_obj->add_user();
        title = !that.title ? 0 : cstrdup(that.title);
+       tip = !that.tip ? 0 : cstrdup(that.tip);
        path = !that.path ? 0 : cstrdup(that.path);
        ff_name = !that.ff_name ? 0 : cstrdup(that.ff_name);
        modules = new ArrayList<Module*>;
@@ -137,6 +139,7 @@ PluginServer::~PluginServer()
        delete [] path;
        delete [] ff_name;
        delete [] title;
+       delete [] tip;
        delete modules;
        delete nodes;
        delete picon;
@@ -175,6 +178,7 @@ int PluginServer::reset_parameters()
        uses_gui = 0;
        transition = 0;
        title = 0;
+       tip = 0;
        path = 0;
        data_text = 0;
        for( int i=sizeof(args)/sizeof(args[0]); --i>=0; ) args[i] = 0;
index b1d9c1b4e522aa5d8f96442ae254a1479f20c38f..552bbe77370fe3b2b9355e6e69b1a77528a3f467 100644 (file)
@@ -382,9 +382,8 @@ public:
        int uses_gui;
 // Plugin is a transition
        int transition;
-// name of plugin in english.
-// Compared against the title value in the plugin for resolving symbols.
-       char *title;
+// name/tip of plugin in current locale.
+       char *title, *tip;
        int64_t written_samples, written_frames;
        char *path;           // location of plugin on disk
        char *data_text;      // pointer to the data that was requested by a save_data command
index 50cfb74136e5107ec9f8604838e85b4890bb05ce..719c8869f9fb04e6198ea7d4007dbafad726d5c2 100644 (file)
@@ -402,8 +402,9 @@ void Record::run()
 // For pasting, clear the active region
                        if(load_mode == LOADMODE_PASTE)
                                mwindow->clear(0);
-
-                       mwindow->paste_edls(&new_edls, load_mode, 0, -1,
+                       int loadmode = load_mode == LOADMODE_RESOURCESONLY ?
+                               LOADMODE_ASSETSONLY : load_mode;
+                       mwindow->paste_edls(&new_edls, loadmode, 0, -1,
                                SESSION->labels_follow_edits,
                                SESSION->plugins_follow_edits,
                                SESSION->autos_follow_edits,
index cf0881080ac73bd7f55606ce22534f3bf9ca4573..be49dabba38df98be90afc8ebcf2519405c97e29 100644 (file)
@@ -929,11 +929,7 @@ if(debug) printf("Render::render %d\n", __LINE__);
                if(render->load_mode == LOADMODE_PASTE)
                        mwindow->clear(0);
 if(debug) printf("Render::render %d\n", __LINE__);
-               mwindow->load_assets(assets,
-                       -1,
-                       render->load_mode,
-                       0,
-                       0,
+               mwindow->load_assets(assets, -1, render->load_mode, 0, 0,
                        mwindow->edl->session->labels_follow_edits,
                        mwindow->edl->session->plugins_follow_edits,
                        mwindow->edl->session->autos_follow_edits,
index 882c378be96f2bab80cb01c1b700aeda152b5706..fe954f89e36c317d8d0e78ffe955dee478a87fe7 100644 (file)
@@ -64,6 +64,10 @@ int BC_ListBoxYScroll::handle_event()
        return 1;
 }
 
+int BC_ListBoxYScroll::update_length(int64_t length, int64_t position, int64_t handlelength, int flush)
+{
+       return BC_ScrollBar::update_length(length+handlelength/4, position, handlelength, flush);
+}
 
 
 
@@ -95,6 +99,10 @@ int BC_ListBoxXScroll::handle_event()
        return 1;
 }
 
+int BC_ListBoxXScroll::update_length(int64_t length, int64_t position, int64_t handlelength, int flush)
+{
+       return BC_ScrollBar::update_length(length+handlelength/4, position, handlelength, flush);
+}
 
 
 
index 66d13255f86bb2b59bd7782586923dcd127104de..442a8245f5c7e43ae09efa699c066fcfb216d37d 100644 (file)
@@ -45,6 +45,7 @@ public:
                          int position);
        ~BC_ListBoxYScroll();
        int handle_event();
+       int update_length(int64_t length, int64_t position, int64_t handlelength, int flush);
 private:
        BC_ListBox *listbox;
 };
@@ -58,6 +59,7 @@ public:
                          int position);
        ~BC_ListBoxXScroll();
        int handle_event();
+       int update_length(int64_t length, int64_t position, int64_t handlelength, int flush);
 private:
        BC_ListBox *listbox;
 };
diff --git a/cinelerra-5.1/info/plugins.txt b/cinelerra-5.1/info/plugins.txt
new file mode 100644 (file)
index 0000000..8af8524
--- /dev/null
@@ -0,0 +1,490 @@
+# plugin info
+# 
+# Name of plugin followed by: and then description.
+#  Additional lines start with a blank/tab.
+#
+1080 to 480:   Extracts 2 1920x540 fields from image,
+               resizes, and combines to 1920x480.
+1080 to 540:   Extracts 2 1920x540 fields from image,
+               resizes, and combines to 1920x540.
+AgingTV:       Use to achieve an "old" movie or TV show
+               effect by adding moving lines and snow.
+Auto Scale:    Automatically scale to a specified size.
+Blue Banana:   Used for color transformation or
+               remapping; also for chroma-key filtering.
+Blur:          Blurs a video track in the horizontal or
+               vertical in chosen color channels.
+Brightness/Contrast: Use to change the brightness or
+               contrast; could reduce quality.
+BurningTV:     Makes your video "burn" by adding small
+               light colored patches.
+C41:           Converts C-41 negative film into the positive image.
+Chroma key:    Erases pixels which match chosen color;
+               replaces with black or transparency.
+Chroma key (HSV): Removes a color with another color or
+               transparency using HSV variables.
+Color 3 Way:   Modify color of Shadows, Midtones, and Highlights as
+               wanted.
+Color Balance: Modify RGB colors or white balance to compensate
+               compensate for errors in video.
+CriKey:                Regionally based chroma key with interpolation;
+               only a specific zone defined.
+Decimate:      Drop frames from a track which are most similar
+               in order to reduce frame rate.
+Deinterlace:   Various line replication to eliminate comb
+               artifacts in interlaced video.
+Deinterlace-CV:        Variation of deinterlacing video to eliminate comb
+               artifacts.
+Delay Video:   Delay the video by some number of seconds.
+Denoise video: Clear the video of noise.
+Difference key:        Creates transparency in areas which are similar
+               between 2 frames; must be applied to 2 tracks.
+DotTV:         Puts various size dots over the picture to simulate
+               tv effect.
+Downsample:    Reduce the sie of an image by throwing out data,
+               reducing sampling rate.
+Edge:          Display only the edges of the video throughout the image.
+Fields to frames: Reads frames at 2x the framerate, combining 2
+               input frames into 1 interlaced output frame.
+Flip:          Flip a portion of a video track from left to right,
+               up to down or vice versa.
+Frames to Fields: Extracts 2 interlaced fields stored in alternating
+               lines & outputs them as full frames.
+Freeze Frame:  Lowest numbered frame in highlighted area will play
+               in the entire region.
+Gamma:         Converts the logarithmic colors to linear colors
+               using gamma and maximum value.
+Gradient:      Overlays a smooth color gradient on top of every
+               video frame.
+Histogram:     Shows the number of occurrences of each color on a
+               histogram plot.
+Histogram Bezier: Uses a Bezier curve (parametric) on the histogram plot.
+HolographgicTV:        Holographic tv effect.
+Hue saturation:        Use to change hue, saturation and value parameters.
+Interpolate Pixels: Works only for float color models.
+Interpolate Video: Create illusion of higher frame rate video of low
+               framesrates by averaging over time.
+Inverse Telecine: Effective deinterlacing tool for use on a video
+               transfer of a film.
+Invert Video:  Method of reversing the colors of a video track.
+Lens:          Create the effect of looking through a lens.
+Linear Blur:   Blur with parameters of length, andle, number of 
+               steps, and which channels.
+Live Video:    Reads video directly from the capture card input and
+               will replace current.
+Loop video:    Loop video by specifying the length of the region to loop.
+Motion:                Tracks translation and rotation motion to stabilize
+               shaky video.
+Motion 2 Point:        Motion stabilization using 2 pass tracking.
+Motion Blur:   Uses X/Y camera automation vectors to apply a linear
+               blur trailing camera direction.
+Motion51:      Compensates for unwanted motion and stabilizes the
+               image using a unique curve/spline algorithm.  Has a
+               reset option to use default parameters.
+MotionCV:      Motion tracking/stabilization from the community
+               version of cinelerra.
+MotionHV:      Motion tracking/stabilization from the original
+               author of cinelerra.
+Oil Painting:  Makes video tracks appear as a painting.
+Overlay:       Combine tracks via an overlayer that puts images on
+               top of a bottom layer.
+Perspective:   Allows you to change the viewpoint of an object.
+Polar:         Bends and warps your video in strange ways based on
+               a mathematical algorithm.
+RGB - 601:     Used to reduce/increase contrast in your video via
+               601 compression or RGB expansion.
+RGBShift:      Align 3 separate planes of R, G, B if misaligned in
+               in the video or just shift for interest.
+Radial Blur:   Creates a whirlpool based on settings that simulates
+               a swirling camera.
+ReframeRT:     Changes number of frames in a sequence of video
+               directly from timeline.
+Reroute:       Selectively transfer the alpha channel or the
+               RGB/YUV components from source to target track.
+Reverse video: Reverse media on the timeline in realtime.
+Rotate:                Rotate the video in degree increments around a
+               pivot point or reverse and flip the video.
+SVG via Inkscape: Allow the manipulation of an SVG image with
+               Inkscape without having to exit the program.
+Scale:         Reduce or expand the image size depending on the ratio.
+Scale Ratio:   Manipulate your video to maintain the pixel aspect
+               ratio (proportional geometry).
+Selective Temporal Averaging: Smooths out non-moving areas of a video
+               clip by averaging the color across frames.
+Sharpen:       Sharpen the video, either the luminance, horizontal,
+               or interlace.
+ShiftInterlace:        Shift the interlace lines using odd or even.
+Swap Frames:   Swap frames with 0-1, 2-3, 4-5... or 1-2, 3-4, 5-6...
+Swap channels: Swap R,G,B,Alpha with another color channel.
+Threshold:     Converts the image to pure luminanceand replaces
+               pixels with 1 of 3 colors.
+Time Average:  Takes a number of frames to average or
+               accumulate-stacking 1 frame on top of another.
+TimeFront:     Performs spatio-temporal video warping.
+Title:         Add text/timestamp/background pngs to video with
+               many nice variations such as changing font color,
+               size, bold, subscripts.
+Translate:     Allows displacing, cropping and/or scaling video
+               horizontally/vertically.
+Unsharp:       Applies a traditional darkroom technique, unsharp
+               mask, to every video frame.
+VideoScope:    Summarizes intensity and color on a calibrated display.
+Wave:          Generates waves in video using Amplitude, Phase, and
+               Wavelength.
+Whirl:         Creates a whirl (spiral) of the video around the center.
+YUV:           Modify the Y, U, V settings.
+YUV411:                Modify the 411 yuv to look like 420 color space instead.
+YUVShift:      Realign the 3 sets of YUV inputvideo nubers when
+               misaligned.
+Zoom Blur:     Blur the video and use a zoom effect.
+#
+#  Description of FFmpeg Video Plugins
+#
+F_atadenoise:  Apply an Adaptive Temporal Averaging Denoiser.
+F_avgblur:     Apply average blur filter.
+F_bbox:                Compute bounding box for each frame.
+F_bench:       Benchmarks part of a filtergraph.
+F_bitplaneoise:        Measure bit plane noise.
+F_blackdetect: Detect video intervals that are (almost) black.
+F_blackframe:  Detect frames that are (almost) black.
+F_boxblur:     Blurs the input video.
+               Through the settings you are
+               able to change the power and the
+               radius of the boxblur applied to luma, chroma and alpha.
+F_bwdif:       Deinterlaces the input image.
+F_chromakey:   Turns a certain color into
+               transparency.  Operates on YUV colors.
+F_ciescope:    Video CIE scope.
+F_colorbalance:        Adjusts the color balance.
+F_colorchannelmixer: Adjusts colors by mixing color channels.
+F_colorkey:    Turns a certain color into
+               transparency. Operates on RGB colors.
+F_colorlevels: Adjusts the color levels.
+F_colormatrix: Converts color matrix.
+F_cover_rect:  Find and cover a user specified object.
+F_crop:                Crops the input video.
+F_cropdetect:  Auto-detect crop size
+F_datascope:   Video data analysis.
+F_deband:      Debands video.
+F_deflate:     Applies deflate effect.
+F_dejudder:    Removes judder produced by pullup.
+F_delogo:      Removes logo from input video.
+               When using this plugin a green box will appear on the
+               screen, once the logo is inside the box the
+               plugin will hide it. Through the settings you can specify
+               the position of the logo to hide (on a X-Y axis)
+               and the size of the box (so you can adjust it to the
+               size of the logo).
+F_deshake:     Stabilizes shaky video.
+F_dilation:    Applies dilation effect.
+F_drawbox:     Draws a colored box on the input video.
+               Through the settings you are able to choose the
+               position of the box on X and Y coordinates,
+               the size of the box,
+               the color and the thickness of the lines.
+F_drawgraph:   Draw a graph using input video metadata.
+F_drawgrid:    Draws a colored grid on the input video.
+               Through the settings you can select the
+               horizontal and the vertical offset,
+               set the width and  height of
+               the grid cell, and the color and
+               thickness of the lines.
+F_edgedetect:  Detects and draws edge.
+F_elbg:                Apply posterize effect, using the ELBG algorithm.
+F_eq:          Adjusts brightness, contrast, gamma and saturation.
+F_erosion:     Applies erosion effect.
+F_fade:                Fade in/out input video.
+F_fftfilt:     Apply arbitrary expressions to pixels in frequency domain.
+F_field:       Extract a field from the input video.
+F_fieldorder:  Set the field order.
+F_framerate:   Upsamples or downsamples progressive
+               source between specified frame rates.
+F_fspp:                Applies Fast Simple Post-processing filter.
+F_gblur:       Apply Gaussian Blur filter.
+F_gradfun:     Debands video quickly using gradients.
+F_hflip:       Horizontally flips the input video.
+F_histeq:      Applies global color histogram equalization.
+F_histogram:   Computes and draws a histogram.
+F_hqdn3d:      Applies a High Quality 3D Denoiser.
+F_hqx:         Scales the input by 2,
+               3 or 4 using the hq*x magnification algorithm.
+F_hue:         Adjust the hue and saturation of the input video.
+F_idet:                Interlace detect Filter.
+F_il:          Deinterleaves or interleaves fields.
+F_inflate:     Applies inflate effect.
+F_interlace:   Convert progressive video into interlaced.
+F_kerndeint:   Applies kernel deinterlacing to the input.
+F_lenscorrection: Rectifies the image by correcting for lens distortion.
+F_loop:                Loops video frames.
+F_lut:         Compute and apply a lookup
+               table to the RGB/YUV input video.
+F_lutrgb:      Compute and apply a lookup table to the RGB input video.
+F_lutyuv:      Combine and apply a lookup table to the YUV input video.
+F_mcdeint:     Applies motion compensating deinterlacing.
+F_mestimate:   Generate motion vectors.
+F_mpdecimate:  Remove near-duplicate frames.
+F_negate:      Negates input video.
+F_nlmeans:     Non-local means denoiser.
+F_noise:       Adds noise to the video.
+               Through the settings you can
+               select the variables of the noise
+               (strength, flag and seed).
+F_owndenoise:  Denoises using wavelets.
+F_perms:       Set permissions for the output video frame.
+F_perspective: Corrects the perspective of video.
+F_phase:       Phases shift fields.
+F_pp:          Filters video using libpostproc.
+F_pp7:         Applies Postprocessing 7 filter.
+F_prewitt:     Apply prewitt operator.
+F_readeia608:  Read EIA-608 Closed Caption codes from
+               input video and write them to frame metadata.
+F_readvitc:    Reads vertical interval
+               timecode and writes it to frame metadata.
+F_realtime:    Slows down filtering to match realtime.
+F_removegrain: Removes grain.
+F_repeatfields:        Hard repeat fields based on MPEG repeat field flag.
+F_rotate:      Rotates the input image.
+F_sab:         Applies shape adaptive blur.
+F_separatefields: Split input video frames into fields.
+F_showinfo:    Show textual information for each video frame.
+F_shuffleframes: Shuffles video frames.
+F_shuffleplanes: Shuffles video planes.
+F_signalstats: Separates statistics from video analysis.
+F_smartblur:   Blurs the input video without impacting
+               the outlines. Through the settings you can
+               select the radius,
+               the strength and the threshold of luma and chroma.
+F_sobel:       Applies sobel operator.
+F_spp:         Applies a simple post processing filter.
+F_stereo3d:    Converts video stereoscopic 3D view.
+F_super2xsai:  Scales the input by 2x using
+               the Super2xSal pixel art algorithm.
+F_swaprect:    Swaps 2 rectangular objects in video.
+F_swapuv:      Swaps U and V components.
+F_tinterlace:  Performs temporal field interlacing.
+F_transpose:   Transposes input video.
+F_uspp:                Applies Ultra Simple/Slow Post-processing filter.
+F_vaguedenoiser: Applies a Wavelet based Denoiser.
+F_vectorscope: Video vectorscope.
+F_vflip:       Flips the input video vertically.
+F_vignette:    Makes or reverses a vignette effect.
+               Through the settings you can set the circle center
+               position on a X-Y axis,choose the angle,
+               the aspect and set the dithering of the vignette.
+F_w3dif:       Applies Martin Weston three field deinterlace.
+F_waveform:    Video waveform monitor.
+F_weave:       Weaves input video fields into frames.
+F_xbr:         Scales the input using xBR algorithm.
+F_yadif:       Deinterlaces the input image.
+F_zoompan:     Applies Zoom & Pan effect.
+#
+#  Description of FFmpeg Audio Plugins
+#
+F_abench:      Benchmark part of a filtergraph.
+F_acompressor: Audio compressor.
+F_acrusher:    Reduces audio bit resolution.
+F_adelay:      Delays one or more audio channels.
+F_aecho:       Adds echoing to the audio.
+F_aemphasis:   Audio emphasis.
+F_aeval:       Filters audio signal according to a specific expression.
+F_afade:       Fades in/out input audio.
+F_agate:       Audio gate.
+F_allpass:     Applies a two-pole all-pass filter.
+F_aloop:       Loops audio samples.
+F_anoisesrc:   Generates a noise audio signal.
+F_aperms:      Set permissions for the output audio frame.
+F_aphaser:     Adds a phasing effect to the audio.
+F_arealtime:   Slows down filtering to match realtime.
+F_aresample:   Resamples audio data.
+F_astats:      Shows time domain statistics about audio frames
+F_atempo:      Adjusts audio tempo.
+F_atrim:       Pick one continuous section from the input, drop the rest.
+F_bandpass:    Applies a two-pole Butterworth band-pass filter.
+F_bandreject:  Applies a two-pole Butterworth band-reject filter.
+F_bass:                Boosts or cuts lower frequencies.
+F_biquad:      Applies a biquad IIR filter with the given coefficents.
+F_chorus:      Adds a chorus effect to the audio.
+F_compand:     Compresses or expands audio dynamic range.
+F_compensationdelay: audio compensation delay line.
+F_crystalizer: Simple Expand Audio Dynamic Range filter.
+F_dcshift:     Applies a DC shift to the audio.
+F_dyaudnorm:   Dynamic Audio Normalizer.  When using this plugin,
+               be sure to “attach effect” to all audio tracks by dragging
+               the plugin to the 1st audio track and then right mouse
+               clicking all subsequent audio tracks which brings up an menu.
+               Highlight the effect shown in the middle section and click OK.
+F_earwax:      Widens the stereo image.  When using this plugin,
+               be sure to “attach effect” to all audio tracks by dragging
+               the plugin to the 1st audio track and then right mouse
+               clicking all subsequent audio tracks which brings up an menu.
+               Highlight the effect shown in the middle section and click OK.
+F_equalizer:   Applies two-pole peaking equalization (EQ) filter.
+F_extrastereo: Increases difference between stereo audio
+               channels.  When using this plugin, be sure to
+               “attach effect” to all audio tracks by dragging
+               the plugin to the 1st audio track and then right mouse
+               clicking all subsequent audio tracks which
+               brings up an menu.  Highlight the effect shown in the
+               middle section and click OK.
+F_flanger:     Applies a flanging effect to the audio.
+F_highpass:    Applies a high-pass filter with 3dB point frequency.
+F_loudnorm:    EBU R128 loudness normalization.
+F_lowpass:     Applies a low-pass filter with 3dB point frequency.
+F_silenceremove: Removes silence.
+F_sine:                Generate sine wave audio signal.
+F_stereotools: Applies various stereo tools.  When using this plugin,
+               be sure to “attach effect” to all audio tracks by dragging
+               the plugin to the 1st audio track and then right mouse
+               clicking all subsequent audio tracks which brings up an menu.
+               Highlight the effect shown in the middle section and click OK.
+F_stereowiden: Applies stereo widening effect.  When using this plugin,
+               be sure to “attach effect” to all audio tracks by dragging
+               the plugin to the 1st audio track and then right mouse
+               clicking all subsequent audio tracks which brings up an menu.
+               Highlight the effect shown in the middle section and click OK.
+F_treble:      Boosts or cuts upper frequencies.
+F_tremolo:     Applies tremolo effect.
+F_vibrato:     Applies vibrato effect.
+F_volume:      Change input volume.
+#
+# audio plugins
+#
+#AM pitchshifter:      
+#Aliasing:     
+#Allpass delay line, cubic spline interpolation:
+#Allpass delay line, linear interpolation:
+#Allpass delay line, noninterpolating:
+#Analogue Oscillator:
+#4 x 4 pole allpass:
+#Artificial latency:
+#Audio Divider (Suboctave Generator):
+#AudioScope:
+#Auto phaser:
+#Barry's Satan Maximiser:
+#Bode frequency shifter:
+#Bode frequency shifter (CV):
+#Chebyshev distortion:
+#Comb Filter:
+#Comb Splitter:
+#Comb delay line, cubic spline interpolation:
+#Comb delay line, linear interpolation:
+#Comb delay line, noninterpolating:
+#Compressor:
+#Constant Signal Generator:
+#Crossfade:
+#Crossfade (4 outs):
+#Crossover distortion:
+#DC Offset:
+#DC Offset Remover:
+#DJ EQ:
+#DJ EQ (mono):
+#DJ flanger:
+#Decimator:
+#Declipper:
+#Delay audio:
+#Delayorama:
+#Denoise:
+#DenoiseFFT:
+#Despike:
+#Diode Processor:
+#Dyson compressor:
+#EQ Graphic:
+#EQ Parametric:
+Echo:          Add echoing to audio for an interesting effect.
+EchoCancel:    Remove echos from audio in order to
+               improve the quality.
+#Exponential signal decay:
+#FM Oscillator:
+#Fast Lookahead limiter:
+#Fast overdrive:
+#Flanger:
+#Foldover distortion:
+#Fractionally Addressed Delay Line:
+#Freeverb:
+#Frequency tracker:
+#GLAME Butterworth Highpass:
+#GLAME Butterworth Lowpass:
+#GSM simulator:
+#GVerb:
+#Gain:
+#Gate:
+#Giant flange:
+#Glame Bandpass Analog Filter:
+#Glame Bandpass Filter:
+#Glame Butterworth X-over Filter:
+#Glame Highpass Filter:
+#Glame Lowpass Filter:
+#Gong beater:
+#Gong model:
+#Hard Limiter:
+#Harmonic generator:
+#Hermes Filter:
+#Higher Quality Pitch Scaler:
+#Hilbert transformer:
+#Impulse convolver:
+#Interpolate:
+#Invert Audio:
+#Inverter:
+#Karaoke:
+#L/C/R Delay:
+#LFO Phaser:
+#LS Filter:
+Live Audio:    Reads audio directly from the soundcard input, 
+               replacing any audio on track.
+#Loop audio:
+#Mag's Notch Filter:
+#Matrix Spatialiser:
+#Matrix; MS to Stereo:
+#Matrix; Stereo to MS:
+#Modulatable delay:
+#Mono to Stereo splitter:
+#Multiband EQ:
+#Multivoice Chorus:
+#Nonbandlimited single-sample impulses (Frequency; Control):
+#Overlay:
+#Pitch Scaler:
+Pitch shift:   Uses FFT to try to change the pitch without 
+               changing the duration.
+#Plate reverb:
+#Pointer cast distortion:
+#Rate shifter:
+#Remove Gaps:
+#ResampleRT:
+#Retro Flanger:
+#Reverb:
+#Reverse Delay (5s max):
+Reverse audio:         Play the audio backwards.
+#Ringmod with LFO:
+#Ringmod with two inputs:
+#SC1:
+#SC2:
+#SC3:
+#SC4:
+#SC4 mono:
+#SE4:
+#Signal sifter:
+#Simple amplifier:
+#Simple delay line, cubic spline interpolation:
+#Simple delay line, linear interpolation:
+#Simple delay line, noninterpolating:
+#Sine + cosine oscillator:
+#Single band parametric:
+#Sinus wavewrapper:
+#Smooth Decimator:
+#SoundLevel:
+#Spectrogram:
+#State Variable Filter:
+#Step Demuxer:
+#Surround matrix encoder:
+#Synthesizer:
+#Tape Delay Simulation:
+#Time Stretch RT:
+#Transient mangler:
+#Triple band parametric with shelves:
+#Valve rectifier:
+#Valve saturation:
+#Vocoder:
+#Vocoder:
+#VyNil (Vinyl Effect):
+#Wave Terrain Oscillator:
+#z-1:
similarity index 100%
rename from cinelerra-5.1/msg.txt
rename to cinelerra-5.1/msg/txt
index aec17e689d736c13d2d2d837a69762c97ffda139..d1bc16aafc7d100b7d2c8ed8d9e455dccb3857f5 100644 (file)
@@ -125,7 +125,6 @@ DIRS = \
        translate \
        unsharp \
        videoscope \
-       vocoder \
        wave \
        whirl \
        wipe \
@@ -149,6 +148,8 @@ DIRS = \
 #      greycstoration \
 # not finished
 #      denoisemjpeg \
+# duplicate
+#      vocoder \
 
 PLUGIN_DIR = $(BINDIR)/plugins
 DATA = $(PLUGIN_DIR)/fonts $(PLUGIN_DIR)/shapes
diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg.patch5 b/cinelerra-5.1/thirdparty/src/ffmpeg.patch5
new file mode 100644 (file)
index 0000000..55cc48b
--- /dev/null
@@ -0,0 +1,70 @@
+diff -ur a/libavformat/avformat.h b/libavformat/avformat.h
+--- a/libavformat/avformat.h   2017-06-06 20:03:55.000000000 -0600
++++ b/libavformat/avformat.h   2017-07-20 09:10:40.434571231 -0600
+@@ -504,6 +504,9 @@
+                                         The user or muxer can override this through
+                                         AVFormatContext.avoid_negative_ts
+                                         */
++#define AVFMT_SEEK_NOSTREAMS  0x80000 /**< Stream index ignored by seek,
++                                           or some streams fail to seek
++                                           */
+ #define AVFMT_SEEK_TO_PTS   0x4000000 /**< Seeking is based on PTS */
+@@ -664,7 +667,8 @@
+     /**
+      * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS,
+      * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH,
+-     * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS.
++     * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS,
++     * AVFMT_SEEK_NOSTREAMS
+      */
+     int flags;
+diff -ur a/libavformat/dv.c b/libavformat/dv.c
+--- a/libavformat/dv.c 2017-06-06 20:03:55.000000000 -0600
++++ b/libavformat/dv.c 2017-07-20 09:12:00.277148325 -0600
+@@ -632,6 +632,7 @@
+ AVInputFormat ff_dv_demuxer = {
+     .name           = "dv",
+     .long_name      = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
++    .flags          = AVFMT_SEEK_NOSTREAMS,
+     .priv_data_size = sizeof(RawDVContext),
+     .read_probe     = dv_probe,
+     .read_header    = dv_read_header,
+diff -ur a/libavformat/matroskadec.c b/libavformat/matroskadec.c
+--- a/libavformat/matroskadec.c        2017-06-06 20:03:55.000000000 -0600
++++ b/libavformat/matroskadec.c        2017-07-20 12:29:39.804273095 -0600
+@@ -3936,6 +3936,7 @@
+ AVInputFormat ff_matroska_demuxer = {
+     .name           = "matroska,webm",
+     .long_name      = NULL_IF_CONFIG_SMALL("Matroska / WebM"),
++    .flags          = AVFMT_SEEK_NOSTREAMS,
+     .extensions     = "mkv,mk3d,mka,mks",
+     .priv_data_size = sizeof(MatroskaDemuxContext),
+     .read_probe     = matroska_probe,
+@@ -3949,6 +3950,7 @@
+ AVInputFormat ff_webm_dash_manifest_demuxer = {
+     .name           = "webm_dash_manifest",
+     .long_name      = NULL_IF_CONFIG_SMALL("WebM DASH Manifest"),
++    .flags          = AVFMT_SEEK_NOSTREAMS,
+     .priv_data_size = sizeof(MatroskaDemuxContext),
+     .read_header    = webm_dash_manifest_read_header,
+     .read_packet    = webm_dash_manifest_read_packet,
+diff -ur a/libavformat/utils.c b/libavformat/utils.c
+--- a/libavformat/utils.c      2017-06-06 20:04:02.000000000 -0600
++++ b/libavformat/utils.c      2017-07-20 09:53:28.684729516 -0600
+@@ -2412,6 +2412,13 @@
+         return seek_frame_byte(s, stream_index, timestamp, flags);
+     }
++    if (stream_index != -1 && (s->iformat->flags & AVFMT_SEEK_NOSTREAMS)) {
++            timestamp = av_rescale_q(timestamp,
++                    s->streams[stream_index]->time_base,
++                    AV_TIME_BASE_Q);
++            stream_index = -1;
++    }
++
+     if (stream_index < 0) {
+         stream_index = av_find_default_stream_index(s);
+         if (stream_index < 0)