From: Good Guy Date: Sat, 22 Jul 2017 23:05:46 +0000 (-0600) Subject: ffmpeg seek fixes, asset only pastes, plugin info, remove vocoder, misc fixes X-Git-Url: https://cinelerra-gg.org/git/?a=commitdiff_plain;h=26fe9e12d6d42ae8f7087ac7f08242769d77a84a;p=goodguy%2Fhistory.git ffmpeg seek fixes, asset only pastes, plugin info, remove vocoder, misc fixes --- diff --git a/cinelerra-5.1/Makefile.am b/cinelerra-5.1/Makefile.am index 067f1b63..7e001030 100644 --- a/cinelerra-5.1/Makefile.am +++ b/cinelerra-5.1/Makefile.am @@ -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/\/$(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)" . diff --git a/cinelerra-5.1/cinelerra/Makefile b/cinelerra-5.1/cinelerra/Makefile index 846e8284..d6ed0a74 100644 --- a/cinelerra-5.1/cinelerra/Makefile +++ b/cinelerra-5.1/cinelerra/Makefile @@ -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 \ diff --git a/cinelerra-5.1/cinelerra/aboutprefs.C b/cinelerra-5.1/cinelerra/aboutprefs.C index 0d2d76ea..f70e3fbd 100644 --- a/cinelerra-5.1/cinelerra/aboutprefs.C +++ b/cinelerra-5.1/cinelerra/aboutprefs.C @@ -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)); diff --git a/cinelerra-5.1/cinelerra/assetpopup.C b/cinelerra-5.1/cinelerra/assetpopup.C index bc556ae6..670e0882 100644 --- a/cinelerra-5.1/cinelerra/assetpopup.C +++ b/cinelerra-5.1/cinelerra/assetpopup.C @@ -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); diff --git a/cinelerra-5.1/cinelerra/awindow.C b/cinelerra-5.1/cinelerra/awindow.C index e416b130..bc6ba193 100644 --- a/cinelerra-5.1/cinelerra/awindow.C +++ b/cinelerra-5.1/cinelerra/awindow.C @@ -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) diff --git a/cinelerra-5.1/cinelerra/awindow.h b/cinelerra-5.1/cinelerra/awindow.h index 3a3af095..e7003f9a 100644 --- a/cinelerra-5.1/cinelerra/awindow.h +++ b/cinelerra-5.1/cinelerra/awindow.h @@ -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 diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index f7aa770d..6ae38bb2 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -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; diff --git a/cinelerra-5.1/cinelerra/awindowgui.h b/cinelerra-5.1/cinelerra/awindowgui.h index 2b4a69a9..501de6dc 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.h +++ b/cinelerra-5.1/cinelerra/awindowgui.h @@ -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 index 00000000..11354a06 --- /dev/null +++ b/cinelerra-5.1/cinelerra/effectlist.C @@ -0,0 +1,144 @@ +/* + * CINELERRA + * Copyright (C) 2006 Pierre Dumuid + * Copyright (C) 1997-2012 Adam Williams + * + * 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 index 00000000..7ae1185d --- /dev/null +++ b/cinelerra-5.1/cinelerra/effectlist.h @@ -0,0 +1,80 @@ +/* + * CINELERRA + * Copyright (C) 2006 Pierre Dumuid + * Copyright (C) 2008 Adam Williams + * + * 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 index 00000000..2f2a57a9 --- /dev/null +++ b/cinelerra-5.1/cinelerra/effectlist.inc @@ -0,0 +1,30 @@ +/* + * CINELERRA + * Copyright (C) 2006 Pierre Dumuid + * Copyright (C) 2008 Adam Williams + * + * 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 diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C index f79a240e..547b7f07 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.C +++ b/cinelerra-5.1/cinelerra/ffmpeg.C @@ -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); diff --git a/cinelerra-5.1/cinelerra/labelpopup.C b/cinelerra-5.1/cinelerra/labelpopup.C index cbac067b..65128cf7 100644 --- a/cinelerra-5.1/cinelerra/labelpopup.C +++ b/cinelerra-5.1/cinelerra/labelpopup.C @@ -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; } diff --git a/cinelerra-5.1/cinelerra/loadmode.inc b/cinelerra-5.1/cinelerra/loadmode.inc index e68a7261..bd4d78cb 100644 --- a/cinelerra-5.1/cinelerra/loadmode.inc +++ b/cinelerra-5.1/cinelerra/loadmode.inc @@ -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 diff --git a/cinelerra-5.1/cinelerra/menueffects.C b/cinelerra-5.1/cinelerra/menueffects.C index 6705e400..bc089e7f 100644 --- a/cinelerra-5.1/cinelerra/menueffects.C +++ b/cinelerra-5.1/cinelerra/menueffects.C @@ -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(); diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 33cee066..107ef166 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -733,6 +733,66 @@ void MWindow::add_plugins(ArrayList &plugins) plugins.remove_all(); } +void MWindow::init_plugin_tips(ArrayList &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( ; tpremove_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 diff --git a/cinelerra-5.1/cinelerra/mwindow.h b/cinelerra-5.1/cinelerra/mwindow.h index 2d041fbc..3de297ca 100644 --- a/cinelerra-5.1/cinelerra/mwindow.h +++ b/cinelerra-5.1/cinelerra/mwindow.h @@ -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 &plugins); static int check_plugin_index(ArrayList &plugins, const char *plug_dir, const char *plug_path); static void init_plugin_index(MWindow *mwindow, Preferences *preferences, diff --git a/cinelerra-5.1/cinelerra/mwindowedit.C b/cinelerra-5.1/cinelerra/mwindowedit.C index a1232154..9e53bde7 100644 --- a/cinelerra-5.1/cinelerra/mwindowedit.C +++ b/cinelerra-5.1/cinelerra/mwindowedit.C @@ -1153,15 +1153,11 @@ int MWindow::paste_assets(double position, Track *dest_track, int overwrite) } void MWindow::load_assets(ArrayList *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 *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 || diff --git a/cinelerra-5.1/cinelerra/pluginserver.C b/cinelerra-5.1/cinelerra/pluginserver.C index 0c72a358..9995a4a7 100644 --- a/cinelerra-5.1/cinelerra/pluginserver.C +++ b/cinelerra-5.1/cinelerra/pluginserver.C @@ -79,6 +79,7 @@ void PluginServer::init() plugin_obj = new PluginObj(); modules = new ArrayList; nodes = new ArrayList; + 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; @@ -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; diff --git a/cinelerra-5.1/cinelerra/pluginserver.h b/cinelerra-5.1/cinelerra/pluginserver.h index b1d9c1b4..552bbe77 100644 --- a/cinelerra-5.1/cinelerra/pluginserver.h +++ b/cinelerra-5.1/cinelerra/pluginserver.h @@ -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 diff --git a/cinelerra-5.1/cinelerra/record.C b/cinelerra-5.1/cinelerra/record.C index 50cfb741..719c8869 100644 --- a/cinelerra-5.1/cinelerra/record.C +++ b/cinelerra-5.1/cinelerra/record.C @@ -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, diff --git a/cinelerra-5.1/cinelerra/render.C b/cinelerra-5.1/cinelerra/render.C index cf088108..be49dabb 100644 --- a/cinelerra-5.1/cinelerra/render.C +++ b/cinelerra-5.1/cinelerra/render.C @@ -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, diff --git a/cinelerra-5.1/guicast/bclistbox.C b/cinelerra-5.1/guicast/bclistbox.C index 882c378b..fe954f89 100644 --- a/cinelerra-5.1/guicast/bclistbox.C +++ b/cinelerra-5.1/guicast/bclistbox.C @@ -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); +} diff --git a/cinelerra-5.1/guicast/bclistbox.h b/cinelerra-5.1/guicast/bclistbox.h index 66d13255..442a8245 100644 --- a/cinelerra-5.1/guicast/bclistbox.h +++ b/cinelerra-5.1/guicast/bclistbox.h @@ -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 index 00000000..8af8524d --- /dev/null +++ b/cinelerra-5.1/info/plugins.txt @@ -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: diff --git a/cinelerra-5.1/msg.txt b/cinelerra-5.1/msg/txt similarity index 100% rename from cinelerra-5.1/msg.txt rename to cinelerra-5.1/msg/txt diff --git a/cinelerra-5.1/plugins/Makefile b/cinelerra-5.1/plugins/Makefile index aec17e68..d1bc16aa 100644 --- a/cinelerra-5.1/plugins/Makefile +++ b/cinelerra-5.1/plugins/Makefile @@ -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 index 00000000..55cc48b8 --- /dev/null +++ b/cinelerra-5.1/thirdparty/src/ffmpeg.patch5 @@ -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)