es.po update by rafa, add ms win10 cygwin port, add pulseaudio, new config flags...
authorGood Guy <good1.2guy@gmail.com>
Tue, 28 Jan 2020 01:48:36 +0000 (18:48 -0700)
committerGood Guy <good1.2guy@gmail.com>
Tue, 28 Jan 2020 01:48:36 +0000 (18:48 -0700)
59 files changed:
cinelerra-5.1/blds/cygwin.bld [new file with mode: 0755]
cinelerra-5.1/blds/cygwin.patch [new file with mode: 0644]
cinelerra-5.1/cinelerra/Makefile
cinelerra-5.1/cinelerra/adeviceprefs.C
cinelerra-5.1/cinelerra/adeviceprefs.h
cinelerra-5.1/cinelerra/adeviceprefs.inc
cinelerra-5.1/cinelerra/androidcontrol.C
cinelerra-5.1/cinelerra/assetpopup.C
cinelerra-5.1/cinelerra/audioalsa.C
cinelerra-5.1/cinelerra/audioalsa.h
cinelerra-5.1/cinelerra/audioconfig.C
cinelerra-5.1/cinelerra/audioconfig.h
cinelerra-5.1/cinelerra/audiodevice.C
cinelerra-5.1/cinelerra/audiodevice.h
cinelerra-5.1/cinelerra/audiodevice.inc
cinelerra-5.1/cinelerra/audioodevice.C
cinelerra-5.1/cinelerra/audiopulse.C [new file with mode: 0644]
cinelerra-5.1/cinelerra/audiopulse.h [new file with mode: 0644]
cinelerra-5.1/cinelerra/audiopulse.inc [new file with mode: 0644]
cinelerra-5.1/cinelerra/cwindow.inc
cinelerra-5.1/cinelerra/editpopup.C
cinelerra-5.1/cinelerra/indexfile.C
cinelerra-5.1/cinelerra/mainsession.C
cinelerra-5.1/cinelerra/mwindow.C
cinelerra-5.1/cinelerra/playbackconfig.C
cinelerra-5.1/cinelerra/playbackconfig.h
cinelerra-5.1/cinelerra/recordconfig.C
cinelerra-5.1/cinelerra/recordconfig.h
cinelerra-5.1/cinelerra/samples.C
cinelerra-5.1/cinelerra/samples.h
cinelerra-5.1/cinelerra/shuttle.h
cinelerra-5.1/cinelerra/shuttle.inc
cinelerra-5.1/cinelerra/swindow.C
cinelerra-5.1/cinelerra/trackcanvas.C
cinelerra-5.1/cinelerra/vdeviceprefs.C
cinelerra-5.1/configure.ac
cinelerra-5.1/guicast/bcbitmap.C
cinelerra-5.1/guicast/bcbitmap.h
cinelerra-5.1/guicast/bcclipboard.C
cinelerra-5.1/guicast/bcsignals.C
cinelerra-5.1/guicast/bctextbox.C
cinelerra-5.1/guicast/bctextbox.h
cinelerra-5.1/guicast/bctrace.C
cinelerra-5.1/guicast/bcwindowbase.C
cinelerra-5.1/guicast/bcwindowbase.h
cinelerra-5.1/guicast/bcwindowdraw.C
cinelerra-5.1/guicast/bcwindowevents.C
cinelerra-5.1/guicast/cstrdup.h
cinelerra-5.1/guicast/thread.h
cinelerra-5.1/plugins/chromakey/chromakey.C
cinelerra-5.1/plugins/denoisefft/denoisefft.C
cinelerra-5.1/plugins/mandelcuda/.swp [deleted file]
cinelerra-5.1/plugins/nbodycuda/.swp [deleted file]
cinelerra-5.1/plugins/shapewipe/Makefile
cinelerra-5.1/plugins/titler/titler.C
cinelerra-5.1/plugins/titler/titler.h
cinelerra-5.1/plugins/titler/titlerwindow.C
cinelerra-5.1/po/es.po
cinelerra-5.1/thirdparty/src/libxcb.patch1 [new file with mode: 0755]

diff --git a/cinelerra-5.1/blds/cygwin.bld b/cinelerra-5.1/blds/cygwin.bld
new file mode 100755 (executable)
index 0000000..270c42c
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/bash
+( ./autogen.sh
+  CYGWIN=1 CFLAGS="-g -O2" ./configure --with-single-user -without-gl \
+    --disable-static-build --without-lv2 --disable-lame --disable-twolame \
+    --without-oss --without-alsa --without-firewire --without-dv --without-dvb \
+    --without-video4linux2 --without-xxf86vm --without-ladspa-build \
+    --without-libzmpeg --without-commercial --without-thirdparty \
+    --without-vaapi --without-vdpau --without-shuttle \
+    --without-x10tv --without-wintv --without-ladspa
+  make
+  make install ) 2>&1 | tee log
diff --git a/cinelerra-5.1/blds/cygwin.patch b/cinelerra-5.1/blds/cygwin.patch
new file mode 100644 (file)
index 0000000..a984a7f
--- /dev/null
@@ -0,0 +1,212 @@
+diff --git a/cinelerra-5.1/cinelerra/Makefile b/cinelerra-5.1/cinelerra/Makefile
+index 645b273..e482dcd 100644
+--- a/cinelerra-5.1/cinelerra/Makefile
++++ b/cinelerra-5.1/cinelerra/Makefile
+@@ -428,13 +428,28 @@ LIBS := $(LIBRARIES)
+ ifneq ($(WANT_CIN_3RDPARTY),no)
+ LIBS += $(libraries)
+ else
++LIBS += -Wl,--export-all-symbols -g
++LIBS += -Wl,--out-implib,$(OBJDIR)/lib$(WANT_CIN).exe.a
++LIBS += -L$(FF_DIR)/lib
++LIBS += -Wl,-rpath-link=:$(FF_DIR)/lib
++LIBS += -Wl,--as-needed -Wl,--warn-common
++LIBS += -lavdevice
++LIBS += -lavfilter
++LIBS += -lavformat
++LIBS += -lavcodec
++LIBS += -lswresample
++LIBS += -lswscale
++LIBS += -lavutil
++
++LIBS += -lvpx -lwebp -lwebpmux
++LIBS += -ljpeg -lFLAC -lgif -lsndfile -ltiff
++
++LIBS += -lsecur32 -lole32 -luser32 -luser32 -lbcrypt -lshell32
+ LIBS += -lpthread -lm -lbz2 -llzma -lz -lpng -luuid
+-LIBS += -lX11 -lXau -lXdmcp -lXext -lXfixes -lXv -lXinerama
++LIBS += -lX11 -lXau -lXdmcp -lXext -lXfixes -lXinerama
++LIBS += -lintl -liconv
+ LIBS += -lfontconfig -lfreetype
+-LIBS += -lavcodec -lavdevice -lavfilter -lavformat -lavresample -lavutil
+-LIBS += -lswresample -lswscale
+-LIBS += -lvpx -lwebp -lwebpmux
+ LIBS += $(if $(filter fftw,$(static_pkgs)), -lfftw3)
+ LIBS += $(if $(filter flac,$(static_pkgs)), -lFLAC)
+@@ -454,7 +470,7 @@ LIBS += $(if $(filter x265,$(static_pkgs)), -lx265)
+ LIBS += $(if $(filter libvpx,$(static_pkgs)), -lvpx)
+ ifneq ($(WANT_GL),no)
+-LIBS += -lGL -lGLU -lGLX
++LIBS += -lGL -lGLU
+ endif
+ ifneq ($(WANT_XFT),no)
+ LIBS += -lXft
+@@ -548,7 +564,7 @@ CFLAGS += -DUSE_ALPHA
+ else
+-LDFLAGS1 = -Wl,-export-dynamic -g
++LDFLAGS1 = -Wl,-export-all-symbols -g
+ LDFLAGS2 = $(LDFLAGS)
+ LINKER = $(CXX) -o $(OUTPUT)
+@@ -566,7 +582,7 @@ all:       $(OUTPUT) $(CUTADS) $(BDWRITE) $(LV2UI)
+ $(OUTPUT): $(OBJS) $(THEME_DATA) $(DCRAW) $(LIBRARIES)
+       $(LINKER) `cat $(OBJDIR)/objs`
+       $(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(OUTPUT) $(OUTPUT_G))
+-      $(if $(findstring -ggdb,$(CFLAGS)),,strip $(OUTPUT))
++      #$(if $(findstring -ggdb,$(CFLAGS)),,strip $(OUTPUT))
+       ln -f -s ../bin/$(WANT_CIN) ci
+ ifneq ($(WANT_COMMERCIAL),no)
+@@ -574,7 +590,7 @@ $(CUTADS): $(CUTOBJS) $(CUTLIBS) $(LIBRARIES)
+       @echo g++ -o $@ $(CUTOBJS)
+       @g++ $(CFLAGS) -pthread -o $@ $(CUTOBJS) $(CUTLIBS) $(LIBS)
+       $(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(CUTADS) $(CUTADS).debuginfo)
+-      $(if $(findstring -ggdb,$(CFLAGS)),,strip $(CUTADS))
++      #$(if $(findstring -ggdb,$(CFLAGS)),,strip $(CUTADS))
+ install-cutads:
+       cp -av $(OBJDIR)/cutads $(BINDIR)/.
+@@ -586,7 +602,7 @@ $(BDWRITE):        $(BDWOBJS) $(LIBRARIES)
+       @echo g++ -o $@ $(BDWOBJS)
+       @g++ $(CFLAGS) -pthread -o $@ $(BDWOBJS) $(LIBS)
+       $(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(BDWRITE) $(BDWRITE).debuginfo)
+-      $(if $(findstring -ggdb,$(CFLAGS)),,strip $(BDWRITE))
++      #$(if $(findstring -ggdb,$(CFLAGS)),,strip $(BDWRITE))
+ install-bdwrite:
+       cp -av $(OBJDIR)/bdwrite $(BINDIR)/.
+@@ -629,7 +645,7 @@ $(OBJDIR)/lv2ui: $(LV2OBJS)
+       @echo $(CXX) \`cat $(OBJDIR)/c_flags\` $^ -o $@
+       @$(CXX) `cat $(OBJDIR)/c_flags` $^ -o $@ $(LIBS) $(GTK2_LIBS)
+       $(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(LV2UI) $(LV2UI).debuginfo)
+-      $(if $(findstring -ggdb,$(CFLAGS)),,strip $(LV2UI))
++      #$(if $(findstring -ggdb,$(CFLAGS)),,strip $(LV2UI))
+ .PHONY:       lv2ui
+ lv2ui:        $(LV2UI)
+diff --git a/cinelerra-5.1/db/tdb.h b/cinelerra-5.1/db/tdb.h
+index 8ee8800..9a17091 100644
+--- a/cinelerra-5.1/db/tdb.h
++++ b/cinelerra-5.1/db/tdb.h
+@@ -32,7 +32,7 @@ inline void operator delete[](void *t,size_t n) { free(t); }
+ #endif
+ #define ZMEDIA
+-#define ZFUTEX
++//#define ZFUTEX
+ #ifdef ZFUTEX
+ #include <unistd.h>
+ #include <endian.h>
+diff --git a/cinelerra-5.1/guicast/bcresources.C b/cinelerra-5.1/guicast/bcresources.C
+index 1d52855..fdab491 100644
+--- a/cinelerra-5.1/guicast/bcresources.C
++++ b/cinelerra-5.1/guicast/bcresources.C
+@@ -367,8 +367,8 @@ BC_Resources::BC_Resources(float x_scale, float y_scale)
+       BC_WindowBase::resources = this;
+       synchronous = 0;
+       vframe_shm = 0;
+-      use_shm = -1;
+-      shm_reply = 1;
++      use_shm = 0;
++      shm_reply = 0;
+       if( x_scale <= 0 ) x_scale = 1;
+       if( y_scale <= 0 ) y_scale = x_scale;
+diff --git a/cinelerra-5.1/guicast/filesystem.h b/cinelerra-5.1/guicast/filesystem.h
+index c976135..5613702 100644
+--- a/cinelerra-5.1/guicast/filesystem.h
++++ b/cinelerra-5.1/guicast/filesystem.h
+@@ -26,6 +26,9 @@
+ #include "bcwindowbase.inc"
+ #include "sizes.h"
++#define dirent64 dirent
++#define readdir64 readdir
++
+ class FileItem
+ {
+ public:
+diff --git a/cinelerra-5.1/plugin_config b/cinelerra-5.1/plugin_config
+index 56f4351..f7149bb 100644
+--- a/cinelerra-5.1/plugin_config
++++ b/cinelerra-5.1/plugin_config
+@@ -4,12 +4,21 @@ CFLAGS += -I../ -I$(CINELERRA) -I$(GUICAST) -I../colors -fPIC
+ CFLAGS += $(static_incs)
+ LFLAGS += $(static_libs)
+ LFLAGS += $(LDFLAGS)
++
++LFLAGS +=  -Wl,$(CINELERRA)/$(OBJDIR)/libcin.exe.a
++LFLAGS += -lintl -liconv
++ifneq ($(WANT_GL),no)
++LFLAGS += -lGL -lGLU
++endif
++
+ LDLINKER ?= $(CXX) -shared
+ $(shell mkdir -p $(OBJDIR))
++#SFX=plugin
++SFX=dll
+ PLUGIN_DIR := $(BINDIR)/plugins
+ OUTPUT_DIR = $(PLUGIN_DIR)/$($(PLUGIN))
+-OUTPUT = $(OUTPUT_DIR)/$(PLUGIN).plugin
++OUTPUT = $(OUTPUT_DIR)/$(PLUGIN).$(SFX)
+ OUTPUT_G = $(OBJDIR)/$(PLUGIN).debuginfo
+ $(shell echo $(CFLAGS) > $(OBJDIR)/c_flags)
+@@ -20,16 +29,16 @@ ifeq ($(OUTPUT_THEME),)
+ $(OUTPUT): $(OBJS) $(OUTPUT_DIR) $(OUTPUT_BINS)
+       $(LDLINKER) -o $(OUTPUT) $(OBJS) $(OUTPUT_BINS) `cat $(OBJDIR)/l_flags`
+       $(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(OUTPUT) $(OUTPUT_G))
+-      $(if $(findstring -ggdb,$(CFLAGS)),,strip $(OUTPUT))
++      #$(if $(findstring -ggdb,$(CFLAGS)),,strip $(OUTPUT))
+ else
+ THEME_DATA = $(OBJDIR)/$(PLUGIN)_data.o
+ $(OUTPUT_THEME): $(OBJS) $(OUTPUT_DIR) $(THEME_DATA)
+-      $(LDLINKER) -o $(OUTPUT_THEME) $(OBJS) $(THEME_DATA) $(LDFLAGS)
++      $(LDLINKER) -o $(OUTPUT_THEME) $(OBJS) $(THEME_DATA) `cat $(OBJDIR)/l_flags`
+       $(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(OUTPUT_THEME) $(OUTPUT_G))
+-      $(if $(findstring -ggdb,$(CFLAGS)),,strip $(OUTPUT_THEME))
++      #$(if $(findstring -ggdb,$(CFLAGS)),,strip $(OUTPUT_THEME))
+ $(THEME_DATA):
+       cd $(OBJDIR) && \
+diff --git a/cinelerra-5.1/plugins/Makefile b/cinelerra-5.1/plugins/Makefile
+index 22bc7dd..6404536 100644
+--- a/cinelerra-5.1/plugins/Makefile
++++ b/cinelerra-5.1/plugins/Makefile
+@@ -36,7 +36,6 @@ DIRS = $(OPENCV_OBJS) \
+       brightness \
+       burn \
+       C41 \
+-      cdripper \
+       chorus \
+       chromakey \
+       chromakeyhsv \
+@@ -176,6 +175,8 @@ DIRS = $(OPENCV_OBJS) \
+ #     denoisemjpeg \
+ # duplicate
+ #     vocoder \
++# not in bsd or win
++#     cdripper \
+ PLUGIN_DIR = $(BINDIR)/plugins
+ DATA = $(PLUGIN_DIR)/fonts $(PLUGIN_DIR)/shapes
+diff --git a/cinelerra-5.1/guicast/bcsignals.C b/cinelerra-5.1/guicast/bcsignals.C
+--- guicast/bcsignals.C        2020-01-27 07:27:45.332623800 -0700
++++ guicast/bcsignals.C        2020-01-27 07:28:11.443049600 -0700
+@@ -44,6 +44,7 @@
+ #include <sys/prctl.h>
+ #endif
+ #include <sys/types.h>
++#include <sys/wait.h>
+ BC_Signals* BC_Signals::global_signals = 0;
+ static int signal_done = 0;
index 7e69a50..645b273 100644 (file)
@@ -64,6 +64,7 @@ OBJS := $(OVERLAYS) \
        $(OBJDIR)/audioidevice.o \
        $(OBJDIR)/audioodevice.o \
        $(OBJDIR)/audiooss.o \
+       $(OBJDIR)/audiopulse.o \
        $(OBJDIR)/audiov4l2mpeg.o \
        $(OBJDIR)/autoconf.o \
        $(OBJDIR)/automation.o \
@@ -461,6 +462,9 @@ endif
 ifneq ($(WANT_ALSA),no)
 LIBS += -lasound
 endif
+ifneq ($(WANT_PULSE),no)
+LIBS += -lpulse-simple -lpulse
+endif
 ifneq ($(WANT_OPENEXR),no)
 LIBS += -lIex -lIexMath -lIlmImf -lIlmImfUtil
 endif
index 60c9126..ddc75b2 100644 (file)
@@ -22,6 +22,7 @@
 #include "adeviceprefs.h"
 #include "audioalsa.h"
 #include "audiodevice.inc"
+#include "audiopulse.h"
 #include "bcsignals.h"
 #include "bitspopup.h"
 #include "edl.h"
@@ -91,7 +92,7 @@ void ADevicePrefs::reset()
        cine_path = 0;
        server_title = 0;
        port_title = 0;
-       esound_port = 0;
+       port = 0;
 }
 
 int ADevicePrefs::initialize(int creation)
@@ -126,6 +127,9 @@ int ADevicePrefs::initialize(int creation)
        case AUDIO_ALSA:
                create_alsa_objs();
                break;
+       case AUDIO_PULSE:
+               create_pulse_objs();
+               break;
        case AUDIO_ESOUND:
                create_esound_objs();
                break;
@@ -167,6 +171,9 @@ int ADevicePrefs::delete_objects()
        case AUDIO_ALSA:
                delete_alsa_objs();
                break;
+       case AUDIO_PULSE:
+               delete_pulse_objs();
+               break;
        case AUDIO_ESOUND:
                delete_esound_objs();
                break;
@@ -205,9 +212,9 @@ int ADevicePrefs::delete_oss_objs()
 int ADevicePrefs::delete_esound_objs()
 {
        delete server_title;
+       delete server;
        delete port_title;
-       delete esound_server;
-       delete esound_port;
+       delete port;
        return 0;
 }
 
@@ -246,6 +253,15 @@ int ADevicePrefs::delete_alsa_objs()
        return 0;
 }
 
+int ADevicePrefs::delete_pulse_objs()
+{
+#ifdef HAVE_PULSE
+       delete server_title;
+       delete server;
+#endif
+       return 0;
+}
+
 int ADevicePrefs::delete_dvb_objs()
 {
        delete dvb_adapter_title;
@@ -410,9 +426,7 @@ int ADevicePrefs::create_alsa_objs()
                                _("Stop playback locks up."));
                dialog->add_subwindow(alsa_workaround);
        }
-
 #endif
-
        return 0;
 }
 
@@ -437,8 +451,8 @@ int ADevicePrefs::create_esound_objs()
        server_title = new BC_Title(x1, y, _("Server:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(server_title);
-       esound_server = new ADeviceTextBox(x1, y + yS(20), output_char);
-       dialog->add_subwindow(esound_server);
+       server = new ADeviceTextBox(x1, y + yS(20), output_char);
+       dialog->add_subwindow(server);
 
        switch(mode) {
        case MODEPLAY:
@@ -451,12 +465,12 @@ int ADevicePrefs::create_esound_objs()
                output_int = &out_config->esound_out_port;
                break;
        }
-       x1 += esound_server->get_w() + xS(5);
+       x1 += server->get_w() + xS(5);
        port_title = new BC_Title(x1, y, _("Port:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(port_title);
-       esound_port = new ADeviceIntBox(x1, y + yS(20), output_int);
-       dialog->add_subwindow(esound_port);
+       port = new ADeviceIntBox(x1, y + yS(20), output_int);
+       dialog->add_subwindow(port);
        return 0;
 }
 
@@ -615,6 +629,29 @@ int ADevicePrefs::create_v4l2mpeg_objs()
 }
 
 
+int ADevicePrefs::create_pulse_objs()
+{
+#ifdef HAVE_PULSE
+       char *output_char = 0;
+       switch(mode) {
+       case MODEPLAY:
+               output_char = out_config->pulse_out_server;
+               break;
+       case MODERECORD:
+               output_char = in_config->pulse_in_server;
+               break;
+       }
+       int x1 = x, y1 = y;
+       x1 += menu->get_w() + xS(5);
+       dialog->add_subwindow(server_title = new BC_Title(x1, y1,
+               _("Server (blank for default):")));
+       y1 += server_title->get_h() + yS(5);
+       dialog->add_subwindow(server = new ADeviceTextBox(x1, y1, output_char));
+#endif
+       return 0;
+}
+
+
 ADriverMenu::ADriverMenu(int x, int y, ADevicePrefs *device_prefs,
        int do_input, int *output)
  : BC_PopupMenu(x, y, xS(125), adriver_to_string(*output), 1)
@@ -656,6 +693,9 @@ void ADriverMenu::create_objects()
 #ifdef HAVE_VIDEO4LINUX2
        if(do_input) add_item(new ADriverItem(this, AUDIO_V4L2MPEG_TITLE, AUDIO_V4L2MPEG));
 #endif
+#ifdef HAVE_PULSE
+       add_item(new ADriverItem(this, AUDIO_PULSE_TITLE, AUDIO_PULSE));
+#endif
 }
 
 char* ADriverMenu::adriver_to_string(int driver)
@@ -670,6 +710,9 @@ char* ADriverMenu::adriver_to_string(int driver)
        case AUDIO_ESOUND:
                sprintf(string, AUDIO_ESOUND_TITLE);
                break;
+       case AUDIO_PULSE:
+               sprintf(string, AUDIO_PULSE_TITLE);
+               break;
        case AUDIO_NAS:
                sprintf(string, AUDIO_NAS_TITLE);
                break;
index ebe5051..e7a480a 100644 (file)
 class OSSEnable;
 class ALSADevice;
 
+#include "adeviceprefs.inc"
 #include "bitspopup.inc"
 #include "guicast.h"
 #include "playbackconfig.inc"
 #include "preferencesthread.inc"
 #include "recordconfig.inc"
 
-class ADriverMenu;
-class ADeviceTextBox;
-class ADeviceIntBox;
-class ADeviceTumbleBox;
-
 class ADevicePrefs
 {
 public:
@@ -74,6 +70,7 @@ private:
        int create_cine_objs();
        int create_dvb_objs();
        int create_v4l2mpeg_objs();
+       int create_pulse_objs();
 
        int delete_oss_objs();
        int delete_esound_objs();
@@ -81,6 +78,7 @@ private:
        int delete_alsa_objs();
        int delete_dvb_objs();
        int delete_v4l2mpeg_objs();
+       int delete_pulse_objs();
 
 // The output config resolved from playback strategy and render engine.
        AudioOutConfig *out_config;
@@ -99,8 +97,8 @@ private:
        OSSEnable *oss_enable[MAXDEVICES];
        ADeviceTextBox *oss_path[MAXDEVICES];
        BitsPopup *oss_bits;
-       ADeviceTextBox *esound_server;
-       ADeviceIntBox *esound_port;
+       ADeviceTextBox *server;
+       ADeviceIntBox *port;
        ADeviceIntBox *firewire_port;
        ADeviceIntBox *firewire_channel;
        ADeviceTextBox *firewire_path;
index 0c8e110..f9c71f6 100644 (file)
 #define ADEVICEPREFS_INC
 
 class ADevicePrefs;
+
 #ifndef MODEPLAY
 #define MODEPLAY 0
 #define MODERECORD 1
 #define MODEDUPLEX 2
 #endif
 
+class ADriverMenu;
+class ADriverItem;
+class OSSEnable;
+class ADeviceTextBox;
+class ADeviceIntBox;
+class ADeviceTumbleBox;
+class ALSADevice;
 
 #endif
index 61e43c9..f26aed4 100644 (file)
@@ -47,6 +47,9 @@ AndroidControl::AndroidControl(MWindowGUI *mwindow_gui)
 {
        this->mwindow_gui = mwindow_gui;
        Thread::start();
+       done = -1;
+       sockfd = -1;
+       msg = 0;
 }
 
 bool AndroidControl::is_msg(const char *cp)
index ba82816..56832ca 100644 (file)
@@ -420,7 +420,7 @@ int AssetPopupInsertMixer::handle_event()
 }
 
 AssetPopupPaste::AssetPopupPaste(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem(_("Paste"))
+ : BC_MenuItem(C_("Paste"))
 {
        this->mwindow = mwindow;
        this->popup = popup;
index e5c9fdf..4a128a7 100644 (file)
@@ -145,64 +145,6 @@ void AudioALSA::list_devices(ArrayList<char*> *names, ArrayList<char*> *pcm_name
 
                snd_ctl_close(handle);
        }
-
-#ifdef HAVE_PACTL
-// attempt to add pulseaudio "monitor" devices
-//  run: pactl list <sources>|<sinks>
-//   scan output for <Source/Sink> #n,  Name: <device>
-//   build alsa device config and add to alsa snd_config
-
-       const char *arg = 0;
-       switch( mode ) {
-               case MODERECORD:
-                       arg = "source";
-                       break;
-               case MODEPLAY:
-                       arg = "sink";
-                       break;
-       }
-       FILE *pactl = 0;
-       char line[BCTEXTLEN];
-       if( arg ) {
-               sprintf(line, "LANGUAGE=en_US.UTF-8 pactl list %ss", arg);
-               pactl = popen(line,"r");
-       }
-       if( pactl ) {
-               snd_config_update();
-               char name[BCTEXTLEN], pa_name[BCTEXTLEN], device[BCTEXTLEN];
-               name[0] = pa_name[0] = device[0] = 0;
-               int arg_len = strlen(arg);
-               while( fgets(line, sizeof(line), pactl) ) {
-                       if( !strncasecmp(line, arg, arg_len) ) {
-                               char *sp = name, *id = pa_name;
-                               for( char *cp=line; *cp && *cp!='\n'; *sp++=*cp++ )
-                                       *id++ = (*cp>='A' && *cp<='Z') ||
-                                               (*cp>='a' && *cp<='z') ||
-                                               (*cp>='0' && *cp<='9') ? *cp : '_';
-                               *sp++ = 0;  *id = 0;
-                               if( names )
-                                       names->append(cstrdup(name));
-                               continue;
-                       }
-                       if( sscanf(line, " Name: %s", device) != 1 ) continue;
-                       int len = strlen(pa_name);
-                       if( pcm_names )
-                               pcm_names->append(cstrdup(pa_name));
-                       char alsa_config[BCTEXTLEN];
-                       len = snprintf(alsa_config, sizeof(alsa_config),
-                               "pcm.!%s {\n type pulse\n device %s\n}\n"
-                               "ctl.!%s {\n type pulse\n device %s\n}\n",
-                               pa_name, device, pa_name, device);
-                       FILE *fp = fmemopen(alsa_config,len,"r");
-                       snd_input_t *inp;
-                       snd_input_stdio_attach(&inp, fp, 1);
-                       snd_config_load(snd_config, inp);
-                       name[0] = pa_name[0] = device[0] = 0;
-                       snd_input_close(inp);
-               }
-               pclose(pactl);
-       }
-#endif
 }
 
 void AudioALSA::translate_name(char *output, char *input, int mode)
@@ -215,6 +157,9 @@ void AudioALSA::translate_name(char *output, char *input, int mode)
 
        list_devices(&titles, &pcm_titles, mode);
 
+// attempt to add pulseaudio "monitor" devices
+       add_pulse_devices(mode, &titles, &pcm_titles);
+
        sprintf(output, "default");
        for(int i = 0; i < titles.total; i++)
        {
@@ -676,4 +621,64 @@ snd_pcm_t* AudioALSA::get_input()
        return dsp_in;
 }
 
+void AudioALSA::add_pulse_devices(int mode,
+               ArrayList<char*> *names, ArrayList<char*> *pcm_names)
+{
+#ifdef HAVE_PACTL
+//  run: pactl list <sources>|<sinks>
+//   scan output for <Source/Sink> #n,  Name: <device>
+//   build alsa device config and add to alsa snd_config
+       const char *arg = 0;
+       switch( mode ) {
+       case MODERECORD:
+               arg = "source";
+               break;
+       case MODEPLAY:
+               arg = "sink";
+               break;
+       }
+       FILE *pactl = 0;
+       char line[BCTEXTLEN];
+       if( arg ) {
+               sprintf(line, "LANGUAGE=en_US.UTF-8 pactl list %ss", arg);
+               pactl = popen(line,"r");
+       }
+       if( pactl ) {
+               snd_config_update();
+               char name[BCTEXTLEN], pa_name[BCTEXTLEN], device[BCTEXTLEN];
+               name[0] = pa_name[0] = device[0] = 0;
+               int arg_len = strlen(arg);
+               while( fgets(line, sizeof(line), pactl) ) {
+                       if( !strncasecmp(line, arg, arg_len) ) {
+                               char *sp = name, *id = pa_name;
+                               for( char *cp=line; *cp && *cp!='\n'; *sp++=*cp++ )
+                                       *id++ = (*cp>='A' && *cp<='Z') ||
+                                               (*cp>='a' && *cp<='z') ||
+                                               (*cp>='0' && *cp<='9') ? *cp : '_';
+                               *sp++ = 0;  *id = 0;
+                               if( names )
+                                       names->append(cstrdup(name));
+                               continue;
+                       }
+                       if( sscanf(line, " Name: %s", device) != 1 ) continue;
+                       int len = strlen(pa_name);
+                       if( pcm_names )
+                               pcm_names->append(cstrdup(pa_name));
+                       char alsa_config[BCTEXTLEN];
+                       len = snprintf(alsa_config, sizeof(alsa_config),
+                               "pcm.!%s {\n type pulse\n device %s\n}\n"
+                               "ctl.!%s {\n type pulse\n device %s\n}\n",
+                               pa_name, device, pa_name, device);
+                       FILE *fp = fmemopen(alsa_config,len,"r");
+                       snd_input_t *inp;
+                       snd_input_stdio_attach(&inp, fp, 1);
+                       snd_config_load(snd_config, inp);
+                       name[0] = pa_name[0] = device[0] = 0;
+                       snd_input_close(inp);
+               }
+               pclose(pactl);
+       }
+#endif
+}
+
 #endif
index 78d0831..5b919a2 100644 (file)
@@ -49,7 +49,8 @@ public:
        int flush_device();
        int interrupt_playback();
        int stop_output();
-
+       static void add_pulse_devices(int mode,
+               ArrayList<char*> *name, ArrayList<char*> *pcm_name);
 private:
        int close_output();
        void translate_name(char *output, char *input, int mode);
index 44c5eab..33e4ce1 100644 (file)
@@ -37,6 +37,7 @@ AudioConfig::AudioConfig()
        oss_in_channels = 2;
        oss_in_bits = 16;
        strcpy(esound_in_server, "");
+       strpcy(pulse_in_server, "");
        esound_in_port = 0;
 
        audio_out_driver = AUDIO_ALSA;
@@ -44,6 +45,7 @@ AudioConfig::AudioConfig()
        oss_out_channels = 2;
        oss_out_bits = 16;
        strpcy(esound_out_server, "");
+       strpcy(pulse_out_server, "");
        esound_out_port = 0;
 
        audio_duplex_driver = AUDIO_ALSA;
@@ -65,6 +67,7 @@ AudioConfig& AudioConfig::operator=(AudioConfig &that)
        afirewire_in_port = that.afirewire_in_port;
        afirewire_in_channel = that.afirewire_in_channel;
        strcpy(esound_in_server, that.esound_in_server);
+       strcpy(pulse_in_server, that.pulse_in_server);
        esound_in_port = that.esound_in_port;
        strcpy(oss_in_device, that.oss_in_device);
        oss_in_channels = that.oss_in_channels;
@@ -74,6 +77,7 @@ AudioConfig& AudioConfig::operator=(AudioConfig &that)
        audio_out_driver = that.audio_out_driver;
        strcpy(oss_out_device, that.oss_out_device);
        strcpy(esound_out_server, that.esound_out_server);
+       strcpy(pulse_out_server, that.pulse_out_server);
        esound_out_port = that.esound_out_port;
        oss_out_channels = that.oss_out_channels;
        oss_out_bits = that.oss_out_bits;
@@ -103,6 +107,8 @@ int AudioConfig::load_defaults(BC_Hash *defaults)
        oss_in_bits =                 defaults->get("OSS_IN_BITS", 16);
        sprintf(esound_in_server, "");
                                      defaults->get("ESOUND_IN_SERVER", esound_in_server);
+       sprintf(pulse_in_server, "");
+                                     defaults->get("PULSE_IN_SERVER", pulse_in_server);
        esound_in_port =              defaults->get("ESOUND_IN_PORT", 0);
 
        audio_out_driver =                defaults->get("AUDIO_OUT_DRIVER", AUDIO_ALSA);
@@ -113,6 +119,8 @@ int AudioConfig::load_defaults(BC_Hash *defaults)
        oss_out_bits =                defaults->get("OUT_BITS", 16);
        sprintf(esound_out_server, "");
                                      defaults->get("ESOUND_OUT_SERVER", esound_out_server);
+       sprintf(pulse_out_server, "");
+                                     defaults->get("PULSE_OUT_SERVER", pulse_out_server);
        esound_out_port =             defaults->get("ESOUND_OUT_PORT", 0);
 
        audio_duplex_driver =         defaults->get("AUDIO_DUPLEX_DRIVER", AUDIO_ALSA);
@@ -135,6 +143,7 @@ int AudioConfig::save_defaults(BC_Hash *defaults)
        defaults->update("OSS_IN_CHANNELS", oss_in_channels);
        defaults->update("OSS_IN_BITS", oss_in_bits);
        defaults->update("ESOUND_IN_SERVER", esound_in_server);
+       defaults->update("PULSE_IN_SERVER", pulse_in_server);
        defaults->update("ESOUND_IN_PORT", esound_in_port);
 
        defaults->update("AUDIO_OUT_DRIVER", audio_out_driver);
@@ -143,6 +152,7 @@ int AudioConfig::save_defaults(BC_Hash *defaults)
        defaults->update("OUT_CHANNELS", oss_out_channels);
        defaults->update("OUT_BITS", oss_out_bits);
        defaults->update("ESOUND_OUT_SERVER", esound_out_server);
+       defaults->update("PULSE_OUT_SERVER", pulse_out_server);
        defaults->update("ESOUND_OUT_PORT", esound_out_port);
 
        defaults->update("AUDIO_DUPLEX_DRIVER", audio_duplex_driver);
index f8f8391..fb1fb79 100644 (file)
@@ -43,12 +43,14 @@ public:
        int oss_in_bits;
        int afirewire_in_port, afirewire_in_channel;
        char esound_in_server[1024];
+       char pulse_in_server[1024];
        int esound_in_port;
 
 // Output
        int audio_out_driver;
        char oss_out_device[1024];
        char esound_out_server[1024];
+       char pulse_out_server[1024];
        int esound_out_port;
        int oss_out_channels;
        int oss_out_bits;
index 956d4a1..0904ed5 100644 (file)
 #endif
 #include "audioalsa.h"
 #include "audiodvb.h"
-#include "audiov4l2mpeg.h"
 #include "audioesound.h"
 #include "audiooss.h"
+#include "audiopulse.h"
+#include "audiov4l2mpeg.h"
 #include "asset.h"
 #include "bctimer.h"
 #include "condition.h"
@@ -257,6 +258,12 @@ int AudioDevice::create_lowlevel(AudioLowLevel* &lowlevel, int driver,int in)
                        lowlevel = new AudioV4L2MPEG(this);
                        break;
 #endif
+
+#ifdef HAVE_PULSE
+               case AUDIO_PULSE:
+                       lowlevel = new AudioPulse(this);
+                       break;
+#endif
                }
        }
        return 0;
index ed39773..2c12d9c 100644 (file)
 
 #include "audioalsa.inc"
 #include "audioconfig.inc"
-#include "audiodvb.inc"
 #include "audiodevice.inc"
+#include "audiodvb.inc"
 #include "audioesound.inc"
 #include "audiooss.inc"
+#include "audiopulse.inc"
 #include "audiov4l2mpeg.inc"
 #include "bctimer.inc"
 #include "binary.h"
@@ -89,6 +90,7 @@ public:
        friend class AudioDVB;
        friend class AudioV4L2MPEG;
        friend class AudioOSS;
+       friend class AudioPulse;
        friend class AudioESound;
        friend class Audio1394;
        friend class VDevice1394;
index be99c05..fdfd948 100644 (file)
@@ -41,6 +41,7 @@ enum
        AUDIO_IEC61883,
        AUDIO_DVB,
        AUDIO_V4L2MPEG,
+       AUDIO_PULSE,
 };
 
 #define AUDIO_OSS_TITLE "OSS"
@@ -55,5 +56,6 @@ enum
 #endif
 #define AUDIO_DVB_TITLE "DVB"
 #define        AUDIO_V4L2MPEG_TITLE "V4L2 MPEG"
+#define AUDIO_PULSE_TITLE "Pulse Audio"
 
 #endif
index 2beb4c8..e4f2cd0 100644 (file)
@@ -375,11 +375,15 @@ void AudioDevice::run_output()
                output_buffer_t *obfr = &output[buffer_num];
                obfr->play_lock->lock("AudioDevice::run 1");
                if( !is_playing_back || playback_interrupted ) break;
-               if( obfr->last_buffer ) { lowlevel_out->flush_device(); break; }
+               if( obfr->last_buffer ) {
+                       if( lowlevel_out ) lowlevel_out->flush_device();
+                       break;
+               }
 // get size for position information
 // write converted buffer synchronously
                double bfr_time = obfr->bfr_time;
-               int result = lowlevel_out->write_buffer(obfr->buffer, obfr->size);
+               int result = !lowlevel_out ? -1 :
+                       lowlevel_out->write_buffer(obfr->buffer, obfr->size);
 // allow writing to the buffer
                obfr->arm_lock->unlock();
                if( !result ) {
diff --git a/cinelerra-5.1/cinelerra/audiopulse.C b/cinelerra-5.1/cinelerra/audiopulse.C
new file mode 100644 (file)
index 0000000..78db187
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * CINELERRA
+ * Copyright (C) 2008-2019 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
+ * 
+ */
+
+#ifdef HAVE_PULSE
+#include "audiopulse.h"
+#include "adeviceprefs.h"
+#include "bctimer.h"
+#include "cstrdup.h"
+#include "language.h"
+#include "mutex.h"
+#include "playbackconfig.h"
+#include "recordconfig.h"
+
+#include <pulse/pulseaudio.h>
+#include <pulse/simple.h>
+
+AudioPulse::AudioPulse(AudioDevice *device)
+ : AudioLowLevel(device)
+{
+       buffer_position = 0;
+       timer_position = 0;
+       timer = new Timer;
+       timer_lock = new Mutex("AudioPulse::timer_lock");
+       dsp_in = 0;
+       dsp_out = 0;
+       period_usecs = 1000000;
+       frag_usecs = period_usecs / 32;
+       wr_spec = 0;
+       rd_spec = 0;
+}
+
+AudioPulse::~AudioPulse()
+{
+       delete (pa_sample_spec *)wr_spec;
+       delete (pa_sample_spec *)rd_spec;
+       delete timer_lock;
+       delete timer;
+       close_all();
+}
+
+int AudioPulse::open_input()
+{
+       pa_sample_spec *ss = new pa_sample_spec();
+       rd_spec = (void *)ss;
+
+       ss->format = PA_SAMPLE_S16LE;
+       ss->rate = device->in_samplerate; 
+       ss->channels = device->get_ichannels();   
+       device->in_bits = 16;
+       return init_input();
+}
+
+int AudioPulse::init_input()
+{
+       pa_sample_spec *ss = (pa_sample_spec *)rd_spec;
+       int error = 0;
+       char *server = 0;
+       if( device->in_config->pulse_in_server[0] )
+               server = device->in_config->pulse_in_server;
+       dsp_in = pa_simple_new(server, PROGRAM_NAME, PA_STREAM_RECORD, 
+               0, "recording", ss, 0, 0, &error);
+       if( !dsp_in ) {
+               printf("AudioPulse::open_input %d: failed server=%s %s\n", __LINE__, 
+                       server, pa_strerror(error));
+               return 1;
+       }
+
+       return 0;
+}
+
+
+int AudioPulse::open_output()
+{
+       pa_sample_spec *ss = new pa_sample_spec();
+       wr_spec = (void *)ss;
+       ss->format = PA_SAMPLE_S16LE;
+       ss->rate = device->out_samplerate;
+       ss->channels = device->get_ochannels();
+       device->out_bits = 16;
+       return init_output();
+}
+
+int AudioPulse::init_output()
+{
+       pa_sample_spec *ss = (pa_sample_spec *)wr_spec;
+       int error = 0;
+       char *server = device->out_config->pulse_out_server[0] ?
+               device->out_config->pulse_out_server : 0;
+       dsp_out = pa_simple_new(server, PROGRAM_NAME, PA_STREAM_PLAYBACK, 
+               NULL, "playback", ss, 0, 0, &error);
+       if( !dsp_out ) {
+               printf("AudioPulse::open_output %d: failed server=%s %s\n", 
+                       __LINE__, server, pa_strerror(error));
+               return 1;
+       }
+       timer->update();
+       device->device_buffer = 0;
+       buffer_position = 0;
+       return 0;
+}
+
+
+int AudioPulse::close_all()
+{
+       if( dsp_out ) {
+               int error = 0;
+               pa_simple_flush((pa_simple*)dsp_out, &error);
+               pa_simple_free((pa_simple*)dsp_out);
+               dsp_out = 0;
+       }
+
+       if( dsp_in ) {
+               pa_simple_free((pa_simple*)dsp_in);
+               dsp_in = 0;
+       }
+       delete (pa_sample_spec *)wr_spec;  wr_spec = 0;
+       delete (pa_sample_spec *)rd_spec;  rd_spec = 0;
+       buffer_position = 0;
+       timer_position = 0;
+       return 0;
+}
+
+int64_t AudioPulse::device_position()
+{
+       timer_lock->lock("AudioPulse::device_position");
+       int64_t samples = timer->get_scaled_difference(device->out_samplerate);
+       int64_t result = timer_position + samples;
+       timer_lock->unlock();
+       return result;
+}
+
+int AudioPulse::write_buffer(char *buffer, int size)
+{
+       if( !dsp_out && init_output() )
+               return 1;
+       int error = 0;
+       timer_lock->lock("AudioPulse::write_buffer");
+       int64_t usecs = pa_simple_get_latency((pa_simple*)dsp_out, &error);
+       int64_t delay = device->out_samplerate * usecs / 1000000;
+       timer_position = buffer_position - delay;
+       timer->update();
+       timer_lock->unlock();
+
+       AudioThread *audio_out = device->audio_out;
+       int sample_size = (device->out_bits / 8) * device->get_ochannels();
+       int samples = device->out_samplerate * frag_usecs / 1000000;
+       int64_t frag_bytes = samples * sample_size;
+
+       buffer_position += size / sample_size;
+       int ret = 0;
+        while( !ret && size > 0 && !device->playback_interrupted ) {
+               audio_out->Thread::enable_cancel();
+               usecs = pa_simple_get_latency((pa_simple*)dsp_out, &error);
+               if( usecs < period_usecs ) {
+                       int64_t len = size;
+                       if( len > frag_bytes ) len = frag_bytes;
+                       if( pa_simple_write((pa_simple*)dsp_out, buffer, len, &error) < 0 )
+                               ret = 1;
+                       buffer += len;  size -= len;
+               }
+               else
+                       usleep(frag_usecs);
+               audio_out->Thread::disable_cancel();
+       }
+       if( ret )
+               printf("AudioPulse::write_buffer %d: %s\n", 
+                       __LINE__, pa_strerror(error));
+       return ret;
+}
+
+int AudioPulse::read_buffer(char *buffer, int size)
+{
+       if( !dsp_in && init_input() )
+               return 1;
+
+       int error = 0;
+       int result = pa_simple_read((pa_simple*)dsp_in, buffer, size, &error);
+       if( result < 0 ) {
+               printf("AudioPulse::read_buffer %d: %s\n", 
+                       __LINE__, pa_strerror(error));
+               return 1;
+       }
+
+//printf("AudioPulse::read_buffer %d %d\n", __LINE__, size);
+
+       return 0;
+}
+
+int AudioPulse::output_wait()
+{
+       int error = 0;
+       pa_usec_t latency = pa_simple_get_latency((pa_simple*)dsp_out, &error);
+       int64_t udelay = latency;
+        while( udelay > 0 && !device->playback_interrupted ) {
+                int64_t usecs = udelay;
+                if( usecs > 100000 ) usecs = 100000;
+                usleep(usecs);
+                udelay -= usecs;
+        }
+        if( device->playback_interrupted &&
+            !device->out_config->interrupt_workaround )
+               pa_simple_flush((pa_simple*)dsp_out, &error);
+        return 0;
+}
+
+int AudioPulse::flush_device()
+{
+       if( dsp_out ) {
+               output_wait();
+               int error = 0;
+               pa_simple_drain((pa_simple*)dsp_out, &error);
+       }
+       return 0;
+}
+
+int AudioPulse::interrupt_playback()
+{
+       if( !dsp_out ) {
+               return 1;
+       }
+
+       int error = 0;
+       int result = pa_simple_flush((pa_simple*)dsp_out, &error);
+       if( result < 0 ) {
+               printf("AudioPulse::interrupt_playback %d: %s\n", 
+                       __LINE__,
+                       pa_strerror(error));
+               return 1;
+       }
+
+       return 0;
+}
+
+#endif
diff --git a/cinelerra-5.1/cinelerra/audiopulse.h b/cinelerra-5.1/cinelerra/audiopulse.h
new file mode 100644 (file)
index 0000000..1739c25
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * CINELERRA
+ * Copyright (C) 2008-2019 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 AUDIOPULSE_H
+#define AUDIOPULSE_H
+
+#include "arraylist.h"
+#include "audiodevice.h"
+#include "bctimer.inc"
+
+
+class AudioPulse : public AudioLowLevel
+{
+public:
+       AudioPulse(AudioDevice *device);
+       ~AudioPulse();
+    
+       int open_input();
+       int init_input();
+       int open_output();
+       int init_output();
+       int close_all();
+       int64_t device_position();
+       int write_buffer(char *buffer, int size);
+       int read_buffer(char *buffer, int size);
+       int output_wait();
+       int flush_device();
+       int interrupt_playback();
+
+// the pulse audio handles
+       void *dsp_out;
+       void *dsp_in;
+       void *wr_spec;
+       void *rd_spec;
+
+       int64_t buffer_position;
+       int64_t timer_position;
+       int64_t frag_usecs, period_usecs;
+       Timer *timer;
+       Mutex *timer_lock;
+
+       int64_t samples_output() { return buffer_position; }
+};
+
+#endif
diff --git a/cinelerra-5.1/cinelerra/audiopulse.inc b/cinelerra-5.1/cinelerra/audiopulse.inc
new file mode 100644 (file)
index 0000000..c0b3865
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * CINELERRA
+ * Copyright (C) 2008-2019 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 AUDIOPULSE_INC
+#define AUDIOPULSE_INC
+
+
+
+
+class AudioPulse;
+
+
+
+#endif
index a3ceb1d..6742988 100644 (file)
@@ -23,6 +23,5 @@
 #define CWINDOW_INC
 
 class CWindow;
-class KeyEvCWindowHandler;
 
 #endif
index e0c40b9..2011bcf 100644 (file)
@@ -213,7 +213,7 @@ int EditPopupCutPack::handle_event()
 }
 
 EditPopupMute::EditPopupMute(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem(_("Mute"),_("Ctrl-m"),'m')
+ : BC_MenuItem(C_("Mute"),_("Ctrl-m"),'m')
 {
        this->mwindow = mwindow;
        this->popup = popup;
index 3c6fd97..87b8853 100644 (file)
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#ifdef HAVE_ISOFS
 #include <linux/iso_fs.h>
+#endif
 
 // check for isofs volume_id for dvd/cdrom
 
 static int udf_volume_id(const char *path, char *fname)
 {
+       int result = 1;
+#ifdef HAVE_ISOFS
        struct stat st;
        if( stat(path,&st) ) return 1;
        // search mounted devices
        FILE *fp = fopen("/proc/mounts","r");
        if( !fp ) return 1;
 
-       int result = 1;
        while( result && !feof(fp) && !ferror(fp) ) {
                char devpath[BCTEXTLEN], mpath[BCTEXTLEN];
                char options[BCTEXTLEN], line[BCTEXTLEN];
@@ -122,6 +125,7 @@ static int udf_volume_id(const char *path, char *fname)
        }
 
        fclose(fp);
+#endif
        return result;
 }
 
index 5862b94..a21297e 100644 (file)
@@ -243,16 +243,20 @@ void MainSession::default_window_positions(int window_config)
                case 1024: right_w = 1280;  break;
                case 1200: right_w = 1600;  break;
                case 1080: right_w = 1920;  break;
-               default:   right_w = root_w/2;  break;
+               default:
+                       dual_head = 0;
+                       break;
                }
-               if( window_config == 1 ) {
-                       root_x = root_w - right_w;
-                       root_w = right_w;
-               }
-               else {
-                       // use same aspect ratio to compute left height
-                       root_w -= right_w;
-                       root_h = (root_w*root_h) / right_w;
+               if( dual_head ) {
+                       if( window_config == 1 ) {
+                               root_x = root_w - right_w;
+                               root_w = right_w;
+                       }
+                       else {
+                               // use same aspect ratio to compute left height
+                               root_w -= right_w;
+                               root_h = (root_w*root_h) / right_w;
+                       }
                }
        }
 
index 988e49a..c959af2 100644 (file)
@@ -268,7 +268,9 @@ MWindow::~MWindow()
        delete beeper;
        delete create_bd;       create_bd = 0;
        delete create_dvd;      create_dvd = 0;
+#ifdef HAVE_SHUTTLE
        delete shuttle;         shuttle = 0;
+#endif
 #ifdef HAVE_WINTV
        delete wintv;           wintv = 0;
 #endif
@@ -675,6 +677,7 @@ int MWindow::init_plugins(MWindow *mwindow, Preferences *preferences)
 
 int MWindow::init_ladspa_plugins(MWindow *mwindow, Preferences *preferences)
 {
+#ifdef HAVE_LADSPA
        char *path = getenv("LADSPA_PATH");
        char ladspa_path[BCTEXTLEN];
        if( !path ) {
@@ -719,6 +722,7 @@ int MWindow::init_ladspa_plugins(MWindow *mwindow, Preferences *preferences)
                }
                fclose(fp);
        }
+#endif
        return 1;
 }
 
@@ -742,7 +746,7 @@ void MWindow::scan_plugin_index(MWindow *mwindow, Preferences *preferences, FILE
        char plugin_path[BCTEXTLEN];
        sprintf(plugin_path, "%s/%s", plug_dir, plug_path);
        FileSystem fs;
-       fs.set_filter( "[*.plugin][*.so]" );
+       fs.set_filter( "[*.plugin][*.so][*.dll]" );
        int result = fs.update(plugin_path);
        if( result || !fs.dir_list.total ) return;
        int vis_id = idx++;
index 22fee71..24976c5 100644 (file)
@@ -30,10 +30,13 @@ AudioOutConfig::AudioOutConfig()
        fragment_size = 16384;
 #ifdef HAVE_ALSA
        driver = AUDIO_ALSA;
+#else
+#ifdef HAVE_PULSE
+       driver = AUDIO_PULSE;
 #else
        driver = AUDIO_OSS;
 #endif
-
+#endif
        audio_offset = 0.0;
        map51_2 = 0;
        play_gain = 1.0;
@@ -48,6 +51,8 @@ AudioOutConfig::AudioOutConfig()
        esound_out_server[0] = 0;
        esound_out_port = 0;
 
+       pulse_out_server[0] = 0;
+
        sprintf(alsa_out_device, "default");
        alsa_out_bits = 16;
        interrupt_workaround = 0;
@@ -85,12 +90,10 @@ int AudioOutConfig::operator==(AudioOutConfig &that)
                !strcmp(oss_out_device[0], that.oss_out_device[0]) &&
                (oss_out_bits == that.oss_out_bits) &&
 
-
-
                !strcmp(esound_out_server, that.esound_out_server) &&
                (esound_out_port == that.esound_out_port) &&
 
-
+               !strcmp(pulse_out_server, that.pulse_out_server) &&
 
                !strcmp(alsa_out_device, that.alsa_out_device) &&
                (alsa_out_bits == that.alsa_out_bits) &&
@@ -126,6 +129,9 @@ void AudioOutConfig::copy_from(AudioOutConfig *src)
 
        strcpy(esound_out_server, src->esound_out_server);
        esound_out_port = src->esound_out_port;
+
+       strcpy(pulse_out_server, src->pulse_out_server);
+
        for(int i = 0; i < MAXDEVICES; i++)
        {
                oss_enable[i] = src->oss_enable[i];
@@ -171,8 +177,11 @@ int AudioOutConfig::load_defaults(BC_Hash *defaults, int active_config)
        interrupt_workaround = defaults->getf(interrupt_workaround, "%sALSA_INTERRUPT_WORKAROUND", prefix);
 
        defaults->getf(esound_out_server, "%sESOUND_OUT_SERVER", prefix);
+       defaults->getf(pulse_out_server, "%sPULSE_OUT_SERVER", prefix);
        esound_out_port = defaults->getf(esound_out_port, "%sESOUND_OUT_PORT", prefix);
 
+       defaults->getf(pulse_out_server, "%sPULSE_OUT_SERVER", prefix);
+
        firewire_channel = defaults->getf(firewire_channel, "%sAFIREWIRE_OUT_CHANNEL", prefix);
        firewire_port = defaults->getf(firewire_port, "%sAFIREWIRE_OUT_PORT", prefix);
        defaults->getf(firewire_path, "%sAFIREWIRE_OUT_PATH", prefix);
@@ -211,8 +220,11 @@ int AudioOutConfig::save_defaults(BC_Hash *defaults, int active_config)
        defaults->updatef(interrupt_workaround, "%sALSA_INTERRUPT_WORKAROUND", prefix);
 
        defaults->updatef(esound_out_server, "%sESOUND_OUT_SERVER", prefix);
+       defaults->updatef(pulse_out_server, "%sPULSE_OUT_SERVER", prefix);
        defaults->updatef(esound_out_port, "%sESOUND_OUT_PORT", prefix);
 
+       defaults->updatef(pulse_out_server, "%sPULSE_OUT_SERVER", prefix);
+
        defaults->updatef(firewire_channel, "%sAFIREWIRE_OUT_CHANNEL", prefix);
        defaults->updatef(firewire_port, "%sAFIREWIRE_OUT_PORT", prefix);
        defaults->updatef(firewire_path, "%sAFIREWIRE_OUT_PATH", prefix);
index 1896a5d..c4a83d3 100644 (file)
@@ -58,7 +58,8 @@ public:
 
        char esound_out_server[BCTEXTLEN];
        int esound_out_port;
-
+// PulseAudio
+       char pulse_out_server[BCTEXTLEN];
 // ALSA options
        char alsa_out_device[BCTEXTLEN];
        int alsa_out_bits;
index 2ea355b..749a5e6 100644 (file)
@@ -48,7 +48,7 @@ AudioInConfig::AudioInConfig()
        strcpy(firewire_path, "/dev/raw1394");
        esound_in_server[0] = 0;
        esound_in_port = 0;
-
+       pulse_in_server[0] = 0;
        sprintf(alsa_in_device, "default");
        alsa_in_bits = 16;
        in_samplerate = 48000;
@@ -100,6 +100,8 @@ void AudioInConfig::copy_from(AudioInConfig *src)
        strcpy(esound_in_server, src->esound_in_server);
        esound_in_port = src->esound_in_port;
 
+       strcpy(pulse_in_server, src->pulse_in_server);
+
        for(int i = 0; i < MAXDEVICES; i++)
        {
                oss_enable[i] = src->oss_enable[i];
@@ -139,8 +141,9 @@ int AudioInConfig::load_defaults(BC_Hash *defaults)
        }
        oss_in_bits = defaults->get("R_OSS_IN_BITS", oss_in_bits);
        defaults->get("R_ESOUND_IN_SERVER", esound_in_server);
+       defaults->get("R_PULSE_IN_SERVER", pulse_in_server);
        esound_in_port = defaults->get("R_ESOUND_IN_PORT", esound_in_port);
-
+       defaults->get("R_PULSE_IN_SERVER", pulse_in_server);
        defaults->get("R_ALSA_IN_DEVICE", alsa_in_device);
        alsa_in_bits = defaults->get("R_ALSA_IN_BITS", alsa_in_bits);
        in_samplerate = defaults->get("R_IN_SAMPLERATE", in_samplerate);
@@ -170,8 +173,9 @@ int AudioInConfig::save_defaults(BC_Hash *defaults)
 
        defaults->update("R_OSS_IN_BITS", oss_in_bits);
        defaults->update("R_ESOUND_IN_SERVER", esound_in_server);
+       defaults->update("R_PULSE_IN_SERVER", pulse_in_server);
        defaults->update("R_ESOUND_IN_PORT", esound_in_port);
-
+       defaults->update("R_PULSE_IN_SERVER", pulse_in_server);
        defaults->update("R_ALSA_IN_DEVICE", alsa_in_device);
        defaults->update("R_ALSA_IN_BITS", alsa_in_bits);
        defaults->update("R_IN_SAMPLERATE", in_samplerate);
index c650c00..54f031b 100644 (file)
@@ -54,6 +54,7 @@ public:
 
        char esound_in_server[BCTEXTLEN];
        int esound_in_port;
+       char pulse_in_server[BCTEXTLEN];
        char alsa_in_device[BCTEXTLEN];
        int alsa_in_bits;
        char dvb_in_adapter[BCTEXTLEN];
index e22d28e..a4749bb 100644 (file)
@@ -24,7 +24,8 @@
 // An object which contains samples
 
 
-
+#include "bcresources.h"
+#include "bcwindowbase.h"
 #include "samples.h"
 #include <stdio.h>
 #include <sys/shm.h>
@@ -46,8 +47,15 @@ Samples::Samples(int samples)
 Samples::Samples(Samples *src)
 {
        reset();
-       share(src->get_shmid());
-       set_allocated(src->get_allocated());
+       int src_sz = src->get_allocated();
+       if( use_shm ) {
+               share(src->get_shmid());
+               set_allocated(src_sz);
+       }
+       else {
+               share(src->data);
+               set_allocated(0);
+       }
        set_offset(src->get_offset());
 }
 
@@ -58,7 +66,8 @@ Samples::~Samples()
 
 void Samples::reset()
 {
-       use_shm = 1;
+       BC_Resources *resources = BC_WindowBase::get_resources();
+       use_shm = !resources || !resources->use_shm ? 0 : 1;
        shmid = -1;
        data = 0;
        allocated = 0;
@@ -71,7 +80,7 @@ void Samples::clear_objects()
        {
                if(data) shmdt(data);
        }
-       else
+       else if( allocated )
        {
                delete [] data;
        }
@@ -95,16 +104,31 @@ void Samples::share(int shmid)
        this->allocated = 0;
        this->shmid = shmid;
 }
+void Samples::share(double *buffer)
+{
+       if(data)
+       {
+               if(use_shm)
+                       shmdt(data);
+               else
+                       delete [] data;
+       }
+       this->use_shm = 0;
+       data = buffer;
+       this->allocated = 0;
+       this->shmid = -1;
+}
+
 
 void Samples::allocate(int samples, int use_shm)
 {
-       if(data &&
+       if( !this->use_shm ) use_shm = 0;
+       if( data &&
                this->allocated >= samples &&
-               this->use_shm == use_shm) return;
+               this->use_shm == use_shm ) return;
 
-       if(data)
-       {
-               if(this->use_shm)
+       if( data ) {
+               if( this->use_shm )
                        shmdt(data);
                else
                        delete [] data;
@@ -112,8 +136,7 @@ void Samples::allocate(int samples, int use_shm)
 
        this->use_shm = use_shm;
 
-       if(use_shm)
-       {
+       if( use_shm ) {
                shmid = shmget(IPC_PRIVATE,
                        (samples + 1) * sizeof(double),
                        IPC_CREAT | 0777);
@@ -121,18 +144,12 @@ void Samples::allocate(int samples, int use_shm)
        // This causes it to automatically delete when the program exits.
                shmctl(shmid, IPC_RMID, 0);
        }
-       else
-       {
+       else {
                shmid = -1;
                data = new double[samples];
        }
 
-
        this->allocated = samples;
-
-
-
-
 }
 
 // Get the buffer
index dc19756..a6cf599 100644 (file)
@@ -41,6 +41,7 @@ public:
        void reset();
        void clear_objects();
        void share(int shmid);
+       void share(double *buffer);
        void allocate(int samples, int use_shm);
 // Get the buffer
        double* get_data();
index 6793a03..06406d5 100644 (file)
@@ -1,5 +1,6 @@
 #ifndef __SHUTTLE_H__
 #define __SHUTTLE_H__
+#ifdef HAVE_SHUTTLE
 
 #include "arraylist.h"
 #include "bcwindowbase.inc"
@@ -20,8 +21,7 @@
 // delay in ms before processing each XTest event
 // CurrentTime means no delay
 #define DELAY CurrentTime
-// playback max speed -64x .. 64x
-#define SHUTTLE_MAX_SPEED 64.
+
 #define SHUTTLE_INTERFACE 0
 
 // protocol for events from the shuttlepro HUD device
@@ -257,3 +257,4 @@ public:
 };
 
 #endif
+#endif
index 5919e9d..db6b37f 100644 (file)
@@ -9,4 +9,7 @@ class Translation;
 class Translations;
 class Shuttle;
 
+// playback max speed -64x .. 64x
+#define SHUTTLE_MAX_SPEED 64.
+
 #endif
index 770556c..289ae26 100644 (file)
@@ -841,8 +841,11 @@ void SWindowGUI::save_spumux_data()
                if( !track->record ) continue;
                char *cp = track_title, *ep = cp+sizeof(track_title)-6;
                for( const char *bp=track->title; cp<ep && *bp!=0; ) {
-                       int b = butf8(bp), c = !iswalnum(b) ? '_' : b;
-                       butf8(c, cp);
+                       int wch = butf8(bp); // iswalnum(wch) broken by MS port
+                       if( !( (wch >= 'A' && wch <= 'Z') ||
+                              (wch >= 'a' && wch <= 'z') ||
+                              (wch >= '0' && wch <= '9') ) ) wch = '_';
+                       butf8(wch, cp);
                }
                *cp = 0;
                snprintf(ext,len,"-%s.udvd",track_title);
index 2ac5ccc..88e07d8 100644 (file)
@@ -1896,6 +1896,8 @@ void TrackCanvas::draw_hard_edges()
                for(Edit *edit = track->edits->first; edit; edit = edit->next) {
                        if( !edit->hard_left && !edit->hard_right ) continue;
                        edit_dimensions(edit, x, y, w, h);
+                       if( !MWindowGUI::visible(x, x + w, 0, get_w()) ||
+                           !MWindowGUI::visible(y, y + h, 0, get_h()) ) continue;
                        set_color(GREEN);
                        set_opaque();
                        int y1 = y;
index fbd9697..3245c16 100644 (file)
@@ -515,7 +515,9 @@ void VDriverMenu::create_objects()
        else
        {
                add_item(new VDriverItem(this, PLAYBACK_X11_TITLE, PLAYBACK_X11));
+#ifdef HAVE_XV
                add_item(new VDriverItem(this, PLAYBACK_X11_XV_TITLE, PLAYBACK_X11_XV));
+#endif
 #ifdef HAVE_GL
 // Check runtime glx version. pbuffer needs >= 1.3
                if(get_opengl_server_version() >= 103)
index 599a835..b0c4e77 100644 (file)
@@ -29,8 +29,6 @@ CFG_CFLAGS+=" -I/usr/include/freetype2 -I/usr/local/include/freetype2"
 CFG_CFLAGS+=" -I/usr/include/uuid -I/usr/local/include/uuid"
 CFG_CFLAGS+=" -I/usr/include/mjpegtools -I/usr/local/include/mjpegtools"
 
-CFG_LDFLAGS+=" -z noexecstack"
-
 AC_DEFUN([CHECK_WITH], [
 AC_ARG_WITH([$1],
   AC_HELP_STRING([--with-[$1]], [$2 ($4)]),
@@ -41,12 +39,12 @@ AC_SUBST([WANT_$3])
 CHECK_WITH([jobs],[parallel build jobs],[JOBS],[auto])
 CHECK_WITH([exec-name],[binary executable name],[CIN],[cin])
 CHECK_WITH([single-user],[to install cin in bin],[CINBIN_BUILD],[no])
-CHECK_WITH([ladspa-build],[build ladspa library],[LADSPA_BUILD],[yes])
 CHECK_WITH([lv2],[lv2 library support],[LV2],[yes])
 CHECK_WITH([cinlib],[cinelerra library path],[CINLIB_DIR],[auto])
 CHECK_WITH([cindat],[cinelerra share path],[CINDAT_DIR],[auto])
 CHECK_WITH([plugin-dir],[plugin install dir],[PLUGIN_DIR],[auto])
 CHECK_WITH([ladspa-dir],[ladspa install dir],[LADSPA_DIR],[auto])
+CHECK_WITH([ladspa-build],[build ladspa library],[LADSPA_BUILD],[yes])
 CHECK_WITH([config-dir],[.bcast config dir],[CONFIG_DIR],[$$HOME/.bcast5])
 CHECK_WITH([nested-dir],[nested proxy dir],[NESTED_DIR],[$$HOME/Videos])
 CHECK_WITH([snap-dir],[snapshot/grabshot dir],[SNAP_DIR],[$$HOME/Pictures])
@@ -538,8 +536,6 @@ CHECK_LIB([XEXT], [Xext], [XShmQueryExtension])
 CHECK_HEADERS([XEXT], [Xlib XShm extention], [X11/Xlib.h X11/extensions/XShm.h X11/extensions/shape.h])
 CHECK_LIB([XINERAMA], [Xinerama], [XineramaQueryExtension])
 CHECK_HEADERS([XINERAMA], [Xinerama headers], [X11/extensions/Xinerama.h])
-CHECK_LIB([XV], [Xv], [XvQueryExtension])
-CHECK_HEADERS([XV], [Xlib Xv extention], [X11/Xlib.h X11/extensions/Xvlib.h])
 CHECK_LIB([XFIXES], [Xfixes], [XFixesQueryVersion])
 CHECK_LIB([BZ2], [bz2], [BZ2_bzDecompress])
 CHECK_LIB([FONTCONFIG], [fontconfig], [FcInit])
@@ -650,6 +646,10 @@ CHECK_WANT([GL], [auto], [use opengl], [
  CHECK_LIB([GL], [GLU], [gluOrtho2D])
  CHECK_HEADERS([GL], [opengl headers], [GL/gl.h GL/glext.h GL/glu.h GL/glx.h])])
 
+CHECK_WANT([XV], [auto], [use xv], [
+ CHECK_LIB([xv], [Xv], [XvQueryExtension])
+ CHECK_HEADERS([xv], [Xlib Xv extention], [X11/Xlib.h X11/extensions/Xvlib.h])])
+
 CHECK_WANT([OSS], [auto], [use OSS audio], [
  CHECK_HEADERS([OSS], [oss headers], [sys/soundcard.h])])
 
@@ -690,6 +690,22 @@ CHECK_WANT([ESOUND], [no], [use esd], [
  CHECK_LIB([audiofile], [audiofile], [afOpenFile])
  CHECK_HEADERS([audiofile], [audiofile headers], [audiofile.h])])
 
+CHECK_WANT([PULSE], [auto], [use pulseaudio], [
+ CHECK_LIB([pulse_simple], [pulse-simple], [pa_simple_new])
+ CHECK_HEADERS([pulse_simple], [pulse-simple headers], [pulse/simple.h])
+ CHECK_LIB([pulse], [pulse], [pa_context_new])
+ CHECK_HEADERS([pulse], [pulse headers], [pulse/error.h])])
+
+CHECK_WANT([ISOFS], [auto], [use isofs], [
+ CHECK_HEADERS([isofs], [isofs headers], [linux/isofs.h])])
+
+if test "x$WANT_LADSPA_BUILD" != "xyes" ; then
+ CHECK_WANT([LADSPA], [auto], [ladspa plugin clients], [
+  CHECK_HEADERS([ladspa], [ladspa headers], [ladspa.h])])
+else
+ WANT_LADSPA=yes
+fi
+
 CHECK_WANT([SHUTTLE], [yes], [shuttle dev support], [
  CHECK_HEADERS([keysyms], [x11 keysym defs], [X11/keysymdef.h])])
 if test "x$WANT_SHUTTLE" = "xno"; then
@@ -888,9 +904,9 @@ echo ""
 if test "x$WANT_CIN_3RDPARTY" != "xno"; then
   CFG_CFLAGS+=" -DHAVE_CIN_3RDPARTY"
 fi
-for v in GL XFT XXF86VM OSS ALSA FIREWIRE DV DVB \
-        VIDEO4LINUX2 ESOUND PACTL OPENEXR LV2 \
-        COMMERCIAL LIBZMPEG SHUTTLE SHUTTLE_USB \
+for v in GL XFT XXF86VM OSS ALSA FIREWIRE DV DVB LADSPA \
+        VIDEO4LINUX2 ESOUND PULSE PACTL OPENEXR LV2 \
+        COMMERCIAL LIBZMPEG SHUTTLE SHUTTLE_USB XV \
         VAAPI VDPAU CUDA NV WINTV X10TV; do
   eval vv="\$WANT_$v"
   if test "x$vv" != "xno"; then
@@ -1071,6 +1087,22 @@ if test "x$CFG_LDFLAGS" != "x" ; then
   echo ""
 fi
 
+if test "x$CYGWIN" != "x" ; then
+  echo 'FF_DIR ?= /usr/local'
+  echo 'CFLAGS += -I$(FF_DIR)/include'
+  echo 'LDFLAGS += -L$(FF_DIR)/lib'
+  echo ""
+  echo "CFLAGS += -DNO_BTRACE"
+  echo "CFLAGS += -DNO_GDB"
+  echo "CFLAGS += -DNO_CTX"
+  echo "CFLAGS += -DNO_PRCTL"
+  echo "CFLAGS += -DNO_TID"
+  echo "CFLAGS += -DNO_XSELECT"
+  echo ""
+else
+  LDFLAGS+=" -z noexecstack"
+fi
+
 if test "x$WANT_X264_HIDEPTH" = "xyes" ; then
   X264_CFG_PARAMS="$X264_CFG_PARAMS --bit-depth=10"
 fi
@@ -1153,3 +1185,4 @@ fi
 if test "x$X265_CFG_PARAMS" != "x" ; then
   echo "x265.cfg_params :=$X265_CFG_PARAMS -DENABLE_SHARED=no"
 fi
+
index 2d8b621..81842bb 100644 (file)
 
 #include <string.h>
 #include <unistd.h>
+
+#ifdef HAVE_XV
 #include <X11/extensions/Xvlib.h>
+#endif
 
 int BC_Bitmap::max_active_buffers = 0;
 int BC_Bitmap::zombies = 0;
@@ -124,6 +127,8 @@ void BC_Bitmap::reque(BC_BitmapImage *bfr)
        avail_lock->unlock();
 }
 
+
+#ifdef HAVE_XV
 BC_XvShmImage::BC_XvShmImage(BC_Bitmap *bitmap, int index,
        int w, int h, int color_model)
  : BC_BitmapImage(bitmap, index)
@@ -166,6 +171,7 @@ BC_XvShmImage::~BC_XvShmImage()
        XShmDetach(top_level->display, &shm_info);
        shmdt(shm_info.shmaddr);
 }
+#endif
 
 
 BC_XShmImage::BC_XShmImage(BC_Bitmap *bitmap, int index,
@@ -211,6 +217,7 @@ BC_XShmImage::~BC_XShmImage()
 
 
 
+#ifdef HAVE_XV
 BC_XvImage::BC_XvImage(BC_Bitmap *bitmap, int index,
        int w, int h, int color_model)
  : BC_BitmapImage(bitmap, index)
@@ -237,6 +244,7 @@ BC_XvImage::~BC_XvImage()
 {
        XFree(xv_image);
 }
+#endif
 
 
 BC_XImage::BC_XImage(BC_Bitmap *bitmap, int index,
@@ -371,13 +379,16 @@ BC_BitmapImage *BC_Bitmap::new_buffer(int type, int idx)
        BC_BitmapImage *buffer = 0;
        if( idx < 0 ) {
                if( type == bmXShmImage ) type = bmXImage;
+#ifdef HAVE_XV
                else if( type ==  bmXvShmImage ) type = bmXvImage;
+#endif
        }
        switch( type ) {
        default:
        case bmXImage:
                buffer = new BC_XImage(this, idx, w, h, color_model);
                break;
+#ifdef HAVE_XV
        case bmXvImage:
                buffer = new BC_XvImage(this, idx, w, h, color_model);
                break;
@@ -387,6 +398,7 @@ BC_BitmapImage *BC_Bitmap::new_buffer(int type, int idx)
        case bmXvShmImage:
                buffer = new BC_XvShmImage(this, idx, w, h, color_model);
                break;
+#endif
        }
        if( buffer->is_zombie() ) ++zombies;
        return buffer;
@@ -445,11 +457,19 @@ int BC_Bitmap::allocate_data()
                else if( bsz >= 0x400000 ) max_buffer_count /= 8;
                else if( bsz >= 0x100000 ) max_buffer_count /= 4;
                else if( bsz >= 0x10000 ) max_buffer_count /= 2;
-               type = hardware_scaling() ? bmXvShmImage : bmXShmImage;
+               type =
+#ifdef HAVE_XV
+                       hardware_scaling() ? bmXvShmImage :
+#endif
+                       bmXShmImage;
                count = MIN_BITMAP_BUFFERS;
        }
        else // use unshared memory.
-               type = hardware_scaling() ? bmXvImage : bmXImage;
+               type =
+#ifdef HAVE_XV
+                       hardware_scaling() ? bmXvImage :
+#endif
+                       bmXImage;
        update_buffers(count);
        return 0;
 }
@@ -531,6 +551,7 @@ int BC_XShmImage::write_drawable(Drawable &pixmap, GC &gc,
        return 0;
 }
 
+#ifdef HAVE_XV
 int BC_XvImage::write_drawable(Drawable &pixmap, GC &gc,
        int source_x, int source_y, int source_w, int source_h,
        int dest_x, int dest_y, int dest_w, int dest_h)
@@ -552,6 +573,7 @@ int BC_XvShmImage::write_drawable(Drawable &pixmap, GC &gc,
                dest_x, dest_y, dest_w, dest_h, bitmap->shm_reply);
        return 0;
 }
+#endif
 
 int BC_Bitmap::write_drawable(Drawable &pixmap, GC &gc,
                int source_x, int source_y, int source_w, int source_h,
index f065000..95b5868 100644 (file)
 #include <sys/ipc.h>
 #include <sys/shm.h>
 #include <X11/extensions/XShm.h>
+#ifdef HAVE_XV
 #include <X11/extensions/Xvlib.h>
+#else
+typedef struct _XvImage XvImage;
+#endif
 
 #include "bcwindowbase.inc"
 #include "bcbitmap.inc"
@@ -58,8 +62,10 @@ class BC_BitmapImage : public ListItem<BC_BitmapImage> {
        friend class BC_Bitmap;
        friend class BC_XImage;
        friend class BC_XShmImage;
+#ifdef HAVE_XV
        friend class BC_XvImage;
        friend class BC_XvShmImage;
+#endif
        friend class BC_ActiveBitmaps;
 protected:
        int read_frame_rgb(VFrame* frame);
@@ -122,6 +128,7 @@ public:
        int read_drawable(Drawable &pixmap, int source_x, int source_y);
 };
 
+#ifdef HAVE_XV
 class BC_XvImage : public BC_BitmapImage {
        long xv_offset(int i) { return xv_image->offsets[i]; }
        unsigned char* xv_plane(int i) { return get_data() + xv_offset(i); }
@@ -151,15 +158,17 @@ public:
                int source_x, int source_y, int source_w, int source_h,
                int dest_x, int dest_y, int dest_w, int dest_h);
 };
-
+#endif
 
 
 class BC_Bitmap
 {
        friend class BC_XImage;
        friend class BC_XShmImage;
+#ifdef HAVE_XV
        friend class BC_XvImage;
        friend class BC_XvShmImage;
+#endif
        friend class BC_BitmapImage;
        friend class BC_ActiveBitmaps;
        int buffer_count, max_buffer_count;
index aa3b2f0..7fa70fc 100644 (file)
@@ -113,18 +113,24 @@ void BC_Clipboard::run()
        XEvent event;
        int done = 0;
 #ifndef SINGLE_THREAD
+#ifndef NO_XSELECT
        int x_fd = ConnectionNumber(out_display);
+#endif
 #endif
 
        while(!done) {
 #ifndef SINGLE_THREAD
 // see bcwindowevents.C regarding XNextEvent
+#ifndef NO_XSELECT
                fd_set x_fds;
                FD_ZERO(&x_fds);
                FD_SET(x_fd, &x_fds);
                struct timeval tv;
                tv.tv_sec = 0;  tv.tv_usec = 200000;
                select(x_fd + 1, &x_fds, 0, 0, &tv);
+#else
+               usleep(100000);
+#endif
                XLockDisplay(out_display);
 
                while( XPending(out_display) ) {
index c68e39a..ffc8a1c 100644 (file)
 #include "bckeyboard.h"
 #include "bcresources.h"
 #include "cstrdup.h"
+#include "filesystem.h"
 
 #include <ctype.h>
 #include <dirent.h>
+#ifndef NO_BTRACE
 #include <execinfo.h>
+#endif
 #include <fcntl.h>
 #include <pwd.h>
 #include <stdio.h>
@@ -37,7 +40,9 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include <sys/ioctl.h>
+#ifndef NO_PRCTL
 #include <sys/prctl.h>
+#endif
 #include <sys/types.h>
 
 BC_Signals* BC_Signals::global_signals = 0;
@@ -182,6 +187,7 @@ static const char* signal_titles[] =
 
 void BC_Signals::dump_stack(FILE *fp)
 {
+#ifndef NO_BTRACE
        void *buffer[256];
        int total = backtrace (buffer, 256);
        char **result = backtrace_symbols (buffer, total);
@@ -190,6 +196,7 @@ void BC_Signals::dump_stack(FILE *fp)
        {
                fprintf(fp, "%s\n", result[i]);
        }
+#endif
 }
 
 // Kill subprocesses
@@ -270,15 +277,18 @@ static void signal_entry_recoverable(int signum)
                getpid());
 }
 
+#ifndef NO_PRCTL
 // used to terminate child processes when program terminates
 static void handle_exit(int signum)
 {
 //printf("child %d exit\n", getpid());
        exit(0);
 }
+#endif
 
 void BC_Signals::set_sighup_exit(int enable)
 {
+#ifndef NO_PRCTL
        if( enable ) {
 // causes SIGHUP to be generated when parent dies
                signal(SIGHUP, handle_exit);
@@ -291,6 +301,7 @@ void BC_Signals::set_sighup_exit(int enable)
                signal(SIGHUP, signal_entry);
                prctl(PR_SET_PDEATHSIG, 0,0,0,0);
        }
+#endif
 }
 
 BC_Signals::BC_Signals()
@@ -379,6 +390,7 @@ const char* BC_Signals::sig_to_str(int number)
 }
 
 
+#ifndef NO_CTX
 #include <ucontext.h>
 #include <sys/wait.h>
 #include "thread.h"
@@ -463,6 +475,8 @@ static void reg_dump(FILE *fp,sigregs_t *rp) {}
 #error gotta have IP
 #endif
 
+// HAVE_CTX
+#endif
 
 static void handle_dump(int n, siginfo_t * info, void *sc)
 {
@@ -474,13 +488,16 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
 // it is not necessary to be root if ptrace is allowed via:
 // echo 0 > /proc/sys/kernel/yama/ptrace_scope (usually set to 1)
 //     if( uid != 0 ) return;
-       ucontext_t *uc = (ucontext_t *)sc;
        int pid = getpid(), tid = gettid();
+       void *ip = 0;
+#ifndef NO_CTX
+       ucontext_t *uc = (ucontext_t *)sc;
        struct sigregs_t *c = (struct sigregs_t *)&uc->uc_mcontext;
-       uint8_t *ip = (uint8_t *)c->IP;
+       ip = (void *)c->IP;
+#endif
        fprintf(stderr,"** %s at %p in pid %d, tid %d\n",
                n==SIGSEGV? "segv" : n==SIGINT? "intr" : "trap",
-               (void*)ip, pid, tid);
+               ip, pid, tid);
        FILE *fp = 0;
        char fn[PATH_MAX];
        if( BC_Signals::trap_path ) {
@@ -491,7 +508,7 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
                fprintf(stderr,"writing debug data to %s\n", fn);
                fprintf(fp,"** %s at %p in pid %d, tid %d\n",
                        n==SIGSEGV? "segv" : n==SIGINT? "intr" : "trap",
-                       (void*)c->IP, pid, tid);
+                       ip, pid, tid);
        }
        else {
                strcpy(fn, "stdout");
@@ -521,6 +538,7 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
        fprintf(fp,"\nSTATUS:\n");   bc_copy_textfile(INT_MAX, fp,"/proc/%d/status",pid);
        fprintf(fp,"\nFD:\n");       bc_list_openfiles(INT_MAX, fp,"/proc/%d/fd", pid);
        fprintf(fp,"\nMAPS:\n");     bc_copy_textfile(INT_MAX, fp,"/proc/%d/maps",pid);
+#ifndef NO_CTX
        char proc_mem[64];
        if( tid > 0 && tid != pid )
                sprintf(proc_mem,"/proc/%d/task/%d/mem",pid,tid);
@@ -530,7 +548,7 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
        if( pfd >= 0 ) {
                fprintf(fp,"\nCODE:\n");
                for( int i=-32; i<32; ) {
-                       uint8_t v;  void *vp = (void *)(ip + i);
+                       uint8_t v;  void *vp = (void *)((char*)ip + i);
                        if( !(i & 7) ) fprintf(fp,"%p:  ", vp);
                        if( pread(pfd,&v,sizeof(v),(off_t)vp) != sizeof(v) ) break;
                        fprintf(fp,"%c%02x", !i ? '>' : ' ', v);
@@ -541,10 +559,11 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
        }
        else
                fprintf(fp,"err opening: %s, %m\n", proc_mem);
-
        reg_dump(fp, c);
+#endif
        fprintf(fp,"\n\n");
        if( fp != stdout ) fclose(fp);
+#ifndef NO_GDB
        char cmd[1024], *cp = cmd;
        cp += sprintf(cp, "exec gdb /proc/%d/exe -p %d --batch --quiet "
                "-ex \"thread apply all info registers\" "
@@ -566,5 +585,6 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
        }
         char *const argv[4] = { (char*) "/bin/sh", (char*) "-c", cmd, 0 };
         execvp(argv[0], &argv[0]);
+#endif
 }
 
index 128d514..f300e66 100644 (file)
@@ -58,14 +58,14 @@ BC_TextBox::BC_TextBox(int x, int y, int w, int rows,
 }
 
 BC_TextBox::BC_TextBox(int x, int y, int w, int rows,
-       int size, wchar_t *wtext, int has_border, int font)
+       int size, wchr_t *wtext, int has_border, int font)
  : BC_SubWindow(x, y, w, 0, -1)
 {
        is_utf8 = 1;
        skip_cursor = 0;
        reset_parameters(rows, has_border, font, size);
-       wdemand(wcslen(wtext));
-       wcsncpy(this->wtext, wtext, wsize);
+       wdemand(wstrlen(wtext));
+       wstrncpy(this->wtext, wtext, wsize);
 }
 
 BC_TextBox::BC_TextBox(int x, int y, int w, int rows,
@@ -79,15 +79,15 @@ BC_TextBox::BC_TextBox(int x, int y, int w, int rows,
 }
 
 BC_TextBox::BC_TextBox(int x, int y, int w, int rows,
-       const wchar_t *wtext, int has_border, int font, int is_utf8)
+       const wchr_t *wtext, int has_border, int font, int is_utf8)
  : BC_SubWindow(x, y, w, 0, -1)
 {
        this->is_utf8 = is_utf8;
        skip_cursor = 0;
        reset_parameters(rows, has_border, font, BCTEXTLEN);
        wsize = BCTEXTLEN;
-       wtext = new wchar_t[wsize+1];
-       wcsncpy(this->wtext, wtext, wsize);
+       wtext = new wchr_t[wsize+1];
+       wstrncpy(this->wtext, wtext, wsize);
        this->wtext[wsize] = 0;
 }
 
@@ -224,20 +224,20 @@ int BC_TextBox::wtext_update()
                int nsize = tsize > 0 ? tsize : tlen + BCTEXTLEN;
                wdemand(nsize);
                wlen = BC_Resources::encode(src_enc, dst_enc, text, tlen,
-                       (char*)wtext, wsize*sizeof(wchar_t)) / sizeof(wchar_t);
+                       (char*)wtext, wsize*sizeof(wchr_t)) / sizeof(wchr_t);
                dirty = 0;
        }
        wtext[wlen] = 0;
        return wlen;
 }
 
-int BC_TextBox::text_update(const wchar_t *wcp, int wsz, char *tcp, int tsz)
+int BC_TextBox::text_update(const wchr_t *wcp, int wsz, char *tcp, int tsz)
 {
        const char *src_enc = BC_Resources::wide_encoding;
        const char *dst_enc = BC_Resources::encoding;
-       if( wsz < 0 ) wsz = wcslen(wcp);
+       if( wsz < 0 ) wsz = wstrlen(wcp);
        int len = BC_Resources::encode(src_enc, dst_enc,
-               (char*)wcp, wsz*sizeof(wchar_t), tcp, tsz);
+               (char*)wcp, wsz*sizeof(wchr_t), tcp, tsz);
        tcp[len] = 0;
        return len;
 }
@@ -460,11 +460,11 @@ int BC_TextBox::update(const char *text)
        return 0;
 }
 
-int BC_TextBox::update(const wchar_t *wtext)
+int BC_TextBox::update(const wchr_t *wtext)
 {
-       int wtext_len = wcslen(wtext);
+       int wtext_len = wstrlen(wtext);
        wdemand(wtext_len);
-       wcsncpy(this->wtext, wtext, wsize);
+       wstrncpy(this->wtext, wtext, wsize);
        this->wlen = wtext_len;
        if(highlight_letter1 > wtext_len) highlight_letter1 = wtext_len;
        if(highlight_letter2 > wtext_len) highlight_letter2 = wtext_len;
@@ -541,7 +541,7 @@ const char* BC_TextBox::get_text()
        return text;
 }
 
-const wchar_t* BC_TextBox::get_wtext()
+const wchr_t* BC_TextBox::get_wtext()
 {
        wtext_update();
        return wtext;
@@ -664,7 +664,7 @@ void BC_TextBox::draw(int flush)
        for(i=0, k=text_y; i < wtext_len && k < get_h(); k += text_height) {
 // Draw row of text
                row_begin = i;
-               wchar_t *wtext_row = &wtext[i];
+               wchr_t *wtext_row = &wtext[i];
                for( ; i<wtext_len && wtext[i]!='\n'; ++i );
                if( (row_end=i) < wtext_len ) ++i;
 
@@ -1120,7 +1120,7 @@ int BC_TextBox::repeat_event(int64_t duration)
 void BC_TextBox::default_keypress(int &dispatch_event, int &result)
 {
        int key = top_level->get_keypress(), len;
-       wchar_t *wkeys = top_level->get_wkeystring(&len);
+       wchr_t *wkeys = top_level->get_wkeystring(&len);
        switch( key ) {
        case KPENTER:   key = '\n';     goto kpchr;
        case KPMINUS:   key = '-';      goto kpchr;
@@ -1158,7 +1158,7 @@ int BC_TextBox::keypress_event()
        last_keypress = get_keypress();
 
        if( unicode_active >= 0 ) {
-               wchar_t wch = 0;
+               wchr_t wch = 0;
                int wlen =  -1;
                switch( last_keypress ) {
 //unicode active acitons
@@ -1642,7 +1642,7 @@ int BC_TextBox::keypress_event()
                                case 'u': case 'U': {
                                        if( shift_down() ) {
                                                unicode_active = ibeam_letter;
-                                               wchar_t wkey = 'U';
+                                               wchr_t wkey = 'U';
                                                insert_text(&wkey, 1);
                                                find_ibeam(1);
                                                highlight_letter1 = unicode_active;
@@ -1737,7 +1737,7 @@ int BC_TextBox::wdemand(int len)
 {
        if( wtext && wsize >= len ) return 0;
        int nsize = len + wlen/2 + BCTEXTLEN;
-       wchar_t *ntext = new wchar_t[nsize+1];
+       wchr_t *ntext = new wchr_t[nsize+1];
        ntext[nsize] = 0;
        memcpy(ntext, wtext, wsize*sizeof(wtext[0]));
        delete [] wtext;  wtext = ntext;  wsize = nsize;
@@ -1756,9 +1756,9 @@ int BC_TextBox::tdemand(int len)
        return 1;
 }
 
-void BC_TextBox::insert_text(const wchar_t *wcp, int len)
+void BC_TextBox::insert_text(const wchr_t *wcp, int len)
 {
-       if( len < 0 ) len = wcslen(wcp);
+       if( len < 0 ) len = wstrlen(wcp);
        int wtext_len = wtext_update();
        wdemand(wtext_len + len + 1);
        if( unicode_active < 0 && highlight_letter1 < highlight_letter2 ) {
@@ -2101,11 +2101,11 @@ void BC_TextBox::paste_selection(int clipboard_num)
        int len = clipboard_len(clipboard_num);
        if( len > 0 )
        {
-               char cstring[len];  wchar_t wstring[len];
+               char cstring[len];  wchr_t wstring[len];
                from_clipboard(cstring, len, clipboard_num);  --len;
 //printf("BC_TextBox::paste_selection %d '%*.*s'\n",len,len,len,cstring);
                len = BC_Resources::encode(BC_Resources::encoding, BC_Resources::wide_encoding,
-                       cstring,len, (char *)wstring,(len+1)*sizeof(wchar_t)) / sizeof(wchar_t);
+                       cstring,len, (char *)wstring,(len+1)*sizeof(wchr_t)) / sizeof(wchr_t);
                insert_text(wstring, len);
                last_keypress = 0;
        }
@@ -2212,7 +2212,7 @@ BC_ScrollTextBox::BC_ScrollTextBox(BC_WindowBase *parent_window,
 
 BC_ScrollTextBox::BC_ScrollTextBox(BC_WindowBase *parent_window,
        int x, int y, int w, int rows,
-       const wchar_t *default_wtext, int default_size)
+       const wchr_t *default_wtext, int default_size)
 {
        this->parent_window = parent_window;
        this->x = x;
@@ -2263,7 +2263,7 @@ void BC_ScrollTextBox::update(const char *text)
        update_scrollbars();
 }
 
-void BC_ScrollTextBox::update(const wchar_t *wtext)
+void BC_ScrollTextBox::update(const wchr_t *wtext)
 {
        this->text->update(wtext);
        update_scrollbars();
@@ -2289,7 +2289,7 @@ int BC_ScrollTextBox::button_release_event()
 
 int BC_ScrollTextBox::get_h() { return text->get_h(); }
 const char *BC_ScrollTextBox::get_text() { return text->get_text(); }
-const wchar_t *BC_ScrollTextBox::get_wtext() { return text->get_wtext(); }
+const wchr_t *BC_ScrollTextBox::get_wtext() { return text->get_wtext(); }
 
 int BC_ScrollTextBox::get_buttonpress()
 {
@@ -2325,10 +2325,10 @@ BC_ScrollTextBoxText::BC_ScrollTextBoxText(BC_ScrollTextBox *gui, const char *te
        this->gui = gui;
 }
 
-BC_ScrollTextBoxText::BC_ScrollTextBoxText(BC_ScrollTextBox *gui, const wchar_t *wtext)
+BC_ScrollTextBoxText::BC_ScrollTextBoxText(BC_ScrollTextBox *gui, const wchr_t *wtext)
  : BC_TextBox(gui->x, gui->y,
        gui->w - get_resources()->vscroll_data[SCROLL_HANDLE_UP]->get_w(),
-       gui->rows, gui->default_size, (wchar_t*)wtext, 1, MEDIUMFONT)
+       gui->rows, gui->default_size, (wchr_t*)wtext, 1, MEDIUMFONT)
 {
        this->gui = gui;
 }
@@ -2469,7 +2469,7 @@ BC_PopupTextBoxText::BC_PopupTextBoxText(BC_PopupTextBox *popup, int x, int y, c
        this->popup = popup;
 }
 
-BC_PopupTextBoxText::BC_PopupTextBoxText(BC_PopupTextBox *popup, int x, int y, const wchar_t *wtext)
+BC_PopupTextBoxText::BC_PopupTextBoxText(BC_PopupTextBox *popup, int x, int y, const wchr_t *wtext)
  : BC_TextBox(x, y, popup->text_w, 1, wtext, BCTEXTLEN)
 {
        this->popup = popup;
@@ -2569,7 +2569,7 @@ int BC_PopupTextBox::handle_event()
 }
 
 const char *BC_PopupTextBox::get_text() { return textbox->get_text(); }
-const wchar_t *BC_PopupTextBox::get_wtext() { return textbox->get_wtext(); }
+const wchr_t *BC_PopupTextBox::get_wtext() { return textbox->get_wtext(); }
 int BC_PopupTextBox::get_number() { return list_item; }
 void BC_PopupTextBox::set_number(int v) { list_item = v; }
 int BC_PopupTextBox::get_x() { return x; }
@@ -2774,7 +2774,7 @@ const char* BC_TumbleTextBox::get_text()
        return textbox->get_text();
 }
 
-const wchar_t* BC_TumbleTextBox::get_wtext()
+const wchr_t* BC_TumbleTextBox::get_wtext()
 {
        return textbox->get_wtext();
 }
index f96446d..ec41427 100644 (file)
@@ -55,17 +55,17 @@ class BC_TextBox : public BC_SubWindow
 // may be local fixed/dynamic, or shared fixed ref via set_text
        char *text;
 // always local dynamic
-       wchar_t *wtext;
+       wchr_t *wtext;
 public:
 // size > 0: fixed buffer, size == 0: dynamic buffer
 // size < 0: fixed shared buffer via set_text
        BC_TextBox(int x, int y, int w, int rows, int size, char *text,
                int has_border=1, int font=MEDIUMFONT);
-       BC_TextBox(int x, int y, int w, int rows, int size, wchar_t *wtext,
+       BC_TextBox(int x, int y, int w, int rows, int size, wchr_t *wtext,
                int has_border=1, int font=MEDIUMFONT);
        BC_TextBox(int x, int y, int w, int rows, const char *text,
                int has_border=1, int font=MEDIUMFONT, int is_utf8=1);
-       BC_TextBox(int x, int y, int w, int rows, const wchar_t *wtext,
+       BC_TextBox(int x, int y, int w, int rows, const wchr_t *wtext,
                int has_border=1, int font=MEDIUMFONT, int is_utf8=1);
        BC_TextBox(int x, int y, int w, int rows, int64_t text,
                int has_border=1, int font=MEDIUMFONT);
@@ -87,7 +87,7 @@ public:
        void set_selection(int char1, int char2, int ibeam);
        void wset_selection(int char1, int char2, int ibeam);
        int update(const char *text);
-       int update(const wchar_t *wtext);
+       int update(const wchr_t *wtext);
        int update(int64_t value);
        int update(float value);
        void disable();
@@ -110,7 +110,7 @@ public:
        int activate();
        int deactivate();
        const char* get_text();
-       const wchar_t* get_wtext();
+       const wchr_t* get_wtext();
        void set_text(char *text, int isz);
        int wdemand(int len);
        int tdemand(int len);
@@ -177,7 +177,7 @@ private:
        void copy_selection(int clipboard_num);
        void paste_selection(int clipboard_num);
        void delete_selection(int letter1, int letter2, int text_len);
-       void insert_text(const wchar_t *wcp, int len=-1);
+       void insert_text(const wchr_t *wcp, int len=-1);
 // Reformat text according to separators.
 // ibeam_left causes the ibeam to move left.
        int is_separator(const char *txt, int i);
@@ -195,7 +195,7 @@ private:
        int tstrcmp(const char *cp);
        char *tstrcpy(const char *cp);
        char *tstrcat(const char *cp);
-       int text_update(const wchar_t *wcp, int wsz, char *tcp, int tsz);
+       int text_update(const wchr_t *wcp, int wsz, char *tcp, int tsz);
        int wtext_update();
 
 // Top left of text relative to window
@@ -257,7 +257,7 @@ class BC_ScrollTextBox
        BC_ScrollTextBoxYScroll *yscroll;
        BC_WindowBase *parent_window;
        const char *default_text;
-       const wchar_t *default_wtext;
+       const wchr_t *default_wtext;
        int default_size;
        int x, y, w, rows;
 
@@ -270,7 +270,7 @@ public:
                const char *default_text, int default_size=BCTEXTLEN);
         BC_ScrollTextBox(BC_WindowBase *parent_window,
                 int x, int y, int w, int rows,
-                const wchar_t *default_wtext, int default_size=BCTEXTLEN);
+                const wchr_t *default_wtext, int default_size=BCTEXTLEN);
        virtual ~BC_ScrollTextBox();
        void create_objects();
 
@@ -281,7 +281,7 @@ public:
        void set_text(char *text, int isz);
        int set_text_row(int n);
        void update(const char *text);
-       void update(const wchar_t *wtext);
+       void update(const wchr_t *wtext);
        void reposition_window(int x, int y, int w, int rows);
        void update_scrollbars();
 // accessors
@@ -295,7 +295,7 @@ public:
 // forward functions
        int get_h();
        const char *get_text();
-       const wchar_t *get_wtext();
+       const wchr_t *get_wtext();
        int get_buttonpress();
        void wset_selection(int char1, int char2, int ibeam);
        void set_selection(int char1, int char2, int ibeam);
@@ -306,7 +306,7 @@ class BC_ScrollTextBoxText : public BC_TextBox
 {
 public:
        BC_ScrollTextBoxText(BC_ScrollTextBox *gui, const char *text);
-       BC_ScrollTextBoxText(BC_ScrollTextBox *gui, const wchar_t *wtext);
+       BC_ScrollTextBoxText(BC_ScrollTextBox *gui, const wchr_t *wtext);
        virtual ~BC_ScrollTextBoxText();
        int handle_event();
        int motion_event();
@@ -351,7 +351,7 @@ public:
        virtual int handle_event();
 
        const char *get_text();
-       const wchar_t *get_wtext();
+       const wchr_t *get_wtext();
        int get_number();
        void set_number(int v);
        int get_x();
@@ -376,7 +376,7 @@ private:
        int x, y, text_w, list_h;
        int list_format, list_item;
        const char *default_text;
-       const wchar_t *default_wtext;
+       const wchr_t *default_wtext;
        ArrayList<BC_ListBoxItem*> *list_items;
        BC_PopupTextBoxText *textbox;
        BC_PopupTextBoxList *listbox;
@@ -387,7 +387,7 @@ class BC_PopupTextBoxText : public BC_TextBox
 {
 public:
        BC_PopupTextBoxText(BC_PopupTextBox *popup, int x, int y, const char *text);
-       BC_PopupTextBoxText(BC_PopupTextBox *popup, int x, int y, const wchar_t *wtext);
+       BC_PopupTextBoxText(BC_PopupTextBox *popup, int x, int y, const wchr_t *wtext);
        virtual ~BC_PopupTextBoxText();
        int handle_event();
        BC_PopupTextBox *popup;
@@ -428,7 +428,7 @@ public:
        virtual int handle_up_event();
        virtual int handle_down_event();
        const char* get_text();
-       const wchar_t* get_wtext();
+       const wchr_t* get_wtext();
        BC_TextBox* get_textbox();
        int update(const char *value);
        int update(int64_t value);
index 7e45392..2d08b46 100644 (file)
@@ -309,7 +309,7 @@ void BC_Trace::dump_traces(FILE *fp)
        }
 }
 
-void trace_info::set_owner() { owner = pthread_self(); }
+void trace_info::set_owner() { owner = (unsigned long)pthread_self(); }
 void trace_info::unset_owner() { owner = 0; }
 
 void BC_Trace::dump_locks(FILE *fp)
@@ -322,7 +322,7 @@ void BC_Trace::dump_locks(FILE *fp)
                fprintf(fp,"    %p %s, %s %p%s",
                        p->info, p->title, p->loc,
                        (void*)p->tid, p->is_owner ? " *" : "");
-               if( p->info->owner && p->info->owner != p->tid )
+               if( p->info->owner && p->info->owner != (unsigned long)p->tid )
                        fprintf(fp," %p", (void*)p->info->owner);
                fprintf(fp,"\n");
        }
index 9a730f9..a35645a 100644 (file)
@@ -57,7 +57,9 @@
 #include <typeinfo>
 
 #include <X11/extensions/Xinerama.h>
+#ifdef HAVE_XV
 #include <X11/extensions/Xvlib.h>
+#endif
 #include <X11/extensions/shape.h>
 #include <X11/XF86keysym.h>
 #include <X11/Sunkeysym.h>
@@ -205,9 +207,10 @@ BC_WindowBase::~BC_WindowBase()
                        XFree(xinerama_info);
                xinerama_screens = 0;
                xinerama_info = 0;
+#ifdef HAVE_XV
                if( xvideo_port_id >= 0 )
                        XvUngrabPort(display, xvideo_port_id, CurrentTime);
-
+#endif
                unlock_window();
 // Must be last reference to display.
 // _XftDisplayInfo needs a lock.
@@ -869,8 +872,11 @@ int BC_WindowBase::keysym_lookup(XEvent *event)
        wkey_string_length = 0;
 
        if( input_context ) {
+               wchar_t wkey[4];
                wkey_string_length = XwcLookupString(input_context,
-                       (XKeyEvent*)event, wkey_string, 4, &keysym, 0);
+                       (XKeyEvent*)event, wkey, 4, &keysym, 0);
+               for( int i=0; i<wkey_string_length; ++i )
+                       wkey_string[i] = wkey[i];
 //printf("keysym_lookup 1 %d %d %lx %x %x %x %x\n", wkey_string_length, keysym,
 //  wkey_string[0], wkey_string[1], wkey_string[2], wkey_string[3]);
 
@@ -2421,7 +2427,7 @@ void BC_WindowBase::init_glyphs()
                "`abcdefghijklmnopqrstuvwxyz{|}~");
        for( int font=SMALLFONT; font<=LARGEFONT; ++font ) {
                set_font(font);
-               draw_text(5,5, text, 0);
+               draw_text(5,5, text);
        }
        set_font(cur_font);
        XUngrabServer(display);
@@ -2944,10 +2950,10 @@ int BC_WindowBase::get_text_width(int font, const char *text, int length)
        return w;
 }
 
-int BC_WindowBase::get_text_width(int font, const wchar_t *text, int length)
+int BC_WindowBase::get_text_width(int font, const wchr_t *text, int length)
 {
        int i, j, w = 0;
-       if( length < 0 ) length = wcslen(text);
+       if( length < 0 ) length = wstrlen(text);
 
        for( i=j=0; i<length && text[i]; ++i ) {
                if( text[i] != '\n' ) continue;
@@ -3114,6 +3120,7 @@ int BC_WindowBase::accel_available(int color_model, int lock_it)
 
 int BC_WindowBase::grab_port_id(int color_model)
 {
+#ifdef HAVE_XV
        if( !get_resources()->use_xvideo ||     // disabled
            !get_resources()->use_shm )         // Only local server is fast enough.
                return -1;
@@ -3160,8 +3167,10 @@ int BC_WindowBase::grab_port_id(int color_model)
        }
 
        XvFreeAdaptorInfo(info);
-
        return xvideo_port_id;
+#else
+       return -1;
+#endif
 }
 
 
@@ -4039,7 +4048,7 @@ int BC_WindowBase::ctrl_down()
        return top_level->ctrl_mask;
 }
 
-wchar_t* BC_WindowBase::get_wkeystring(int *length)
+wchr_t* BC_WindowBase::get_wkeystring(int *length)
 {
        if(length)
                *length = top_level->wkey_string_length;
index 7e36cd6..6ce2128 100644 (file)
 //typedef void* GLXContext;
 #endif
 
+typedef uint32_t wchr_t;
+
+static inline size_t wstrlen(const wchr_t *s)
+{
+       size_t len = 0;
+       while( s[len] ) ++len;
+       return len;
+}
+
+static inline wchr_t *wstrncpy(wchr_t *dest, const wchr_t *src, size_t n)
+{
+       for( wchr_t *dp=dest; n>0 && (*dp++=*src++); --n );
+       return dest;
+}
+
+
 class BC_ResizeCall
 {
 public:
@@ -313,7 +329,7 @@ public:
        int get_buttonpress();
        int get_has_focus();
        int get_dragging();
-       wchar_t* get_wkeystring(int *length = 0);
+       wchr_t* get_wkeystring(int *length = 0);
        int get_keypress();
        int get_keysym() { return keysym; }
 #ifdef X_HAVE_UTF8_STRING
@@ -341,7 +357,7 @@ public:
        int get_text_descent(int font);
        int get_text_height(int font, const char *text = 0);
        int get_text_width(int font, const char *text, int length = -1);
-       int get_text_width(int font, const wchar_t *text, int length = -1);
+       int get_text_width(int font, const wchr_t *text, int length = -1);
 // truncate the text with ... & return a new string
        char *get_truncated_text(int font, const char *text, int max_w);
        BC_Clipboard* get_clipboard();
@@ -405,10 +421,10 @@ public:
        void draw_text_line(int x, int y, const char *text, int len, BC_Pixmap *pixmap = 0);
        void draw_xft_text(int x, int y, const char *text, int len,
                BC_Pixmap *pixmap = 0, int is_utf8 = 0);
-       void draw_xft_text(int x, int y, const wchar_t *text,
+       void draw_xft_text(int x, int y, const wchr_t *text,
                int length, BC_Pixmap *pixmap);
        int draw_single_text(int draw, int font,
-               int x, int y, const wchar_t *text, int length = -1, BC_Pixmap *pixmap = 0);
+               int x, int y, const wchr_t *text, int length = -1, BC_Pixmap *pixmap = 0);
        void draw_center_text(int x, int y, const char *text, int length = -1);
        void draw_line(int x1, int y1, int x2, int y2, BC_Pixmap *pixmap = 0);
        void draw_polygon(ArrayList<int> *x, ArrayList<int> *y, BC_Pixmap *pixmap = 0);
@@ -574,7 +590,7 @@ private:
        Cursor create_grab_cursor();
 // Get width of a single line.  Used by get_text_width
        int get_single_text_width(int font, const char *text, int length);
-       int get_single_text_width(int font, const wchar_t *text, int length);
+       int get_single_text_width(int font, const wchr_t *text, int length);
        int allocate_color_table();
        int init_gc();
        int init_fonts();
@@ -724,7 +740,7 @@ private:
 // Last key pressed
        int key_pressed;
        int wkey_string_length;
-       wchar_t wkey_string[4];
+       wchr_t wkey_string[4];
 #ifdef X_HAVE_UTF8_STRING
        char* key_pressed_utf8;
 #endif
index ab44e7c..eb35b63 100644 (file)
@@ -211,21 +211,21 @@ void BC_WindowBase::draw_xft_text(int x, int y,
        const char *text, int length, BC_Pixmap *pixmap, int is_utf8)
 {
        int l = length + 1;
-       wchar_t wide_text[l];
+       wchr_t wide_text[l];
        length = BC_Resources::encode(
                is_utf8 ? "UTF8" : BC_Resources::encoding, BC_Resources::wide_encoding,
-               (char*)text, length, (char*)wide_text, l*sizeof(wchar_t)) / sizeof(wchar_t);
+               (char*)text, length, (char*)wide_text, l*sizeof(wchr_t)) / sizeof(wchr_t);
        draw_xft_text(x, y, wide_text, length, pixmap);
 }
 
 void BC_WindowBase::draw_xft_text(int x, int y,
-       const wchar_t *text, int length, BC_Pixmap *pixmap)
+       const wchr_t *text, int length, BC_Pixmap *pixmap)
 {
        int dy = -1;
-       const wchar_t *wsp = text, *wep = wsp + length;
+       const wchr_t *wsp = text, *wep = wsp + length;
        int font = top_level->current_font;
        while( wsp < wep ) {
-               const wchar_t *wcp = wsp;
+               const wchr_t *wcp = wsp;
                while( wcp < wep && *wcp != '\n' ) ++wcp;
                int len = wcp - wsp;
                if( len > 0 )
@@ -272,16 +272,16 @@ void BC_WindowBase::xft_draw_string(XftColor *xft_color, XftFont *xft_font,
        }
 }
 
-int BC_WindowBase::get_single_text_width(int font, const wchar_t *text, int length)
+int BC_WindowBase::get_single_text_width(int font, const wchr_t *text, int length)
 {
        return draw_single_text(0, font, 0,0, text, length);
 }
 
 int BC_WindowBase::draw_single_text(int draw, int font,
-       int x, int y, const wchar_t *text, int length, BC_Pixmap *pixmap)
+       int x, int y, const wchr_t *text, int length, BC_Pixmap *pixmap)
 {
        if( length < 0 )
-               length = wcslen(text);
+               length = wstrlen(text);
        if( !length ) return 0;
 
        if( !get_resources()->use_xft ) {
@@ -319,7 +319,7 @@ int BC_WindowBase::draw_single_text(int draw, int font,
        int x0 = x;
        XftFont *basefont = top_level->get_xft_struct(font);
        XftFont *curfont = 0, *altfont = 0;
-       const wchar_t *up = text, *ubp = up, *uep = ubp + length;
+       const wchr_t *up = text, *ubp = up, *uep = ubp + length;
 
        while( up < uep ) {
                XftFont *xft_font = 0;
index fa79458..f05665f 100644 (file)
@@ -74,7 +74,9 @@ void BC_WindowEvents::run()
 // listening anymore and XCloseDisplay locks up.
        XEvent *event;
 #ifndef SINGLE_THREAD
+#ifndef NO_XSELECT
        int x_fd = ConnectionNumber(window->display);
+#endif
 #endif
 
        while(!done)
@@ -89,6 +91,7 @@ void BC_WindowEvents::run()
 // This came from a linuxquestions post.
 // We can get a file descriptor for the X display & use select instead of XNextEvent.
 // The newest X11 library requires locking the display to use XNextEvent.
+#ifndef NO_XSELECT
                fd_set x_fds;
                FD_ZERO(&x_fds);
                FD_SET(x_fd, &x_fds);
@@ -96,6 +99,9 @@ void BC_WindowEvents::run()
                tv.tv_sec = 0;  tv.tv_usec = 200000;
 //printf("BC_WindowEvents::run %d %s\n", __LINE__, window->title);
                select(x_fd + 1, &x_fds, 0, 0, &tv);
+#else
+               usleep(100000);
+#endif
                XLockDisplay(window->display);
                while(!done && XPending(window->display))
                {
index 59227cb..db95285 100644 (file)
@@ -4,7 +4,6 @@
 #include <stdarg.h>
 #include <stdint.h>
 #include <string.h>
-#include <wctype.h>
 
 static inline char *cstrcat(int n, ...) {
   int len = 0;  va_list va;  va_start(va,n);
@@ -58,23 +57,33 @@ static inline int butf8(unsigned int v, char *&cp)
 }
 
 static inline int bstrcasecmp(const char *ap, const char *bp)
-{
-       int a, b, ret;
+{ // not really correct, but what was left after MS port
+       int ret, a, b;
        do {
-               a = towlower(butf8(ap));  b = towlower(butf8(bp));
+               if( (a=butf8(ap)) >= 'A' && a <= 'Z' ) a += 'a' - 'A';
+               if( (b=butf8(bp)) >= 'A' && b <= 'Z' ) b += 'a' - 'A';
        } while( !(ret=a-b) && a && b );
        return ret;
 }
 
 static inline const char *bstrcasestr(const char *src, const char *tgt)
 {
-       int ssz = strlen(src), tsz = strlen(tgt), ret = 0;
+       int ssz = strlen(src), tsz = strlen(tgt);
        const char *cp = tgt;
-       wchar_t wtgt[tsz + 1], *tp = wtgt;
-       while( *cp ) *tp++ = towlower(butf8(cp));
+       uint32_t wtgt[tsz+1], *tp = wtgt;
+       while( *cp ) {
+               int wch = butf8(cp);
+               if( wch >= 'A' && wch <= 'Z' ) wch += 'a' - 'A';
+               *tp++ = wch;
+       }
+       *tp = 0;
        for( tsz=tp-wtgt; ssz>=tsz; ++src,--ssz ) {
                cp = src;   tp = wtgt;
-               for( int i=tsz; --i>=0 && !(ret=towlower(butf8(cp))-*tp); ++tp );
+               int ret = 0, wch = 0;
+               for( int i=tsz; --i>=0 && !ret && (wch=butf8(cp)); ) {
+                       if( wch >= 'A' && wch <= 'Z' ) wch += 'a' - 'A';
+                       ret = wch - *tp++;
+               }
                if( !ret ) return src;
        }
        return 0;
index 7ad81b2..79f3e71 100644 (file)
 #include <stdio.h>
 #include <pthread.h>
 #include <unistd.h>
+
+#ifndef NO_TID
 #include <sys/syscall.h>
 
 // glibc >= 2.30 provides gettid() in unistd
 #if !defined(__GLIBC_PREREQ) || !__GLIBC_PREREQ(2, 30)
 static inline int gettid() { return syscall(SYS_gettid, 0, 0, 0); }
 #endif
+#else
+static inline long gettid() { return (long)pthread_self(); }
+#endif
 
 // The thread does not autodelete by default.
 // If autodelete is 1 the thread autodeletes.
index 6ec5af6..c627200 100644 (file)
@@ -809,7 +809,7 @@ SET_TRACE
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glDisable(GL_BLEND);
 SET_TRACE
-       return 0;
 #endif
+       return 0;
 }
 
index 5737d4c..7f84a76 100644 (file)
@@ -434,7 +434,7 @@ void DenoiseFFTEffect::collect_noise()
        for(int i = 0; i < config.samples; i += WINDOW_SIZE)
        {
                collect_engine->process_buffer(collection_start,
-                       WINDOW_SIZE, (Samples*)0, get_direction());
+                       WINDOW_SIZE, (Samples**)0, get_direction());
                collection_start += step * WINDOW_SIZE;
                total_windows++;
        }
diff --git a/cinelerra-5.1/plugins/mandelcuda/.swp b/cinelerra-5.1/plugins/mandelcuda/.swp
deleted file mode 100644 (file)
index 5d9b1b9..0000000
Binary files a/cinelerra-5.1/plugins/mandelcuda/.swp and /dev/null differ
diff --git a/cinelerra-5.1/plugins/nbodycuda/.swp b/cinelerra-5.1/plugins/nbodycuda/.swp
deleted file mode 100644 (file)
index 5d9b1b9..0000000
Binary files a/cinelerra-5.1/plugins/nbodycuda/.swp and /dev/null differ
index 85e9b30..b5e1963 100644 (file)
@@ -1,6 +1,7 @@
 include ../../plugin_defs
 
 OBJS = $(OBJDIR)/shapewipe.o
+LFLAGS += -lpng
 
 PLUGIN = shapewipe
 
index 88d6501..0fc6669 100644 (file)
@@ -145,7 +145,7 @@ int TitleConfig::equivalent(TitleConfig &that)
 //             fade_in == that.fade_in && fade_out == that.fade_out &&
 //             EQUIV(pixels_per_second, that.pixels_per_second) &&
                wlen == that.wlen &&
-               !memcmp(wtext, that.wtext, wlen * sizeof(wchar_t)) &&
+               !memcmp(wtext, that.wtext, wlen * sizeof(wchr_t)) &&
                title_x == that.title_x && title_y == that.title_y &&
                title_w == that.title_w && title_h == that.title_h &&
 //             window_w == that.window_w && window_h == that.window_h &&
@@ -180,7 +180,7 @@ void TitleConfig::copy_from(TitleConfig &that)
        fade_out = that.fade_out;
        pixels_per_second = that.pixels_per_second;
        demand(wlen = that.wlen);
-       memcpy(wtext, that.wtext, that.wlen * sizeof(wchar_t));
+       memcpy(wtext, that.wtext, that.wlen * sizeof(wchr_t));
        title_x = that.title_x;  title_y = that.title_y;
        title_w = that.title_w;  title_h = that.title_h;
        window_w = that.window_w;  window_h = that.window_h;
@@ -218,7 +218,7 @@ void TitleConfig::interpolate(TitleConfig &prev, TitleConfig &next,
        fade_out = prev.fade_out;
        pixels_per_second = prev.pixels_per_second;
        demand(wlen = prev.wlen);
-       memcpy(wtext, prev.wtext, prev.wlen * sizeof(wchar_t));
+       memcpy(wtext, prev.wtext, prev.wlen * sizeof(wchr_t));
        wtext[wlen] = 0;
        this->title_x = prev.title_x == next.title_x ? prev.title_x :
                prev.title_x * prev_scale + next.title_x * next_scale;
@@ -245,7 +245,7 @@ int TitleConfig::demand(long sz)
        if( wtext && wsize >= sz ) return 0;
        delete [] wtext;
        wsize = sz + wlen/2 + 0x1000;
-       wtext = new wchar_t[wsize+1];
+       wtext = new wchr_t[wsize+1];
        wtext[wsize] = 0;
        return 1;
 }
@@ -254,7 +254,7 @@ void TitleConfig::to_wtext(const char *from_enc, const char *text, int tlen)
 {
        demand(tlen);
        wlen = BC_Resources::encode(from_enc, BC_Resources::wide_encoding,
-               (char*)text,tlen, (char *)wtext,sizeof(*wtext)*wsize) / sizeof(wchar_t);
+               (char*)text,tlen, (char *)wtext,sizeof(*wtext)*wsize) / sizeof(wchr_t);
        while( wlen > 0 && !wtext[wlen-1] ) --wlen;
 }
 
@@ -1325,15 +1325,15 @@ BC_FontEntry* TitleMain::config_font()
 }
 
 
-static inline bool is_ltr(wchar_t wch) { return iswalpha(wch); }
-static inline bool is_nbr(wchar_t wch) { return iswdigit(wch); }
-static inline bool is_ws(wchar_t wch) { return wch==' ' || wch=='\t'; }
-static inline bool is_idch(wchar_t wch) { return is_ltr(wch) || is_nbr(wch) || wch=='_'; }
+static inline bool is_ltr(wchr_t wch) { return iswalpha(wch); }
+static inline bool is_nbr(wchr_t wch) { return iswdigit(wch); }
+static inline bool is_ws(wchr_t wch) { return wch==' ' || wch=='\t'; }
+static inline bool is_idch(wchr_t wch) { return is_ltr(wch) || is_nbr(wch) || wch=='_'; }
 
 // return eof=-1, chr=0, opener=1, closer=2
-int TitleParser::wget(wchar_t &wch)
+int TitleParser::wget(wchr_t &wch)
 {
-       wchar_t *wip = wid, *wtp = wtxt;  *wip = 0;  *wtp = 0;
+       wchr_t *wip = wid, *wtp = wtxt;  *wip = 0;  *wtp = 0;
        int ilen = sizeof(wid)/sizeof(wid[0]);
        int tlen = sizeof(wtxt)/sizeof(wtxt[0]);
        int ich;
@@ -1370,15 +1370,15 @@ int TitleParser::wget(wchar_t &wch)
        wch = ich;
        return ret;
 }
-int TitleParser::tget(wchar_t &wch)
+int TitleParser::tget(wchr_t &wch)
 {
        int ret = wget(wch);
        if( ret > 0 ) {
-               int wid_len = wcslen(wid)+1;
+               int wid_len = wstrlen(wid)+1;
                BC_Resources::encode(
                        BC_Resources::wide_encoding, plugin->config.encoding,
                        (char*)wid,wid_len*sizeof(wid[0]), (char *)id,sizeof(id));
-               int wtxt_len = wcslen(wtxt)+1;
+               int wtxt_len = wstrlen(wtxt)+1;
                BC_Resources::encode(
                        BC_Resources::wide_encoding, plugin->config.encoding,
                        (char*)wtxt,wtxt_len*sizeof(wtxt[0]), (char *)text,sizeof(text));
@@ -1670,7 +1670,7 @@ void TitleMain::load_glyphs()
        int total_packages = 0;
 
        while( !wchrs.eof() ) {
-               wchar_t wch1 = wchrs.wcur(), wch;
+               wchr_t wch1 = wchrs.wcur(), wch;
                long ipos = wchrs.tell();
                int ret = wchrs.tget(wch);
                if( ret > 0 ) {
@@ -1778,7 +1778,7 @@ int TitleMain::get_text()
                if( !row ) row = title_rows.add();
                TitleChar *chr = 0;
                long ipos = wchrs.tell();
-               wchar_t wch1 = wchrs.wcur(), wch;
+               wchr_t wch1 = wchrs.wcur(), wch;
                int ret = wchrs.tget(wch);
                if( ret < 0 || wch == '\n' ) {
                        if( row->x1 > row->x2 ) row->x1 = row->x2 = 0;
@@ -2554,7 +2554,7 @@ void TitleMain::save_data(KeyFrame *keyframe)
        char text[tsz];
        int text_len = BC_Resources::encode(
                BC_Resources::wide_encoding, DEFAULT_ENCODING,
-               (char*)config.wtext, config.wlen*sizeof(wchar_t),
+               (char*)config.wtext, config.wlen*sizeof(wchr_t),
                text, tsz);
        output.append_text(text, text_len);
        output.tag.set_title("/TITLE");
@@ -2621,15 +2621,15 @@ void TitleMain::read_data(KeyFrame *keyframe)
        }
 }
 
-void TitleMain::insert_text(const wchar_t *wtxt, int pos)
+void TitleMain::insert_text(const wchr_t *wtxt, int pos)
 {
-       int len = wcslen(wtxt);
+       int len = wstrlen(wtxt);
        int wlen = config.wlen;
        if( pos < 0 ) pos = 0;
        if( pos > wlen ) pos = wlen;
        config.demand(wlen + len);
        int wsize1 = config.wsize-1;
-       wchar_t *wtext = config.wtext;
+       wchr_t *wtext = config.wtext;
        for( int i=wlen, j=wlen+len; --i>=pos; ) {
                if( --j >= wsize1 ) continue;
                wtext[j] = wtext[i];
index cf4a203..c047f99 100644 (file)
@@ -161,7 +161,7 @@ public:
        double fade_in, fade_out;
        float pixels_per_second; // Speed of motion
 // Text to display
-       wchar_t *wtext;
+       wchr_t *wtext;
        long wsize, wlen;
 // Position in frame relative to top left
        float title_x, title_y;
@@ -233,7 +233,7 @@ public:
 // Position of each image box in a row
 class TitleChar {
 public:
-       wchar_t wch;
+       wchr_t wch;
        int typ, flags;
        void *vp;
        int x, y;
@@ -502,7 +502,7 @@ public:
 
 class TitleParser
 {
-       const wchar_t *bfr, *out, *lmt;
+       const wchr_t *bfr, *out, *lmt;
 public:
        TitleMain *plugin;
 
@@ -511,9 +511,9 @@ public:
        bool eof() { return out >= lmt; }
        int wcur() { return eof() ? -1 : *out; }
        int wnext() { return eof() ? -1 : *out++; }
-       int wget(wchar_t &wch);
-       int tget(wchar_t &wch);
-       wchar_t wid[BCSTRLEN], wtxt[BCTEXTLEN];
+       int wget(wchr_t &wch);
+       int tget(wchr_t &wch);
+       wchr_t wid[BCSTRLEN], wtxt[BCTEXTLEN];
        char id[BCSTRLEN], text[BCTEXTLEN];
        int set_attributes(int ret);
 
@@ -587,7 +587,7 @@ public:
        void update_gui();
        void save_data(KeyFrame *keyframe);
        void read_data(KeyFrame *keyframe);
-       void insert_text(const wchar_t *wtxt, int pos);
+       void insert_text(const wchr_t *wtxt, int pos);
 
        void build_previews(TitleWindow *gui);
        void reset_render();
index 84f50a3..4c87915 100644 (file)
@@ -530,9 +530,9 @@ int TitleWindow::insert_ibeam(const char *txt, int ofs)
 {
        int ibeam = cur_ibeam;
        int ilen = strlen(txt)+1;
-       wchar_t wtxt[ilen];
+       wchr_t wtxt[ilen];
        int len = BC_Resources::encode(client->config.encoding, BC_Resources::wide_encoding,
-               (char*)txt,ilen, (char *)wtxt,ilen*sizeof(wtxt[0])) / sizeof(wchar_t);
+               (char*)txt,ilen, (char *)wtxt,ilen*sizeof(wtxt[0])) / sizeof(wchr_t);
        client->insert_text(wtxt, ibeam);
        while( len > 0 && !wtxt[len] ) --len;
        int adv = len+1 + ofs;
@@ -582,7 +582,8 @@ void TitleWindow::update_gui()
        fade_out->update((float)client->config.fade_out);
        font->update(client->config.font);
        check_style(client->config.font,0);
-       text->update(client->config.wtext ? &client->config.wtext[0] : L"");
+       wchr_t wz[1] = { 0 };
+       text->update(client->config.wtext ? &client->config.wtext[0] : wz);
        speed->update(client->config.pixels_per_second);
        outline->update((int64_t)client->config.outline_size);
 #ifdef USE_STROKER
@@ -987,10 +988,10 @@ int TitleText::button_press_event()
 int TitleText::handle_event()
 {
        window->fonts_popup->deactivate();
-       const wchar_t *wtext = get_wtext();
-       long wlen = wcslen(wtext);
+       const wchr_t *wtext = get_wtext();
+       long wlen = wstrlen(wtext);
        client->config.demand(wlen);
-       wcsncpy(client->config.wtext, wtext, client->config.wsize);
+       wstrncpy(client->config.wtext, wtext, client->config.wsize);
        client->config.wlen = wlen;
        window->update_stats();
        window->send_configure_change();
index 4fa976f..38326d9 100644 (file)
@@ -8,14 +8,14 @@ msgstr ""
 "Project-Id-Version: Cinelerra 5.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2016-10-15 14:02-0600\n"
-"PO-Revision-Date: 2019-11-17 11:16-0300\n"
+"PO-Revision-Date: 2020-01-26 00:30+0100\n"
 "Last-Translator: Sergio Daniel Gomez <sergio.sgsistemas@gmail.com>\n"
 "Language-Team: SPANISH <LL@li.org>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2.4\n"
+"X-Generator: Poedit 2.0.6\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2019-11-14 11:47-0700\n"
@@ -26,16 +26,26 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-01-21 13:56-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
 
-#: guicast/bcbutton.C:266 guicast/bcbutton.C:274 guicast/bcbutton.C:490
-#: cinelerra/preferencesthread.C:669
+#: guicast/bcbutton.C:266 guicast/bcbutton.C:274 guicast/bcbutton.C:494
+#: cinelerra/preferencesthread.C:672
 msgid "OK"
 msgstr "OK"
 
 #: guicast/bcbutton.C:322 guicast/bcbutton.C:330 guicast/bcbutton.C:338
-#: guicast/bcbutton.C:517 guicast/bcbutton.C:519 guicast/bcbutton.C:526
+#: guicast/bcbutton.C:521 guicast/bcbutton.C:523 guicast/bcbutton.C:530
 #: cinelerra/confirmquit.C:108 cinelerra/confirmquit.C:110
-#: cinelerra/preferencesthread.C:742 cinelerra/preferencesthread.C:744
+#: cinelerra/preferencesthread.C:745 cinelerra/preferencesthread.C:747
 msgid "Cancel"
 msgstr "Cancelar"
 
@@ -68,89 +78,89 @@ msgstr "BC_DisplayInfo::init_window: no se puede conectar el servidor X.\n"
 msgid "Recent paths"
 msgstr "Rutas recientes"
 
-#: guicast/bcfilebox.C:243
+#: guicast/bcfilebox.C:237
 msgid "Change the filter"
 msgstr "Cambiar el filtro"
 
-#: guicast/bcfilebox.C:261
+#: guicast/bcfilebox.C:255
 msgid "Size numeric format"
-msgstr "Tamaño formato numérico"
+msgstr "Formato numérico del tamaño"
 
-#: guicast/bcfilebox.C:287
+#: guicast/bcfilebox.C:281
 msgid "Submit the directory"
-msgstr "Meter el directorio"
+msgstr "Enviar la carpeta"
 
-#: guicast/bcfilebox.C:312
+#: guicast/bcfilebox.C:306
 msgid "Descend directory"
-msgstr "Bajar el directorio"
+msgstr "Bajar la carpeta"
 
-#: guicast/bcfilebox.C:314
+#: guicast/bcfilebox.C:308
 msgid "Submit the file"
-msgstr "Enviar el archivo"
+msgstr "Aceptar la operación"
 
-#: guicast/bcfilebox.C:333
+#: guicast/bcfilebox.C:327
 msgid "Cancel the operation"
 msgstr "Cancelar la operación"
 
-#: guicast/bcfilebox.C:354 cinelerra/awindowgui.C:3478
+#: guicast/bcfilebox.C:348 cinelerra/awindowgui.C:3493
 #: cinelerra/folderlistmenu.C:61
 msgid "Display text"
-msgstr "Mostrar texto"
+msgstr "Vista de Lista"
 
-#: guicast/bcfilebox.C:368 cinelerra/awindowgui.C:3469
+#: guicast/bcfilebox.C:362 cinelerra/awindowgui.C:3484
 #: cinelerra/folderlistmenu.C:61
 msgid "Display icons"
-msgstr "Mostrar iconos"
+msgstr "Vista de Iconos"
 
-#: guicast/bcfilebox.C:382
+#: guicast/bcfilebox.C:376
 msgid "Create new folder"
 msgstr "Crear nueva carpeta"
 
-#: guicast/bcfilebox.C:395
+#: guicast/bcfilebox.C:389
 msgid "Rename file"
 msgstr "Cambiar el nombre de archivo"
 
-#: guicast/bcfilebox.C:407
+#: guicast/bcfilebox.C:401
 msgid "Up a directory"
-msgstr "Subir un directorio"
+msgstr "Subir una carpeta"
 
-#: guicast/bcfilebox.C:421
+#: guicast/bcfilebox.C:415
 msgid "Delete files"
 msgstr "Eliminar archivos"
 
-#: guicast/bcfilebox.C:435
+#: guicast/bcfilebox.C:429
 msgid "Refresh"
 msgstr "Actualizar"
 
-#: guicast/bcfilebox.C:617 cinelerra/channelinfo.C:1330
+#: guicast/bcfilebox.C:611 cinelerra/channelinfo.C:1330
 msgid "Directory:"
-msgstr "Directorio:"
+msgstr "Carpeta:"
 
-#: guicast/bcfilebox.C:627 cinelerra/awindowgui.C:3177
+#: guicast/bcfilebox.C:621 cinelerra/awindowgui.C:3192
 msgid "Search:"
 msgstr "Buscar:"
 
-#: guicast/bcfilebox.C:659
+#: guicast/bcfilebox.C:653
 msgid "File:"
-msgstr "Archivo:"
+msgstr "Nombre del Archivo:"
 
-#: guicast/bcfilebox.C:665
+#: guicast/bcfilebox.C:659
 msgid "Specify filter:"
-msgstr "Filtro Activo:"
+msgstr "Especificar filtro:"
 
-#: guicast/bcfilebox.C:1365 cinelerra/binfolder.C:1673
+#: guicast/bcfilebox.C:1357 cinelerra/binfolder.C:1673
 msgid ": New folder"
 msgstr ": Nueva carpeta"
 
-#: guicast/bcfilebox.C:1380
+#: guicast/bcfilebox.C:1372
 msgid ": Rename"
 msgstr ": Cambiar el nombre"
 
-#: guicast/bcfilebox.C:1395
+#: guicast/bcfilebox.C:1387
 msgid ": Delete"
 msgstr ": Borrar"
 
-#: guicast/bcfilebox.inc:47 cinelerra/mainmenu.C:101
+#: guicast/bcfilebox.inc:47 cinelerra/mainmenu.C:102
 msgid "File"
 msgstr "Archivo"
 
@@ -170,11 +180,11 @@ msgstr "Ext."
 msgid "Enter the name of the folder:"
 msgstr "Introduzca el nombre de la carpeta:"
 
-#: guicast/bcnewfolder.C:51 cinelerra/pluginclient.C:557
+#: guicast/bcnewfolder.C:51 cinelerra/pluginclient.C:538
 msgid "Untitled"
 msgstr "Sin título"
 
-#: guicast/bcpopup.C:32 guicast/bcpopup.C:38 cinelerra/canvas.C:1118
+#: guicast/bcpopup.C:32 guicast/bcpopup.C:38 cinelerra/canvas.C:1110
 msgid "Fullscreen"
 msgstr "Pantalla Completa"
 
@@ -199,17 +209,17 @@ msgstr "Introducir un nuevo nombre para el archivo:"
 msgid "Conversion from %s to %s is not available\n"
 msgstr "La conversión de %s a %s no está disponible\n"
 
-#: guicast/bctextbox.C:2901 cinelerra/editpopup.C:134
+#: guicast/bctextbox.C:2901 cinelerra/editpopup.C:188
 msgid "Cut"
 msgstr "Cortar"
 
-#: guicast/bctextbox.C:2915 cinelerra/clippopup.C:240 cinelerra/editpopup.C:105
-#: cinelerra/mainmenu.C:885 cinelerra/proxypopup.C:205 cinelerra/savefile.C:242
+#: guicast/bctextbox.C:2915 cinelerra/clippopup.C:247 cinelerra/editpopup.C:159
+#: cinelerra/mainmenu.C:889 cinelerra/proxypopup.C:205 cinelerra/savefile.C:242
 msgid "Copy"
 msgstr "Copiar"
 
-#: guicast/bctextbox.C:2928 cinelerra/assetpopup.C:313
-#: cinelerra/clippopup.C:273 cinelerra/editpopup.C:191 cinelerra/mainmenu.C:898
+#: guicast/bctextbox.C:2928 cinelerra/assetpopup.C:423
+#: cinelerra/clippopup.C:280 cinelerra/editpopup.C:245 cinelerra/mainmenu.C:902
 #: cinelerra/proxypopup.C:238 cinelerra/swindow.C:547
 msgid "Paste"
 msgstr "Pegar"
@@ -217,7 +227,7 @@ msgstr "Pegar"
 #: guicast/bctheme.C:511
 #, c-format
 msgid "Theme::get_image: %s not found.\n"
-msgstr "Theme::obtener_imagen: %s no encontrado.\n"
+msgstr "Tema::obtener_imagen: %s no encontrado.\n"
 
 #: guicast/bctheme.C:522
 #, c-format
@@ -227,7 +237,11 @@ msgstr "BC_Theme::check_used: Las imágenes no se utilizan.\n"
 #: guicast/bcwindow3d.C:65
 #, c-format
 msgid "%s: opengl initialization failed failed\n"
-msgstr "%s: opengl initialization failed failed\n"
+msgstr "%s: falló la inicialización de opengl\n"
+
+#: guicast/bcwindowbase.C:2419
+msgid " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
+msgstr " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
 
 #: guicast/test.C:165
 msgid ""
@@ -241,41 +255,41 @@ msgstr ""
 msgid "Hello world"
 msgstr "Hola mundo"
 
-#: guicast/units.h:39
+#: guicast/units.h:41
 msgid "Hours:Minutes:Seconds.xxx"
 msgstr "Horas: Minutos: Segundos.xxx"
 
-#: guicast/units.h:42
+#: guicast/units.h:44
 msgid "Hours:Minutes:Seconds:Frames"
 msgstr "Horas:Minutos:Segundos:Fotogramas"
 
-#: guicast/units.h:44 cinelerra/patchbay.C:83 cinelerra/transitionpopup.C:141
+#: guicast/units.h:46 cinelerra/patchbay.C:83 cinelerra/transitionpopup.C:141
 #: plugins/motion51/motionwindow51.C:51
 msgid "Samples"
 msgstr "Muestras"
 
-#: guicast/units.h:46
+#: guicast/units.h:48
 msgid "Hex Samples"
 msgstr "Muestras Hex"
 
-#: guicast/units.h:48 cinelerra/patchbay.C:84 cinelerra/transitionpopup.C:140
+#: guicast/units.h:50 cinelerra/patchbay.C:84 cinelerra/transitionpopup.C:140
 msgid "Frames"
 msgstr "Fotogramas"
 
-#: guicast/units.h:60
+#: guicast/units.h:62
 msgid "Feet-frames"
-msgstr "Feet-fotogramas"
+msgstr "Fotos x Pie (USA)"
 
-#: guicast/units.h:65 guicast/units.h:68
+#: guicast/units.h:67 guicast/units.h:70
 msgid "Hours:Minutes:Seconds"
 msgstr "Horas:Minutos:Segundos"
 
-#: guicast/units.h:71 cinelerra/interfaceprefs.C:194 cinelerra/patchbay.C:93
+#: guicast/units.h:73 cinelerra/interfaceprefs.C:203 cinelerra/patchbay.C:93
 #: cinelerra/transitionpopup.C:139
 msgid "Seconds"
-msgstr "Segundos"
+msgstr "Seg"
 
-#: guicast/units.h:76
+#: guicast/units.h:78
 msgid "Minutes:Seconds"
 msgstr "Minutos: Segundos"
 
@@ -309,65 +323,65 @@ msgstr ""
 #: cinelerra/adcuts.C:30
 #, c-format
 msgid "cuts to %s complete\n"
-msgstr "cuts to %s complete\n"
+msgstr "cortes a %s completos\n"
 
-#: cinelerra/adeviceprefs.C:299 cinelerra/vdeviceprefs.C:332
+#: cinelerra/adeviceprefs.C:305 cinelerra/vdeviceprefs.C:332
 #: cinelerra/vdeviceprefs.C:344 cinelerra/vdeviceprefs.C:361
 msgid "Device path:"
 msgstr "Ruta del dispositivo:"
 
-#: cinelerra/adeviceprefs.C:320 cinelerra/adeviceprefs.C:390
-#: cinelerra/adeviceprefs.C:579 cinelerra/adeviceprefs.C:596
-#: cinelerra/adeviceprefs.C:598 cinelerra/assetedit.C:371
+#: cinelerra/adeviceprefs.C:326 cinelerra/adeviceprefs.C:396
+#: cinelerra/adeviceprefs.C:585 cinelerra/adeviceprefs.C:602
+#: cinelerra/adeviceprefs.C:604 cinelerra/assetedit.C:371
 #: cinelerra/fileformat.C:88 cinelerra/formatwindow.C:48
 msgid "Bits:"
 msgstr "Bits:"
 
-#: cinelerra/adeviceprefs.C:369
+#: cinelerra/adeviceprefs.C:375
 msgid "Device:"
 msgstr "Dispositivo:"
 
-#: cinelerra/adeviceprefs.C:404
+#: cinelerra/adeviceprefs.C:410
 msgid "Stop playback locks up."
-msgstr "Evitar que el play se bloquee."
+msgstr "Parar la reproducción si se bloquea."
 
-#: cinelerra/adeviceprefs.C:431
+#: cinelerra/adeviceprefs.C:437
 msgid "Server:"
 msgstr "Servidor:"
 
-#: cinelerra/adeviceprefs.C:449 cinelerra/adeviceprefs.C:502
-#: cinelerra/interfaceprefs.C:133 cinelerra/performanceprefs.C:167
+#: cinelerra/adeviceprefs.C:455 cinelerra/adeviceprefs.C:508
+#: cinelerra/interfaceprefs.C:134 cinelerra/performanceprefs.C:167
 #: cinelerra/vdeviceprefs.C:277
 msgid "Port:"
 msgstr "Puerto:"
 
-#: cinelerra/adeviceprefs.C:482 cinelerra/vdeviceprefs.C:259
+#: cinelerra/adeviceprefs.C:488 cinelerra/vdeviceprefs.C:259
 msgid "Device Path:"
 msgstr "Ruta de Dispositivo:"
 
-#: cinelerra/adeviceprefs.C:522 cinelerra/channeledit.C:997
-#: cinelerra/vdeviceprefs.C:295
+#: cinelerra/adeviceprefs.C:528 cinelerra/channeledit.C:997
+#: cinelerra/vdeviceprefs.C:295 plugins/compressormulti/comprmultigui.C:190
 msgid "Channel:"
 msgstr "Canal:"
 
-#: cinelerra/adeviceprefs.C:546 cinelerra/vdeviceprefs.C:318
+#: cinelerra/adeviceprefs.C:552 cinelerra/vdeviceprefs.C:318
 msgid "Syt Offset:"
 msgstr "Compensación Syt:"
 
-#: cinelerra/adeviceprefs.C:564 cinelerra/adeviceprefs.C:566
+#: cinelerra/adeviceprefs.C:570 cinelerra/adeviceprefs.C:572
 #: cinelerra/vdeviceprefs.C:214 cinelerra/vdeviceprefs.C:216
 msgid "DVB Adapter:"
 msgstr "Adaptador DVB:"
 
-#: cinelerra/adeviceprefs.C:572 cinelerra/vdeviceprefs.C:221
+#: cinelerra/adeviceprefs.C:578 cinelerra/vdeviceprefs.C:221
 msgid "dev:"
 msgstr "disp:"
 
-#: cinelerra/adeviceprefs.C:587 cinelerra/adeviceprefs.C:606
+#: cinelerra/adeviceprefs.C:593 cinelerra/adeviceprefs.C:612
 msgid "Follow audio config"
-msgstr "Seguir config audio"
+msgstr "Sigue la configuración de audio"
 
-#: cinelerra/amodule.C:472
+#: cinelerra/amodule.C:268
 #, c-format
 msgid "AModule::import_samples Couldn't open %s.\n"
 msgstr "AModule::importar_samples No se pudo abrir %s.\n"
@@ -381,8 +395,8 @@ msgstr "Automatización"
 msgid "Plugin %d"
 msgstr "Plugin %d"
 
-#: cinelerra/apanel.C:86 cinelerra/editpopup.C:162 cinelerra/gwindowgui.C:71
-#: cinelerra/keyframepopup.C:569 cinelerra/mainmenu.C:247
+#: cinelerra/apanel.C:86 cinelerra/gwindowgui.C:71
+#: cinelerra/keyframepopup.C:569 cinelerra/mainmenu.C:251
 msgid "Mute"
 msgstr "Silenciar"
 
@@ -396,172 +410,184 @@ msgstr "Reproducir"
 msgid "fade"
 msgstr "desvanecer"
 
-#: cinelerra/apatchgui.C:304 cinelerra/gwindowgui.C:79 cinelerra/mainmenu.C:249
+#: cinelerra/apatchgui.C:304 cinelerra/gwindowgui.C:79 cinelerra/mainmenu.C:253
 msgid "Pan"
-msgstr "Pan"
+msgstr "Panorámica"
 
 #: cinelerra/apatchgui.C:314 cinelerra/apatchgui.C:322
 msgid "pan"
-msgstr "pan"
+msgstr "panorámica"
 
 #: cinelerra/apatchgui.C:370 cinelerra/mixersalign.C:73
 #: cinelerra/mixersalign.C:188 cinelerra/vpatchgui.C:485
 msgid "Mixer"
 msgstr "Mezclador"
 
-#: cinelerra/appearanceprefs.C:78
+#: cinelerra/appearanceprefs.C:79
 msgid "Layout:"
 msgstr "Diseño:"
 
-#: cinelerra/appearanceprefs.C:84
+#: cinelerra/appearanceprefs.C:85
 msgid "Theme:"
 msgstr "Tema:"
 
-#: cinelerra/appearanceprefs.C:91
+#: cinelerra/appearanceprefs.C:92
 msgid "Plugin Icons:"
 msgstr "Complemento Íconos:"
 
-#: cinelerra/appearanceprefs.C:100
+#: cinelerra/appearanceprefs.C:101
 msgid "Layout Scale:"
 msgstr "Escala de diseño:"
 
-#: cinelerra/appearanceprefs.C:104
+#: cinelerra/appearanceprefs.C:105
 msgid "View thumbnail size:"
-msgstr "Ver tamaño de miniatura:"
+msgstr "Tamaño de miniatura:"
 
-#: cinelerra/appearanceprefs.C:108
+#: cinelerra/appearanceprefs.C:109
 msgid "Vicon quality:"
 msgstr "Calidad de Vicon:"
 
-#: cinelerra/appearanceprefs.C:112
+#: cinelerra/appearanceprefs.C:113
 msgid "Vicon color mode:"
 msgstr "Modo de color de Vicon:"
 
-#: cinelerra/appearanceprefs.C:122
+#: cinelerra/appearanceprefs.C:123
 msgid "Time Format:"
-msgstr "Formato de hora:"
-
-#: cinelerra/appearanceprefs.C:125
-msgid "Flags:"
-msgstr "Banderines:"
+msgstr "Formato de Tiempo:"
 
-#: cinelerra/appearanceprefs.C:157
+#: cinelerra/appearanceprefs.C:150
 msgid "Frames per foot:"
-msgstr "Fotogramas por foot:"
+msgstr "Fotogramas por pie:"
 
-#: cinelerra/appearanceprefs.C:172 cinelerra/channeledit.C:1417
+#: cinelerra/appearanceprefs.C:164 cinelerra/channeledit.C:1417
 #: cinelerra/channeledit.C:1491 plugins/chromakey/chromakey.C:135
-#: plugins/chromakeyhsv/chromakey.C:187 plugins/sketcher/sketcherwindow.C:334
-#: plugins/sketcher/sketcherwindow.C:335 plugins/titler/titlerwindow.C:352
+#: plugins/chromakeyhsv/chromakey.C:187 plugins/sketcher/sketcherwindow.C:386
+#: plugins/sketcher/sketcherwindow.C:387 plugins/titler/titlerwindow.C:352
 msgid "Color:"
 msgstr "Color:"
 
-#: cinelerra/appearanceprefs.C:175
+#: cinelerra/appearanceprefs.C:167
 msgid "Highlighting Inversion color:"
-msgstr "Resaltado del color de inversión:"
+msgstr "Resaltando el color de inversión:"
 
-#: cinelerra/appearanceprefs.C:182
+#: cinelerra/appearanceprefs.C:174
 msgid "Composer BG Color:"
 msgstr "Color de fondo del compositor:"
 
-#: cinelerra/appearanceprefs.C:192
+#: cinelerra/appearanceprefs.C:184
 msgid "YUV color space:"
 msgstr "Espacio de color YUV:"
 
-#: cinelerra/appearanceprefs.C:199
+#: cinelerra/appearanceprefs.C:191
 msgid "YUV color range:"
 msgstr "Rango de color YUV:"
 
-#: cinelerra/appearanceprefs.C:458
+#: cinelerra/appearanceprefs.C:202
+msgid "Warnings:"
+msgstr "Advertencias:"
+
+#: cinelerra/appearanceprefs.C:223
+msgid "Flags:"
+msgstr "Banderines:"
+
+#: cinelerra/appearanceprefs.C:473
 msgid "Use thumbnails in resource window"
-msgstr "Usar miniaturas en la ventana de clips"
+msgstr "Usar miniaturas en la ventana de recursos"
 
-#: cinelerra/appearanceprefs.C:519 plugins/descratch/descratch.C:625
+#: cinelerra/appearanceprefs.C:534 plugins/descratch/descratch.C:625
 msgid "Low"
 msgstr "Bajo"
 
-#: cinelerra/appearanceprefs.C:520
+#: cinelerra/appearanceprefs.C:535
 msgid "Med"
 msgstr "Medio"
 
-#: cinelerra/appearanceprefs.C:521 plugins/descratch/descratch.C:626
+#: cinelerra/appearanceprefs.C:536 plugins/descratch/descratch.C:626
 msgid "High"
 msgstr "Intenso"
 
-#: cinelerra/appearanceprefs.C:556
+#: cinelerra/appearanceprefs.C:571
 msgid "Show tip of the day"
 msgstr "Mostrar sugerencia del día"
 
-#: cinelerra/appearanceprefs.C:569
+#: cinelerra/appearanceprefs.C:584
 msgid "ffmpeg probe warns rebuild indexes"
 msgstr "tubería ffmpeg advierte reconstrucción de índices"
 
-#: cinelerra/appearanceprefs.C:582
+#: cinelerra/appearanceprefs.C:597
 msgid "EDL version warns if mismatched"
 msgstr "Versión EDL advierte si no coinciden"
 
-#: cinelerra/appearanceprefs.C:595
+#: cinelerra/appearanceprefs.C:610
+msgid "Stack warns if reference not modified"
+msgstr "La pila advierte si la referencia no se modifica"
+
+#: cinelerra/appearanceprefs.C:623
 msgid "Create Bluray warns if not root"
 msgstr "Crear advertencias de Bluray si no es root"
 
-#: cinelerra/appearanceprefs.C:608
+#: cinelerra/appearanceprefs.C:636
+msgid "Warn on creating file references"
+msgstr "Warn on creating file references"
+
+#: cinelerra/appearanceprefs.C:650
 msgid "Popups activate on button up"
-msgstr "Popups activar el botón de arriba"
+msgstr "Las ventanas emergentes se activan al presionar el botón"
 
-#: cinelerra/appearanceprefs.C:621
+#: cinelerra/appearanceprefs.C:663
 msgid "Set Input Focus when window entered"
-msgstr "Establecer el enfoque de entrada cuando se entra en la ventana"
+msgstr "Establecer el enfoque cuando se entra en la ventana"
 
-#: cinelerra/appearanceprefs.C:634
+#: cinelerra/appearanceprefs.C:676
 msgid "Click to activate text focus"
 msgstr "Clic para activar foco en texto"
 
-#: cinelerra/appearanceprefs.C:650
+#: cinelerra/appearanceprefs.C:692
 msgid "Click to deactivate text focus"
 msgstr "Click para desactivar foco en texto"
 
-#: cinelerra/appearanceprefs.C:666
+#: cinelerra/appearanceprefs.C:708
 msgid "Always show next frame"
 msgstr "Siempre mostrar fotograma siguiente"
 
-#: cinelerra/appearanceprefs.C:679
+#: cinelerra/appearanceprefs.C:721
 msgid "Autocolor assets"
 msgstr "Color automático de recursos"
 
-#: cinelerra/appearanceprefs.C:711
+#: cinelerra/appearanceprefs.C:753
 msgid "BT601"
 msgstr "BT601"
 
-#: cinelerra/appearanceprefs.C:712
+#: cinelerra/appearanceprefs.C:754
 msgid "BT709"
 msgstr "BT709"
 
-#: cinelerra/appearanceprefs.C:713
+#: cinelerra/appearanceprefs.C:755
 msgid "BT2020"
 msgstr "BT2020"
 
-#: cinelerra/appearanceprefs.C:755 cinelerra/compresspopup.C:39
-#: cinelerra/file.inc:109
+#: cinelerra/appearanceprefs.C:797 cinelerra/compresspopup.C:39
+#: cinelerra/file.inc:110
 msgid "JPEG"
 msgstr "JPEG"
 
-#: cinelerra/appearanceprefs.C:756 cinelerra/file.inc:113
+#: cinelerra/appearanceprefs.C:798 cinelerra/file.inc:114
 msgid "MPEG"
 msgstr "MPEG"
 
-#: cinelerra/appearanceprefs.C:798
+#: cinelerra/appearanceprefs.C:840
 msgid "Perpetual session"
 msgstr "Sesión perpetua"
 
-#: cinelerra/appearanceprefs.C:811
+#: cinelerra/appearanceprefs.C:853
 msgid "Clears before toggle"
 msgstr "Se borra antes de alternar"
 
-#: cinelerra/appearanceprefs.C:824
+#: cinelerra/appearanceprefs.C:866
 msgid "Timeline Rectify Audio"
 msgstr "Rectificar línea de tiempo de audio"
 
-#: cinelerra/appearanceprefs.C:837
+#: cinelerra/appearanceprefs.C:879
 msgid "Composer BG color"
 msgstr "Color de fondo del compositor"
 
@@ -579,7 +605,7 @@ msgstr "Seleccionar un archivo para este clip:"
 
 #: cinelerra/assetedit.C:266
 msgid "File format:"
-msgstr "Formato de archivo:"
+msgstr "Formato del archivo:"
 
 #: cinelerra/assetedit.C:275
 msgid "Bytes:"
@@ -644,7 +670,7 @@ msgstr "Velocidad de fotograma:"
 
 #: cinelerra/assetedit.C:475 cinelerra/scale.C:214 cinelerra/scale.C:216
 #: cinelerra/setformat.C:363 plugins/freeverb/freeverb.C:332
-#: plugins/photoscale/photoscale.C:66 plugins/sketcher/sketcherwindow.C:308
+#: plugins/photoscale/photoscale.C:66 plugins/sketcher/sketcherwindow.C:356
 msgid "Width:"
 msgstr "Ancho:"
 
@@ -686,83 +712,126 @@ msgstr ": Ruta"
 msgid "Select a file"
 msgstr "Seleccionar un archivo"
 
-#: cinelerra/assetpopup.C:86 cinelerra/clippopup.C:75
+#: cinelerra/assetpopup.C:89 cinelerra/clippopup.C:76
 msgid "Match..."
 msgstr "Ajusta todo.."
 
-#: cinelerra/assetpopup.C:91 cinelerra/proxypopup.C:70
+#: cinelerra/assetpopup.C:94 cinelerra/proxypopup.C:70
 msgid "Remove..."
 msgstr "Eliminar..."
 
-#: cinelerra/assetpopup.C:151 cinelerra/clippopup.C:136
+#: cinelerra/assetpopup.C:176 cinelerra/clippopup.C:143
 #: cinelerra/proxypopup.C:101
 msgid "Info..."
-msgstr "Info ..."
+msgstr "Información..."
+
+#: cinelerra/assetpopup.C:208 cinelerra/clippopup.C:451
+#: cinelerra/editpopup.C:98
+msgid "Open EDL"
+msgstr "Abrir EDL"
+
+#: cinelerra/assetpopup.C:230 cinelerra/editpopup.C:116
+#: cinelerra/mwindow.C:2109
+#, c-format
+msgid ""
+"Error: unable to open:\n"
+"  %s"
+msgstr ""
+"Error: no se puede abrir:\n"
+" %s"
+
+#: cinelerra/assetpopup.C:236 cinelerra/editpopup.C:122
+#: cinelerra/mwindow.C:2134
+#, c-format
+msgid ""
+"Error: unable to load:\n"
+"  %s"
+msgstr ""
+"Error: no se puede cargar:\n"
+" %s"
 
-#: cinelerra/assetpopup.C:183
+#: cinelerra/assetpopup.C:248 cinelerra/mwindow.C:3973
+#, c-format
+msgid ""
+"media is not EDL:\n"
+"%s"
+msgstr ""
+"los medios no son EDL:\n"
+"%s"
+
+#: cinelerra/assetpopup.C:254 cinelerra/clippopup.C:474
+#: cinelerra/mwindowgui.C:2347
+msgid "Close EDL"
+msgstr "Cerrar EDL"
+
+#: cinelerra/assetpopup.C:275
+msgid "EDL to clip"
+msgstr "EDL al clip"
+
+#: cinelerra/assetpopup.C:293
 msgid "Rebuild index"
-msgstr "Reconstruir índice"
+msgstr "Reconstruir el índice"
 
-#: cinelerra/assetpopup.C:202 cinelerra/channeledit.C:553
+#: cinelerra/assetpopup.C:312 cinelerra/channeledit.C:553
 msgid "Sort"
 msgstr "Ordenar"
 
-#: cinelerra/assetpopup.C:220 cinelerra/clippopup.C:184
-#: cinelerra/mainmenu.C:242 cinelerra/proxypopup.C:149
+#: cinelerra/assetpopup.C:330 cinelerra/clippopup.C:191
+#: cinelerra/mainmenu.C:246 cinelerra/proxypopup.C:149
 msgid "View"
 msgstr "Ver"
 
-#: cinelerra/assetpopup.C:247 cinelerra/clippopup.C:211
+#: cinelerra/assetpopup.C:357 cinelerra/clippopup.C:218
 #: cinelerra/proxypopup.C:176
 msgid "View in new window"
 msgstr "Ver en una nueva ventana"
 
-#: cinelerra/assetpopup.C:275
+#: cinelerra/assetpopup.C:385
 msgid "Open Mixers"
-msgstr "Abrir mezcladores"
+msgstr "Abrir en mezclador"
 
-#: cinelerra/assetpopup.C:294
+#: cinelerra/assetpopup.C:404
 msgid "Insert Mixers"
-msgstr "Insertar clips"
+msgstr "Insertar en mezclador"
 
-#: cinelerra/assetpopup.C:331 cinelerra/clippopup.C:291
+#: cinelerra/assetpopup.C:441 cinelerra/clippopup.C:298
 msgid "Match project size"
 msgstr "Ajusta al tamaño del proyecto"
 
-#: cinelerra/assetpopup.C:344 cinelerra/clippopup.C:305
+#: cinelerra/assetpopup.C:454 cinelerra/clippopup.C:312
 msgid "Match frame rate"
 msgstr "Ajusta velocidad de fotograma"
 
-#: cinelerra/assetpopup.C:357 cinelerra/clippopup.C:319
+#: cinelerra/assetpopup.C:467 cinelerra/clippopup.C:326
 msgid "Match all"
 msgstr "Ajusta todo"
 
-#: cinelerra/assetpopup.C:371 cinelerra/proxypopup.C:256
+#: cinelerra/assetpopup.C:481 cinelerra/proxypopup.C:256
 msgid "Remove from project"
 msgstr "Eliminar del proyecto"
 
-#: cinelerra/assetpopup.C:393 cinelerra/proxypopup.C:277
+#: cinelerra/assetpopup.C:502 cinelerra/proxypopup.C:277
 msgid "Remove from disk"
 msgstr "Eliminar del disco"
 
-#: cinelerra/assetpopup.C:433 cinelerra/proxypopup.C:314
+#: cinelerra/assetpopup.C:539 cinelerra/proxypopup.C:314
 #: plugins/descratch/descratch.C:627
 msgid "All"
 msgstr "Todos"
 
-#: cinelerra/assetpopup.C:434 cinelerra/proxypopup.C:315
+#: cinelerra/assetpopup.C:540 cinelerra/proxypopup.C:315
 msgid "Used"
 msgstr "Usado"
 
-#: cinelerra/assetpopup.C:435 cinelerra/proxypopup.C:316
+#: cinelerra/assetpopup.C:541 cinelerra/proxypopup.C:316
 msgid "Unused"
 msgstr "No usado"
 
-#: cinelerra/assetpopup.C:436 cinelerra/channeledit.C:153
-#: cinelerra/ffmpeg.C:1864 cinelerra/ffmpeg.C:1911 cinelerra/fileexr.C:200
+#: cinelerra/assetpopup.C:542 cinelerra/channeledit.C:153
+#: cinelerra/ffmpeg.C:1887 cinelerra/ffmpeg.C:1934 cinelerra/fileexr.C:200
 #: cinelerra/fileffmpeg.C:545 cinelerra/fileffmpeg.C:717
 #: cinelerra/proxypopup.C:317 cinelerra/recordbatches.C:309
-#: cinelerra/recordgui.C:323 cinelerra/rescale.C:7
+#: cinelerra/recordgui.C:323 cinelerra/recordgui.C:772 cinelerra/rescale.C:7
 #: cinelerra/sharedlocation.C:144 cinelerra/sharedlocation.C:149
 #: cinelerra/sharedlocation.C:162 cinelerra/vwindowgui.C:270
 #: plugins/descratch/descratch.C:624 plugins/findobj/findobjwindow.C:887
@@ -772,82 +841,82 @@ msgstr "No usado"
 msgid "None"
 msgstr "Ninguno"
 
-#: cinelerra/assetpopup.C:443 cinelerra/assetpopup.C:450
+#: cinelerra/assetpopup.C:549 cinelerra/assetpopup.C:556
 #: plugins/titler/titler.h:39
 msgid "png"
 msgstr "png"
 
-#: cinelerra/assetpopup.C:444 cinelerra/assetpopup.C:451
+#: cinelerra/assetpopup.C:550 cinelerra/assetpopup.C:557
 msgid "jpeg"
 msgstr "jpg"
 
-#: cinelerra/assetpopup.C:445 cinelerra/assetpopup.C:452
+#: cinelerra/assetpopup.C:551 cinelerra/assetpopup.C:558
 msgid "tiff"
 msgstr "tiff"
 
-#: cinelerra/assetpopup.C:446 cinelerra/assetpopup.C:453
+#: cinelerra/assetpopup.C:552 cinelerra/assetpopup.C:559
 msgid "ppm"
 msgstr "ppm"
 
-#: cinelerra/assetpopup.C:458 cinelerra/loadfile.C:46
+#: cinelerra/assetpopup.C:564 cinelerra/loadfile.C:47
 msgid "Load files..."
 msgstr "Cargar archivos ..."
 
-#: cinelerra/assetpopup.C:490
+#: cinelerra/assetpopup.C:590
 msgid "Copy file list"
 msgstr "Copiar lista de archivos"
 
-#: cinelerra/assetpopup.C:532
+#: cinelerra/assetpopup.C:632
 msgid "Nothing selected"
 msgstr "Nada seleccionado"
 
-#: cinelerra/assetpopup.C:581
+#: cinelerra/assetpopup.C:681
 msgid ": Copy File List"
 msgstr ": Copiar lista de archivos"
 
-#: cinelerra/assetpopup.C:599
+#: cinelerra/assetpopup.C:699
 msgid "List of asset paths:"
 msgstr "Lista de rutas de recursos:"
 
-#: cinelerra/assetpopup.C:625
+#: cinelerra/assetpopup.C:725
 msgid "Paste file list"
 msgstr "Pegar lista de archivo"
 
-#: cinelerra/assetpopup.C:713
+#: cinelerra/assetpopup.C:814
 msgid ": Paste File List"
 msgstr ": Pegar lista de archivo"
 
-#: cinelerra/assetpopup.C:731
+#: cinelerra/assetpopup.C:832
 msgid "Enter list of asset paths:"
 msgstr "Ingresar lista de rutas de recursos:"
 
-#: cinelerra/assetpopup.C:757
+#: cinelerra/assetpopup.C:858
 msgid "Snapshot..."
 msgstr "Instantánea..."
 
-#: cinelerra/assetpopup.C:799
+#: cinelerra/assetpopup.C:901
 msgid "snap"
 msgstr "instantánea"
 
-#: cinelerra/assetpopup.C:870
+#: cinelerra/assetpopup.C:972
 msgid "snapshot render failed"
 msgstr "error en el renderizado de instantáneas"
 
-#: cinelerra/assetpopup.C:878
+#: cinelerra/assetpopup.C:980
 msgid "Grabshot..."
 msgstr "Captura de imágenes...."
 
-#: cinelerra/assetpopup.C:1024
+#: cinelerra/assetpopup.C:1127
 msgid "grab"
 msgstr "captura"
 
-#: cinelerra/assetpopup.C:1091
+#: cinelerra/assetpopup.C:1194
 msgid "grabshot render failed"
 msgstr "error en el renderizado de capturas"
 
 #: cinelerra/assetremove.C:32
 msgid ": Remove assets"
-msgstr ": Eliminar clips"
+msgstr ": Eliminar clips activos"
 
 #: cinelerra/assetremove.C:65
 msgid "Permanently remove from disk?"
@@ -883,15 +952,20 @@ msgstr "Dispositivo configurado ALSA no soporta el funcionamiento del canal %d\n
 msgid " Configured ALSA device does not support %u Hz playback.\n"
 msgstr " Dispositivo configurado ALSA no es compatible con la reproducción %u Hz.\n"
 
+#: cinelerra/audioalsa.C:582
+#, c-format
+msgid "AudioALSA::write_buffer err %d(%s) at sample %jd\n"
+msgstr "AudioALSA::escritura_de_buffer err %d(%s) en la muestra %jd\n"
+
 #: cinelerra/audiooss.C:213 cinelerra/audiooss.C:215 cinelerra/audiooss.C:219
 #: cinelerra/audiooss.C:221
 #, c-format
 msgid "%s failed\n"
-msgstr "%s fallido\n"
+msgstr "%s falló\n"
 
 #: cinelerra/avc1394transport.C:175 cinelerra/playtransport.C:384
 msgid "Rewind ( Home )"
-msgstr "Rebobinar (home)"
+msgstr "Rebobinar (inicio)"
 
 #: cinelerra/avc1394transport.C:200
 msgid "Fast Reverse ( + )"
@@ -899,11 +973,11 @@ msgstr "Invertir rápido (+)"
 
 #: cinelerra/avc1394transport.C:224
 msgid "Reverse Play ( 6 )"
-msgstr "Reproducir invertir (6)"
+msgstr "Reproducir al revés (6)"
 
 #: cinelerra/avc1394transport.C:256
 msgid "Stop ( 0 )"
-msgstr "Stop (0)"
+msgstr "Parar (0)"
 
 #: cinelerra/avc1394transport.C:281
 msgid "Play ( 3 )"
@@ -915,7 +989,7 @@ msgstr "Pausar"
 
 #: cinelerra/avc1394transport.C:337
 msgid "Fast Forward ( Enter )"
-msgstr "Avanzar Rapido (Enter)"
+msgstr "Avanzar Rapido (Intro)"
 
 #: cinelerra/avc1394transport.C:365 cinelerra/playtransport.C:475
 msgid "Jump to end ( End )"
@@ -947,7 +1021,7 @@ msgstr "Clips"
 
 #: cinelerra/awindowgui.C:94 cinelerra/binfolder.C:1783
 msgid "Media"
-msgstr "Medios de comunicación"
+msgstr "Medios Multimedia"
 
 #: cinelerra/awindowgui.C:95
 msgid "Proxy"
@@ -955,11 +1029,11 @@ msgstr "Proxy"
 
 #: cinelerra/awindowgui.C:100
 msgid "Full Play"
-msgstr "Reproducir completa"
+msgstr "Reproducir todo"
 
 #: cinelerra/awindowgui.C:101
 msgid "Mouse Over"
-msgstr "Puntero sobre"
+msgstr "Ratón sobre"
 
 #: cinelerra/awindowgui.C:102
 msgid "Src Target"
@@ -969,144 +1043,144 @@ msgstr "Objectivo de origen"
 msgid "No Play"
 msgstr "No Reproducir"
 
-#: cinelerra/awindowgui.C:962 cinelerra/awindowgui.C:1021
+#: cinelerra/awindowgui.C:977 cinelerra/awindowgui.C:1036
 #, c-format
 msgid "Reading %s"
 msgstr "Leyendo %s"
 
-#: cinelerra/awindowgui.C:1104 cinelerra/awindowgui.C:1153
+#: cinelerra/awindowgui.C:1119 cinelerra/awindowgui.C:1168
 #, c-format
 msgid "Rendering %s"
 msgstr "Renderizando %s"
 
-#: cinelerra/awindowgui.C:1258
+#: cinelerra/awindowgui.C:1273
 msgid ": Resources"
-msgstr "Recursos"
+msgstr "Recursos"
 
-#: cinelerra/awindowgui.C:1428 cinelerra/awindowgui.C:2364
-#: cinelerra/awindowgui.C:2384
+#: cinelerra/awindowgui.C:1443 cinelerra/awindowgui.C:2379
+#: cinelerra/awindowgui.C:2399
 msgid "awindowgui#Title"
 msgstr "Título"
 
-#: cinelerra/awindowgui.C:1429 cinelerra/awindowgui.C:2365
+#: cinelerra/awindowgui.C:1444 cinelerra/awindowgui.C:2380
 msgid "Comments"
 msgstr "Comentarios"
 
-#: cinelerra/awindowgui.C:1516
+#: cinelerra/awindowgui.C:1531
 msgid "Visibility"
 msgstr "Visibilidad"
 
-#: cinelerra/awindowgui.C:1744
+#: cinelerra/awindowgui.C:1759
 msgid ": Remove plugin"
 msgstr ": Eliminar plugin"
 
-#: cinelerra/awindowgui.C:1774
+#: cinelerra/awindowgui.C:1789
 msgid "remove plugin?"
-msgstr "eliminar complemento?"
+msgstr "eliminar plugin?"
 
-#: cinelerra/awindowgui.C:1803
+#: cinelerra/awindowgui.C:1818
 #, c-format
 msgid "remove %s\n"
 msgstr "eliminar %s\n"
 
-#: cinelerra/awindowgui.C:2209
+#: cinelerra/awindowgui.C:2224
 msgid "Proxy clip"
-msgstr "Información del clip"
+msgstr "Clip de Proxy"
 
-#: cinelerra/awindowgui.C:2383
+#: cinelerra/awindowgui.C:2398
 msgid "Time Stamps"
 msgstr "Marcas de tiempo"
 
-#: cinelerra/awindowgui.C:3131
+#: cinelerra/awindowgui.C:3146
 msgid "No info available"
 msgstr "Ninguna información disponible"
 
-#: cinelerra/awindowgui.C:3224
+#: cinelerra/awindowgui.C:3239
 msgid "Delete asset from disk"
 msgstr "Borrar clip desde el disco"
 
-#: cinelerra/awindowgui.C:3237
+#: cinelerra/awindowgui.C:3252
 msgid "Delete asset from project"
 msgstr "Borrar los clips de proyecto"
 
-#: cinelerra/awindowgui.C:3266
+#: cinelerra/awindowgui.C:3281
 msgid "Redraw index"
 msgstr "Volver a dibujar índice"
 
-#: cinelerra/awindowgui.C:3279
+#: cinelerra/awindowgui.C:3294
 msgid "Paste asset on recordable tracks"
 msgstr "Pegar clip en pistas grabables"
 
-#: cinelerra/awindowgui.C:3292
+#: cinelerra/awindowgui.C:3307
 msgid "Append asset in new tracks"
 msgstr "Agregar clip en una nueva pista"
 
-#: cinelerra/awindowgui.C:3305
+#: cinelerra/awindowgui.C:3320
 msgid "View asset"
 msgstr "Ver recurso"
 
-#: cinelerra/awindowgui.C:3349 cinelerra/fileffmpeg.C:1015
+#: cinelerra/awindowgui.C:3364 cinelerra/fileffmpeg.C:1015
 msgid "ffmpeg"
 msgstr "ffmpeg"
 
-#: cinelerra/awindowgui.C:3350
+#: cinelerra/awindowgui.C:3365
 msgid "ladspa"
 msgstr "ladspa"
 
-#: cinelerra/awindowgui.C:3351
+#: cinelerra/awindowgui.C:3366
 msgid "lv2"
 msgstr "lv2"
 
-#: cinelerra/awindowgui.C:3352
+#: cinelerra/awindowgui.C:3367
 msgid "audio_tools"
-msgstr "audio_tools"
+msgstr "audio_herramientas"
 
-#: cinelerra/awindowgui.C:3353
+#: cinelerra/awindowgui.C:3368
 msgid "audio_transitions"
-msgstr "audio_transitions"
+msgstr "audio_transiciones"
 
-#: cinelerra/awindowgui.C:3354
+#: cinelerra/awindowgui.C:3369
 msgid "blending"
 msgstr "mezcla"
 
-#: cinelerra/awindowgui.C:3355
+#: cinelerra/awindowgui.C:3370
 msgid "colors"
 msgstr "colores"
 
-#: cinelerra/awindowgui.C:3356
+#: cinelerra/awindowgui.C:3371
 msgid "exotic"
 msgstr "exótico"
 
-#: cinelerra/awindowgui.C:3357
+#: cinelerra/awindowgui.C:3372
 msgid "transforms"
 msgstr "transformadas"
 
-#: cinelerra/awindowgui.C:3358
+#: cinelerra/awindowgui.C:3373
 msgid "tv_effects"
-msgstr "tv_effects"
+msgstr "tv_efectos"
 
-#: cinelerra/awindowgui.C:3359
+#: cinelerra/awindowgui.C:3374
 msgid "video_tools"
-msgstr "video_tools"
+msgstr "video_herramientas"
 
-#: cinelerra/awindowgui.C:3360
+#: cinelerra/awindowgui.C:3375
 msgid "video_transitions"
-msgstr "video_transitions"
+msgstr "video_transiciones"
 
-#: cinelerra/awindowgui.C:3472
+#: cinelerra/awindowgui.C:3487
 msgid "Display icons packed"
 msgstr "Mostrar iconos empaquetados"
 
-#: cinelerra/awindowgui.C:3475
+#: cinelerra/awindowgui.C:3490
 msgid "Display icon list"
 msgstr "Mostrar lista de íconos"
 
-#: cinelerra/awindowgui.C:3485 cinelerra/clippopup.C:166
+#: cinelerra/awindowgui.C:3500 cinelerra/clippopup.C:173
 #: cinelerra/folderlistmenu.C:92 cinelerra/proxypopup.C:131
 msgid "Sort items"
 msgstr "Organizar objectos"
 
-#: cinelerra/awindowgui.C:3539 cinelerra/channeledit.C:476
+#: cinelerra/awindowgui.C:3554 cinelerra/channeledit.C:476
 msgid "Select"
 msgstr "Seleccionar"
 
@@ -1134,18 +1208,18 @@ msgstr "Existe"
 #: cinelerra/recordengine.C:701
 #, c-format
 msgid "Untimed"
-msgstr "No programado"
+msgstr "Sin Tiempo"
 
 #: cinelerra/batch.C:139 cinelerra/recordengine.C:694
 #: cinelerra/recordengine.C:702
 #, c-format
 msgid "Timed"
-msgstr "Programado"
+msgstr "Cronometrado"
 
-#: cinelerra/batch.C:141 cinelerra/batchrender.C:960 cinelerra/ffmpeg.C:3068
-#: cinelerra/ffmpeg.C:3176 cinelerra/file.C:1257 cinelerra/file.C:1284
-#: cinelerra/interfaceprefs.C:542 cinelerra/interlacemodes.h:27
-#: cinelerra/loadmode.C:110 cinelerra/new.C:873 cinelerra/record.C:736
+#: cinelerra/batch.C:141 cinelerra/batchrender.C:960 cinelerra/ffmpeg.C:3091
+#: cinelerra/ffmpeg.C:3199 cinelerra/file.C:1263 cinelerra/file.C:1290
+#: cinelerra/interfaceprefs.C:551 cinelerra/interlacemodes.h:27
+#: cinelerra/loadmode.C:116 cinelerra/new.C:873 cinelerra/record.C:741
 #: cinelerra/vdeviceprefs.C:657 plugins/motion2point/motionwindow.C:791
 #: plugins/motion2point/motionwindow.C:862 plugins/timefront/timefront.C:421
 #: plugins/titler/titler.C:2336
@@ -1167,11 +1241,11 @@ msgstr "Etiquetado"
 msgid "Farmed"
 msgstr "Criado"
 
-#: cinelerra/batchrender.C:65 plugins/compressor/compressor.C:1021
+#: cinelerra/batchrender.C:65 cinelerra/compressortools.C:522
 msgid "Output"
 msgstr "Salida"
 
-#: cinelerra/batchrender.C:65
+#: cinelerra/batchrender.C:65 cinelerra/loadmode.C:55
 msgid "EDL"
 msgstr "EDL"
 
@@ -1181,13 +1255,13 @@ msgstr "Transcurrido"
 
 #: cinelerra/batchrender.C:69
 msgid "Batch Render..."
-msgstr "Batch Render..."
+msgstr "Renderizar por lotes..."
 
 #: cinelerra/batchrender.C:69
 msgid "Shift-B"
 msgstr "Mayús-B"
 
-#: cinelerra/batchrender.C:390 cinelerra/bdcreate.C:291
+#: cinelerra/batchrender.C:390 cinelerra/bdcreate.C:294
 #: cinelerra/dvdcreate.C:359
 #, c-format
 msgid "Unable to save: %s"
@@ -1203,7 +1277,7 @@ msgstr "pulse Cancelar para abandonar renderizado por lotes"
 msgid "EDL %s not found.\n"
 msgstr "EDL %s no encontrado.\n"
 
-#: cinelerra/batchrender.C:493 cinelerra/file.C:236 cinelerra/formatcheck.C:47
+#: cinelerra/batchrender.C:493 cinelerra/file.C:237 cinelerra/formatcheck.C:47
 #: cinelerra/formatcheck.C:58 cinelerra/formatcheck.C:67
 #: cinelerra/menueffects.C:148 cinelerra/menueffects.C:159
 #: cinelerra/menueffects.C:247 cinelerra/menueffects.C:255
@@ -1238,7 +1312,7 @@ msgstr "%d trabajo EDLs de archivo de renderizado con y sin etiquetas\n"
 
 #: cinelerra/batchrender.C:726
 msgid ": Batch Render"
-msgstr ": Batch Render"
+msgstr ": Renderizar por lotes"
 
 #: cinelerra/batchrender.C:758
 msgid "Output path:"
@@ -1271,17 +1345,17 @@ msgid "Close"
 msgstr "Cerrar"
 
 #: cinelerra/batchrender.C:1040 cinelerra/recordbatches.C:469
-#: plugins/crikey/crikeywindow.C:593 plugins/sketcher/sketcherwindow.C:833
-#: plugins/sketcher/sketcherwindow.C:1215 plugins/tracer/tracerwindow.C:598
+#: plugins/crikey/crikeywindow.C:593 plugins/sketcher/sketcherwindow.C:922
+#: plugins/sketcher/sketcherwindow.C:1304 plugins/tracer/tracerwindow.C:598
 msgid "New"
 msgstr "Nuevo"
 
 #: cinelerra/batchrender.C:1052 cinelerra/channeledit.C:577
-#: cinelerra/clippopup.C:333 cinelerra/cwindowtool.C:1905
+#: cinelerra/clippopup.C:340 cinelerra/cwindowtool.C:1905
 #: cinelerra/cwindowtool.C:1959 cinelerra/dbwindow.C:240
 #: cinelerra/keyframegui.C:742 cinelerra/labelpopup.C:87
 #: cinelerra/recordbatches.C:487 plugins/piano/piano.C:835
-#: plugins/synthesizer/synthesizer.C:1305
+#: plugins/synthesizer/synthesizer.C:1311
 msgid "Delete"
 msgstr "Borrar"
 
@@ -1333,20 +1407,20 @@ msgstr "Inicio"
 msgid "warn if jobs/session mismatched"
 msgstr "advertir si los trabajos / sesiones no coinciden"
 
-#: cinelerra/batchrender.C:1403 cinelerra/bdcreate.C:690
+#: cinelerra/batchrender.C:1403 cinelerra/bdcreate.C:689
 #: cinelerra/dvdcreate.C:822 cinelerra/performanceprefs.C:400
 msgid "Use render farm"
 msgstr "Usar granja de renderizado"
 
-#: cinelerra/bdcreate.C:80
+#: cinelerra/bdcreate.C:83
 msgid "BD Render..."
 msgstr "BD Render ..."
 
-#: cinelerra/bdcreate.C:80
+#: cinelerra/bdcreate.C:83
 msgid "Ctrl-d"
 msgstr "Ctrl-d"
 
-#: cinelerra/bdcreate.C:159 cinelerra/dvdcreate.C:165
+#: cinelerra/bdcreate.C:162 cinelerra/dvdcreate.C:165
 #, c-format
 msgid ""
 "Unable to save: %s\n"
@@ -1355,132 +1429,132 @@ msgstr ""
 "No se puede guardar: %s\n"
 "-- %s"
 
-#: cinelerra/bdcreate.C:226 cinelerra/dvdcreate.C:295
+#: cinelerra/bdcreate.C:229 cinelerra/dvdcreate.C:295
 #, c-format
 msgid "No EDL/Session"
 msgstr "No EDL / Sesión"
 
-#: cinelerra/bdcreate.C:235 cinelerra/dvdcreate.C:303
+#: cinelerra/bdcreate.C:238 cinelerra/dvdcreate.C:303
 #, c-format
 msgid "No content: %s"
 msgstr "Sin contenido: %s"
 
-#: cinelerra/bdcreate.C:243 cinelerra/dvdcreate.C:311
+#: cinelerra/bdcreate.C:246 cinelerra/dvdcreate.C:311
 #, c-format
 msgid ""
 "Unable to create directory: %s\n"
 "-- %s"
 msgstr ""
-"No se puede crear el directorio: %s\n"
+"No se puede crear la carpeta: %s\n"
 "-- %s"
 
-#: cinelerra/bdcreate.C:387 cinelerra/dvdcreate.C:509
+#: cinelerra/bdcreate.C:386 cinelerra/dvdcreate.C:509
 #: plugins/scaleratio/scaleratio.C:96
 msgid "Scale Ratio"
 msgstr "Relación de escala"
 
-#: cinelerra/bdcreate.C:424
+#: cinelerra/bdcreate.C:423
 msgid "create bd"
 msgstr "crear bd"
 
-#: cinelerra/bdcreate.C:490
+#: cinelerra/bdcreate.C:489
 msgid "Must be root to mount UDFS images\n"
 msgstr "Debe ser root para montar imágenes UDFS\n"
 
-#: cinelerra/bdcreate.C:500 cinelerra/dvdcreate.C:630
+#: cinelerra/bdcreate.C:499 cinelerra/dvdcreate.C:630
 msgid "end setup, start batch render"
 msgstr "fin de configuración, comienzo de renderizado por lotes"
 
-#: cinelerra/bdcreate.C:577 cinelerra/dvdcreate.C:708
+#: cinelerra/bdcreate.C:576 cinelerra/dvdcreate.C:708
 msgid "disk space: "
 msgstr "espacio del disco: "
 
-#: cinelerra/bdcreate.C:619 cinelerra/dvdcreate.C:751
+#: cinelerra/bdcreate.C:618 cinelerra/dvdcreate.C:751
 #: plugins/deinterlace/deinterlace.C:84 plugins/denoisemjpeg/denoisemjpeg.C:248
 msgid "Deinterlace"
 msgstr "Desentrelazado"
 
-#: cinelerra/bdcreate.C:639 cinelerra/dvdcreate.C:771 plugins/ivtc/ivtc.C:76
+#: cinelerra/bdcreate.C:638 cinelerra/dvdcreate.C:771 plugins/ivtc/ivtc.C:76
 msgid "Inverse Telecine"
 msgstr "Telecine Inverso"
 
-#: cinelerra/bdcreate.C:659 cinelerra/dvdcreate.C:791
+#: cinelerra/bdcreate.C:658 cinelerra/dvdcreate.C:791
 msgid "Resize Tracks"
 msgstr "Cambiar el tamaño de las Pistas"
 
-#: cinelerra/bdcreate.C:670 cinelerra/dvdcreate.C:802
-#: cinelerra/scopewindow.C:1330 plugins/colorbalance/colorbalance.C:507
+#: cinelerra/bdcreate.C:669 cinelerra/dvdcreate.C:802
+#: cinelerra/scopewindow.C:1330 plugins/colorbalance/colorbalance.C:506
 #: plugins/gamma/gamma.C:451 plugins/histogram/histogram.C:99
 #: plugins/interpolate/interpolate.C:246
 msgid "Histogram"
 msgstr "Histograma"
 
-#: cinelerra/bdcreate.C:680 cinelerra/dvdcreate.C:812
+#: cinelerra/bdcreate.C:679 cinelerra/dvdcreate.C:812
 msgid "Chapters at Labels"
 msgstr "Capítulos en las etiquetas"
 
-#: cinelerra/bdcreate.C:701 cinelerra/dvdcreate.C:832
+#: cinelerra/bdcreate.C:700 cinelerra/dvdcreate.C:832
 msgid "Audio 5.1"
 msgstr "Audio 5.1"
 
-#: cinelerra/bdcreate.C:712
+#: cinelerra/bdcreate.C:711
 msgid ": Create BD"
 msgstr ": Crear BD"
 
-#: cinelerra/bdcreate.C:749 cinelerra/channeledit.C:990
+#: cinelerra/bdcreate.C:748 cinelerra/channeledit.C:990
 #: cinelerra/clipedit.C:163 cinelerra/dvdcreate.C:890
 msgid "Title:"
 msgstr "Título:"
 
-#: cinelerra/bdcreate.C:755 cinelerra/dvdcreate.C:896
+#: cinelerra/bdcreate.C:754 cinelerra/dvdcreate.C:896
 msgid "Work path:"
 msgstr "Camino del trabajo:"
 
-#: cinelerra/bdcreate.C:762 cinelerra/dvdcreate.C:903
+#: cinelerra/bdcreate.C:761 cinelerra/dvdcreate.C:903
 msgid "Work path"
 msgstr "Camino del trabajo"
 
-#: cinelerra/bdcreate.C:762 cinelerra/dvdcreate.C:903
+#: cinelerra/bdcreate.C:761 cinelerra/dvdcreate.C:903
 msgid "Select a Work directory:"
-msgstr "Seleccionar un directorio de trabajo:"
+msgstr "Seleccionar una carpeta de trabajo:"
 
-#: cinelerra/bdcreate.C:768 cinelerra/dvdcreate.C:909
+#: cinelerra/bdcreate.C:767 cinelerra/dvdcreate.C:909
 msgid "Media:"
-msgstr "Medios de comunicación:"
+msgstr "Medios Multimedia:"
 
-#: cinelerra/bdcreate.C:779 cinelerra/dvdcreate.C:920 cinelerra/recordgui.C:224
+#: cinelerra/bdcreate.C:778 cinelerra/dvdcreate.C:920 cinelerra/recordgui.C:224
 msgid "Format:"
 msgstr "Formato:"
 
-#: cinelerra/bdcreate.C:786 cinelerra/dvdcreate.C:926
+#: cinelerra/bdcreate.C:785 cinelerra/dvdcreate.C:926
 #: cinelerra/resizetrackthread.C:125 plugins/pitch/pitch.C:418
 #: plugins/scale/scalewin.C:52
 msgid "Scale:"
 msgstr "Escala:"
 
-#: cinelerra/bdcreate.C:1020
+#: cinelerra/bdcreate.C:1019
 msgid "* non-standard format"
 msgstr "* formato no estandar"
 
-#: cinelerra/binfolder.C:39
+#: cinelerra/binfolder.C:39 plugins/sketcher/sketcherwindow.C:296
 msgid "Off"
-msgstr "apagado"
+msgstr "Apagado"
 
 #: cinelerra/binfolder.C:40
 msgid "And"
-msgstr "y"
+msgstr "And"
 
 #: cinelerra/binfolder.C:41
 msgid "Or"
-msgstr "o"
+msgstr "Or"
 
 #: cinelerra/binfolder.C:42
 msgid "And Not"
-msgstr "y no"
+msgstr "No And"
 
 #: cinelerra/binfolder.C:43
 msgid "Or Not"
-msgstr "o no"
+msgstr "No Or"
 
 #: cinelerra/binfolder.C:47
 msgid "Patterns"
@@ -1508,7 +1582,7 @@ msgstr "Altura"
 
 #: cinelerra/binfolder.C:53 cinelerra/performanceprefs.C:227
 msgid "Framerate"
-msgstr "Fotogramas por segundos"
+msgstr "FPS"
 
 #: cinelerra/binfolder.C:54
 msgid "Samplerate"
@@ -1536,7 +1610,7 @@ msgstr "Mayor o igual >="
 
 #: cinelerra/binfolder.C:63
 msgid "Gt  > "
-msgstr "Mayor >"
+msgstr "Mayor > "
 
 #: cinelerra/binfolder.C:64
 msgid "Ne  !="
@@ -1548,7 +1622,7 @@ msgstr "Menor o igual <="
 
 #: cinelerra/binfolder.C:66
 msgid "Lt  < "
-msgstr "Menor <"
+msgstr "Menor < "
 
 #: cinelerra/binfolder.C:67
 msgid "Matches"
@@ -1626,7 +1700,7 @@ msgstr "Objetivo"
 msgid "Op"
 msgstr "Op"
 
-#: cinelerra/binfolder.C:1460 cinelerra/colorpicker.C:209
+#: cinelerra/binfolder.C:1460 cinelerra/colorpicker.C:259
 #: cinelerra/keyframegui.C:57 plugins/histogram/histogramwindow.C:63
 #: plugins/histogram_bezier/bistogramwindow.C:68
 msgid "Value"
@@ -1634,26 +1708,25 @@ msgstr "Valor"
 
 #: cinelerra/binfolder.C:1611 cinelerra/shbtnprefs.C:152
 #: plugins/overlayaudio/overlayaudio.C:174 plugins/piano/piano.C:814
-#: plugins/synthesizer/synthesizer.C:1285
+#: plugins/synthesizer/synthesizer.C:1291
 msgid "Add"
 msgstr "Agregar"
 
-#: cinelerra/binfolder.C:1635 cinelerra/mainmenu.C:940
+#: cinelerra/binfolder.C:1635 cinelerra/mainmenu.C:944
 #: cinelerra/shbtnprefs.C:172
 msgid "Del"
-msgstr "Del"
+msgstr "Supr"
 
 #: cinelerra/binfolder.C:1655 cinelerra/cwindowtool.C:367
 #: cinelerra/fileffmpeg.C:1092 cinelerra/fileffmpeg.C:1497
-#: cinelerra/keyframegui.C:780 cinelerra/loadfile.C:204
-#: cinelerra/loadfile.C:214 cinelerra/loadfile.C:216
+#: cinelerra/keyframegui.C:780 cinelerra/loadfile.C:199
 #: cinelerra/mixersalign.C:428 cinelerra/mixersalign.C:436
 #: cinelerra/plugindialog.C:287 cinelerra/plugindialog.C:360
 #: cinelerra/plugindialog.C:473 cinelerra/pluginfclient.C:218
 #: cinelerra/pluginfclient.C:570 cinelerra/pluginfclient.C:601
 #: cinelerra/pluginlv2gui.C:98 cinelerra/pluginlv2gui.C:225
-#: cinelerra/preferencesthread.C:641 cinelerra/preferencesthread.C:643
-#: cinelerra/setformat.C:805
+#: cinelerra/preferencesthread.C:644 cinelerra/preferencesthread.C:646
+#: cinelerra/setformat.C:800
 msgid "Apply"
 msgstr "Aplicar"
 
@@ -1663,7 +1736,7 @@ msgstr "Nombre de carpeta:"
 
 #: cinelerra/binfolder.C:1692
 msgid "media bin"
-msgstr "medios de comunicación"
+msgstr "contenedor de medios"
 
 #: cinelerra/binfolder.C:1692
 msgid "clip bin"
@@ -1695,7 +1768,7 @@ msgstr "BRender::set_video_map %jd: intento de ajustarlo fuera del mapa %jd.\n"
 msgid "Look for file"
 msgstr "Busca el archivo"
 
-#: cinelerra/canvas.C:921
+#: cinelerra/canvas.C:923
 msgid "Windowed"
 msgstr "Ventana"
 
@@ -1719,7 +1792,7 @@ msgstr "Zoom 50%"
 msgid "Zoom 75%"
 msgstr "Zoom 75%"
 
-#: cinelerra/canvas.C:972 cinelerra/recordmonitor.C:880
+#: cinelerra/canvas.C:972 cinelerra/recordmonitor.C:886
 msgid "Zoom 100%"
 msgstr "Zoom 100%"
 
@@ -1779,15 +1852,15 @@ msgstr "Mayús-F12"
 msgid "Reset translation"
 msgstr "Restablecer la traducción"
 
-#: cinelerra/canvas.C:1106 cinelerra/plugintoggles.C:76
+#: cinelerra/canvas.C:1105 cinelerra/plugintoggles.C:76
 msgid "Show controls"
 msgstr "Mostrar controles"
 
-#: cinelerra/canvas.C:1108
+#: cinelerra/canvas.C:1105
 msgid "Hide controls"
 msgstr "Ocultar controles"
 
-#: cinelerra/canvas.C:1139
+#: cinelerra/canvas.C:1122
 msgid "Close source"
 msgstr "Cerrar origen"
 
@@ -1910,6 +1983,8 @@ msgid "Norm:"
 msgstr "Norma:"
 
 #: cinelerra/channeledit.C:648 cinelerra/channeledit.C:1031
+#: plugins/compressor/compressor.C:440
+#: plugins/compressormulti/comprmultigui.C:152
 msgid "Input:"
 msgstr "Entrar:"
 
@@ -2026,7 +2101,7 @@ msgstr "buscar títulos de eventos / info"
 #: cinelerra/channelinfo.C:1100
 #, c-format
 msgid "bad scan time: %s\n"
-msgstr "Mal tiempo de escaneado: %s\n"
+msgstr "tiempo erroneo de escaneado: %s\n"
 
 #: cinelerra/channelinfo.C:1107
 #, c-format
@@ -2119,12 +2194,12 @@ msgid "Delete all clips."
 msgstr "Borrar todos los clips."
 
 #: cinelerra/channelinfo.C:1932 cinelerra/recordbatches.C:472
-#: cinelerra/recordgui.C:922
+#: cinelerra/recordgui.C:965
 msgid "Create new clip."
 msgstr "Crear nuevo clip."
 
 #: cinelerra/channelinfo.C:1945 cinelerra/recordbatches.C:490
-#: cinelerra/recordgui.C:935
+#: cinelerra/recordgui.C:978
 msgid "Delete clip."
 msgstr "Eliminar clip."
 
@@ -2152,89 +2227,75 @@ msgstr ": La información del clip"
 msgid "Comments:"
 msgstr "Comentarios:"
 
-#: cinelerra/clippopup.C:356
+#: cinelerra/clippopup.C:362
 msgid "Paste Clip"
 msgstr "Pegar clip"
 
-#: cinelerra/clippopup.C:378
+#: cinelerra/clippopup.C:384
 msgid "paste clip: "
 msgstr "pegar clip: "
 
-#: cinelerra/clippopup.C:422
-msgid "Nest"
-msgstr "Anidar"
+#: cinelerra/clippopup.C:431
+msgid "Nest to Media"
+msgstr "Anidar en Medios"
 
-#: cinelerra/clippopup.C:445
-#, c-format
-msgid "Nested_%02d%02d%02d-%02d%02d%02d"
-msgstr "Anidado_%02d%02d%02d-%02d%02d%02d"
-
-#: cinelerra/clippopup.C:458
-#, c-format
-msgid "Nested: %s"
-msgstr "Anidado: %s"
-
-#: cinelerra/clippopup.C:478
-msgid "UnNest"
-msgstr "Desanidado"
-
-#: cinelerra/colorpicker.C:77
+#: cinelerra/colorpicker.C:74
 msgid ": "
 msgstr ": "
 
-#: cinelerra/colorpicker.C:78
+#: cinelerra/colorpicker.C:75
 msgid "Color Picker"
 msgstr "Selector de color"
 
-#: cinelerra/colorpicker.C:179
+#: cinelerra/colorpicker.C:229
 msgid "colorpicker#H:"
 msgstr "H:"
 
-#: cinelerra/colorpicker.C:180
+#: cinelerra/colorpicker.C:230
 msgid "colorpicker#S:"
 msgstr "S:"
 
-#: cinelerra/colorpicker.C:181
+#: cinelerra/colorpicker.C:231
 msgid "colorpicker_value#V:"
 msgstr "V:"
 
-#: cinelerra/colorpicker.C:182
+#: cinelerra/colorpicker.C:232
 msgid "colorpicker#R:"
 msgstr "R:"
 
-#: cinelerra/colorpicker.C:183
+#: cinelerra/colorpicker.C:233
 msgid "colorpicker#G:"
 msgstr "G:"
 
-#: cinelerra/colorpicker.C:184
+#: cinelerra/colorpicker.C:234
 msgid "colorpicker#B:"
 msgstr "B:"
 
-#: cinelerra/colorpicker.C:185
+#: cinelerra/colorpicker.C:235
 msgid "colorpicker#Y:"
 msgstr "Y:"
 
-#: cinelerra/colorpicker.C:186
+#: cinelerra/colorpicker.C:236
 msgid "colorpicker#U:"
 msgstr "U:"
 
-#: cinelerra/colorpicker.C:187
+#: cinelerra/colorpicker.C:237
 msgid "colorpicker_Cr#V:"
 msgstr "V:"
 
-#: cinelerra/colorpicker.C:189
+#: cinelerra/colorpicker.C:239
 msgid "colorpicker#A:"
 msgstr "A:"
 
-#: cinelerra/colorpicker.C:205
+#: cinelerra/colorpicker.C:255
 msgid "Hue"
 msgstr "Hue"
 
-#: cinelerra/colorpicker.C:207
+#: cinelerra/colorpicker.C:257
 msgid "Saturation"
 msgstr "Saturación"
 
-#: cinelerra/colorpicker.C:211 plugins/colorbalance/colorbalancewindow.C:59
+#: cinelerra/colorpicker.C:261 plugins/colorbalance/colorbalancewindow.C:59
 #: plugins/denoisevideo/denoisevideo.C:277 plugins/downsample/downsample.C:278
 #: plugins/histogram/histogramwindow.C:69
 #: plugins/histogram_bezier/bistogramwindow.C:71
@@ -2242,9 +2303,9 @@ msgstr "Saturación"
 #: plugins/swapchannels/swapchannels.C:449
 #: plugins/swapchannels/swapchannels.C:474 plugins/zoomblur/zoomblur.C:173
 msgid "Red"
-msgstr "Rojo"
+msgstr "R-Rojo"
 
-#: cinelerra/colorpicker.C:213 plugins/colorbalance/colorbalancewindow.C:65
+#: cinelerra/colorpicker.C:263 plugins/colorbalance/colorbalancewindow.C:65
 #: plugins/denoisevideo/denoisevideo.C:279 plugins/downsample/downsample.C:284
 #: plugins/histogram/histogramwindow.C:75
 #: plugins/histogram_bezier/bistogramwindow.C:74
@@ -2252,9 +2313,9 @@ msgstr "Rojo"
 #: plugins/swapchannels/swapchannels.C:452
 #: plugins/swapchannels/swapchannels.C:475 plugins/zoomblur/zoomblur.C:175
 msgid "Green"
-msgstr "Verde"
+msgstr "G-Verde"
 
-#: cinelerra/colorpicker.C:215 plugins/colorbalance/colorbalancewindow.C:71
+#: cinelerra/colorpicker.C:265 plugins/colorbalance/colorbalancewindow.C:71
 #: plugins/denoisevideo/denoisevideo.C:281 plugins/downsample/downsample.C:290
 #: plugins/histogram/histogramwindow.C:81
 #: plugins/histogram_bezier/bistogramwindow.C:77
@@ -2263,37 +2324,37 @@ msgstr "Verde"
 #: plugins/swapchannels/swapchannels.C:476 plugins/theme_blue/bluetheme.C:63
 #: plugins/zoomblur/zoomblur.C:177
 msgid "Blue"
-msgstr "Azul"
+msgstr "B-Azul"
 
-#: cinelerra/colorpicker.C:217
+#: cinelerra/colorpicker.C:267
 msgid "Luminance"
 msgstr "Luminancia"
 
-#: cinelerra/colorpicker.C:219
+#: cinelerra/colorpicker.C:269
 msgid "Blue Luminance Difference"
 msgstr "Diferencia de luminancia Azul"
 
-#: cinelerra/colorpicker.C:221
+#: cinelerra/colorpicker.C:271
 msgid "Red Luminance Difference"
-msgstr "Diferencia de luminancia Rojo"
+msgstr "Diferencia de luminancia Roja"
 
-#: cinelerra/colorpicker.C:224 plugins/crikey/crikeywindow.C:96
-#: plugins/denoisevideo/denoisevideo.C:283 plugins/downsample/downsample.C:296
-#: plugins/linearblur/linearblur.C:184 plugins/radialblur/radialblur.C:181
-#: plugins/swapchannels/swapchannels.C:458
+#: cinelerra/colorpicker.C:274 plugins/alpha/alpha.C:117
+#: plugins/crikey/crikeywindow.C:96 plugins/denoisevideo/denoisevideo.C:283
+#: plugins/downsample/downsample.C:296 plugins/linearblur/linearblur.C:184
+#: plugins/radialblur/radialblur.C:181 plugins/swapchannels/swapchannels.C:458
 #: plugins/swapchannels/swapchannels.C:477 plugins/zoomblur/zoomblur.C:179
 msgid "Alpha"
-msgstr "Alpha"
+msgstr "Alfa"
 
-#: cinelerra/colorpicker.C:1030
+#: cinelerra/colorpicker.C:1125
 msgid "hex rgb color"
 msgstr "color RGB hexadecimal"
 
-#: cinelerra/colorpicker.C:1078
+#: cinelerra/colorpicker.C:1173
 msgid "grab from anywhere picker"
 msgstr "selector agarrar desde cualquier lugar"
 
-#: cinelerra/colorpicker.C:1100
+#: cinelerra/colorpicker.C:1195
 msgid "color history"
 msgstr "historico de color"
 
@@ -2341,6 +2402,23 @@ msgstr "Mi"
 msgid "cut %f/%f = %d\n"
 msgstr "cortar %f/%f = %d\n"
 
+#: cinelerra/compressortools.C:523 cinelerra/compressortools.C:524
+#: cinelerra/compressortools.C:525
+msgid "Input"
+msgstr "Entrar"
+
+#: cinelerra/compressortools.C:996
+msgid "Copy graph"
+msgstr "Copiar gráfico"
+
+#: cinelerra/compressortools.C:1019
+msgid "Paste graph"
+msgstr "Pegar gráfico"
+
+#: cinelerra/compressortools.C:1062
+msgid "Clear graph"
+msgstr "Eliminar gráfico"
+
 #: cinelerra/compresspopup.C:38
 msgid "DV"
 msgstr "DV"
@@ -2349,7 +2427,7 @@ msgstr "DV"
 msgid "MJPA"
 msgstr "MJPA"
 
-#: cinelerra/compresspopup.C:41 cinelerra/file.inc:115
+#: cinelerra/compresspopup.C:41 cinelerra/file.inc:116
 msgid "PNG"
 msgstr "PNG"
 
@@ -2408,47 +2486,127 @@ msgstr ": Archivo existe"
 msgid "The following files exist.  Overwrite them?"
 msgstr "Existen los siguientes archivos. ¿Sobreescribirlos?"
 
-#: cinelerra/cpanel.C:152
+#: cinelerra/convert.C:208
+msgid "Transcode clip"
+msgstr "Transcodificar clip"
+
+#: cinelerra/convert.C:290
+#, c-format
+msgid ""
+"transcode target file exists but is incorrect format:\n"
+"%s\n"
+"remove file from disk before transcode to new format.\n"
+msgstr ""
+"el archivo de destino de transcodificación existe pero tiene un formato incorrecto:\n"
+"%s\n"
+"eliminar el archivo del disco antes de transcodificar a un nuevo formato.\n"
+
+#: cinelerra/convert.C:377
+#, c-format
+msgid "convert: failed=%d canceled=%d\n"
+msgstr "convertir: fallido=%d cancelado)%d\n"
+
+#: cinelerra/convert.C:382
+#, c-format
+msgid "TranscodeRender::run: done in %s\n"
+msgstr "TranscodificarRender::ejecuta: hecho en %s\n"
+
+#: cinelerra/convert.C:384
+msgid "transcode cancelled"
+msgstr "transcodificación cancelada"
+
+#: cinelerra/convert.C:386
+msgid "transcode failed"
+msgstr "falló la transcodificación"
+
+#: cinelerra/convert.C:388
+#, c-format
+msgid "transcode %d files, render time %s"
+msgstr "transcodificación %d archivos, tiempo de render %s"
+
+#: cinelerra/convert.C:397
+msgid "Error making transcode."
+msgstr "Error al hacer la transcodificación."
+
+#: cinelerra/convert.C:425
+msgid "Transcode files..."
+msgstr "Transcodificando archivos..."
+
+#: cinelerra/convert.C:535
+msgid ": Transcode settings"
+msgstr ": Configuración de transcodificación"
+
+#: cinelerra/convert.C:562
+msgid "Render untagged assets and replace in project"
+msgstr "Renderizar activos sin etiquetar y reemplazar en el proyecto"
+
+#: cinelerra/convert.C:565 cinelerra/convert.C:573
+msgid "Tag suffix:"
+msgstr "Sufijo de etiqueta:"
+
+#: cinelerra/convert.C:587 cinelerra/proxy.C:457 cinelerra/render.C:1062
+msgid "Beep on done volume"
+msgstr ""
+"Volumen del pitido\n"
+"al terminar"
+
+#: cinelerra/convert.C:628
+msgid "Transcode..."
+msgstr "Transcodificar..."
+
+#: cinelerra/convert.C:628
+msgid "Alt-e"
+msgstr "Alt-e"
+
+#: cinelerra/convert.C:711
+msgid "Remove originals from project"
+msgstr "Eliminar originales del proyecto"
+
+#: cinelerra/convert.C:727
+msgid "Into Nested Proxy directory"
+msgstr "Dentro de la carpeta del Proxy Anidado"
+
+#: cinelerra/cpanel.C:153
 msgid "Protect video from changes (F1)"
 msgstr "Proteger vídeo de cambios (F1)"
 
-#: cinelerra/cpanel.C:176
+#: cinelerra/cpanel.C:177
 msgid "Edit mask (F3)"
 msgstr "Editar máscara (F3)"
 
-#: cinelerra/cpanel.C:198
+#: cinelerra/cpanel.C:199
 msgid "Ruler (F4)"
 msgstr "Regla (F4)"
 
-#: cinelerra/cpanel.C:220
+#: cinelerra/cpanel.C:221
 msgid "Zoom view (F2)"
 msgstr "Vista Zoom (F2)"
 
-#: cinelerra/cpanel.C:240
+#: cinelerra/cpanel.C:241
 msgid "Adjust camera automation (F5)"
 msgstr "Ajustar automatización de cámara (F5)"
 
-#: cinelerra/cpanel.C:260
+#: cinelerra/cpanel.C:261
 msgid "Adjust projector automation (F6)"
 msgstr "Ajustar automatización proyector (F6)"
 
-#: cinelerra/cpanel.C:280
+#: cinelerra/cpanel.C:281
 msgid "Crop a layer or output (F7)"
 msgstr "Recortar una capa o la salida (F7)"
 
-#: cinelerra/cpanel.C:304
+#: cinelerra/cpanel.C:305
 msgid "Get color (F8)"
 msgstr "Obtener color (F8)"
 
-#: cinelerra/cpanel.C:328
+#: cinelerra/cpanel.C:329
 msgid "Show tool info (F9)"
 msgstr "Mostrar información de herramientas (F9)"
 
-#: cinelerra/cpanel.C:359
+#: cinelerra/cpanel.C:360
 msgid "Show safe regions (F10)"
 msgstr "Mostrar zonas seguras (F10)"
 
-#: cinelerra/cpanel.C:376 plugins/perspective/perspective.C:203
+#: cinelerra/cpanel.C:377 plugins/perspective/perspective.C:203
 #: plugins/zoom/zoom.C:147
 msgid "Zoom"
 msgstr "Enfocar"
@@ -2465,44 +2623,44 @@ msgstr ": Recortar"
 msgid "Select a region to crop in the video output window"
 msgstr "Seleccionar una región para recortar en la ventana de salida de vídeo"
 
-#: cinelerra/cwindowgui.C:79
+#: cinelerra/cwindowgui.C:80
 msgid ": Compositor"
 msgstr ": Compositor"
 
-#: cinelerra/cwindowgui.C:668 cinelerra/cwindowgui.C:701
+#: cinelerra/cwindowgui.C:666 cinelerra/cwindowgui.C:699
 msgid "insert assets"
 msgstr "insertar clips"
 
-#: cinelerra/cwindowgui.C:821 cinelerra/mbuttons.C:243
+#: cinelerra/cwindowgui.C:819 cinelerra/mbuttons.C:243
 msgid "main window: "
 msgstr "ventana principal: "
 
-#: cinelerra/cwindowgui.C:1770 cinelerra/cwindowgui.C:3334
+#: cinelerra/cwindowgui.C:1781 cinelerra/cwindowgui.C:3322
 msgid "mask rotate"
 msgstr "rotación de máscara"
 
-#: cinelerra/cwindowgui.C:1774 cinelerra/cwindowgui.C:3338
+#: cinelerra/cwindowgui.C:1785 cinelerra/cwindowgui.C:3326
 msgid "mask scale"
 msgstr "escalar máscara"
 
-#: cinelerra/cwindowgui.C:1782
+#: cinelerra/cwindowgui.C:1793
 msgid "mask translate"
 msgstr "máscara convertir"
 
-#: cinelerra/cwindowgui.C:1789
+#: cinelerra/cwindowgui.C:1800
 msgid "mask adjust"
 msgstr "ajuste de máscara"
 
-#: cinelerra/cwindowgui.C:1802 cinelerra/cwindowtool.C:2943
+#: cinelerra/cwindowgui.C:1813 cinelerra/cwindowtool.C:2943
 #: cinelerra/cwindowtool.C:2970
 msgid "mask point"
 msgstr "punto de máscara"
 
-#: cinelerra/cwindowgui.C:2298 cinelerra/cwindowgui.C:2436
+#: cinelerra/cwindowgui.C:2309 cinelerra/cwindowgui.C:2424
 msgid "Eyedrop"
 msgstr "Eyedrop"
 
-#: cinelerra/cwindowgui.C:3059 cinelerra/cwindowgui.C:3317
+#: cinelerra/cwindowgui.C:3047 cinelerra/cwindowgui.C:3305
 #: cinelerra/cwindowtool.C:883 cinelerra/cwindowtool.C:931
 #: cinelerra/cwindowtool.C:994 cinelerra/cwindowtool.C:998
 #: cinelerra/cwindowtool.C:1025 cinelerra/cwindowtool.C:1029
@@ -2513,7 +2671,7 @@ msgstr "Eyedrop"
 msgid "camera"
 msgstr "cámara"
 
-#: cinelerra/cwindowgui.C:3061 cinelerra/cwindowgui.C:3321
+#: cinelerra/cwindowgui.C:3049 cinelerra/cwindowgui.C:3309
 #: cinelerra/cwindowtool.C:1294 cinelerra/cwindowtool.C:1340
 #: cinelerra/cwindowtool.C:1392 cinelerra/cwindowtool.C:1397
 #: cinelerra/cwindowtool.C:1421 cinelerra/cwindowtool.C:1425
@@ -2524,11 +2682,11 @@ msgstr "cámara"
 msgid "projector"
 msgstr "proyector"
 
-#: cinelerra/cwindowgui.C:3330
+#: cinelerra/cwindowgui.C:3318
 msgid "mask"
 msgstr "máscara"
 
-#: cinelerra/cwindowgui.h:55 cinelerra/scale.C:363 cinelerra/setformat.C:771
+#: cinelerra/cwindowgui.h:55 cinelerra/scale.C:363 cinelerra/setformat.C:766
 msgid "Auto"
 msgstr "Automático"
 
@@ -2632,7 +2790,7 @@ msgstr "Justificar abajo"
 
 #: cinelerra/cwindowtool.C:1186
 msgid "Add Keyframe: Shift-F11"
-msgstr "Agregar fotograma clave: Shift-F11"
+msgstr "Agregar fotograma clave: Mayús-F11"
 
 #: cinelerra/cwindowtool.C:1200
 msgid "Reset Camera: F11"
@@ -2644,7 +2802,7 @@ msgstr ": Proyector"
 
 #: cinelerra/cwindowtool.C:1558
 msgid "Add Keyframe: Shift-F12"
-msgstr "Agregar fotograma clave: Shift-F12"
+msgstr "Agregar fotograma clave: Mayús-F12"
 
 #: cinelerra/cwindowtool.C:1572
 msgid "Reset Projector: F12"
@@ -2664,7 +2822,7 @@ msgstr "habilitar máscara"
 
 #: cinelerra/cwindowtool.C:1881 cinelerra/cwindowtool.C:1899
 msgid "Solo"
-msgstr "en solitario"
+msgstr "Solo"
 
 #: cinelerra/cwindowtool.C:1885
 msgid "Solo video track"
@@ -2694,11 +2852,11 @@ msgstr "Foco"
 msgid "Center for rotate/scale"
 msgstr "Centrar para rotar/escalar"
 
-#: cinelerra/cwindowtool.C:2119
+#: cinelerra/cwindowtool.C:2119 plugins/sketcher/sketcherwindow.C:1400
 msgid "Help"
 msgstr "Ayuda"
 
-#: cinelerra/cwindowtool.C:2123
+#: cinelerra/cwindowtool.C:2123 plugins/sketcher/sketcherwindow.C:1404
 msgid "Show help text"
 msgstr "Mostrar texto de ayuda"
 
@@ -2794,7 +2952,7 @@ msgstr "Formas predefinidas"
 #: cinelerra/cwindowtool.C:2716 plugins/findobj/findobjwindow.C:865
 #: plugins/findobj/findobjwindow.C:881 plugins/gradient/gradient.C:337
 #: plugins/piano/piano.C:688 plugins/piano/piano.C:941
-#: plugins/synthesizer/synthesizer.C:974 plugins/synthesizer/synthesizer.C:1399
+#: plugins/synthesizer/synthesizer.C:975 plugins/synthesizer/synthesizer.C:1409
 #: plugins/tremolo/tremolo.C:473
 #, c-format
 msgid "Square"
@@ -2805,8 +2963,8 @@ msgid "Circle"
 msgstr "Círculo"
 
 #: cinelerra/cwindowtool.C:2720 plugins/piano/piano.C:689
-#: plugins/piano/piano.C:942 plugins/synthesizer/synthesizer.C:975
-#: plugins/synthesizer/synthesizer.C:1400 plugins/tremolo/tremolo.C:474
+#: plugins/piano/piano.C:942 plugins/synthesizer/synthesizer.C:976
+#: plugins/synthesizer/synthesizer.C:1410 plugins/tremolo/tremolo.C:474
 #, c-format
 msgid "Triangle"
 msgstr "Triángulo"
@@ -2848,7 +3006,7 @@ msgstr "Pluma:"
 msgid "Mask Points"
 msgstr "Puntos de máscara"
 
-#: cinelerra/cwindowtool.C:2765 plugins/compressor/compressor.C:882
+#: cinelerra/cwindowtool.C:2765
 msgid "Point:"
 msgstr "Punto:"
 
@@ -3002,9 +3160,9 @@ msgstr "%0.01f pixeles"
 
 #: cinelerra/dbwindow.C:202
 msgid "Media DB..."
-msgstr "Media DB..."
+msgstr "Media db..."
 
-#: cinelerra/dbwindow.C:202 cinelerra/mainmenu.C:1634
+#: cinelerra/dbwindow.C:202 cinelerra/mainmenu.C:1638
 msgid "Shift-M"
 msgstr "Mayús-M"
 
@@ -3478,7 +3636,7 @@ msgstr "Velocidad ISO: %d\n"
 #: cinelerra/dcraw.C:10370
 #, c-format
 msgid "Shutter: "
-msgstr "Obturardor:"
+msgstr "Obturardor: "
 
 #: cinelerra/dcraw.C:10373
 #, c-format
@@ -3656,8 +3814,8 @@ msgstr "** %scarrier, dvb_locked %s\n"
 msgid "no "
 msgstr "no "
 
-#: cinelerra/devicedvbinput.C:494 cinelerra/mwindow.C:658
-#: cinelerra/mwindow.C:706
+#: cinelerra/devicedvbinput.C:494 cinelerra/mwindow.C:670
+#: cinelerra/mwindow.C:718
 msgid "lock"
 msgstr "bloquear"
 
@@ -3766,7 +3924,7 @@ msgstr "Punto de salida ( ] or > )"
 
 #: cinelerra/editpanel.C:731
 msgid "Splice ( v )"
-msgstr "Separar (v)"
+msgstr "Juntar (v)"
 
 #: cinelerra/editpanel.C:758
 msgid "To clip ( i )"
@@ -3828,71 +3986,76 @@ msgstr "Deshacer (z)"
 msgid "Redo ( shift Z )"
 msgstr "Rehacer ( Mayús Z )"
 
-#: cinelerra/editpopup.C:90 cinelerra/mainmenu.C:1004
+#: cinelerra/editpopup.C:136
+#, c-format
+msgid "Edit is not EDL: %s"
+msgstr "Editar no es EDL: %s"
+
+#: cinelerra/editpopup.C:144 cinelerra/mainmenu.C:1008
 msgid "Clear Select"
-msgstr "Limpiar Seleccionar"
+msgstr "Desselecionar todos los clips"
 
-#: cinelerra/editpopup.C:90
+#: cinelerra/editpopup.C:144
 msgid "Ctrl-Shift-A"
 msgstr "Ctrl-Mayús-A"
 
-#: cinelerra/editpopup.C:105
+#: cinelerra/editpopup.C:159
 msgid "Ctrl-c"
 msgstr "Ctrl-c"
 
-#: cinelerra/editpopup.C:119
+#: cinelerra/editpopup.C:173
 msgid "Copy pack"
-msgstr "Paquete de copias"
+msgstr "Copiar para juntar al pegar"
 
-#: cinelerra/editpopup.C:119
+#: cinelerra/editpopup.C:173
 msgid "Ctrl-Shift-C"
 msgstr "Ctrl-Mayús-C"
 
-#: cinelerra/editpopup.C:134
+#: cinelerra/editpopup.C:188
 msgid "Ctrl-x"
 msgstr "Ctrl-x"
 
-#: cinelerra/editpopup.C:148
+#: cinelerra/editpopup.C:202
 msgid "Cut pack"
-msgstr "Paquete de cortar"
+msgstr "Cortar para juntar al pegar"
 
-#: cinelerra/editpopup.C:148
+#: cinelerra/editpopup.C:202
 msgid "Ctrl-z"
 msgstr "Ctrl-z"
 
-#: cinelerra/editpopup.C:162
+#: cinelerra/editpopup.C:216
 msgid "Ctrl-m"
 msgstr "Ctrl-m"
 
-#: cinelerra/editpopup.C:176
+#: cinelerra/editpopup.C:230
 msgid "Mute pack"
-msgstr "Paquete de silencio"
+msgstr "Cortar dejando el hueco para juntar al pegar"
 
-#: cinelerra/editpopup.C:176
+#: cinelerra/editpopup.C:230
 msgid "Ctrl-Shift-M"
 msgstr "Ctrl-Mayús-M"
 
-#: cinelerra/editpopup.C:191
+#: cinelerra/editpopup.C:245
 msgid "Ctrl-v"
 msgstr "Ctrl-v"
 
-#: cinelerra/editpopup.C:211
+#: cinelerra/editpopup.C:265
 msgid "Overwrite"
 msgstr "Sobrescribir"
 
-#: cinelerra/editpopup.C:211
+#: cinelerra/editpopup.C:265
 msgid "Ctrl-b"
 msgstr "Ctrl-b"
 
-#: cinelerra/editpopup.C:231
+#: cinelerra/editpopup.C:285
 msgid "Overwrite Plugins"
-msgstr "Sobreescribir complementos"
+msgstr "Sobreescribir solo los efectos"
 
-#: cinelerra/editpopup.C:231
+#: cinelerra/editpopup.C:285
 msgid "Ctrl-Shift-P"
 msgstr "Ctrl-Mayús-P"
 
-#: cinelerra/edl.C:1837
+#: cinelerra/edl.C:1891
 msgid "new_edl edit"
 msgstr "edición new_edl"
 
@@ -3922,7 +4085,7 @@ msgstr "Exportación de EDL"
 
 #: cinelerra/exportedl.C:364
 msgid "Select a file to export to:"
-msgstr "Seleccione un archivo para exportar a:"
+msgstr "Seleccione un archivo para exportar en:"
 
 #: cinelerra/exportedl.C:378 cinelerra/formattools.C:146
 msgid "Output to file"
@@ -3930,7 +4093,7 @@ msgstr "Salida a archivo"
 
 #: cinelerra/exportedl.C:378 cinelerra/formattools.C:146
 msgid "Select a file to write to:"
-msgstr "Seleccione un archivo para escribir:"
+msgstr "Lugar y Nombre del archivo que va a crear:"
 
 #: cinelerra/exportedl.C:382
 msgid "Select track to be exported:"
@@ -3961,29 +4124,29 @@ msgstr "Pluma por el número de fotogramas:"
 msgid "%s  err: %s\n"
 msgstr "%s  err: %s\n"
 
-#: cinelerra/ffmpeg.C:394 cinelerra/ffmpeg.C:3353
+#: cinelerra/ffmpeg.C:417 cinelerra/ffmpeg.C:3376
 msgid "cant allocate codec context\n"
 msgstr "no puede asignar contexto de códec %s:%s\n"
 
-#: cinelerra/ffmpeg.C:437
+#: cinelerra/ffmpeg.C:460
 msgid "open decoder failed\n"
 msgstr "fallo apertura de decodificador\n"
 
-#: cinelerra/ffmpeg.C:440
+#: cinelerra/ffmpeg.C:463
 #, c-format
 msgid "can't open input file: %s\n"
 msgstr "no se puede abrir archivo de entrada: %s\n"
 
-#: cinelerra/ffmpeg.C:502
+#: cinelerra/ffmpeg.C:525
 msgid "av_buffersrc_add_frame_flags failed\n"
 msgstr "av_buffersrc_add_frame_flags fallaron\n"
 
-#: cinelerra/ffmpeg.C:1035 cinelerra/ffmpeg.C:1085
-#: cinelerra/performanceprefs.C:339
+#: cinelerra/ffmpeg.C:1058 cinelerra/ffmpeg.C:1108
+#: cinelerra/performanceprefs.C:339 cinelerra/plugin.C:227
 msgid "none"
 msgstr "ninguno"
 
-#: cinelerra/ffmpeg.C:1389
+#: cinelerra/ffmpeg.C:1412
 #, c-format
 msgid ""
 "Error retrieving data from GPU to CPU\n"
@@ -3992,122 +4155,127 @@ msgstr ""
 "Error recuperando datos desde GPU a CPU\n"
 "archivo: %s\n"
 
-#: cinelerra/ffmpeg.C:1977
+#: cinelerra/ffmpeg.C:2000
 #, c-format
 msgid "options open failed %s\n"
 msgstr "opciones de apertura fallaron %s\n"
 
-#: cinelerra/ffmpeg.C:1983
+#: cinelerra/ffmpeg.C:2006
 #, c-format
 msgid "format/codec not found %s\n"
 msgstr "formato / códec no encontrado %s\n"
 
-#: cinelerra/ffmpeg.C:2081
+#: cinelerra/ffmpeg.C:2104
 #, c-format
 msgid "err reading %s: line %d\n"
 msgstr "errar lectura %s: línea %d\n"
 
-#: cinelerra/ffmpeg.C:2175
+#: cinelerra/ffmpeg.C:2198
 #, c-format
 msgid "vid%d (%d),  id 0x%06x:\n"
 msgstr "vid%d (%d),  id 0x%06x:\n"
 
-#: cinelerra/ffmpeg.C:2198
+#: cinelerra/ffmpeg.C:2221
 #, c-format
 msgid "aud%d (%d),  id 0x%06x:\n"
 msgstr "aud%d (%d),  id 0x%06x:\n"
 
-#: cinelerra/ffmpeg.C:2295
+#: cinelerra/ffmpeg.C:2318
 #, c-format
 msgid "can't stat file: %s\n"
 msgstr "no se puede identificar el archivo: %s\n"
 
-#: cinelerra/ffmpeg.C:2393
+#: cinelerra/ffmpeg.C:2398
+#, c-format
+msgid "FFMPEG::open_decoder: some stream have bad times: %s\n"
+msgstr "FFMPEG::abrir_decodificador: algunos flujos tienen mal el tiempo: %s\n"
+
+#: cinelerra/ffmpeg.C:2416
 #, c-format
 msgid "bad file path: %s\n"
 msgstr "mala ruta del archivo: %s\n"
 
-#: cinelerra/ffmpeg.C:2398
+#: cinelerra/ffmpeg.C:2421
 #, c-format
 msgid "bad file format: %s\n"
 msgstr "formato de archivo incorrecto: %s\n"
 
-#: cinelerra/ffmpeg.C:2402
+#: cinelerra/ffmpeg.C:2425
 #, c-format
 msgid "mismatch audio/video file format: %s\n"
 msgstr "desajuste formato de archivo de audio / vídeo: %s\n"
 
-#: cinelerra/ffmpeg.C:2412
+#: cinelerra/ffmpeg.C:2435
 #, c-format
 msgid "failed: %s\n"
 msgstr "fallado: %s\n"
 
-#: cinelerra/ffmpeg.C:2436
+#: cinelerra/ffmpeg.C:2459
 #, c-format
 msgid "get_encoder failed %s:%s\n"
 msgstr "get_encoder falló %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2455
+#: cinelerra/ffmpeg.C:2478
 #, c-format
 msgid "cant find codec %s:%s\n"
 msgstr "no puedo encontrar códec %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2461
+#: cinelerra/ffmpeg.C:2484
 #, c-format
 msgid "unknown codec %s:%s\n"
 msgstr "códec desconocido %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2468
+#: cinelerra/ffmpeg.C:2491
 #, c-format
 msgid "cant create stream %s:%s\n"
 msgstr "no puedo crear el flujo %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2476
+#: cinelerra/ffmpeg.C:2499
 #, c-format
 msgid "duplicate audio %s:%s\n"
 msgstr "duplicado de audio %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2481
+#: cinelerra/ffmpeg.C:2504
 #, c-format
 msgid "bad audio options %s:%s\n"
 msgstr "malas opciones de audio %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2517
+#: cinelerra/ffmpeg.C:2540
 #, c-format
 msgid "check_sample_rate failed %s\n"
 msgstr "check_sample_rate falló %s\n"
 
-#: cinelerra/ffmpeg.C:2536
+#: cinelerra/ffmpeg.C:2559
 #, c-format
 msgid "duplicate video %s:%s\n"
 msgstr "video duplicado %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2541
+#: cinelerra/ffmpeg.C:2564
 #, c-format
 msgid "bad video options %s:%s\n"
 msgstr "malas opciones de vídeo %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2598
+#: cinelerra/ffmpeg.C:2621
 #, c-format
 msgid "check_frame_rate failed %s\n"
 msgstr "check_frame_rate falló %s\n"
 
-#: cinelerra/ffmpeg.C:2614
+#: cinelerra/ffmpeg.C:2637
 #, c-format
 msgid "not audio/video, %s:%s\n"
 msgstr "no audio / vídeo, %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2652
+#: cinelerra/ffmpeg.C:2675
 #, c-format
 msgid "error: stats file = %s\n"
 msgstr "error: archivo datos = %s\n"
 
-#: cinelerra/ffmpeg.C:2675
+#: cinelerra/ffmpeg.C:2698
 #, c-format
 msgid "open failed %s:%s\n"
 msgstr "falla al abrir %s:%s\n"
 
-#: cinelerra/ffmpeg.C:2685
+#: cinelerra/ffmpeg.C:2708
 #, c-format
 msgid ""
 "bitstream filter failed %s:\n"
@@ -4116,17 +4284,17 @@ msgstr ""
 "fallo en el filtro de flujo de bits %s:\n"
 "%s\n"
 
-#: cinelerra/ffmpeg.C:3336
+#: cinelerra/ffmpeg.C:3359
 #, c-format
 msgid "av_frame_alloc failed\n"
 msgstr "av_frame_alloc falla\n"
 
-#: cinelerra/ffmpeg.C:3382
+#: cinelerra/ffmpeg.C:3405
 #, c-format
 msgid "codec open failed\n"
 msgstr "error al abrir el códec\n"
 
-#: cinelerra/ffmpeg.C:3412
+#: cinelerra/ffmpeg.C:3435
 msgid "over 100 read_frame errs\n"
 msgstr "más de 100 read_frame yerra\n"
 
@@ -4176,24 +4344,24 @@ msgstr ": Compresión de audio"
 msgid "Bitrate (kbps):"
 msgstr "Velocidad de bits (kbps):"
 
-#: cinelerra/file.C:242
+#: cinelerra/file.C:243
 msgid "This format doesn't support audio."
 msgstr "Este formato no soporta audio."
 
-#: cinelerra/file.C:245
+#: cinelerra/file.C:246
 msgid "This format doesn't support video."
 msgstr "Este formato no soporta vídeo."
 
-#: cinelerra/file.C:1291 cinelerra/file.C:1297 cinelerra/fileformat.C:152
+#: cinelerra/file.C:1297 cinelerra/file.C:1303 cinelerra/fileformat.C:152
 #: cinelerra/filesndfile.C:455
 msgid "Lo Hi"
 msgstr "Lo Hi"
 
-#: cinelerra/file.C:1298 cinelerra/fileformat.C:166 cinelerra/filesndfile.C:440
+#: cinelerra/file.C:1304 cinelerra/fileformat.C:166 cinelerra/filesndfile.C:440
 msgid "Hi Lo"
 msgstr "Hi-Lo"
 
-#: cinelerra/file.C:1519
+#: cinelerra/file.C:1528
 msgid "UNKNOWN"
 msgstr "DESCONOCIDO"
 
@@ -4481,157 +4649,161 @@ msgstr "ningún códec nombrado: %s: %s"
 
 #: cinelerra/fileformat.C:34
 msgid ": File Format"
-msgstr ": Formato de archivo"
+msgstr ": Formato del archivo"
 
 #: cinelerra/fileformat.C:73
 msgid "Assuming raw PCM:"
 msgstr "Asumiendo PCM crudo:"
 
-#: cinelerra/file.inc:97
+#: cinelerra/file.inc:98
 msgid "AC3"
 msgstr "AC3"
 
-#: cinelerra/file.inc:98
+#: cinelerra/file.inc:99
 msgid "Apple/SGI AIFF"
 msgstr "Apple / SGI AIFF"
 
-#: cinelerra/file.inc:99
+#: cinelerra/file.inc:100
 msgid "AVI Arne Type 1"
 msgstr "AVI Arne Tipo 1"
 
-#: cinelerra/file.inc:100
+#: cinelerra/file.inc:101
 msgid "AVI Avifile"
 msgstr "AVI Avifile"
 
-#: cinelerra/file.inc:101
+#: cinelerra/file.inc:102
 msgid "AVI DV Type 2"
 msgstr "AVI DV tipo 2"
 
-#: cinelerra/file.inc:102
+#: cinelerra/file.inc:103
 msgid "AVI Lavtools"
 msgstr "AVI Lavtools"
 
-#: cinelerra/file.inc:103
+#: cinelerra/file.inc:104
 msgid "EXR"
 msgstr "EXR"
 
-#: cinelerra/file.inc:104
+#: cinelerra/file.inc:105
 msgid "EXR Sequence"
 msgstr "Secuencia EXR"
 
-#: cinelerra/file.inc:105
+#: cinelerra/file.inc:106
 msgid "FFMPEG"
 msgstr "FFMPEG"
 
-#: cinelerra/file.inc:106
+#: cinelerra/file.inc:107
 msgid "FLAC"
 msgstr "FLAC"
 
-#: cinelerra/file.inc:107
+#: cinelerra/file.inc:108
 msgid "GIF"
 msgstr "GIF"
 
-#: cinelerra/file.inc:108
+#: cinelerra/file.inc:109
 msgid "GIF Sequence"
 msgstr "Secuencia GIF"
 
-#: cinelerra/file.inc:110
+#: cinelerra/file.inc:111
 msgid "JPEG Sequence"
-msgstr "JPEG Secuencia"
+msgstr "Secuencia de JPG"
 
-#: cinelerra/file.inc:111
+#: cinelerra/file.inc:112
 msgid "Microsoft WAV"
 msgstr "Microsoft WAV"
 
-#: cinelerra/file.inc:112
+#: cinelerra/file.inc:113
 msgid "MPEG Audio"
 msgstr "MPEG Audio"
 
-#: cinelerra/file.inc:114
+#: cinelerra/file.inc:115
 msgid "MPEG Video"
 msgstr "Vídeo MPEG"
 
-#: cinelerra/file.inc:116
+#: cinelerra/file.inc:117
 msgid "PNG Sequence"
-msgstr "PNG Secuencia"
+msgstr "Secuencia de PNG"
 
-#: cinelerra/file.inc:117
+#: cinelerra/file.inc:118
 msgid "PPM"
 msgstr "PPM"
 
-#: cinelerra/file.inc:118
+#: cinelerra/file.inc:119
 msgid "PPM Sequence"
-msgstr "Secuencia PPM"
+msgstr "Secuencia de PPM"
 
-#: cinelerra/file.inc:119
+#: cinelerra/file.inc:120
 msgid "Raw DV"
 msgstr "Raw DV"
 
-#: cinelerra/file.inc:120
+#: cinelerra/file.inc:121
 msgid "Raw PCM"
 msgstr "Raw PCM"
 
-#: cinelerra/file.inc:121
+#: cinelerra/file.inc:122
 msgid "Sun/NeXT AU"
 msgstr "Sun/NeXT AU"
 
-#: cinelerra/file.inc:122
+#: cinelerra/file.inc:123
 msgid "TGA"
 msgstr "TGA"
 
-#: cinelerra/file.inc:123
+#: cinelerra/file.inc:124
 msgid "TGA Sequence"
-msgstr "TGA Secuencia"
+msgstr "Secuencia de TGA"
 
-#: cinelerra/file.inc:124
+#: cinelerra/file.inc:125
 msgid "TIFF"
 msgstr "TIFF"
 
-#: cinelerra/file.inc:125
+#: cinelerra/file.inc:126
 msgid "TIFF Sequence"
-msgstr "Secuencia TIFF"
+msgstr "Secuencia de TIFF"
 
-#: cinelerra/file.inc:126
+#: cinelerra/file.inc:127
 msgid "Unknown sound"
 msgstr "Sonido desconocido"
 
-#: cinelerra/file.inc:173
+#: cinelerra/file.inc:128
+msgid "Reference to EDL"
+msgstr "Referencia a EDL"
+
+#: cinelerra/file.inc:176
 msgid "8 Bit Linear"
 msgstr "8 Bit Linear"
 
-#: cinelerra/file.inc:174
+#: cinelerra/file.inc:177
 msgid "16 Bit Linear"
 msgstr "16 Bit Linear"
 
-#: cinelerra/file.inc:175
+#: cinelerra/file.inc:178
 msgid "24 Bit Linear"
 msgstr "24 Bit Linear"
 
-#: cinelerra/file.inc:176
+#: cinelerra/file.inc:179
 msgid "32 Bit Linear"
 msgstr "32 Bit Linear"
 
-#: cinelerra/file.inc:177
+#: cinelerra/file.inc:180
 msgid "u Law"
 msgstr "u Ley"
 
-#: cinelerra/file.inc:178
+#: cinelerra/file.inc:181
 msgid "IMA 4"
 msgstr "IMA 4"
 
-#: cinelerra/file.inc:179
+#: cinelerra/file.inc:182
 msgid "ADPCM"
 msgstr "ADPCM"
 
-#: cinelerra/file.inc:180
+#: cinelerra/file.inc:183
 msgid "Float"
 msgstr "Flotante"
 
-#: cinelerra/file.inc:182
+#: cinelerra/file.inc:185
 msgid "RGB ALPHA"
 msgstr "RGB ALPHA"
 
-#: cinelerra/file.inc:183
+#: cinelerra/file.inc:186
 msgid "PNG ALPHA"
 msgstr "PNG ALPHA"
 
@@ -4729,7 +4901,7 @@ msgstr " (%5.2f), marcos %jd"
 #: cinelerra/filempeg.C:196 cinelerra/filempeg.C:215
 #, c-format
 msgid " (%0.3f secs)"
-msgstr " (%0.3f segundos)"
+msgstr " (%0.3f seg)"
 
 #: cinelerra/filempeg.C:201
 #, c-format
@@ -4964,7 +5136,7 @@ msgstr "MPEG-1 Generico"
 
 #: cinelerra/filempeg.C:2097
 msgid "standard VCD"
-msgstr "VCD estándar"
+msgstr "estándar VCD"
 
 #: cinelerra/filempeg.C:2098
 msgid "user VCD"
@@ -5034,6 +5206,10 @@ msgstr "YUV 4: 2: 2"
 msgid "PPM, RGB raw only"
 msgstr "PPM, RGB solo crudo"
 
+#: cinelerra/fileref.C:68
+msgid "Reference files cant be created by rendering\n"
+msgstr "Los archivos de referencia no se pueden crear renderizando\n"
+
 #: cinelerra/filesndfile.C:269
 #, c-format
 msgid "sf_seek() to sample %jd failed, reason: %s\n"
@@ -5111,7 +5287,7 @@ msgstr "Carpeta..."
 
 #: cinelerra/folderlistmenu.C:51
 msgid "New Media"
-msgstr "Nuevo Medios"
+msgstr "Nuevos Medios Multimedia"
 
 #: cinelerra/folderlistmenu.C:52
 msgid "New Clips"
@@ -5159,39 +5335,39 @@ msgstr "Preestablecidos:"
 
 #: cinelerra/formattools.C:159 cinelerra/recordprefs.C:71
 msgid "File Format:"
-msgstr "Formato de archivo:"
+msgstr "Formato del archivo:"
 
-#: cinelerra/formattools.C:563
+#: cinelerra/formattools.C:568
 msgid "Configure audio compression"
 msgstr "Configurar de compresión de audio"
 
-#: cinelerra/formattools.C:585
+#: cinelerra/formattools.C:590
 msgid "Configure video compression"
 msgstr "Configurar la compresión de vídeo"
 
-#: cinelerra/formattools.C:689
+#: cinelerra/formattools.C:694
 msgid "Record audio tracks"
 msgstr "Grabar las pistas de audio"
 
-#: cinelerra/formattools.C:689
+#: cinelerra/formattools.C:694
 msgid "Render audio tracks"
 msgstr "Renderizar pistas de audio"
 
-#: cinelerra/formattools.C:707
+#: cinelerra/formattools.C:712
 msgid "Record video tracks"
 msgstr "Grabar las pistas de vídeo"
 
-#: cinelerra/formattools.C:707
+#: cinelerra/formattools.C:712
 msgid "Render video tracks"
 msgstr "Renderizar pistas de vídeo"
 
-#: cinelerra/formattools.C:790
+#: cinelerra/formattools.C:795
 msgid "Create new file at each label"
 msgstr "Crear un fichero nuevo en cada etiqueta"
 
 #: cinelerra/formatwindow.C:29 cinelerra/formatwindow.C:90
 msgid ": File format"
-msgstr ": Formato de archivo"
+msgstr ": Formato del archivo"
 
 #: cinelerra/formatwindow.C:46
 msgid "Set parameters for this audio format:"
@@ -5231,52 +5407,52 @@ msgstr "Transición"
 
 #: cinelerra/gwindowgui.C:65 cinelerra/viewmenu.C:129
 msgid "Plugin Keyframes"
-msgstr "complemento Fotogramas clave"
+msgstr "Fotogramas Clave Efectos"
 
 #: cinelerra/gwindowgui.C:66 cinelerra/gwindowgui.C:164
 msgid "Hard Edges"
 msgstr "Bordes duros"
 
-#: cinelerra/gwindowgui.C:72 cinelerra/mainmenu.C:254
+#: cinelerra/gwindowgui.C:72 cinelerra/mainmenu.C:258
 msgid "Camera X"
 msgstr "Cámara X"
 
-#: cinelerra/gwindowgui.C:73 cinelerra/mainmenu.C:256
+#: cinelerra/gwindowgui.C:73 cinelerra/mainmenu.C:260
 msgid "Camera Y"
 msgstr "Cámara Y"
 
-#: cinelerra/gwindowgui.C:74 cinelerra/mainmenu.C:258
+#: cinelerra/gwindowgui.C:74 cinelerra/mainmenu.C:262
 msgid "Camera Z"
 msgstr "Cámara Z"
 
-#: cinelerra/gwindowgui.C:75 cinelerra/mainmenu.C:260
+#: cinelerra/gwindowgui.C:75 cinelerra/mainmenu.C:264
 msgid "Projector X"
 msgstr "Proyector X"
 
-#: cinelerra/gwindowgui.C:76 cinelerra/mainmenu.C:262
+#: cinelerra/gwindowgui.C:76 cinelerra/mainmenu.C:266
 msgid "Projector Y"
 msgstr "Proyector Y"
 
-#: cinelerra/gwindowgui.C:77 cinelerra/mainmenu.C:264
+#: cinelerra/gwindowgui.C:77 cinelerra/mainmenu.C:268
 msgid "Projector Z"
 msgstr "Proyector Z"
 
-#: cinelerra/gwindowgui.C:78 cinelerra/mainmenu.C:246
+#: cinelerra/gwindowgui.C:78 cinelerra/mainmenu.C:250
 msgid "Fade"
-msgstr "Difuminado"
+msgstr "Fundido / Volumen"
 
 #: cinelerra/gwindowgui.C:80 cinelerra/recordbatches.C:23
 #: plugins/parametric/parametric.C:427
 msgid "Mode"
-msgstr "Modo"
+msgstr "Modo Superposición"
 
-#: cinelerra/gwindowgui.C:81 cinelerra/mainmenu.C:251
+#: cinelerra/gwindowgui.C:81 cinelerra/mainmenu.C:255
 #: plugins/crikey/crikeywindow.C:98
 #: plugins/denoiseseltempavg/seltempavgwindow.C:68
 msgid "Mask"
 msgstr "Máscara"
 
-#: cinelerra/gwindowgui.C:82 cinelerra/mainmenu.C:252
+#: cinelerra/gwindowgui.C:82 cinelerra/mainmenu.C:256
 msgid "Speed"
 msgstr "Velocidad"
 
@@ -5295,14 +5471,14 @@ msgstr "Mayús-F2"
 #: cinelerra/iec61883input.C:202
 #, c-format
 msgid "write_frame: incomplete frame received.\n"
-msgstr "Write_frame: Marco incompleto recibido\n"
+msgstr "escribir_fotograma: fotograma incompleto recibido\n"
 
-#: cinelerra/indexfile.C:476
+#: cinelerra/indexfile.C:485
 #, c-format
 msgid "Creating %s."
 msgstr "Creando %s."
 
-#: cinelerra/indexfile.C:643
+#: cinelerra/indexfile.C:652
 #, c-format
 msgid "IndexFile::draw_index: index has 0 zoom\n"
 msgstr "Indexfile::draw_index: el index tiene 0 zoom\n"
@@ -5330,11 +5506,11 @@ msgstr "Todas las ediciones (ondulación)"
 
 #: cinelerra/interfaceprefs.C:37
 msgid "One Edit  (roll)"
-msgstr "Una edición (rollo)"
+msgstr "Una edición (enrrollar)"
 
 #: cinelerra/interfaceprefs.C:38
 msgid "Src Only  (slip)"
-msgstr "Solo origne (separar)"
+msgstr "Src solamente (deslizar)"
 
 #: cinelerra/interfaceprefs.C:39
 msgid "Move Edit (slide)"
@@ -5358,7 +5534,7 @@ msgstr "Keyframe reticle:"
 
 #: cinelerra/interfaceprefs.C:88
 msgid "Snapshot path:"
-msgstr "Ruta de la instantania"
+msgstr "Ruta de la instantánea:"
 
 #: cinelerra/interfaceprefs.C:93
 msgid "Clicking on edit boundaries does what:"
@@ -5378,123 +5554,127 @@ msgstr "Botón 3:"
 
 #: cinelerra/interfaceprefs.C:124 plugins/reroute/reroute.C:204
 msgid "Operation:"
-msgstr "Operación"
+msgstr "Operación:"
 
-#: cinelerra/interfaceprefs.C:138
+#: cinelerra/interfaceprefs.C:139
 msgid "PIN:"
 msgstr "PIN:"
 
-#: cinelerra/interfaceprefs.C:150
+#: cinelerra/interfaceprefs.C:151
+msgid "Nested Proxy Path:"
+msgstr "Ruta de proxy anidada:"
+
+#: cinelerra/interfaceprefs.C:158
 msgid "Default LV2_PATH:"
 msgstr "LV2_PATH por defecto:"
 
-#: cinelerra/interfaceprefs.C:164 cinelerra/interfaceprefs.C:169
+#: cinelerra/interfaceprefs.C:173 cinelerra/interfaceprefs.C:178
 msgid "(must be root)"
 msgstr "(debes ser root)"
 
-#: cinelerra/interfaceprefs.C:176
+#: cinelerra/interfaceprefs.C:185
 msgid "Min DB for meter:"
-msgstr "Min DB para metro:"
+msgstr "Medidor Audio (db) Mín:"
 
-#: cinelerra/interfaceprefs.C:181 plugins/threshold/thresholdwindow.C:500
+#: cinelerra/interfaceprefs.C:190 plugins/threshold/thresholdwindow.C:500
 msgid "Max:"
-msgstr "Max:"
+msgstr "Máx:"
 
-#: cinelerra/interfaceprefs.C:206
+#: cinelerra/interfaceprefs.C:215
 msgid "Index files:"
-msgstr "Ficheros de índice:"
+msgstr "Ficheros del índice:"
 
-#: cinelerra/interfaceprefs.C:210
+#: cinelerra/interfaceprefs.C:219
 msgid "Index files go here:"
-msgstr "Los ficheros de index van aquí:"
+msgstr "Los archivos del índice están en:"
 
-#: cinelerra/interfaceprefs.C:217
+#: cinelerra/interfaceprefs.C:226
 msgid "Index Path"
 msgstr "Ruta del Índice"
 
-#: cinelerra/interfaceprefs.C:217
+#: cinelerra/interfaceprefs.C:226
 msgid "Select the directory for index files"
-msgstr "Seleccione el directorio para los archivos de índice"
+msgstr "Seleccione la carpeta para los archivos de índice"
 
-#: cinelerra/interfaceprefs.C:220
+#: cinelerra/interfaceprefs.C:229
 msgid "Size of index file in KB:"
-msgstr "Tamaño del archivo de índice en KB:"
+msgstr "Tamaño del archivo en KB:"
 
-#: cinelerra/interfaceprefs.C:227
+#: cinelerra/interfaceprefs.C:236
 msgid "Number of index files to keep:"
-msgstr "Número de ficheros de índice que deben mantenerse:"
+msgstr "Número de archivos a guardar:"
 
-#: cinelerra/interfaceprefs.C:232
+#: cinelerra/interfaceprefs.C:241
 msgid "Delete existing indexes"
 msgstr "Borrar los índices existentes"
 
-#: cinelerra/interfaceprefs.C:236
+#: cinelerra/interfaceprefs.C:245
 msgid "Delete clip thumbnails"
 msgstr "Eliminar miniaturas de clip"
 
-#: cinelerra/interfaceprefs.C:309
+#: cinelerra/interfaceprefs.C:318
 msgid "build ffmpeg marker indexes"
 msgstr "construir índices de marcadores ffmpeg"
 
-#: cinelerra/interfaceprefs.C:400
+#: cinelerra/interfaceprefs.C:409
 msgid "Scan for commercials during toc build"
 msgstr "Buscar anuncios durante construcción del toc"
 
-#: cinelerra/interfaceprefs.C:414
+#: cinelerra/interfaceprefs.C:423
 msgid "Android Remote Control"
 msgstr "Control Remoto Android"
 
-#: cinelerra/interfaceprefs.C:465
+#: cinelerra/interfaceprefs.C:474
 msgid "Shell Commands"
 msgstr "Comandos del Shell"
 
-#: cinelerra/interfaceprefs.C:469
+#: cinelerra/interfaceprefs.C:478
 msgid "Main Menu Shell Commands"
 msgstr "Menú Principal Comandos de Shell"
 
-#: cinelerra/interfaceprefs.C:479
+#: cinelerra/interfaceprefs.C:488
 msgid "Import images with a duration of"
-msgstr "Importar imágenes con una duración de"
+msgstr "Duración imágenes importadas"
 
-#: cinelerra/interfaceprefs.C:538 cinelerra/shbtnprefs.C:251
+#: cinelerra/interfaceprefs.C:547 cinelerra/shbtnprefs.C:251
 #: cinelerra/shbtnprefs.C:266
 msgid "Never"
 msgstr "Nunca"
 
-#: cinelerra/interfaceprefs.C:539
+#: cinelerra/interfaceprefs.C:548
 msgid "Dragging"
 msgstr "Arrastrando"
 
-#: cinelerra/interfaceprefs.C:540 cinelerra/shbtnprefs.C:250
+#: cinelerra/interfaceprefs.C:549 cinelerra/shbtnprefs.C:250
 #: cinelerra/shbtnprefs.C:265
 msgid "Always"
 msgstr "Siempre"
 
-#: cinelerra/interfaceprefs.C:555
+#: cinelerra/interfaceprefs.C:564
 msgid "trap sigSEGV"
-msgstr "Trap SIGSEV"
+msgstr "trap SIGSEV"
 
-#: cinelerra/interfaceprefs.C:571
+#: cinelerra/interfaceprefs.C:580
 msgid "trap sigINT"
-msgstr "Trap SIGINT"
+msgstr "trap SIGINT"
 
-#: cinelerra/interfaceprefs.C:594
+#: cinelerra/interfaceprefs.C:603
 msgid "Probe Order"
-msgstr "Orden de sondeo:"
+msgstr "Orden de sondeo"
 
-#: cinelerra/interfaceprefs.C:598
+#: cinelerra/interfaceprefs.C:607
 msgid "File Open Probe Ordering"
 msgstr "Orden de prueba de apertura de archivo"
 
-#: cinelerra/interfaceprefs.C:611
+#: cinelerra/interfaceprefs.C:620
 msgid "Use yuv420p dvd interlace format"
 msgstr "Use yuv420p DVD entrelazado formato"
 
-#: cinelerra/interfaceprefs.C:644
+#: cinelerra/interfaceprefs.C:653
 msgid "Auto start lv2 gui"
-msgstr "Auto iniciar lv2 gui"
+msgstr "Auto iniciar interfaz gráfica de lv2"
 
-#: cinelerra/interfaceprefs.C:656
+#: cinelerra/interfaceprefs.C:665
 msgid "Reload plugin index"
 msgstr "Recargar índice de complemento"
 
@@ -5504,17 +5684,17 @@ msgstr "¡Error!"
 
 #: cinelerra/interlacemodes.h:30
 msgid "Top Fields First"
-msgstr "Los campos Mejores Primera"
+msgstr "Campos superiores primero"
 
 #: cinelerra/interlacemodes.h:33
 msgid "Bottom Fields First"
-msgstr "Los campos Inferior Primera"
+msgstr "Campos inferiores primero"
 
 #: cinelerra/interlacemodes.h:36
 msgid "Not Interlaced"
 msgstr "No entrelazado"
 
-#: cinelerra/interlacemodes.h:45 plugins/deinterlace-cv/deinterwindow-cv.C:277
+#: cinelerra/interlacemodes.h:46 plugins/deinterlace-cv/deinterwindow-cv.C:277
 #: plugins/motion/motionwindow.C:762 plugins/motion2point/motionwindow.C:767
 #: plugins/motion2point/motionwindow.C:788
 #: plugins/motion-cv/motionwindow-cv.C:624
@@ -5522,31 +5702,31 @@ msgstr "No entrelazado"
 msgid "Do Nothing"
 msgstr "No hacer nada"
 
-#: cinelerra/interlacemodes.h:48
+#: cinelerra/interlacemodes.h:49
 msgid "Shift Up 1 pixel"
 msgstr "Desplazar arriba 1 píxel"
 
-#: cinelerra/interlacemodes.h:51
+#: cinelerra/interlacemodes.h:52
 msgid "Shift Down 1 pixel"
 msgstr "Desplazar abajo 1 píxel"
 
-#: cinelerra/interlacemodes.h:58
+#: cinelerra/interlacemodes.h:59
 msgid "unknown"
 msgstr "desconocido"
 
-#: cinelerra/interlacemodes.h:59
+#: cinelerra/interlacemodes.h:60
 msgid "non-interlaced, progressive frame"
 msgstr "marco progresivo no entrelazado"
 
-#: cinelerra/interlacemodes.h:60
+#: cinelerra/interlacemodes.h:61
 msgid "interlaced, top-field first"
-msgstr "Entrelazado, la parte superior del campo en primer lugar"
+msgstr "entrelazado, campo superior primero"
 
-#: cinelerra/interlacemodes.h:61
+#: cinelerra/interlacemodes.h:62
 msgid "interlaced, bottom-field first"
-msgstr "Entrelazado, de abajo hacia el primer campo"
+msgstr "entrelazado, campo inferior primero"
 
-#: cinelerra/interlacemodes.h:62
+#: cinelerra/interlacemodes.h:63
 msgid "mixed, \"refer to frame header\""
 msgstr "mixto, \"consulte el encabezado del marco\""
 
@@ -5565,7 +5745,7 @@ msgstr "aplicar predefinido"
 
 #: cinelerra/keyframegui.C:439
 msgid "edit keyframe"
-msgstr "Editar fotograma clave"
+msgstr "editar fotograma clave"
 
 #: cinelerra/keyframegui.C:480
 msgid "Keyframe parameters:"
@@ -5577,7 +5757,7 @@ msgstr "Editar valor:"
 
 #: cinelerra/keyframegui.C:510
 msgid "Preset title:"
-msgstr "Título predefinido"
+msgstr "Título predefinido:"
 
 #: cinelerra/keyframegui.C:673
 msgid "Apply to all selected keyframes"
@@ -5593,11 +5773,11 @@ msgstr "Mostrar configuración del plugin"
 
 #: cinelerra/keyframepopup.C:180
 msgid "Delete keyframe"
-msgstr "borrar fotograma clave"
+msgstr "Borrar fotograma clave"
 
 #: cinelerra/keyframepopup.C:192 cinelerra/keyframepopup.C:196
 msgid "delete keyframe"
-msgstr "Borrar fotograma clave"
+msgstr "borrar fotograma clave"
 
 #: cinelerra/keyframepopup.C:209 cinelerra/keyframepopup.C:535
 msgid "Hide keyframe type"
@@ -5605,7 +5785,7 @@ msgstr "Ocultar tipo de fotograma clave"
 
 #: cinelerra/keyframepopup.C:227
 msgid "Show keyframe settings"
-msgstr "Mostrar preferencias del fotograma clave."
+msgstr "Mostrar preferencias del fotograma clave"
 
 #: cinelerra/keyframepopup.C:342
 msgid "Copy keyframe"
@@ -5625,7 +5805,7 @@ msgstr "editar disjunto"
 
 #: cinelerra/keyframepopup.C:463
 msgid "misconfigured"
-msgstr "Mal configurado"
+msgstr "mal configurado"
 
 #: cinelerra/keyframepopup.C:478 cinelerra/keyframepopup.C:484
 msgid "change keyframe curve mode"
@@ -5636,7 +5816,7 @@ msgid "Edit Params..."
 msgstr "Editar parámetros..."
 
 #: cinelerra/keyframepopup.C:592 cinelerra/keyframepopup.C:595
-#: cinelerra/mwindowedit.C:1212
+#: cinelerra/mwindowedit.C:1213
 msgid "mute"
 msgstr "mutear"
 
@@ -5650,7 +5830,7 @@ msgstr ": Label"
 
 #: cinelerra/labeledit.C:102
 msgid "Label Text:"
-msgstr "Texto de etiqueta"
+msgstr "Texto de etiqueta:"
 
 #: cinelerra/labelnavigate.C:64
 msgid "Previous label"
@@ -5668,79 +5848,102 @@ msgstr "Ir a"
 msgid ": Levels"
 msgstr "Niveles"
 
-#: cinelerra/loadfile.C:163
+#: cinelerra/loadfile.C:124
+msgid ""
+"Other projects can change this project\n"
+"and this can become a broken link"
+msgstr ""
+"Otros proyectos pueden cambiar este proyecto\n"
+"y esto puede convertirse en un enlace roto"
+
+#: cinelerra/loadfile.C:169
 msgid ": Load"
 msgstr ": Carga"
 
-#: cinelerra/loadfile.C:164
+#: cinelerra/loadfile.C:170
 msgid "Select files to load:"
 msgstr "Seleccionar archivos para cargar:"
 
-#: cinelerra/loadfile.C:234
+#: cinelerra/loadfile.C:245
 msgid ": Locate file"
 msgstr ": Localizar el archivo"
 
-#: cinelerra/loadfile.C:287
+#: cinelerra/loadfile.C:298
 msgid "Load backup"
 msgstr "Cargar copia de seguridad"
 
-#: cinelerra/loadmode.C:43
+#: cinelerra/loadmode.C:28
+msgid "Load strategy:"
+msgstr "Estrategia de inserción:"
+
+msgid "Insertion strategy:"
+msgstr "Estrategia de inserción:"
+
+#: cinelerra/loadmode.C:29
+msgid "EDL strategy:"
+msgstr "Estrategia EDL:"
+
+#: cinelerra/loadmode.C:48
 msgid "Insert nothing"
 msgstr "No insertar nada"
 
-#: cinelerra/loadmode.C:44
+#: cinelerra/loadmode.C:49
 msgid "Replace current project"
 msgstr "Reemplazar proyecto actual"
 
-#: cinelerra/loadmode.C:45
+#: cinelerra/loadmode.C:50
 msgid "Replace current project and concatenate tracks"
 msgstr "Reemplazar proyecto actual y concatenar pistas"
 
-#: cinelerra/loadmode.C:46
+#: cinelerra/loadmode.C:51
 msgid "Append in new tracks"
 msgstr "Añadir en una pista nueva"
 
-#: cinelerra/loadmode.C:47
+#: cinelerra/loadmode.C:52
 msgid "Concatenate to existing tracks"
 msgstr "Concatenar con las pistas existentes"
 
-#: cinelerra/loadmode.C:48
+#: cinelerra/loadmode.C:53
 msgid "Paste over selection/at insertion point"
 msgstr "Pegar sobre la selección/en el punto de inserción"
 
-#: cinelerra/loadmode.C:49
+#: cinelerra/loadmode.C:54
 msgid "Create new resources only"
 msgstr "Crear solo recursos nuevos"
 
-#: cinelerra/loadmode.C:50
+#: cinelerra/loadmode.C:55
 msgid "Nest sequence"
-msgstr "Secuencia de anidado"
+msgstr "Anidar secuencia"
 
-#: cinelerra/loadmode.C:118 cinelerra/loadmode.C:167
-msgid "Load strategy:"
-msgstr "Estrategia de inserción:"
+#: cinelerra/loadmode.C:56
+msgid "Nested"
+msgstr "Anidado"
+
+#: cinelerra/loadmode.C:57
+msgid "Reference"
+msgstr "Referencia"
 
 #: cinelerra/localsession.C:63
 #, c-format
 msgid "Program"
 msgstr "Programa"
 
-#: cinelerra/main.C:207
+#: cinelerra/main.C:209
 #, c-format
 msgid ": Could not set locale.\n"
 msgstr ": No se pudo establecer la configuración regional.\n"
 
-#: cinelerra/main.C:238
+#: cinelerra/main.C:240
 #, c-format
 msgid "%s: -c needs a filename.\n"
 msgstr "%s:. -c Necesita un nombre de archivo\n"
 
-#: cinelerra/main.C:253
+#: cinelerra/main.C:255
 #, c-format
 msgid "-b may not be used by the user.\n"
 msgstr "-b No puede ser utilizada por el usuario.\n"
 
-#: cinelerra/main.C:309
+#: cinelerra/main.C:311
 #, c-format
 msgid ""
 "\n"
@@ -5749,7 +5952,7 @@ msgstr ""
 "\n"
 "Uso:\n"
 
-#: cinelerra/main.C:310
+#: cinelerra/main.C:312
 #, c-format
 msgid ""
 "%s [-f] [-c configuration] [-d port] [-n nice] [-r batch file] [filenames]\n"
@@ -5758,49 +5961,49 @@ msgstr ""
 "%s [-f] [configuración -c] [puerto -d] [nice -n] [ lote ficheros -r] [nombre de archivo]\n"
 "\n"
 
-#: cinelerra/main.C:311
+#: cinelerra/main.C:313
 #, c-format
 msgid "-d = Run in the background as renderfarm client.  The port (400) is optional.\n"
 msgstr "-d = Ejecutar en el fondo como cliente de granja de renderizado. El puerto (400) es opcional.\n"
 
-#: cinelerra/main.C:312
+#: cinelerra/main.C:314
 #, c-format
 msgid "-f = Run in the foreground as renderfarm client.  Substitute for -d.\n"
 msgstr "-f = Ejecutar en primer plan como cliente de granja de renderizado.  Substituir por -d.\n"
 
-#: cinelerra/main.C:313
+#: cinelerra/main.C:315
 #, c-format
 msgid "-n = Nice value if running as renderfarm client. (19)\n"
 msgstr "-n = Buen valor si se ejecuta como cliente de granja de renderizado. (20)\n"
 
-#: cinelerra/main.C:314
+#: cinelerra/main.C:316
 #, c-format
 msgid "-c = Configuration file to use instead of %s/%s.\n"
 msgstr "-c = Archivo de configuración para utilizar en lugar de %s /%s.\n"
 
-#: cinelerra/main.C:316
+#: cinelerra/main.C:318
 #, c-format
 msgid "-r = batch render the contents of the batch file (%s/%s) with no GUI.  batch file is optional.\n"
 msgstr "-r = Renderizado por lotes el contenido del archivo por lotes (%s /%s) sin archivo por lotes GUI. Es opcional.\n"
 
-#: cinelerra/main.C:318
+#: cinelerra/main.C:320
 #, c-format
 msgid "-S = do not reload perpetual session\n"
 msgstr "-S = no recargar sesión perpetua\n"
 
-#: cinelerra/main.C:319
+#: cinelerra/main.C:321
 #, c-format
 msgid "-x = reload from backup\n"
 msgstr "-x = recargar desde copia de seguridad\n"
 
-#: cinelerra/main.C:320
+#: cinelerra/main.C:322
 #, c-format
 msgid ""
 "filenames = files to load\n"
 "\n"
 "\n"
 msgstr ""
-"Nombres de archivo = Archivos para cargar\n"
+"nombres de archivo = archivos para cargar\n"
 "\n"
 "\n"
 
@@ -5810,461 +6013,462 @@ msgstr ": Mensajes"
 
 #: cinelerra/mainerror.C:61
 msgid "Message log:"
-msgstr "Mensaje de registro"
+msgstr "Mensaje de registro:"
 
 #: cinelerra/mainindexes.C:183 cinelerra/threadindexer.C:137
 msgid "Building Indexes..."
 msgstr "Construyendo indices..."
 
-#: cinelerra/mainmenu.C:145 cinelerra/shbtnprefs.C:192 plugins/svg/svgwin.C:267
+#: cinelerra/mainmenu.C:146 cinelerra/shbtnprefs.C:192 plugins/svg/svgwin.C:267
 msgid "Edit"
 msgstr "Editar"
 
-#: cinelerra/mainmenu.C:169
+#: cinelerra/mainmenu.C:170
 msgid "Keyframes"
 msgstr "Fotogramas clave"
 
-#: cinelerra/mainmenu.C:186 cinelerra/mixersalign.C:261 cinelerra/new.C:344
+#: cinelerra/mainmenu.C:187 cinelerra/mixersalign.C:261 cinelerra/new.C:344
 #: cinelerra/setformat.C:303
 msgid "Audio"
 msgstr "Audio"
 
-#: cinelerra/mainmenu.C:195 cinelerra/new.C:375 cinelerra/setformat.C:342
+#: cinelerra/mainmenu.C:196 cinelerra/new.C:375 cinelerra/setformat.C:342
 msgid "Video"
 msgstr "Vídeo"
 
-#: cinelerra/mainmenu.C:202
+#: cinelerra/mainmenu.C:203
 msgid "Tracks"
 msgstr "Pistas"
 
-#: cinelerra/mainmenu.C:214
+#: cinelerra/mainmenu.C:215
 msgid "Settings"
 msgstr "Ajustes"
 
-#: cinelerra/mainmenu.C:248 cinelerra/vpatchgui.C:272
+#: cinelerra/mainmenu.C:252 cinelerra/vpatchgui.C:272
 msgid "Overlay mode"
-msgstr "Modo de superposición:"
+msgstr "Modo de superposición"
 
-#: cinelerra/mainmenu.C:267
+#: cinelerra/mainmenu.C:271
 msgid "Window"
 msgstr "Ventana"
 
-#: cinelerra/mainmenu.C:278
+#: cinelerra/mainmenu.C:282
 msgid "Tile left"
 msgstr "Mosaico izquierda"
 
-#: cinelerra/mainmenu.C:279
+#: cinelerra/mainmenu.C:283
 msgid "Tile right"
 msgstr "Mosaico derecho"
 
-#: cinelerra/mainmenu.C:282
+#: cinelerra/mainmenu.C:286
 msgid "Default positions"
 msgstr "Posiciones predeterminadas"
 
-#: cinelerra/mainmenu.C:282
+#: cinelerra/mainmenu.C:286
 msgid "Ctrl-P"
 msgstr "Ctrl-P"
 
-#: cinelerra/mainmenu.C:283
+#: cinelerra/mainmenu.C:287
 msgid "Load layout..."
-msgstr "Cargar diseño"
+msgstr "Cargar diseño..."
 
-#: cinelerra/mainmenu.C:285
+#: cinelerra/mainmenu.C:289
 msgid "Save layout..."
-msgstr "Guardar diseño"
+msgstr "Guardar diseño..."
 
-#: cinelerra/mainmenu.C:552
+#: cinelerra/mainmenu.C:556
 msgid "Dumps..."
 msgstr "Volcados..."
 
-#: cinelerra/mainmenu.C:573
+#: cinelerra/mainmenu.C:577
 msgid "Dump CICache"
 msgstr "Vaciar CICache"
 
-#: cinelerra/mainmenu.C:583
+#: cinelerra/mainmenu.C:587
 msgid "Dump EDL"
 msgstr "Vaciar EDL"
 
-#: cinelerra/mainmenu.C:595
+#: cinelerra/mainmenu.C:599
 msgid "Dump Plugins"
 msgstr "Vaciar Plugins"
 
-#: cinelerra/mainmenu.C:607
+#: cinelerra/mainmenu.C:611
 msgid "Dump Assets"
 msgstr "Vaciar clips"
 
-#: cinelerra/mainmenu.C:617
+#: cinelerra/mainmenu.C:621
 msgid "Dump Undo"
 msgstr "Deshacer volcado"
 
-#: cinelerra/mainmenu.C:630 cinelerra/mixersalign.C:482
+#: cinelerra/mainmenu.C:634 cinelerra/mixersalign.C:482
 msgid "Undo"
 msgstr "Deshacer"
 
-#: cinelerra/mainmenu.C:643
+#: cinelerra/mainmenu.C:647
 #, c-format
 msgid "Undo %s"
 msgstr "Deshacer %s"
 
-#: cinelerra/mainmenu.C:649
+#: cinelerra/mainmenu.C:653
 msgid "Redo"
 msgstr "Rehacer"
 
-#: cinelerra/mainmenu.C:649
+#: cinelerra/mainmenu.C:653
 msgid "Shift-Z"
 msgstr "Mayús-Z"
 
-#: cinelerra/mainmenu.C:664
+#: cinelerra/mainmenu.C:668
 #, c-format
 msgid "Redo %s"
 msgstr "Rehacer %s"
 
-#: cinelerra/mainmenu.C:670
+#: cinelerra/mainmenu.C:674
 msgid "Cut keyframes"
 msgstr "Cortar fotogramas clave"
 
-#: cinelerra/mainmenu.C:670
+#: cinelerra/mainmenu.C:674
 msgid "Shift-X"
 msgstr "Mayús-X"
 
-#: cinelerra/mainmenu.C:684
+#: cinelerra/mainmenu.C:688
 msgid "Copy keyframes"
 msgstr "Copiar fotogramas clave"
 
-#: cinelerra/mainmenu.C:684
+#: cinelerra/mainmenu.C:688
 msgid "Shift-C"
 msgstr "Mayús-C"
 
-#: cinelerra/mainmenu.C:698
+#: cinelerra/mainmenu.C:702
 msgid "Paste keyframes"
 msgstr "Pegar fotogramas clave"
 
-#: cinelerra/mainmenu.C:698
+#: cinelerra/mainmenu.C:702
 msgid "Shift-V"
 msgstr "Mayús-V"
 
-#: cinelerra/mainmenu.C:712
+#: cinelerra/mainmenu.C:716
 msgid "Clear keyframes"
-msgstr "Limpiar Fotogramas clave"
+msgstr "Eliminar Fotogramas clave"
 
-#: cinelerra/mainmenu.C:712
+#: cinelerra/mainmenu.C:716
 msgid "Shift-Del"
-msgstr "Mayús-Del"
+msgstr "Mayús-Supr"
 
-#: cinelerra/mainmenu.C:728
+#: cinelerra/mainmenu.C:732
 msgid "Change to linear"
 msgstr "Cambiar a lineal"
 
-#: cinelerra/mainmenu.C:743
+#: cinelerra/mainmenu.C:747
 msgid "Change to smooth"
 msgstr "Cambiar a suavizar"
 
-#: cinelerra/mainmenu.C:757
+#: cinelerra/mainmenu.C:761
 msgid "Create curve type..."
 msgstr "Crear tipo curva..."
 
-#: cinelerra/mainmenu.C:816
+#: cinelerra/mainmenu.C:820
 msgid "Cut default keyframe"
 msgstr "Cortar fotograma clave por defecto"
 
-#: cinelerra/mainmenu.C:816
+#: cinelerra/mainmenu.C:820
 msgid "Alt-x"
 msgstr "Alt-x"
 
-#: cinelerra/mainmenu.C:830
+#: cinelerra/mainmenu.C:834
 msgid "Copy default keyframe"
 msgstr "Copiar fotograma por defecto"
 
-#: cinelerra/mainmenu.C:830
+#: cinelerra/mainmenu.C:834
 msgid "Alt-c"
 msgstr "Alt-c"
 
-#: cinelerra/mainmenu.C:844
+#: cinelerra/mainmenu.C:848
 msgid "Paste default keyframe"
 msgstr "Pegar fotograma clave por defecto"
 
-#: cinelerra/mainmenu.C:844
+#: cinelerra/mainmenu.C:848
 msgid "Alt-v"
 msgstr "Alt-v"
 
-#: cinelerra/mainmenu.C:858
+#: cinelerra/mainmenu.C:862
 msgid "Clear default keyframe"
 msgstr "Borrar fotograma clave por defecto"
 
-#: cinelerra/mainmenu.C:858
+#: cinelerra/mainmenu.C:862
 msgid "Alt-Del"
-msgstr "Alt-Del"
+msgstr "Alt-Supr"
 
-#: cinelerra/mainmenu.C:872
+#: cinelerra/mainmenu.C:876
 msgid "Split | Cut"
 msgstr "Dividir | Cortar"
 
-#: cinelerra/mainmenu.C:920
+#: cinelerra/mainmenu.C:924
 msgid "Clear..."
-msgstr "Limpiar..."
+msgstr "Eliminar -->..."
 
-#: cinelerra/mainmenu.C:940 cinelerra/recordbatches.C:546
-#: cinelerra/swindow.C:563 plugins/compressor/compressor.C:1395
+#: cinelerra/mainmenu.C:944 cinelerra/recordbatches.C:546
+#: cinelerra/swindow.C:563 plugins/compressor/compressor.C:688
+#: plugins/compressormulti/comprmultigui.C:621
 #: plugins/histogram_bezier/bistogramwindow.C:82
 #: plugins/histogram_bezier/bistogramwindow.C:83 plugins/piano/piano.C:906
-#: plugins/synthesizer/synthesizer.C:1368
+#: plugins/synthesizer/synthesizer.C:1374
 msgid "Clear"
-msgstr "Limpiar"
+msgstr "Eliminar (Elimina el hueco)"
 
-#: cinelerra/mainmenu.C:956
+#: cinelerra/mainmenu.C:960
 msgid "Paste silence"
 msgstr "Pegar Silencio"
 
-#: cinelerra/mainmenu.C:956
+#: cinelerra/mainmenu.C:960
 msgid "Shift-Space"
 msgstr "Mayús-Space"
 
-#: cinelerra/mainmenu.C:970
+#: cinelerra/mainmenu.C:974
 msgid "Select All"
 msgstr "Seleccionar todo"
 
-#: cinelerra/mainmenu.C:982
+#: cinelerra/mainmenu.C:986
 msgid "Clear Hard Edges"
-msgstr "Limpiar bordes duros"
+msgstr "Eliminar bordes duros"
 
-#: cinelerra/mainmenu.C:993
+#: cinelerra/mainmenu.C:997
 msgid "Clear labels"
-msgstr "Limpiar etiquetas"
+msgstr "Eliminar etiquetas"
 
-#: cinelerra/mainmenu.C:1017
+#: cinelerra/mainmenu.C:1021
 msgid "Cut ads"
 msgstr "Cortar anuncios"
 
-#: cinelerra/mainmenu.C:1029
+#: cinelerra/mainmenu.C:1033
 msgid "Detach transitions"
-msgstr "Separar transiciones"
+msgstr "Quitar transiciones"
 
-#: cinelerra/mainmenu.C:1041
+#: cinelerra/mainmenu.C:1045
 msgid "Mute Region"
-msgstr "Mutear región"
+msgstr "Eliminar selección dejando el hueco"
 
-#: cinelerra/mainmenu.C:1055
+#: cinelerra/mainmenu.C:1059
 msgid "Trim Selection"
 msgstr "Recorta selección"
 
-#: cinelerra/mainmenu.C:1080 cinelerra/mainmenu.C:1148
+#: cinelerra/mainmenu.C:1084 cinelerra/mainmenu.C:1152
 #: cinelerra/trackpopup.C:206
 msgid "Add track"
 msgstr "Añadir pista"
 
-#: cinelerra/mainmenu.C:1093 cinelerra/mainmenu.C:1163
+#: cinelerra/mainmenu.C:1097 cinelerra/mainmenu.C:1167
 #: cinelerra/trackpopup.C:193
 msgid "Delete track"
 msgstr "Eliminar pista"
 
-#: cinelerra/mainmenu.C:1104 cinelerra/mainmenu.C:1189
+#: cinelerra/mainmenu.C:1108 cinelerra/mainmenu.C:1193
 msgid "Default Transition"
 msgstr "Transición predeterminada"
 
-#: cinelerra/mainmenu.C:1118
+#: cinelerra/mainmenu.C:1122
 msgid "Map 1:1"
 msgstr "Mapa 1:1"
 
-#: cinelerra/mainmenu.C:1130
+#: cinelerra/mainmenu.C:1134
 msgid "Map 5.1:2"
 msgstr "Mapa 5.1:2"
 
-#: cinelerra/mainmenu.C:1148
+#: cinelerra/mainmenu.C:1152
 msgid "Shift-T"
 msgstr "Mayús-T"
 
-#: cinelerra/mainmenu.C:1176
+#: cinelerra/mainmenu.C:1180
 msgid "Reset Translation"
 msgstr "Restablecer Trasformación"
 
-#: cinelerra/mainmenu.C:1189
+#: cinelerra/mainmenu.C:1193
 msgid "Shift-U"
 msgstr "Mayús-U"
 
-#: cinelerra/mainmenu.C:1218
+#: cinelerra/mainmenu.C:1222
 msgid "Delete tracks"
 msgstr "Eliminar las pistas"
 
-#: cinelerra/mainmenu.C:1230
+#: cinelerra/mainmenu.C:1234
 msgid "Delete first track"
 msgstr "Eliminar primera pista"
 
-#: cinelerra/mainmenu.C:1246
+#: cinelerra/mainmenu.C:1250
 msgid "Delete last track"
 msgstr "Eliminar última pista"
 
-#: cinelerra/mainmenu.C:1261
+#: cinelerra/mainmenu.C:1265
 msgid "Move tracks up"
 msgstr "Mover pistas hacia arriba"
 
-#: cinelerra/mainmenu.C:1261
+#: cinelerra/mainmenu.C:1265
 msgid "Shift-Up"
 msgstr "Mayús-Up"
 
-#: cinelerra/mainmenu.C:1275
+#: cinelerra/mainmenu.C:1279
 msgid "Move tracks down"
 msgstr "Mover pistas hacia abajo"
 
-#: cinelerra/mainmenu.C:1275
+#: cinelerra/mainmenu.C:1279
 msgid "Shift-Down"
 msgstr "Mayús-Down"
 
-#: cinelerra/mainmenu.C:1291
+#: cinelerra/mainmenu.C:1295
 msgid "Concatenate tracks"
 msgstr "Concatenar pistas"
 
-#: cinelerra/mainmenu.C:1308
+#: cinelerra/mainmenu.C:1312
 msgid "Loop Playback"
 msgstr "Reproducción en bucle"
 
-#: cinelerra/mainmenu.C:1308
+#: cinelerra/mainmenu.C:1312
 msgid "Shift-L"
 msgstr "Mayús-L"
 
-#: cinelerra/mainmenu.C:1330
+#: cinelerra/mainmenu.C:1334
 msgid "Add subttl"
 msgstr "Añadir SUBTTL"
 
-#: cinelerra/mainmenu.C:1330
+#: cinelerra/mainmenu.C:1334
 msgid "Shift-Y"
 msgstr "Mayús-Y"
 
-#: cinelerra/mainmenu.C:1344 cinelerra/swindow.C:461
+#: cinelerra/mainmenu.C:1348 cinelerra/swindow.C:461
 msgid "paste subttl"
 msgstr "pegar SUBTTL"
 
-#: cinelerra/mainmenu.C:1358
+#: cinelerra/mainmenu.C:1362
 msgid "Toggle background rendering"
 msgstr "Alternar renderizado de fondo"
 
-#: cinelerra/mainmenu.C:1358
+#: cinelerra/mainmenu.C:1362
 msgid "Shift-G"
 msgstr "Mayús-G"
 
-#: cinelerra/mainmenu.C:1376
+#: cinelerra/mainmenu.C:1380
 msgid "Edit labels"
 msgstr "Editar etiquetas"
 
-#: cinelerra/mainmenu.C:1393
+#: cinelerra/mainmenu.C:1397
 msgid "Edit effects"
 msgstr "Editar efectos"
 
-#: cinelerra/mainmenu.C:1410
+#: cinelerra/mainmenu.C:1414
 msgid "Keyframes follow edits"
 msgstr "Fotogramas clave siguen las ediciones"
 
-#: cinelerra/mainmenu.C:1425
+#: cinelerra/mainmenu.C:1429
 msgid "Align cursor on frames"
 msgstr "Alinear el cursor a los fotogramas"
 
-#: cinelerra/mainmenu.C:1425
+#: cinelerra/mainmenu.C:1429
 msgid "Ctrl-a"
 msgstr "Ctrl-a"
 
-#: cinelerra/mainmenu.C:1441
+#: cinelerra/mainmenu.C:1445
 msgid "Typeless keyframes"
-msgstr "fotogramas clave sin tipo"
+msgstr "Fotogramas clave sin tipo"
 
-#: cinelerra/mainmenu.C:1456 cinelerra/mainmenu.C:1466
+#: cinelerra/mainmenu.C:1460 cinelerra/mainmenu.C:1470
 msgid "Slow Shuttle"
 msgstr "Trasladar lento"
 
-#: cinelerra/mainmenu.C:1471
+#: cinelerra/mainmenu.C:1475
 msgid "Fast Shuttle"
 msgstr "Trasladar Fast"
 
-#: cinelerra/mainmenu.C:1477
+#: cinelerra/mainmenu.C:1481
 msgid "Save settings now"
 msgstr "Guardar preferencias ahora"
 
-#: cinelerra/mainmenu.C:1477
+#: cinelerra/mainmenu.C:1481
 msgid "Ctrl-s"
 msgstr "Ctrl-s"
 
-#: cinelerra/mainmenu.C:1487
+#: cinelerra/mainmenu.C:1491
 msgid "Saved settings."
 msgstr "Preferencias guardadas."
 
-#: cinelerra/mainmenu.C:1500
+#: cinelerra/mainmenu.C:1504
 msgid "Show Viewer"
 msgstr "Mostrar Visor"
 
-#: cinelerra/mainmenu.C:1512
+#: cinelerra/mainmenu.C:1516
 msgid "Show Resources"
 msgstr "Mostrar Recursos"
 
-#: cinelerra/mainmenu.C:1524
+#: cinelerra/mainmenu.C:1528
 msgid "Show Compositor"
 msgstr "Mostrar Compositor"
 
-#: cinelerra/mainmenu.C:1537
+#: cinelerra/mainmenu.C:1541
 msgid "Show Overlays"
 msgstr "Mostrar Superposiciones"
 
-#: cinelerra/mainmenu.C:1537
+#: cinelerra/mainmenu.C:1541
 msgid "Ctrl-0"
 msgstr "Ctrl-0"
 
-#: cinelerra/mainmenu.C:1557
+#: cinelerra/mainmenu.C:1561
 msgid "Show Levels"
 msgstr "Mostrar Niveles"
 
-#: cinelerra/mainmenu.C:1590
+#: cinelerra/mainmenu.C:1594
 msgid "Split X pane"
 msgstr "Dividir hoja X"
 
-#: cinelerra/mainmenu.C:1590
+#: cinelerra/mainmenu.C:1594
 msgid "Ctrl-1"
 msgstr "Ctrl-1"
 
-#: cinelerra/mainmenu.C:1604
+#: cinelerra/mainmenu.C:1608
 msgid "Split Y pane"
 msgstr "Dividir hoja Y"
 
-#: cinelerra/mainmenu.C:1604
+#: cinelerra/mainmenu.C:1608
 msgid "Ctrl-2"
 msgstr "Ctrl-2"
 
-#: cinelerra/mainmenu.C:1619
+#: cinelerra/mainmenu.C:1623
 msgid "Mixers..."
 msgstr "Mezcladores..."
 
-#: cinelerra/mainmenu.C:1634
+#: cinelerra/mainmenu.C:1638
 msgid "Mixer Viewer"
 msgstr "Visor de mezcladores"
 
-#: cinelerra/mainmenu.C:1647
+#: cinelerra/mainmenu.C:1651
 msgid "Tile mixers"
 msgstr "Mezcladores de mosaico"
 
-#: cinelerra/mainmenu.C:1660
+#: cinelerra/mainmenu.C:1664
 msgid "Align mixers"
 msgstr "Alinear mezcladores"
 
-#: cinelerra/mainmenu.C:1681
+#: cinelerra/mainmenu.C:1685
 #, c-format
 msgid "Ctrl-Shift+F%d"
 msgstr "Ctrl-Mayús+F%d"
 
-#: cinelerra/mainmenu.C:1726 cinelerra/mainmenu.C:1772
+#: cinelerra/mainmenu.C:1730 cinelerra/mainmenu.C:1776
 #, c-format
 msgid "Layout %d"
 msgstr "Diseño %d"
 
-#: cinelerra/mainmenu.C:1860
+#: cinelerra/mainmenu.C:1864
 msgid ": Layout"
 msgstr ": Diseño"
 
-#: cinelerra/mainmenu.C:1879
+#: cinelerra/mainmenu.C:1883
 msgid "Layout Name:"
 msgstr "Nombre de diseño:"
 
-#: cinelerra/mainmenu.C:1888
+#: cinelerra/mainmenu.C:1892
 #, c-format
 msgid "a-z,A-Z,0-9_ only, %dch max"
 msgstr "a-z,A-Z,0-9_ solo, %dch max"
 
-#: cinelerra/mainmenu.C:1944
+#: cinelerra/mainmenu.C:1948
 msgid "Load Recent..."
 msgstr "Cargar recientes..."
 
@@ -6273,7 +6477,8 @@ msgstr "Cargar recientes..."
 msgid "%s ETA: %s"
 msgstr "%s tiempo estimado: %s"
 
-#: cinelerra/mainsession.C:637 cinelerra/mwindowedit.C:2150
+#: cinelerra/mainsession.C:641 cinelerra/mwindow.C:3980
+#: cinelerra/mwindowedit.C:2155
 #, c-format
 msgid "Clip %d"
 msgstr "Clip %d"
@@ -6289,7 +6494,7 @@ msgstr "hora  min    seg     mseg"
 #: cinelerra/mediadb.C:838
 #, c-format
 msgid " find timeline frame_id(%d) failed\n"
-msgstr "Encontrar frame_id línea de tiempo (%d) fracasado\n"
+msgstr " encontrar frame_id línea de tiempo (%d) fracasado\n"
 
 #: cinelerra/menuattacheffect.C:29
 msgid "Attach Effect..."
@@ -6301,7 +6506,7 @@ msgstr "Adjuntar Efecto"
 
 #: cinelerra/menuattachtransition.C:40
 msgid "Attach Transition..."
-msgstr "Adjuntar Transición ..."
+msgstr "Adjuntar Transición..."
 
 #: cinelerra/menuattachtransition.C:123
 msgid "Attach Transition"
@@ -6317,7 +6522,7 @@ msgstr "Seleccionar transición de la lista"
 
 #: cinelerra/menueditlength.C:31
 msgid "Edit Length..."
-msgstr "Editar Longitud ..."
+msgstr "Editar Duración..."
 
 #: cinelerra/menueditlength.C:52
 msgid "Shuffle Edits"
@@ -6338,7 +6543,7 @@ msgstr "Renderizar efecto ..."
 #: cinelerra/menueffects.C:147
 #, c-format
 msgid "No recordable tracks specified."
-msgstr "No se han especificado pistas modificables"
+msgstr "No se han especificado pistas modificables."
 
 #: cinelerra/menueffects.C:158
 #, c-format
@@ -6357,7 +6562,7 @@ msgstr "Sin efecto seleccionado."
 msgid "No selected range to process."
 msgstr "No se ha seleccionado un rango para procesar."
 
-#: cinelerra/menueffects.C:312 cinelerra/mwindowgui.C:499
+#: cinelerra/menueffects.C:312 cinelerra/mwindowgui.C:527
 #: cinelerra/vwindowgui.C:146
 #, c-format
 msgid ": %s"
@@ -6377,13 +6582,13 @@ msgstr ": Renderizar efecto"
 msgid "Select an effect"
 msgstr "Seleccione un efecto"
 
-#: cinelerra/menueffects.C:619 cinelerra/render.C:1019 cinelerra/render.C:1209
+#: cinelerra/menueffects.C:619 cinelerra/render.C:1020 cinelerra/render.C:1212
 msgid "Select the first file to render to:"
-msgstr "Seleccione el primer archivo que renderizar a:"
+msgstr "Indique el lugar y nombre del primer archivo a exportar:"
 
-#: cinelerra/menueffects.C:620 cinelerra/render.C:1020 cinelerra/render.C:1210
+#: cinelerra/menueffects.C:620 cinelerra/render.C:1021 cinelerra/render.C:1213
 msgid "Select a file to render to:"
-msgstr "Seleccione un archivo para renderizar a:"
+msgstr "Indique el lugar y nombre del archivo a exportar:"
 
 #: cinelerra/menueffects.C:732
 msgid "Set up effect panel and hit \"OK\""
@@ -6395,7 +6600,7 @@ msgstr ": Effect Prompt"
 
 #: cinelerra/menutransitionlength.C:32
 msgid "Transition Length..."
-msgstr "Transición Longitud ..."
+msgstr "Duración de la Transición..."
 
 #: cinelerra/messages.C:69 cinelerra/messages.C:85 cinelerra/messages.C:106
 #, c-format
@@ -6416,7 +6621,7 @@ msgid "Show meters"
 msgstr "Mostrar metros"
 
 #: cinelerra/mixersalign.C:73 cinelerra/mixersalign.C:261
-#: cinelerra/patchgui.C:664
+#: cinelerra/patchgui.C:665
 msgid "Nudge"
 msgstr "Empujar"
 
@@ -6455,10 +6660,12 @@ msgstr "pos"
 #: plugins/brightness/brightnesswindow.C:168 plugins/chromakey/chromakey.C:272
 #: plugins/chromakeyhsv/chromakey.C:479 plugins/color3way/color3waywindow.C:649
 #: plugins/colorbalance/colorbalancewindow.C:230
+#: plugins/compressor/compressor.C:706
+#: plugins/compressormulti/comprmultigui.C:640
 #: plugins/crikey/crikeywindow.C:634 plugins/crop/cropwin.C:506
 #: plugins/descratch/descratch.C:497 plugins/descratch/descratch.C:722
 #: plugins/findobj/findobjwindow.C:300 plugins/gamma/gammawindow.C:317
-#: plugins/gradient/gradient.C:451 plugins/graphic/graphic.C:681
+#: plugins/gradient/gradient.C:451 plugins/graphic/graphic.C:651
 #: plugins/histogram/histogramwindow.C:624
 #: plugins/histogram_bezier/bistogramwindow.C:540
 #: plugins/huesaturation/huesaturation.C:188 plugins/lens/lens.C:421
@@ -6470,8 +6677,8 @@ msgstr "pos"
 #: plugins/rgbshift/rgbshift.C:115 plugins/rotate/rotate.C:244
 #: plugins/rumbler/rumbler.C:154 plugins/sharpen/sharpenwindow.C:167
 #: plugins/shiftinterlace/shiftinterlace.C:188
-#: plugins/sketcher/sketcherwindow.C:1269
-#: plugins/sketcher/sketcherwindow.C:1289
+#: plugins/sketcher/sketcherwindow.C:1358
+#: plugins/sketcher/sketcherwindow.C:1378
 #: plugins/swapchannels/swapchannels.C:184 plugins/swapframes/swapframes.C:165
 #: plugins/tracer/tracerwindow.C:636 plugins/translate/translatewin.C:164
 #: plugins/unsharp/unsharpwindow.C:138 plugins/wave/wave.C:215
@@ -6517,15 +6724,15 @@ msgstr "Mezcladores:"
 
 #: cinelerra/mixersalign.C:537
 msgid "Master Track:"
-msgstr "Pista maestra"
+msgstr "Pista maestra:"
 
 #: cinelerra/mixersalign.C:539
 msgid "Audio Tracks:"
-msgstr "Pistas de audio"
+msgstr "Pistas de audio:"
 
 #: cinelerra/mixersalign.C:870
 msgid "align mixers"
-msgstr "Alinear mezcaldores"
+msgstr "alinear mezcaldores"
 
 #: cinelerra/mixersalign.C:1260
 msgid "scan master track empty"
@@ -6538,7 +6745,7 @@ msgstr "Ajustar mezcladores hecho: %0.3f secs"
 
 #: cinelerra/mixersalign.C:1550
 msgid "match mixer audio"
-msgstr "Ajustar mezcaldores de audio"
+msgstr "ajustar mezcaldores de audio"
 
 #: cinelerra/mixersalign.C:1620
 msgid "master audio track empty"
@@ -6546,20 +6753,20 @@ msgstr "pista principal de audio vacía"
 
 #: cinelerra/mixersalign.C:1626
 msgid "master audio track length > 60 seconds"
-msgstr "pista principal de audio > 60 segundos"
+msgstr "longitud pista principal de audio > 60 segundos"
 
 #: cinelerra/mixersalign.C:1660
 msgid "no mixers selected"
-msgstr "Ningún mezclador seleccionado"
+msgstr "ningún mezclador seleccionado"
 
 #: cinelerra/mixersalign.C:1674
 #, c-format
 msgid "Render mixer done: %0.3f secs"
-msgstr "Renderizado mezcladores hecho_ %0.3f segundos"
+msgstr "Renderizado mezcladores hecho: %0.3f segundos"
 
 #: cinelerra/mixersalign.C:1682 cinelerra/mixersalign.C:1726
 msgid "selection (master) not set"
-msgstr "seleccion (maestra) no establecida"
+msgstr "selección (maestra) no establecida"
 
 #: cinelerra/mixersalign.C:1687
 msgid "in point selection (master start) must be set"
@@ -6585,90 +6792,90 @@ msgstr "ajuste de selección de mezclador cancelado"
 msgid "Error in match render."
 msgstr "Error en ajuste de renderizado."
 
-#: cinelerra/mwindow.C:634
+#: cinelerra/mwindow.C:646
 #, c-format
 msgid "MWindow::init_plugins: can't open plugin index: %s\n"
 msgstr "MWindow::init_plugins: no se abrir el índice del complemento: %s\n"
 
-#: cinelerra/mwindow.C:656
+#: cinelerra/mwindow.C:668
 #, c-format
 msgid "MWindow::init_plugins: can't %s plugin index: %s\n"
 msgstr "MWindow::init_plugins: no se puede %s el índice del complemento: %s\n"
 
-#: cinelerra/mwindow.C:658 cinelerra/mwindow.C:706
+#: cinelerra/mwindow.C:670 cinelerra/mwindow.C:718
 msgid "create"
 msgstr "crear"
 
-#: cinelerra/mwindow.C:687
+#: cinelerra/mwindow.C:699
 #, c-format
 msgid "MWindow::init_ladspa_plugins: can't open ladspa plugin index: %s\n"
 msgstr "MWindow::init_ladspa_index: no se puede abrir el índice del complemento ladspa: %s\n"
 
-#: cinelerra/mwindow.C:704
+#: cinelerra/mwindow.C:716
 #, c-format
 msgid "MWindow::init_ladspa_plugins: can't %s ladspa plugin index: %s\n"
 msgstr "MWindow::init_ladspa_index: no se puede %s el índice del complemento ladspa: %s\n"
 
-#: cinelerra/mwindow.C:1085
+#: cinelerra/mwindow.C:1097
 #, c-format
 msgid "MWindow::init_theme: prefered theme %s not found.\n"
 msgstr "MWindow::init_theme: tema preferido %s no encontrado\n"
 
-#: cinelerra/mwindow.C:1090
+#: cinelerra/mwindow.C:1102
 #, c-format
 msgid "MWindow::init_theme: trying default theme %s\n"
 msgstr "MWindow::init_theme: tratar el tema por defecto %s\n"
 
-#: cinelerra/mwindow.C:1100
+#: cinelerra/mwindow.C:1112
 #, c-format
 msgid "MWindow::init_theme: theme_plugin not found.\n"
 msgstr "MWindow::init_theme: no se encontró theme_plugin\n"
 
-#: cinelerra/mwindow.C:1106
+#: cinelerra/mwindow.C:1118
 #, c-format
 msgid "MWindow::init_theme: unable to load theme %s\n"
 msgstr "MWindow::init_theme: no puede cargar el tema %s\n"
 
-#: cinelerra/mwindow.C:1346 cinelerra/zwindow.C:265
+#: cinelerra/mwindow.C:1357 cinelerra/zwindow.C:275
 #, c-format
 msgid "Mixer %d"
 msgstr "Mezclador %d"
 
-#: cinelerra/mwindow.C:1392
+#: cinelerra/mwindow.C:1403
 msgid "create mixers"
 msgstr "crear mezcladores"
 
-#: cinelerra/mwindow.C:1740
+#: cinelerra/mwindow.C:1769
 msgid "multiple video tracks"
 msgstr "múltiples pistas de vídeo"
 
-#: cinelerra/mwindow.C:1752
+#: cinelerra/mwindow.C:1781
 msgid "crosses edits"
 msgstr "cruza ediciones"
 
-#: cinelerra/mwindow.C:1754
+#: cinelerra/mwindow.C:1783
 msgid "not asset"
 msgstr "no es un recurso"
 
-#: cinelerra/mwindow.C:1773
+#: cinelerra/mwindow.C:1802
 msgid "no file"
 msgstr "ningún archivo"
 
-#: cinelerra/mwindow.C:1779
+#: cinelerra/mwindow.C:1808
 msgid "db failed"
 msgstr "db fracasado"
 
-#: cinelerra/mwindow.C:1783
+#: cinelerra/mwindow.C:1812
 #, c-format
 msgid "put_commercial: %s"
 msgstr "put_commercial: %s"
 
-#: cinelerra/mwindow.C:1870
+#: cinelerra/mwindow.C:1975
 #, c-format
 msgid "Loading %s"
 msgstr "Cargando %s"
 
-#: cinelerra/mwindow.C:1883
+#: cinelerra/mwindow.C:1987
 #, c-format
 msgid ""
 "%s's resolution is %dx%d.\n"
@@ -6678,7 +6885,7 @@ msgstr ""
 "\n"
 "Es posible que las imágenes con dimensiones impares no se decodifiquen correctamente."
 
-#: cinelerra/mwindow.C:1892
+#: cinelerra/mwindow.C:1994
 #, c-format
 msgid ""
 "%s's index was built for program number %d\n"
@@ -6689,16 +6896,16 @@ msgstr ""
 "Preferencias de reproducción es %d.\n"
 "  Usando programa %d."
 
-#: cinelerra/mwindow.C:1928
+#: cinelerra/mwindow.C:2028 cinelerra/mwindow.C:2029
 #, c-format
 msgid "Failed to open %s"
 msgstr "Fracaso al abrir %s"
 
-#: cinelerra/mwindow.C:1962
+#: cinelerra/mwindow.C:2070
 msgid "'s format couldn't be determined."
 msgstr "el formato 's no se pudo determinar."
 
-#: cinelerra/mwindow.C:2022
+#: cinelerra/mwindow.C:2121
 #, c-format
 msgid ""
 "XML file %s\n"
@@ -6707,12 +6914,12 @@ msgstr ""
 "Archivo XML %s\n"
 " no es de cinelerra."
 
-#: cinelerra/mwindow.C:2024
+#: cinelerra/mwindow.C:2123
 #, c-format
 msgid "Unknown %s"
-msgstr " %s desconocido"
+msgstr "Desconocido %s"
 
-#: cinelerra/mwindow.C:2034
+#: cinelerra/mwindow.C:2130
 #, c-format
 msgid ""
 "Warning: XML from cinelerra version %s\n"
@@ -6721,27 +6928,36 @@ msgstr ""
 "Cuidado: XML de la versión %s de cinelerra\n"
 "Datos de la sesión pueden ser incompatibles."
 
-#: cinelerra/mwindow.C:2232
+#: cinelerra/mwindow.C:2187
+#, c-format
+msgid ""
+"Error: Unable to load xml:\n"
+"  %s"
+msgstr ""
+"Error: No se puede cargar el xml:\n"
+"  %s"
+
+#: cinelerra/mwindow.C:2337
 msgid "load"
 msgstr "cargar"
 
-#: cinelerra/mwindow.C:2344 cinelerra/mwindow.C:2459
+#: cinelerra/mwindow.C:2457 cinelerra/mwindow.C:2572
 msgid "proxy"
 msgstr "proxy"
 
-#: cinelerra/mwindow.C:2486 cinelerra/mwindow.C:2501
+#: cinelerra/mwindow.C:2595 cinelerra/mwindow.C:2610
 #, c-format
 msgid ""
 "The %s '%s' in file '%s' is not part of your installation of Cinelerra.\n"
 "The project won't be rendered as it was meant and Cinelerra might crash.\n"
 msgstr "El %s '%s' en el archivo '%s' no es parte de la instalación de Cinelerra.  NLa proyecto no se rindió ya que estaba destinado y Cinelerra puede bloquearse.\n"
 
-#: cinelerra/mwindow.C:2529
+#: cinelerra/mwindow.C:2638
 #, c-format
 msgid "MWindow::init_shm: couldn't open %s for reading.\n"
 msgstr "MWindow::init_shm: no se pudo abrir %s para lectura.\n"
 
-#: cinelerra/mwindow.C:2536
+#: cinelerra/mwindow.C:2645
 #, c-format
 msgid ""
 "MWindow::init_shm: %s is %p.\n"
@@ -6756,58 +6972,89 @@ msgstr ""
 "antes de intentar iniciar cinelerra.\n"
 "Debería ser al menos 0x%jx para Cinelerra.\n"
 
-#: cinelerra/mwindow.C:2567
+#: cinelerra/mwindow.C:2676
 msgid "Initializing Plugins"
 msgstr "Iniciando Plugins"
 
-#: cinelerra/mwindow.C:2574
+#: cinelerra/mwindow.C:2683
 msgid "Initializing GUI"
 msgstr "Iniciando GUI"
 
-#: cinelerra/mwindow.C:2582
+#: cinelerra/mwindow.C:2691
 msgid "Initializing Fonts"
 msgstr "Iniciando Fuentes"
 
-#: cinelerra/mwindow.C:3756
+#: cinelerra/mwindow.C:3921
+msgid "open edl"
+msgstr "abrir edl"
+
+#: cinelerra/mwindow.C:3930
+#, c-format
+msgid "Warning: Asset not updated: %s"
+msgstr "Advertencia: activo no actualizado: %s"
+
+#: cinelerra/mwindow.C:3950
+#, c-format
+msgid "Nested_%02d%02d%02d-%02d%02d%02d_"
+msgstr "Anidado_%02d%02d%02d-%02d%02d%02d_"
+
+#: cinelerra/mwindow.C:3961
+msgid "clip2media"
+msgstr "clip2deMedios"
+
+#: cinelerra/mwindow.C:3991
+#, c-format
+msgid "From: %s"
+msgstr "Desde: %s"
+
+#: cinelerra/mwindow.C:3993
+msgid "media2clip"
+msgstr "medios2clip"
+
+#: cinelerra/mwindow.C:4007 cinelerra/mwindow.C:4019
+msgid "reference"
+msgstr "referencia"
+
+#: cinelerra/mwindow.C:4122
 #, c-format
 msgid "Couldn't open %s for writing."
 msgstr "No se pudo abrir %s para la escritura."
 
-#: cinelerra/mwindow.C:3788
-msgid "perpetual session"
-msgstr "sesión perpetua"
+#: cinelerra/mwindow.C:4175
+msgid "perpetual load"
+msgstr "carga perpetua"
 
-#: cinelerra/mwindow.C:3823
+#: cinelerra/mwindow.C:4201
 #, c-format
 msgid "Copying: %s\n"
 msgstr "Copiando: %s\n"
 
-#: cinelerra/mwindow.C:3910
+#: cinelerra/mwindow.C:4288
 #, c-format
 msgid "Saving to %s:\n"
 msgstr "Guardando a: %s\n"
 
-#: cinelerra/mwindow.C:3969 cinelerra/savefile.C:95 cinelerra/savefile.C:202
+#: cinelerra/mwindow.C:4350 cinelerra/savefile.C:95 cinelerra/savefile.C:202
 #, c-format
 msgid "\"%s\" %dC written"
 msgstr "\"%s\" %dC escrito"
 
-#: cinelerra/mwindow.C:3976 cinelerra/savefile.C:190
+#: cinelerra/mwindow.C:4357 cinelerra/savefile.C:190
 #, c-format
 msgid "Couldn't open %s."
 msgstr "No se pudo abrir %s."
 
-#: cinelerra/mwindow.C:4126
+#: cinelerra/mwindow.C:4532
 msgid "remove assets"
 msgstr "eliminar clips"
 
-#: cinelerra/mwindow.C:4353
+#: cinelerra/mwindow.C:4757
 #, c-format
 msgid "Using %s"
 msgstr "Utilizando %s"
 
-#: cinelerra/mwindow.C:4490 cinelerra/mwindowedit.C:192
-#: cinelerra/mwindowedit.C:239 cinelerra/preferencesthread.C:285
+#: cinelerra/mwindow.C:4894 cinelerra/mwindowedit.C:193
+#: cinelerra/mwindowedit.C:240 cinelerra/preferencesthread.C:288
 msgid ""
 "This project's dimensions are not multiples of 4 so\n"
 "it can't be rendered by OpenGL."
@@ -6815,284 +7062,296 @@ msgstr ""
 "Las dimensiones de este proyecto no son múltiplos de 4 por lo\n"
 " cual no puede ser renderizado con OpenGL."
 
-#: cinelerra/mwindow.C:4607
+#: cinelerra/mwindow.C:5011
 msgid "select asset"
 msgstr "selecionar clip"
 
-#: cinelerra/mwindowedit.C:89 cinelerra/mwindowedit.C:101
-#: cinelerra/mwindowedit.C:115
+#: cinelerra/mwindowedit.C:90 cinelerra/mwindowedit.C:102
+#: cinelerra/mwindowedit.C:116
 msgid "add track"
-msgstr "Añadir pista"
+msgstr "añadir pista"
 
-#: cinelerra/mwindowedit.C:213
+#: cinelerra/mwindowedit.C:214
 msgid "asset to all"
 msgstr "clip a todo"
 
-#: cinelerra/mwindowedit.C:253
+#: cinelerra/mwindowedit.C:254
 msgid "asset to size"
 msgstr "clip a tamaño"
 
-#: cinelerra/mwindowedit.C:273
+#: cinelerra/mwindowedit.C:274
 msgid "asset to rate"
 msgstr "clip a calidad"
 
-#: cinelerra/mwindowedit.C:288
+#: cinelerra/mwindowedit.C:289
 msgid "clear"
-msgstr "limpiar"
+msgstr "eliminar"
 
-#: cinelerra/mwindowedit.C:353
+#: cinelerra/mwindowedit.C:354
 msgid "clear keyframes"
-msgstr "limpiar keyframes"
+msgstr "eliminar keyframes"
 
-#: cinelerra/mwindowedit.C:366
+#: cinelerra/mwindowedit.C:367
 msgid "clear default keyframe"
-msgstr "limpiar el fotograma clave por defecto"
+msgstr "eliminar el fotograma clave por defecto"
 
-#: cinelerra/mwindowedit.C:378
+#: cinelerra/mwindowedit.C:379
 msgid "clear labels"
-msgstr "limpiar etiquetas"
+msgstr "eliminar etiquetas"
 
-#: cinelerra/mwindowedit.C:402
+#: cinelerra/mwindowedit.C:403
 msgid "clear hard edges"
 msgstr "limpie bordes duros"
 
-#: cinelerra/mwindowedit.C:430
+#: cinelerra/mwindowedit.C:431
 msgid "concatenate tracks"
 msgstr "concatenar pistas"
 
-#: cinelerra/mwindowedit.C:568
+#: cinelerra/mwindowedit.C:569
 msgid "crop"
 msgstr "recortar"
 
-#: cinelerra/mwindowedit.C:591
+#: cinelerra/mwindowedit.C:592
 msgid "blade"
 msgstr "cuchilla"
 
-#: cinelerra/mwindowedit.C:611
+#: cinelerra/mwindowedit.C:612
 msgid "split | cut"
 msgstr "dividir | cortar"
 
-#: cinelerra/mwindowedit.C:669
+#: cinelerra/mwindowedit.C:670
 msgid "cut keyframes"
 msgstr "cortar fotogramas clave"
 
-#: cinelerra/mwindowedit.C:685
+#: cinelerra/mwindowedit.C:686
 msgid "cut default keyframe"
-msgstr "cortar fotograma clave por defecto "
+msgstr "cortar fotograma clave por defecto"
 
-#: cinelerra/mwindowedit.C:697
+#: cinelerra/mwindowedit.C:698
 msgid "delete tracks"
 msgstr "borrar pistas"
 
-#: cinelerra/mwindowedit.C:711
+#: cinelerra/mwindowedit.C:712
 msgid "delete track"
 msgstr "eliminar pista"
 
-#: cinelerra/mwindowedit.C:779 cinelerra/mwindowedit.C:808
+#: cinelerra/mwindowedit.C:780 cinelerra/mwindowedit.C:809
 msgid "insert effect"
 msgstr "insertar efecto"
 
-#: cinelerra/mwindowedit.C:930
+#: cinelerra/mwindowedit.C:931
 msgid "drag handle"
-msgstr "gestiona arrastrar "
+msgstr "gestiona arrastrar"
 
-#: cinelerra/mwindowedit.C:948
+#: cinelerra/mwindowedit.C:949
 msgid "match output size"
 msgstr "ajusta a la dimensión de la salida"
 
-#: cinelerra/mwindowedit.C:983
+#: cinelerra/mwindowedit.C:984
 msgid "del edit"
 msgstr "eliminar edición"
 
-#: cinelerra/mwindowedit.C:993
+#: cinelerra/mwindowedit.C:994
 msgid "cut edit"
 msgstr "cortar edición"
 
-#: cinelerra/mwindowedit.C:1012
+#: cinelerra/mwindowedit.C:1013
 msgid "move edit"
 msgstr "mover el recorte"
 
-#: cinelerra/mwindowedit.C:1054
+#: cinelerra/mwindowedit.C:1055
 msgid "paste clip"
 msgstr "pegar clip"
 
-#: cinelerra/mwindowedit.C:1086
+#: cinelerra/mwindowedit.C:1087
 msgid "move group"
 msgstr "mover grupo"
 
-#: cinelerra/mwindowedit.C:1099
+#: cinelerra/mwindowedit.C:1100
 msgid "paste effect"
 msgstr "pegar efecto"
 
-#: cinelerra/mwindowedit.C:1112
+#: cinelerra/mwindowedit.C:1113
 msgid "move effect"
 msgstr "mover efecto"
 
-#: cinelerra/mwindowedit.C:1127
+#: cinelerra/mwindowedit.C:1128
 msgid "move effect up"
 msgstr "mover efecto arriba"
 
-#: cinelerra/mwindowedit.C:1140
+#: cinelerra/mwindowedit.C:1141
 msgid "move effect down"
 msgstr "mover efecto abajo"
 
-#: cinelerra/mwindowedit.C:1151
+#: cinelerra/mwindowedit.C:1152
 msgid "move track down"
 msgstr "mover la pista abajo"
 
-#: cinelerra/mwindowedit.C:1164
+#: cinelerra/mwindowedit.C:1165
 msgid "move tracks down"
 msgstr "mover las pistas abajo"
 
-#: cinelerra/mwindowedit.C:1177
+#: cinelerra/mwindowedit.C:1178
 msgid "move track up"
-msgstr "Mover la pista arriba"
+msgstr "mover la pista arriba"
 
-#: cinelerra/mwindowedit.C:1189
+#: cinelerra/mwindowedit.C:1190
 msgid "move tracks up"
-msgstr "Mover las pistas arriba"
+msgstr "mover las pistas arriba"
 
-#: cinelerra/mwindowedit.C:1261
+#: cinelerra/mwindowedit.C:1268
 msgid "overwrite"
 msgstr "sobrescribir"
 
-#: cinelerra/mwindowedit.C:1314
+#: cinelerra/mwindowedit.C:1321
 msgid "paste"
 msgstr "pegar"
 
-#: cinelerra/mwindowedit.C:1351
+#: cinelerra/mwindowedit.C:1358
 msgid "paste assets"
 msgstr "pegar clips"
 
-#: cinelerra/mwindowedit.C:1427
+#: cinelerra/mwindowedit.C:1434
 msgid "paste keyframes"
 msgstr "pegar fotogramas clave"
 
-#: cinelerra/mwindowedit.C:1453
+#: cinelerra/mwindowedit.C:1460
 msgid "paste default keyframe"
-msgstr "Pegar fotogramas clave por defecto"
+msgstr "pegar fotogramas clave por defecto"
 
-#: cinelerra/mwindowedit.C:1761 cinelerra/mwindowedit.C:1768
+#: cinelerra/mwindowedit.C:1766 cinelerra/mwindowedit.C:1773
 msgid "silence"
 msgstr "silencio"
 
-#: cinelerra/mwindowedit.C:1784
+#: cinelerra/mwindowedit.C:1789
 msgid "detach transition"
 msgstr "quitar transición"
 
-#: cinelerra/mwindowedit.C:1801
+#: cinelerra/mwindowedit.C:1806
 msgid "detach transitions"
 msgstr "quitar transiciones"
 
-#: cinelerra/mwindowedit.C:1816 cinelerra/mwindowedit.C:1844
-#: cinelerra/mwindowedit.C:1864 cinelerra/mwindowedit.C:1885
+#: cinelerra/mwindowedit.C:1821 cinelerra/mwindowedit.C:1849
+#: cinelerra/mwindowedit.C:1869 cinelerra/mwindowedit.C:1890
 msgid "transition"
 msgstr "transición"
 
-#: cinelerra/mwindowedit.C:1831
+#: cinelerra/mwindowedit.C:1836
 msgid "attach transitions"
 msgstr "adjuntar transiciones"
 
-#: cinelerra/mwindowedit.C:1856 cinelerra/mwindowedit.C:1876
+#: cinelerra/mwindowedit.C:1861 cinelerra/mwindowedit.C:1881
 #, c-format
 msgid "No default transition %s found."
 msgstr "No se encontró ninguna transición %s predeterminada."
 
-#: cinelerra/mwindowedit.C:1903
+#: cinelerra/mwindowedit.C:1908
 msgid "shuffle edits"
 msgstr "mezclar ediciones"
 
-#: cinelerra/mwindowedit.C:1922
+#: cinelerra/mwindowedit.C:1927
 msgid "reverse edits"
 msgstr "ediciones inverso"
 
-#: cinelerra/mwindowedit.C:1941
+#: cinelerra/mwindowedit.C:1946
 msgid "align edits"
 msgstr "alinear ediciones"
 
-#: cinelerra/mwindowedit.C:1960
+#: cinelerra/mwindowedit.C:1965
 msgid "edit length"
 msgstr "edita la longitud"
 
-#: cinelerra/mwindowedit.C:1980 cinelerra/mwindowedit.C:1999
+#: cinelerra/mwindowedit.C:1985 cinelerra/mwindowedit.C:2004
 msgid "transition length"
 msgstr "longitud de transición"
 
-#: cinelerra/mwindowedit.C:2063
+#: cinelerra/mwindowedit.C:2068
 msgid "resize track"
 msgstr "cambiar el tamaño de la pista"
 
-#: cinelerra/mwindowedit.C:2076
+#: cinelerra/mwindowedit.C:2081
 msgid "in point"
 msgstr "punto de entrada"
 
-#: cinelerra/mwindowedit.C:2089
+#: cinelerra/mwindowedit.C:2094
 msgid "out point"
 msgstr "punto de salida"
 
-#: cinelerra/mwindowedit.C:2102
+#: cinelerra/mwindowedit.C:2107
 msgid "clear in/out"
-msgstr "limpiar entrada/salida"
+msgstr "eliminar entrada/salida"
 
-#: cinelerra/mwindowedit.C:2139
+#: cinelerra/mwindowedit.C:2144
 msgid "splice"
 msgstr "empalmar"
 
-#: cinelerra/mwindowedit.C:2258
+#: cinelerra/mwindowedit.C:2259
 msgid "label"
 msgstr "etiqueta"
 
-#: cinelerra/mwindowedit.C:2274
+#: cinelerra/mwindowedit.C:2275
 msgid "trim selection"
 msgstr "eliminar selección"
 
-#: cinelerra/mwindowedit.C:2333
+#: cinelerra/mwindowedit.C:2334
 msgid "create new folder failed"
 msgstr "fallo crear nueva carpeta"
 
-#: cinelerra/mwindowedit.C:2335
+#: cinelerra/mwindowedit.C:2336
 msgid "new folder"
 msgstr "nueva carpeta"
 
-#: cinelerra/mwindowedit.C:2343
+#: cinelerra/mwindowedit.C:2344
 msgid "delete folder failed"
 msgstr "falla eliminar carpeta"
 
-#: cinelerra/mwindowedit.C:2345
+#: cinelerra/mwindowedit.C:2346
 msgid "del folder"
 msgstr "eliminar carpeta"
 
-#: cinelerra/mwindowedit.C:2381
+#: cinelerra/mwindowedit.C:2382
 msgid "map 1:1"
 msgstr "mapa 1:1"
 
-#: cinelerra/mwindowedit.C:2381
+#: cinelerra/mwindowedit.C:2382
 msgid "map 5.1:2"
 msgstr "mapa 5.1:2"
 
-#: cinelerra/mwindowedit.C:2453
+#: cinelerra/mwindowedit.C:2459
+msgid "convert assets format error"
+msgstr "error de formato de conversión de activos"
+
+#: cinelerra/mwindowedit.C:2461
+msgid "No convertable assets found"
+msgstr "Activos no convertibles encontrados"
+
+#: cinelerra/mwindowedit.C:2476
+msgid "convert"
+msgstr "convertir"
+
+#: cinelerra/mwindowedit.C:2493
 msgid "cut ads"
 msgstr "cortar anuncios"
 
-#: cinelerra/mwindowgui.C:82
+#: cinelerra/mwindowgui.C:85
 msgid ": Program"
 msgstr ": Programa"
 
-#: cinelerra/mwindowgui.C:2296
+#: cinelerra/mwindowgui.C:2338
 msgid "Changing the base codecs may require rebuilding indexes."
 msgstr "Changing the base codecs may require rebuilding indexes."
 
-#: cinelerra/mwindowgui.C:2311 cinelerra/mwindowgui.C:2345
+#: cinelerra/mwindowgui.C:2377 cinelerra/mwindowgui.C:2411
 msgid "Disable proxy"
 msgstr "Desactivar proxy"
 
-#: cinelerra/mwindowgui.C:2311 cinelerra/mwindowgui.C:2345
+#: cinelerra/mwindowgui.C:2377 cinelerra/mwindowgui.C:2411
 msgid "Enable proxy"
 msgstr "Activar proxy"
 
 #: cinelerra/mwindow.inc:59
 msgid "Cinelerra: Asset Info"
-msgstr "Cinelerra: Activos Info"
+msgstr "Cinelerra: Información del archivo"
 
 #: cinelerra/mwindow.inc:60
 msgid "Cinelerra: Asset path"
@@ -7200,7 +7459,7 @@ msgstr "Cinelerra: Editar canal"
 
 #: cinelerra/mwindow.inc:86
 msgid "Cinelerra: Edit length"
-msgstr "Cinelerra: Editar longitud"
+msgstr "Cinelerra: Editar duración"
 
 #: cinelerra/mwindow.inc:87
 msgid "Cinelerra: Effect Prompt"
@@ -7236,11 +7495,11 @@ msgstr "Cinelerra: El archivo existe"
 
 #: cinelerra/mwindow.inc:95
 msgid "Cinelerra: File format"
-msgstr "Cinelerra: Formato de archivo"
+msgstr "Cinelerra: Formato del archivo"
 
 #: cinelerra/mwindow.inc:96
 msgid "Cinelerra: File Format"
-msgstr "Cinelerra: Formato de archivo"
+msgstr "Cinelerra: Formato del Archivo"
 
 #: cinelerra/mwindow.inc:97
 msgid "Cinelerra: Goto position"
@@ -7521,7 +7780,9 @@ msgstr ": Agregar al proyecto"
 msgid ""
 "Cannot create and access project path:\n"
 "%s"
-msgstr "No se puede crear y acceder a la ruta del proyecto: %s"
+msgstr ""
+"No se puede crear y acceder a la ruta del proyecto: \n"
+"%s"
 
 #: cinelerra/new.C:333
 msgid "Parameters for the new project:"
@@ -7541,7 +7802,7 @@ msgstr "Velocidad de muestreo:"
 
 #: cinelerra/new.C:394 cinelerra/recordgui.C:246
 msgid "Framerate:"
-msgstr "Fotograma por segundos:"
+msgstr "Fotogramas x seg:"
 
 #: cinelerra/new.C:418 cinelerra/setformat.C:360
 msgid "Canvas size:"
@@ -7569,7 +7830,7 @@ msgstr "Directorio del Proyecto"
 
 #: cinelerra/new.C:476
 msgid "Project Directory Path:"
-msgstr "Rutal del directorio del Proyecto"
+msgstr "Rutal del Directorio del Proyecto:"
 
 #: cinelerra/new.C:478
 msgid "Project Name:"
@@ -7580,7 +7841,7 @@ msgid "Auto aspect ratio"
 msgstr "Relación de aspecto Automatica"
 
 #: cinelerra/new.C:945 cinelerra/resizetrackthread.C:189
-#: cinelerra/setformat.C:827 plugins/photoscale/photoscale.C:198
+#: cinelerra/setformat.C:822 plugins/photoscale/photoscale.C:198
 msgid "Swap dimensions"
 msgstr "Intercambiar dimensiones"
 
@@ -7600,43 +7861,43 @@ msgstr "reproducir parche"
 msgid "Arm track"
 msgstr "Activar pista"
 
-#: cinelerra/patchgui.C:399
+#: cinelerra/patchgui.C:400
 msgid "record patch"
-msgstr "registrar parche "
+msgstr "parchear la grabación"
 
-#: cinelerra/patchgui.C:426
+#: cinelerra/patchgui.C:427
 msgid "Gang faders"
-msgstr "Junta difuminados"
+msgstr "Junta fundidos"
 
-#: cinelerra/patchgui.C:451
+#: cinelerra/patchgui.C:452
 msgid "gang patch"
 msgstr "junta parche"
 
-#: cinelerra/patchgui.C:478
+#: cinelerra/patchgui.C:479
 msgid "Draw media"
 msgstr "Dibujar medios"
 
-#: cinelerra/patchgui.C:503
+#: cinelerra/patchgui.C:504
 msgid "draw patch"
 msgstr "dibujar parche"
 
-#: cinelerra/patchgui.C:529
+#: cinelerra/patchgui.C:530
 msgid "Don't send to output"
 msgstr "No enviar a la salida"
 
-#: cinelerra/patchgui.C:569
+#: cinelerra/patchgui.C:570
 msgid "mute patch"
 msgstr "silenciar parche"
 
-#: cinelerra/patchgui.C:615
+#: cinelerra/patchgui.C:616
 msgid "expand patch"
 msgstr "ampliar parche"
 
-#: cinelerra/patchgui.C:642 cinelerra/patchgui.C:646
+#: cinelerra/patchgui.C:643 cinelerra/patchgui.C:647
 msgid "track title"
 msgstr "título della pista"
 
-#: cinelerra/patchgui.C:675 cinelerra/patchgui.C:681
+#: cinelerra/patchgui.C:676 cinelerra/patchgui.C:682
 msgid "nudge."
 msgstr "empujar."
 
@@ -7654,7 +7915,7 @@ msgstr "Segundos de preroll para renderizados:"
 
 #: cinelerra/performanceprefs.C:98
 msgid "Project SMP cpus:"
-msgstr "Proyecto CPUs SMP"
+msgstr "Proyecto CPUs SMP:"
 
 #: cinelerra/performanceprefs.C:113
 msgid "Background Rendering (Video only)"
@@ -7678,7 +7939,7 @@ msgstr "Granja de Renderizado"
 
 #: cinelerra/performanceprefs.C:155 cinelerra/performanceprefs.C:651
 msgid "Reset rates"
-msgstr "Restablecer tasas"
+msgstr "Restablecer"
 
 #: cinelerra/performanceprefs.C:158
 msgid "Nodes:"
@@ -7690,7 +7951,7 @@ msgstr "Nombre de host:"
 
 #: cinelerra/performanceprefs.C:176
 msgid "Client Watchdog Timeout:"
-msgstr "Final tiempo de vigilancia de cliente"
+msgstr "Final tiempo de vigilancia de cliente:"
 
 #: cinelerra/performanceprefs.C:179
 msgid "Total jobs to create:"
@@ -7702,12 +7963,13 @@ msgstr "(Anulado si  \"fichero nuevo en cada etiqueta\" está seleccionado)"
 
 #: cinelerra/performanceprefs.C:227 cinelerra/pluginpopup.C:222
 #: cinelerra/recordbatches.C:22 cinelerra/transitionpopup.C:313
+#: plugins/sketcher/sketcherwindow.C:298
 msgid "On"
-msgstr "Encendido"
+msgstr "ON"
 
 #: cinelerra/performanceprefs.C:227
 msgid "Hostname"
-msgstr "Nombre de host"
+msgstr "Nombre"
 
 #: cinelerra/performanceprefs.C:227
 msgid "Port"
@@ -7768,6 +8030,7 @@ msgid "Audio offset (sec):"
 msgstr "Compensación audio (seg):"
 
 #: cinelerra/playbackprefs.C:120 cinelerra/recordprefs.C:155
+#: plugins/compressormulti/comprmultigui.C:161
 #: plugins/denoiseseltempavg/seltempavgwindow.C:114
 #: plugins/freeverb/freeverb.C:312 plugins/histeq/histeq.C:103
 msgid "Gain:"
@@ -7783,11 +8046,11 @@ msgstr "Salida de Vídeo"
 
 #: cinelerra/playbackprefs.C:144
 msgid "Framerate achieved:"
-msgstr "Fotogramas por segundos alcanzado:"
+msgstr "Fotogramas por seg alcanzado:"
 
 #: cinelerra/playbackprefs.C:156
 msgid "Scaling equation: Enlarge / Reduce "
-msgstr "Ecuación de escalado: Ampliar/Reducir"
+msgstr "Ecuación de escalado: Ampliar/Reducir "
 
 #: cinelerra/playbackprefs.C:165
 msgid "DVD Subtitle to display:"
@@ -7835,7 +8098,7 @@ msgstr "Activar subtítulos/didascalias"
 
 #: cinelerra/playbackprefs.C:424
 msgid "Label cells"
-msgstr "células Etiqueta"
+msgstr "Etiquetar celdas"
 
 #: cinelerra/playtransport.C:397
 msgid "Fast reverse ( + or Alt-p )"
@@ -7875,12 +8138,24 @@ msgstr "Autor: %s"
 msgid "License: %s"
 msgstr "Licencia: %s"
 
-#: cinelerra/pluginarray.C:222
+#: cinelerra/pluginarray.C:224
 #, c-format
 msgid "%s took %s"
 msgstr "%s tomó %s"
 
-#: cinelerra/pluginclient.C:1060 cinelerra/pluginclient.C:1071
+#: cinelerra/plugin.C:223
+msgid "standalone"
+msgstr "autónomo"
+
+#: cinelerra/plugin.C:224
+msgid "shared plugin"
+msgstr "plugin compartido"
+
+#: cinelerra/plugin.C:225
+msgid "shared module"
+msgstr "modulo compartido"
+
+#: cinelerra/pluginclient.C:1085 cinelerra/pluginclient.C:1096
 msgid "tweek"
 msgstr "tweek"
 
@@ -7898,7 +8173,7 @@ msgstr "Pistas compartidas:"
 
 #: cinelerra/plugindialog.C:462
 msgid "attach effect"
-msgstr "Adjuntar efecto"
+msgstr "adjuntar efecto"
 
 #: cinelerra/plugindialog.C:713
 msgid "Attach single standalone and share others"
@@ -7910,15 +8185,15 @@ msgstr "UI"
 
 #: cinelerra/pluginpopup.C:92
 msgid "Change..."
-msgstr "Cambiar..."
+msgstr "Cambiar efecto..."
 
 #: cinelerra/pluginpopup.C:108
 msgid ": Change Effect"
-msgstr ": Efecto Cambio"
+msgstr ": Cambiar Efecto"
 
 #: cinelerra/pluginpopup.C:122 cinelerra/transitionpopup.C:295
 msgid "Detach"
-msgstr "Separar"
+msgstr "Quitar"
 
 #: cinelerra/pluginpopup.C:139
 msgid "detach effect"
@@ -7938,7 +8213,7 @@ msgstr "Mostrar"
 
 #: cinelerra/pluginpopup.C:273
 msgid "Presets..."
-msgstr "Presets ..."
+msgstr "Ajustes preestablecidos..."
 
 #: cinelerra/pluginprefs.C:59
 msgid "Plugin Set"
@@ -7954,7 +8229,7 @@ msgstr "Ruta Plugin Global"
 
 #: cinelerra/pluginprefs.C:67 cinelerra/pluginprefs.C:77
 msgid "Select the directory for plugins"
-msgstr "Seleccione el directorio de plugins"
+msgstr "Seleccione la carpeta de plugins"
 
 #: cinelerra/pluginprefs.C:71
 msgid "Look for personal plugins here"
@@ -7978,23 +8253,23 @@ msgstr "Encender"
 msgid "Preset Edit"
 msgstr "Editar preestablecidos"
 
-#: cinelerra/preferences.C:414
+#: cinelerra/preferences.C:425
 msgid "Current Manual"
 msgstr "Manual Actual"
 
-#: cinelerra/preferences.C:415
+#: cinelerra/preferences.C:426
 msgid "Setting Shell Commands"
 msgstr "Ajustes de Comandos del Shell"
 
-#: cinelerra/preferences.C:416
+#: cinelerra/preferences.C:427
 msgid "Shortcuts"
-msgstr "atajos"
+msgstr "Atajos de teclado"
 
-#: cinelerra/preferences.C:417
+#: cinelerra/preferences.C:428
 msgid "RenderMux"
 msgstr "RenderizarMux"
 
-#: cinelerra/preferences.inc:33
+#: cinelerra/preferences.inc:36
 msgid ""
 "Currently: Try FFMpeg first\n"
 "   Click to: Try FFMpeg last"
@@ -8002,7 +8277,7 @@ msgstr ""
 "Actualmente: Pruebe primero FFMpeg\n"
 "   Clic en: Probar por último FFMpeg"
 
-#: cinelerra/preferences.inc:34
+#: cinelerra/preferences.inc:37
 msgid ""
 "Currently: Try FFMpeg last\n"
 "   Click to: Try FFMpeg first"
@@ -8018,59 +8293,59 @@ msgstr "Preferencias ..."
 msgid "Shift-P"
 msgstr "Mayús-P"
 
-#: cinelerra/preferencesthread.C:372 cinelerra/render.C:863
+#: cinelerra/preferencesthread.C:375 cinelerra/render.C:863
 msgid "render"
 msgstr "renderizar"
 
-#: cinelerra/preferencesthread.C:375 cinelerra/record.C:432
+#: cinelerra/preferencesthread.C:378 cinelerra/record.C:439
 msgid "record"
 msgstr "grabar"
 
-#: cinelerra/preferencesthread.C:386
+#: cinelerra/preferencesthread.C:389
 msgid "*Playback A"
 msgstr "* La reproducción A"
 
-#: cinelerra/preferencesthread.C:386
+#: cinelerra/preferencesthread.C:389
 msgid "Playback A"
 msgstr "Reproducción A"
 
-#: cinelerra/preferencesthread.C:389
+#: cinelerra/preferencesthread.C:392
 msgid "*Playback B"
 msgstr "* La reproducción B"
 
-#: cinelerra/preferencesthread.C:389
+#: cinelerra/preferencesthread.C:392
 msgid "Playback B"
 msgstr "Reproducción B"
 
-#: cinelerra/preferencesthread.C:391
+#: cinelerra/preferencesthread.C:394
 msgid "Recording"
 msgstr "Grabación"
 
-#: cinelerra/preferencesthread.C:393
+#: cinelerra/preferencesthread.C:396
 msgid "Performance"
 msgstr "Performance"
 
-#: cinelerra/preferencesthread.C:395
+#: cinelerra/preferencesthread.C:398
 msgid "Interface"
 msgstr "Interfaz"
 
-#: cinelerra/preferencesthread.C:397
+#: cinelerra/preferencesthread.C:400
 msgid "Appearance"
 msgstr "Apariencia"
 
-#: cinelerra/preferencesthread.C:399
+#: cinelerra/preferencesthread.C:402
 msgid "About"
 msgstr "Acerca de"
 
-#: cinelerra/preferencesthread.C:424
+#: cinelerra/preferencesthread.C:427
 msgid ": Preferences"
 msgstr "Preferencias"
 
-#: cinelerra/preferencesthread.C:687
+#: cinelerra/preferencesthread.C:690
 msgid "restart"
 msgstr "reiniciar"
 
-#: cinelerra/preferencesthread.C:706
+#: cinelerra/preferencesthread.C:709
 #, c-format
 msgid "Busy: %s in progress. Are you sure?"
 msgstr "Ocupado: %s en progreso. ¿Está seguro?"
@@ -8080,7 +8355,7 @@ msgid ": Probes"
 msgstr ": Sondear"
 
 #: cinelerra/probeprefs.C:137 plugins/crikey/crikeywindow.C:522
-#: plugins/sketcher/sketcherwindow.C:885 plugins/sketcher/sketcherwindow.C:1116
+#: plugins/sketcher/sketcherwindow.C:974 plugins/sketcher/sketcherwindow.C:1205
 #: plugins/tracer/tracerwindow.C:479
 msgid "Up"
 msgstr "Arriba"
@@ -8101,38 +8376,47 @@ msgstr "Alt-r"
 msgid "Original size"
 msgstr "Tamaño original"
 
-#: cinelerra/proxy.C:338
+#: cinelerra/proxy.C:170
+msgid "Specified format does not render video"
+msgstr "El formato especificado no es valido para video"
+
+#: cinelerra/proxy.C:286
+#, c-format
+msgid "bad proxy path: %s\n"
+msgstr "ruta de proxy incorrecta: %s\n"
+
+#: cinelerra/proxy.C:363
 msgid "Creating proxy files..."
-msgstr "Creando archivos proxy"
+msgstr "Creando archivos proxy..."
 
-#: cinelerra/proxy.C:357
+#: cinelerra/proxy.C:376
+msgid "Error making proxy."
+msgstr "Error al crear el proxy."
+
+#: cinelerra/proxy.C:383
 msgid ": Proxy settings"
 msgstr ": Ajustes de Proxy"
 
-#: cinelerra/proxy.C:396 plugins/reframe/reframe.C:190
+#: cinelerra/proxy.C:423 plugins/reframe/reframe.C:190
 #: plugins/resample/resample.C:84
 msgid "Scale factor:"
 msgstr "Factor de escala:"
 
-#: cinelerra/proxy.C:409
+#: cinelerra/proxy.C:436
 msgid "New media dimensions: "
-msgstr "Nueva dimensión de Medios:"
+msgstr "Nuevas dimensiones: "
 
-#: cinelerra/proxy.C:415
+#: cinelerra/proxy.C:442
 msgid "Active Scale: "
-msgstr "Escala Activo:"
+msgstr "Activar Escala: "
 
-#: cinelerra/proxy.C:473
+#: cinelerra/proxy.C:502
 msgid "Use scaler   (FFMPEG only)"
 msgstr "Usar Escalar (Solo FFMPEG)"
 
-#: cinelerra/proxy.C:498
+#: cinelerra/proxy.C:527
 msgid "Auto proxy/scale media loads"
-msgstr "Cargar medios auto proxy/escalar"
-
-#: cinelerra/proxy.C:521 cinelerra/render.C:1215
-msgid "Beep on done"
-msgstr "Pitido al terminar"
+msgstr "Proxy automático/cargar medios a escala"
 
 #: cinelerra/question.C:34
 msgid ": Question"
@@ -8175,7 +8459,7 @@ msgstr "Ruta"
 msgid "News"
 msgstr "Noticias"
 
-#: cinelerra/recordbatches.C:505 cinelerra/recordgui.C:949
+#: cinelerra/recordbatches.C:505 cinelerra/recordgui.C:992
 msgid ""
 "Start batch recording\n"
 "from the current position."
@@ -8187,7 +8471,7 @@ msgstr ""
 msgid "Activate"
 msgstr "Activar"
 
-#: cinelerra/recordbatches.C:534 cinelerra/recordgui.C:980
+#: cinelerra/recordbatches.C:534 cinelerra/recordgui.C:1023
 msgid ""
 "Make the highlighted\n"
 "clip active."
@@ -8195,15 +8479,15 @@ msgstr ""
 "Hacer que el clip destacado\n"
 "se active."
 
-#: cinelerra/record.C:85
+#: cinelerra/record.C:87
 msgid "Record..."
 msgstr "Grabar ..."
 
-#: cinelerra/record.C:551
+#: cinelerra/record.C:556
 msgid "Deleting"
 msgstr "Eliminación"
 
-#: cinelerra/record.C:1203
+#: cinelerra/record.C:1208
 msgid "Running"
 msgstr "Corriendo"
 
@@ -8225,12 +8509,12 @@ msgstr "Hora de inicio:"
 msgid "Duration time:"
 msgstr "Tiempo de duración:"
 
-#: cinelerra/recordgui.C:169 plugins/audioscope/audioscope.C:401
+#: cinelerra/recordgui.C:169 plugins/audioscope/audioscope.C:395
 #: plugins/denoisemjpeg/denoisemjpeg.C:395 plugins/descratch/descratch.C:510
 #: plugins/echocancel/echocancel.C:451 plugins/findobj/findobjwindow.C:54
 #: plugins/lens/lens.C:537 plugins/overlay/overlay.C:202
 #: plugins/overlayaudio/overlayaudio.C:209
-#: plugins/spectrogram/spectrogram.C:433 plugins/spherecam/spherecam.C:410
+#: plugins/spectrogram/spectrogram.C:427 plugins/spherecam/spherecam.C:410
 msgid "Mode:"
 msgstr "Modo:"
 
@@ -8286,112 +8570,126 @@ msgstr "Lotes:"
 msgid "Cron:"
 msgstr "Cronómetro:"
 
-#: cinelerra/recordgui.C:352 cinelerra/recordgui.C:985
+#: cinelerra/recordgui.C:352 cinelerra/recordgui.C:1028
 msgid "Idle"
 msgstr "Inactivo"
 
-#: cinelerra/recordgui.C:568
+#: cinelerra/recordgui.C:392
+msgid "deinterlace"
+msgstr "desentralzado"
+
+#: cinelerra/recordgui.C:574
 msgid "Save the recording and quit."
 msgstr "Guardar la grabación y salir."
 
-#: cinelerra/recordgui.C:591
+#: cinelerra/recordgui.C:597
 msgid "Quit without pasting into project."
 msgstr "Salir sin pegar en el proyecto."
 
-#: cinelerra/recordgui.C:616
+#: cinelerra/recordgui.C:622
 msgid "Quit and paste into project."
 msgstr "Salir y pegar en el proyecto."
 
-#: cinelerra/recordgui.C:628
+#: cinelerra/recordgui.C:634
 msgid "Start Over"
 msgstr "Volver a empezar"
 
-#: cinelerra/recordgui.C:630
+#: cinelerra/recordgui.C:636
 msgid "Rewind the current file and erase."
 msgstr "Rebobinar el archivo actual y borrar."
 
-#: cinelerra/recordgui.C:646
+#: cinelerra/recordgui.C:652
 msgid "drop overrun frames"
-msgstr "Soltar fotogramas desbordados"
+msgstr "soltar fotogramas desbordados"
 
-#: cinelerra/recordgui.C:650
+#: cinelerra/recordgui.C:656
 msgid "Drop input frames when behind."
 msgstr "Deja caer fotogramas de entrada cuando se retrasan."
 
-#: cinelerra/recordgui.C:670
+#: cinelerra/recordgui.C:676
 msgid "fill underrun frames"
 msgstr "rellenar fotogramas empotrados"
 
-#: cinelerra/recordgui.C:674
+#: cinelerra/recordgui.C:680
 msgid "Write extra frames when behind."
 msgstr "Escribir extra fotogramas cuando se retrasan."
 
-#: cinelerra/recordgui.C:694
+#: cinelerra/recordgui.C:700
 msgid "poweroff when done"
 msgstr "apagar una vez hecho"
 
-#: cinelerra/recordgui.C:698
+#: cinelerra/recordgui.C:704
 msgid "poweroff system when batch record done."
 msgstr "apagar el sistema cuando el grabado por lotes finalice."
 
-#: cinelerra/recordgui.C:719
+#: cinelerra/recordgui.C:725
 msgid "check for ads"
 msgstr "comprobar anuncios"
 
-#: cinelerra/recordgui.C:723
+#: cinelerra/recordgui.C:729
 msgid "check for commercials."
 msgstr "comprobar anuncios."
 
-#: cinelerra/recordgui.C:746
+#: cinelerra/recordgui.C:773 plugins/piano/piano.C:1384
+#: plugins/synthesizer/synthesizer.C:1920
+msgid "Even"
+msgstr "Par"
+
+#: cinelerra/recordgui.C:774 plugins/piano/piano.C:1407
+#: plugins/synthesizer/synthesizer.C:1944
+msgid "Odd"
+msgstr "Impar"
+
+#: cinelerra/recordgui.C:789
 msgid "Monitor video"
 msgstr "Monitor de vídeo"
 
-#: cinelerra/recordgui.C:786
+#: cinelerra/recordgui.C:829
 msgid "Monitor audio"
 msgstr "Monitor de audio"
 
-#: cinelerra/recordgui.C:823
+#: cinelerra/recordgui.C:866
 msgid "Audio meters"
 msgstr "Medidores de audio"
 
-#: cinelerra/recordgui.C:970
+#: cinelerra/recordgui.C:1013
 msgid "Stopped"
 msgstr "Detenido"
 
-#: cinelerra/recordgui.C:991
+#: cinelerra/recordgui.C:1034
 msgid "Label"
 msgstr "Etiqueta"
 
-#: cinelerra/recordgui.C:1019
+#: cinelerra/recordgui.C:1062
 msgid "ClrLbls"
-msgstr "Limpiar etiquetas"
+msgstr "Eliminar etiquetas"
 
-#: cinelerra/recordgui.C:1068
+#: cinelerra/recordgui.C:1111
 msgid "Interrupt recording in progress?"
 msgstr "Interrumpir la grabación en curso?"
 
-#: cinelerra/recordgui.C:1094
+#: cinelerra/recordgui.C:1137
 msgid "Rewind batch and overwrite?"
 msgstr "Rebobinar lote y sobrescribir?"
 
-#: cinelerra/recordmonitor.C:234
+#: cinelerra/recordmonitor.C:235
 msgid ": Video in"
 msgstr ": Video in"
 
-#: cinelerra/recordmonitor.C:642
+#: cinelerra/recordmonitor.C:643
 #, c-format
 msgid ": Video in %d%%"
 msgstr ": Video in %d%%"
 
-#: cinelerra/recordmonitor.C:674
+#: cinelerra/recordmonitor.C:675
 msgid "Record cursor"
 msgstr "Grabar cursor"
 
-#: cinelerra/recordmonitor.C:691
+#: cinelerra/recordmonitor.C:692
 msgid "Big cursor"
 msgstr "Cursor grande"
 
-#: cinelerra/recordmonitor.C:747
+#: cinelerra/recordmonitor.C:748
 msgid "Swap fields"
 msgstr "Intercambiar campos"
 
@@ -8401,7 +8699,7 @@ msgstr "Entrada de Audio"
 
 #: cinelerra/recordprefs.C:105 cinelerra/recordprefs.C:175
 msgid "Record Driver:"
-msgstr "Controlador de Grabación:"
+msgstr "Controlador:"
 
 #: cinelerra/recordprefs.C:115
 msgid "Samples read from device:"
@@ -8622,27 +8920,27 @@ msgstr "No se pudo iniciar granja de render"
 msgid "Error rendering data."
 msgstr "Error al renderizar los datos."
 
-#: cinelerra/render.C:978
+#: cinelerra/render.C:979
 msgid ": Render"
 msgstr ": Renderizar"
 
-#: cinelerra/render.C:1028
+#: cinelerra/render.C:1029
 msgid "Render range:"
 msgstr "Render rango:"
 
-#: cinelerra/render.C:1103
+#: cinelerra/render.C:1106
 msgid "Project"
 msgstr "Proyecto"
 
-#: cinelerra/render.C:1114
+#: cinelerra/render.C:1117
 msgid "Selection"
-msgstr "Seleccion"
+msgstr "Selección"
 
-#: cinelerra/render.C:1126
+#: cinelerra/render.C:1129
 msgid "In/Out Points"
-msgstr "Los puntos Entrada/Salida"
+msgstr "Puntos Entrada/Salida"
 
-#: cinelerra/render.C:1137
+#: cinelerra/render.C:1140
 msgid "One Frame"
 msgstr "Un fotograma"
 
@@ -8754,11 +9052,11 @@ msgid "Size:"
 msgstr "Tamaño:"
 
 #: cinelerra/resizetrackthread.C:132 cinelerra/resizetrackthread.C:143
-#: plugins/compressor/compressor.C:886 plugins/scale/scalewin.C:70
+#: plugins/scale/scalewin.C:70
 msgid "x"
 msgstr "x"
 
-#: cinelerra/resourcepixmap.C:431
+#: cinelerra/resourcepixmap.C:461
 #, c-format
 msgid "ResourcePixmap::draw_audio_source: failed to check out %s for drawing.\n"
 msgstr "ResourcePixmap::draw_audio_source: no se pudo verificar %s para dibujar.\n"
@@ -8859,8 +9157,8 @@ msgstr "Histograma Parade"
 msgid "Waveform Parade"
 msgstr "Forma de onda Parade"
 
-#: cinelerra/scopewindow.C:1340 plugins/audioscope/audioscope.C:314
-#: plugins/piano/piano.C:528 plugins/synthesizer/synthesizer.C:554
+#: cinelerra/scopewindow.C:1340 plugins/audioscope/audioscope.C:311
+#: plugins/piano/piano.C:528 plugins/synthesizer/synthesizer.C:562
 msgid "Waveform"
 msgstr "Forma de onda"
 
@@ -8888,7 +9186,7 @@ msgstr ": Poner Formado"
 msgid "Channel positions:"
 msgstr "Posiciones del canal:"
 
-#: cinelerra/setformat.C:612
+#: cinelerra/setformat.C:607
 #, c-format
 msgid "%d degrees"
 msgstr "%d grados"
@@ -9067,7 +9365,7 @@ msgstr "arrastrar etiqueta"
 
 #: cinelerra/timeentry.C:51
 msgid "Sun"
-msgstr "Sol"
+msgstr "Dom"
 
 #: cinelerra/timeentry.C:51
 msgid "Mon"
@@ -9100,7 +9398,7 @@ msgid ""
 " %s"
 msgstr ""
 "no existe archivo de consejos:\n"
-"%s"
+" %s"
 
 #: cinelerra/tipwindow.C:119
 msgid ": Tip of the day"
@@ -9118,11 +9416,11 @@ msgstr "Próxima sugerencia"
 msgid "Previous tip"
 msgstr "Sugerencia anterior"
 
-#: cinelerra/trackcanvas.C:4623
+#: cinelerra/trackcanvas.C:4630
 msgid "keyframe"
 msgstr "fotograma clave"
 
-#: cinelerra/trackcanvas.C:4831
+#: cinelerra/trackcanvas.C:4838
 msgid "hard_edge"
 msgstr "borde_duro"
 
@@ -9148,7 +9446,7 @@ msgstr "Encontrar en recursos"
 
 #: cinelerra/trackpopup.C:270
 msgid "User title..."
-msgstr "Título de usuario ..."
+msgstr "Título personalizado..."
 
 #: cinelerra/trackpopup.C:355
 msgid ": Set edit title"
@@ -9162,7 +9460,7 @@ msgstr "Título de usuario:"
 msgid "Bar Color..."
 msgstr "Color de Barra..."
 
-#: cinelerra/trackpopup.C:433 cinelerra/trackpopup.C:459
+#: cinelerra/trackpopup.C:433 cinelerra/trackpopup.C:460
 #: plugins/echocancel/echocancel.C:212 plugins/perspective/perspective.C:607
 msgid "default"
 msgstr "default"
@@ -9171,25 +9469,25 @@ msgstr "default"
 msgid "Bar Color"
 msgstr "Color de barra"
 
-#: cinelerra/trackpopup.C:498
+#: cinelerra/trackpopup.C:500
 msgid "Show edit"
 msgstr "Mostrar edición"
 
-#: cinelerra/trackpopup.C:553
+#: cinelerra/trackpopup.C:555
 msgid ": Show edit"
 msgstr ": Mostar edición"
 
-#: cinelerra/trackpopup.C:572
+#: cinelerra/trackpopup.C:574
 #, c-format
 msgid "Track %d:"
 msgstr "Pista %d:"
 
-#: cinelerra/trackpopup.C:579
+#: cinelerra/trackpopup.C:582
 #, c-format
 msgid "Edit %d:"
-msgstr "%d:"
+msgstr "Editar %d:"
 
-#: cinelerra/trackpopup.C:600
+#: cinelerra/trackpopup.C:603
 #, c-format
 msgid ""
 "StartSource: %s\n"
@@ -9223,7 +9521,7 @@ msgstr ": Longitud de Transición"
 #: cinelerra/transitionpopup.C:270
 #, c-format
 msgid "Length: %2.2f sec"
-msgstr "Tiempo: %2.2f segundos"
+msgstr "Tiempo: %2.2f seg"
 
 #: cinelerra/transitionpopup.C:277
 msgid "Attach..."
@@ -9339,11 +9637,11 @@ msgstr "Reemplazar"
 
 #: cinelerra/vpatchgui.C:389
 msgid "Max"
-msgstr "Max"
+msgstr "Máx"
 
 #: cinelerra/vpatchgui.C:390
 msgid "Min"
-msgstr "Min"
+msgstr "Mín"
 
 #: cinelerra/vpatchgui.C:391
 msgid "Darken"
@@ -9443,7 +9741,7 @@ msgstr "Visor"
 msgid ": Viewer"