Rafa Mar update Spanish + Andrea improved libaom build master
authorGood Guy <good1.2guy@gmail.com>
Wed, 28 Jul 2021 02:36:38 +0000 (20:36 -0600)
committerGood Guy <good1.2guy@gmail.com>
Wed, 28 Jul 2021 02:36:38 +0000 (20:36 -0600)
830 files changed:
cinelerra-5.1/Cinelerra_factory
cinelerra-5.1/Makefile.am
cinelerra-5.1/blds/PKGBUILD
cinelerra-5.1/blds/bld_appimage.sh [new file with mode: 0644]
cinelerra-5.1/blds/cinelerra.spec
cinelerra-5.1/blds/debian/changelog
cinelerra-5.1/blds/debian/control
cinelerra-5.1/cinelerra/aautomation.C
cinelerra-5.1/cinelerra/aboutprefs.C
cinelerra-5.1/cinelerra/adeviceprefs.C
cinelerra-5.1/cinelerra/affine.C
cinelerra-5.1/cinelerra/amodule.C
cinelerra-5.1/cinelerra/apatchgui.C
cinelerra-5.1/cinelerra/apatchgui.h
cinelerra-5.1/cinelerra/apatchgui.inc
cinelerra-5.1/cinelerra/appearanceprefs.C
cinelerra-5.1/cinelerra/appearanceprefs.h
cinelerra-5.1/cinelerra/appearanceprefs.inc
cinelerra-5.1/cinelerra/asset.C
cinelerra-5.1/cinelerra/asset.h
cinelerra-5.1/cinelerra/assetedit.C
cinelerra-5.1/cinelerra/assetedit.h
cinelerra-5.1/cinelerra/assetpopup.C
cinelerra-5.1/cinelerra/assetpopup.h
cinelerra-5.1/cinelerra/assetremove.C
cinelerra-5.1/cinelerra/auto.C
cinelerra-5.1/cinelerra/auto.h
cinelerra-5.1/cinelerra/automation.h
cinelerra-5.1/cinelerra/automation.inc
cinelerra-5.1/cinelerra/autos.C
cinelerra-5.1/cinelerra/autos.h
cinelerra-5.1/cinelerra/avc1394transport.C
cinelerra-5.1/cinelerra/awindowgui.C
cinelerra-5.1/cinelerra/awindowgui.h
cinelerra-5.1/cinelerra/batchrender.C
cinelerra-5.1/cinelerra/batchrender.h
cinelerra-5.1/cinelerra/bdcreate.C
cinelerra-5.1/cinelerra/binfolder.C
cinelerra-5.1/cinelerra/brender.C
cinelerra-5.1/cinelerra/browsebutton.C
cinelerra-5.1/cinelerra/cache.C
cinelerra-5.1/cinelerra/cache.h
cinelerra-5.1/cinelerra/canvas.C
cinelerra-5.1/cinelerra/channeledit.C
cinelerra-5.1/cinelerra/channelinfo.C
cinelerra-5.1/cinelerra/channelpicker.C
cinelerra-5.1/cinelerra/clipedit.C
cinelerra-5.1/cinelerra/clippopup.C
cinelerra-5.1/cinelerra/colorpicker.C
cinelerra-5.1/cinelerra/commercials.C
cinelerra-5.1/cinelerra/confirmquit.C
cinelerra-5.1/cinelerra/confirmsave.C
cinelerra-5.1/cinelerra/convert.C
cinelerra-5.1/cinelerra/convert.h
cinelerra-5.1/cinelerra/cpanel.C
cinelerra-5.1/cinelerra/ctimebar.C
cinelerra-5.1/cinelerra/cwindow.C
cinelerra-5.1/cinelerra/cwindowgui.C
cinelerra-5.1/cinelerra/cwindowgui.h
cinelerra-5.1/cinelerra/cwindowtool.C
cinelerra-5.1/cinelerra/cwindowtool.h
cinelerra-5.1/cinelerra/cwindowtool.inc
cinelerra-5.1/cinelerra/dbwindow.C
cinelerra-5.1/cinelerra/defaultformats.h
cinelerra-5.1/cinelerra/dvdcreate.C
cinelerra-5.1/cinelerra/edit.C
cinelerra-5.1/cinelerra/edit.h
cinelerra-5.1/cinelerra/editlength.C
cinelerra-5.1/cinelerra/editpanel.C
cinelerra-5.1/cinelerra/editpanel.h
cinelerra-5.1/cinelerra/editpanel.inc
cinelerra-5.1/cinelerra/editpopup.C
cinelerra-5.1/cinelerra/editpopup.h
cinelerra-5.1/cinelerra/editpopup.inc
cinelerra-5.1/cinelerra/edits.C
cinelerra-5.1/cinelerra/edits.h
cinelerra-5.1/cinelerra/edl.C
cinelerra-5.1/cinelerra/edl.h
cinelerra-5.1/cinelerra/edl.inc
cinelerra-5.1/cinelerra/edlsession.C
cinelerra-5.1/cinelerra/edlsession.h
cinelerra-5.1/cinelerra/exportedl.C
cinelerra-5.1/cinelerra/ffmpeg.C
cinelerra-5.1/cinelerra/ffmpeg.h
cinelerra-5.1/cinelerra/file.C
cinelerra-5.1/cinelerra/file.h
cinelerra-5.1/cinelerra/fileac3.C
cinelerra-5.1/cinelerra/filebase.C
cinelerra-5.1/cinelerra/filedv.C
cinelerra-5.1/cinelerra/fileexr.C
cinelerra-5.1/cinelerra/fileffmpeg.C
cinelerra-5.1/cinelerra/fileflac.C
cinelerra-5.1/cinelerra/fileformat.C
cinelerra-5.1/cinelerra/filejpeg.C
cinelerra-5.1/cinelerra/filelist.C
cinelerra-5.1/cinelerra/filelist.h
cinelerra-5.1/cinelerra/filempeg.C
cinelerra-5.1/cinelerra/fileogg.C
cinelerra-5.1/cinelerra/filepng.C
cinelerra-5.1/cinelerra/fileppm.C
cinelerra-5.1/cinelerra/fileref.C
cinelerra-5.1/cinelerra/fileref.h
cinelerra-5.1/cinelerra/filesndfile.C
cinelerra-5.1/cinelerra/filetga.C
cinelerra-5.1/cinelerra/filethread.C
cinelerra-5.1/cinelerra/filetiff.C
cinelerra-5.1/cinelerra/filevorbis.C
cinelerra-5.1/cinelerra/filexml.C
cinelerra-5.1/cinelerra/filexml.h
cinelerra-5.1/cinelerra/floatauto.C
cinelerra-5.1/cinelerra/floatauto.h
cinelerra-5.1/cinelerra/floatautos.C
cinelerra-5.1/cinelerra/floatautos.h
cinelerra-5.1/cinelerra/formattools.C
cinelerra-5.1/cinelerra/fourier.C
cinelerra-5.1/cinelerra/framecache.C
cinelerra-5.1/cinelerra/framecache.h
cinelerra-5.1/cinelerra/gwindowgui.C
cinelerra-5.1/cinelerra/gwindowgui.h
cinelerra-5.1/cinelerra/indexfile.C
cinelerra-5.1/cinelerra/interfaceprefs.C
cinelerra-5.1/cinelerra/interp.h
cinelerra-5.1/cinelerra/keyframe.C
cinelerra-5.1/cinelerra/keyframe.h
cinelerra-5.1/cinelerra/keyframegui.C
cinelerra-5.1/cinelerra/keyframepopup.C
cinelerra-5.1/cinelerra/keyframepopup.h
cinelerra-5.1/cinelerra/keyframepopup.inc
cinelerra-5.1/cinelerra/keyframes.C
cinelerra-5.1/cinelerra/keyframes.h
cinelerra-5.1/cinelerra/labeledit.C
cinelerra-5.1/cinelerra/labels.C
cinelerra-5.1/cinelerra/labels.h
cinelerra-5.1/cinelerra/levelwindowgui.C
cinelerra-5.1/cinelerra/loadfile.C
cinelerra-5.1/cinelerra/localsession.C
cinelerra-5.1/cinelerra/localsession.h
cinelerra-5.1/cinelerra/localsession.inc
cinelerra-5.1/cinelerra/main.C
cinelerra-5.1/cinelerra/mainclock.C
cinelerra-5.1/cinelerra/mainmenu.C
cinelerra-5.1/cinelerra/mainmenu.h
cinelerra-5.1/cinelerra/mainmenu.inc
cinelerra-5.1/cinelerra/mainsession.C
cinelerra-5.1/cinelerra/mainsession.h
cinelerra-5.1/cinelerra/mainsession.inc
cinelerra-5.1/cinelerra/mainundo.C
cinelerra-5.1/cinelerra/manualgoto.C
cinelerra-5.1/cinelerra/manualgoto.h
cinelerra-5.1/cinelerra/maskengine.C
cinelerra-5.1/cinelerra/mbuttons.C
cinelerra-5.1/cinelerra/mbuttons.h
cinelerra-5.1/cinelerra/menuattachtransition.C
cinelerra-5.1/cinelerra/menuattachtransition.h
cinelerra-5.1/cinelerra/menueffects.C
cinelerra-5.1/cinelerra/menueffects.h
cinelerra-5.1/cinelerra/meterpanel.C
cinelerra-5.1/cinelerra/mixersalign.C
cinelerra-5.1/cinelerra/module.C
cinelerra-5.1/cinelerra/module.h
cinelerra-5.1/cinelerra/mtimebar.C
cinelerra-5.1/cinelerra/mwindow.C
cinelerra-5.1/cinelerra/mwindow.h
cinelerra-5.1/cinelerra/mwindowedit.C
cinelerra-5.1/cinelerra/mwindowgui.C
cinelerra-5.1/cinelerra/mwindowgui.h
cinelerra-5.1/cinelerra/mwindowmove.C
cinelerra-5.1/cinelerra/new.C
cinelerra-5.1/cinelerra/packagedispatcher.C
cinelerra-5.1/cinelerra/packagerenderer.C
cinelerra-5.1/cinelerra/packagerenderer.h
cinelerra-5.1/cinelerra/packagerenderer.inc
cinelerra-5.1/cinelerra/patchbay.C
cinelerra-5.1/cinelerra/patchbay.h
cinelerra-5.1/cinelerra/patchgui.C
cinelerra-5.1/cinelerra/patchgui.h
cinelerra-5.1/cinelerra/patchgui.inc
cinelerra-5.1/cinelerra/performanceprefs.C
cinelerra-5.1/cinelerra/performanceprefs.h
cinelerra-5.1/cinelerra/performanceprefs.inc
cinelerra-5.1/cinelerra/playabletracks.C
cinelerra-5.1/cinelerra/playbackengine.C
cinelerra-5.1/cinelerra/playbackengine.h
cinelerra-5.1/cinelerra/playbackprefs.C
cinelerra-5.1/cinelerra/playtransport.C
cinelerra-5.1/cinelerra/playtransport.h
cinelerra-5.1/cinelerra/plugin.C
cinelerra-5.1/cinelerra/pluginarray.C
cinelerra-5.1/cinelerra/pluginclient.C
cinelerra-5.1/cinelerra/pluginclient.h
cinelerra-5.1/cinelerra/plugindialog.C
cinelerra-5.1/cinelerra/plugindialog.h
cinelerra-5.1/cinelerra/pluginfclient.C
cinelerra-5.1/cinelerra/pluginlv2.C
cinelerra-5.1/cinelerra/pluginlv2.h
cinelerra-5.1/cinelerra/pluginserver.C
cinelerra-5.1/cinelerra/pluginserver.h
cinelerra-5.1/cinelerra/preferences.C
cinelerra-5.1/cinelerra/preferences.h
cinelerra-5.1/cinelerra/preferences.inc
cinelerra-5.1/cinelerra/preferencesthread.C
cinelerra-5.1/cinelerra/preferencesthread.h
cinelerra-5.1/cinelerra/presets.C
cinelerra-5.1/cinelerra/probeprefs.C
cinelerra-5.1/cinelerra/proxy.C
cinelerra-5.1/cinelerra/proxy.h
cinelerra-5.1/cinelerra/question.C
cinelerra-5.1/cinelerra/recordableatracks.C
cinelerra-5.1/cinelerra/recordablevtracks.C
cinelerra-5.1/cinelerra/recordgui.C
cinelerra-5.1/cinelerra/recordmonitor.C
cinelerra-5.1/cinelerra/recordprefs.C
cinelerra-5.1/cinelerra/recordscopes.C
cinelerra-5.1/cinelerra/recordtransport.C
cinelerra-5.1/cinelerra/remotecontrol.C
cinelerra-5.1/cinelerra/render.C
cinelerra-5.1/cinelerra/render.h
cinelerra-5.1/cinelerra/renderfarm.h
cinelerra-5.1/cinelerra/renderfarmclient.C
cinelerra-5.1/cinelerra/resizetrackthread.C
cinelerra-5.1/cinelerra/resizetrackthread.h
cinelerra-5.1/cinelerra/resourcethread.C
cinelerra-5.1/cinelerra/resourcethread.h
cinelerra-5.1/cinelerra/samples.C
cinelerra-5.1/cinelerra/savefile.C
cinelerra-5.1/cinelerra/savefile.h
cinelerra-5.1/cinelerra/scopewindow.C
cinelerra-5.1/cinelerra/setformat.C
cinelerra-5.1/cinelerra/shbtnprefs.C
cinelerra-5.1/cinelerra/shuttle.C
cinelerra-5.1/cinelerra/statusbar.C
cinelerra-5.1/cinelerra/swindow.C
cinelerra-5.1/cinelerra/swindow.h
cinelerra-5.1/cinelerra/swindow.inc
cinelerra-5.1/cinelerra/theme.C
cinelerra-5.1/cinelerra/theme.h
cinelerra-5.1/cinelerra/tipwindow.C
cinelerra-5.1/cinelerra/track.C
cinelerra-5.1/cinelerra/track.h
cinelerra-5.1/cinelerra/trackcanvas.C
cinelerra-5.1/cinelerra/trackcanvas.h
cinelerra-5.1/cinelerra/tracklist.C
cinelerra-5.1/cinelerra/trackpopup.C
cinelerra-5.1/cinelerra/trackpopup.h
cinelerra-5.1/cinelerra/tracks.C
cinelerra-5.1/cinelerra/tracks.h
cinelerra-5.1/cinelerra/tracksedit.C
cinelerra-5.1/cinelerra/transitionpopup.C
cinelerra-5.1/cinelerra/transitionpopup.h
cinelerra-5.1/cinelerra/vautomation.C
cinelerra-5.1/cinelerra/vdeviceprefs.C
cinelerra-5.1/cinelerra/videodevice.C
cinelerra-5.1/cinelerra/virtualvconsole.C
cinelerra-5.1/cinelerra/vmodule.C
cinelerra-5.1/cinelerra/vpatchgui.C
cinelerra-5.1/cinelerra/vpatchgui.h
cinelerra-5.1/cinelerra/vpatchgui.inc
cinelerra-5.1/cinelerra/vrender.C
cinelerra-5.1/cinelerra/vtimebar.C
cinelerra-5.1/cinelerra/vwindowgui.C
cinelerra-5.1/cinelerra/vwindowgui.h
cinelerra-5.1/cinelerra/x10tv.C
cinelerra-5.1/cinelerra/ydiff.C
cinelerra-5.1/cinelerra/zoombar.C
cinelerra-5.1/cinelerra/zoompanel.C
cinelerra-5.1/cinelerra/zwindow.C
cinelerra-5.1/cinelerra/zwindow.h
cinelerra-5.1/cinelerra/zwindowgui.C
cinelerra-5.1/configure.ac
cinelerra-5.1/doc/ContextManual.pl [new file with mode: 0755]
cinelerra-5.1/doc/Makefile
cinelerra-5.1/doc/ShellCmds.html
cinelerra-5.1/doc/ShellCmds_en.html
cinelerra-5.1/doc/ShellCmds_es.html [new file with mode: 0644]
cinelerra-5.1/doc/help_br_de.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_en.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_es.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_fr.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_index.html [new file with mode: 0644]
cinelerra-5.1/doc/help_br_it.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_nb.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_nl.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_no.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_pt.pdf [new file with mode: 0644]
cinelerra-5.1/doc/help_br_ru.pdf [new file with mode: 0644]
cinelerra-5.1/doc/shortcuts.html
cinelerra-5.1/expanders.txt
cinelerra-5.1/ffmpeg/audio/dnxhr_pcm_s16.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/audio/dnxhr_pcm_s24.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/audio/mpeg1_mp2.mpeg [new file with mode: 0644]
cinelerra-5.1/ffmpeg/audio/mxf_pcm16.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/audio/mxf_pcm24.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/audio/obs2youtube.mp4 [new file with mode: 0644]
cinelerra-5.1/ffmpeg/format/bluray
cinelerra-5.1/ffmpeg/plugin.opts
cinelerra-5.1/ffmpeg/video/AVC_Intra_100.mp4 [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/av1.webm
cinelerra-5.1/ffmpeg/video/cinepak.qt
cinelerra-5.1/ffmpeg/video/div3.qt
cinelerra-5.1/ffmpeg/video/div3v2.qt
cinelerra-5.1/ffmpeg/video/div5.qt
cinelerra-5.1/ffmpeg/video/dnxhd.qt
cinelerra-5.1/ffmpeg/video/dnxhr_444.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/dnxhr_hq.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/dnxhr_hqx.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/dnxhr_lb.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/dnxhr_sq.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/dv_ntsc.avi
cinelerra-5.1/ffmpeg/video/dv_pal.avi
cinelerra-5.1/ffmpeg/video/dv_pal.qt
cinelerra-5.1/ffmpeg/video/ffv1.avi [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/ffv1.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/flv_h264.flv [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/h263.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/h263p.mov [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/h265-10bit.mp4
cinelerra-5.1/ffmpeg/video/h265-12bit.mp4 [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/huffyuv_screencapture.mov
cinelerra-5.1/ffmpeg/video/mjpeg.avi [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/mjpeg_444.qt
cinelerra-5.1/ffmpeg/video/mpeg1.mpeg [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/mpeg2.mpeg [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/msmpeg4.avi
cinelerra-5.1/ffmpeg/video/mxf_DNxHR_proxy.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/mxf_avcintra_100.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/mxf_dv.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/mxf_h264_b.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/mxf_mpeg2.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/mxf_openjpeg2000.mxf [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/obs2youtube.mp4 [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/openjpeg.qt [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/prores.pro
cinelerra-5.1/ffmpeg/video/prores_4444.pro [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/prores_4444xq.pro [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/prores_hq.pro [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/prores_ks.pro
cinelerra-5.1/ffmpeg/video/prores_lt.pro [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/prores_proxy.pro
cinelerra-5.1/ffmpeg/video/prores_std.pro [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/xvid.avi
cinelerra-5.1/guicast/Makefile
cinelerra-5.1/guicast/bcbutton.C
cinelerra-5.1/guicast/bccmodels.C
cinelerra-5.1/guicast/bccmodels.h
cinelerra-5.1/guicast/bccolors.C
cinelerra-5.1/guicast/bccolors.h
cinelerra-5.1/guicast/bccolors.inc
cinelerra-5.1/guicast/bcdisplayinfo.C
cinelerra-5.1/guicast/bcdisplayinfo.h
cinelerra-5.1/guicast/bcdragbox.C [new file with mode: 0644]
cinelerra-5.1/guicast/bcdragbox.h [new file with mode: 0644]
cinelerra-5.1/guicast/bcdragbox.inc [new file with mode: 0644]
cinelerra-5.1/guicast/bcfilebox.C
cinelerra-5.1/guicast/bclistbox.C
cinelerra-5.1/guicast/bcmenubar.C
cinelerra-5.1/guicast/bcmenuitem.C
cinelerra-5.1/guicast/bcmenuitem.h
cinelerra-5.1/guicast/bcpot.C
cinelerra-5.1/guicast/bcresources.C
cinelerra-5.1/guicast/bcresources.h
cinelerra-5.1/guicast/bcsignals.C
cinelerra-5.1/guicast/bcslider.C
cinelerra-5.1/guicast/bctextbox.C
cinelerra-5.1/guicast/bctumble.C
cinelerra-5.1/guicast/bctumble.h
cinelerra-5.1/guicast/bcwindowbase.C
cinelerra-5.1/guicast/bcwindowbase.h
cinelerra-5.1/guicast/filesystem.C
cinelerra-5.1/guicast/guicast.h
cinelerra-5.1/guicast/linklist.h
cinelerra-5.1/guicast/units.C
cinelerra-5.1/guicast/units.h
cinelerra-5.1/guicast/vframe.C
cinelerra-5.1/guicast/vicon.C
cinelerra-5.1/guicast/vicon.h
cinelerra-5.1/info/plugins.txt
cinelerra-5.1/libzmpeg3/xfont.C
cinelerra-5.1/msg/txt
cinelerra-5.1/plugin_cuda
cinelerra-5.1/plugin_defs
cinelerra-5.1/plugins/720to480/720to480.C
cinelerra-5.1/plugins/Makefile
cinelerra-5.1/plugins/boxblur/boxblur.C
cinelerra-5.1/plugins/cdripper/cdripwindow.C
cinelerra-5.1/plugins/color3way/color3waywindow.C
cinelerra-5.1/plugins/colorspace/colorspace.C
cinelerra-5.1/plugins/compressormulti/comprmultigui.C
cinelerra-5.1/plugins/crikey/crikey.C
cinelerra-5.1/plugins/crikey/crikey.h
cinelerra-5.1/plugins/crikey/crikeywindow.C
cinelerra-5.1/plugins/graphic/graphic.C
cinelerra-5.1/plugins/histogram/debug [deleted file]
cinelerra-5.1/plugins/histogram/histogram.C
cinelerra-5.1/plugins/histogram/histogram.h
cinelerra-5.1/plugins/histogram/histogram.inc
cinelerra-5.1/plugins/histogram/histogramconfig.C
cinelerra-5.1/plugins/histogram/histogramconfig.h
cinelerra-5.1/plugins/histogram/histogramwindow.C
cinelerra-5.1/plugins/histogram/histogramwindow.h
cinelerra-5.1/plugins/histogram/histogramwindow.inc
cinelerra-5.1/plugins/histogram_bezier/bistogramwindow.C
cinelerra-5.1/plugins/motion/motion.C
cinelerra-5.1/plugins/motion/motion.h
cinelerra-5.1/plugins/motion/motionscan.C
cinelerra-5.1/plugins/motion/motionscan.h
cinelerra-5.1/plugins/motion/motionwindow.C
cinelerra-5.1/plugins/motion/motionwindow.h
cinelerra-5.1/plugins/motion/opencvwrapper.C [deleted file]
cinelerra-5.1/plugins/motion/opencvwrapper.h [deleted file]
cinelerra-5.1/plugins/motion/opencvwrapper.inc [deleted file]
cinelerra-5.1/plugins/normalize/normalizewindow.C
cinelerra-5.1/plugins/perspective/perspective.C
cinelerra-5.1/plugins/perspective/perspective.h
cinelerra-5.1/plugins/posterize/Makefile [new file with mode: 0644]
cinelerra-5.1/plugins/posterize/posterize.C [new file with mode: 0644]
cinelerra-5.1/plugins/posterize/posterize.h [new file with mode: 0644]
cinelerra-5.1/plugins/reframe/reframe.C
cinelerra-5.1/plugins/resample/resample.C
cinelerra-5.1/plugins/resamplert/resamplert.C
cinelerra-5.1/plugins/resamplert/resamplert.h
cinelerra-5.1/plugins/rotate/rotate.C
cinelerra-5.1/plugins/rotate/rotate.h
cinelerra-5.1/plugins/scale/scale.C
cinelerra-5.1/plugins/scale/scale.h
cinelerra-5.1/plugins/scale/scalewin.C
cinelerra-5.1/plugins/sketcher/sketcher.C
cinelerra-5.1/plugins/sketcher/sketcher.h
cinelerra-5.1/plugins/sketcher/sketcherwindow.C
cinelerra-5.1/plugins/svg/Makefile
cinelerra-5.1/plugins/svg/empty_svg.h [deleted file]
cinelerra-5.1/plugins/svg/new.svg [new file with mode: 0644]
cinelerra-5.1/plugins/svg/svg.C
cinelerra-5.1/plugins/svg/svgwin.C
cinelerra-5.1/plugins/synthesizer/synthesizer.C
cinelerra-5.1/plugins/theme_blond/blondtheme.C
cinelerra-5.1/plugins/theme_blond/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_blond/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_blond/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond/data/xpane_dn.png
cinelerra-5.1/plugins/theme_blond/data/xpane_hi.png
cinelerra-5.1/plugins/theme_blond/data/xpane_up.png
cinelerra-5.1/plugins/theme_blond/data/ypane_dn.png
cinelerra-5.1/plugins/theme_blond/data/ypane_hi.png
cinelerra-5.1/plugins/theme_blond/data/ypane_up.png
cinelerra-5.1/plugins/theme_blond_cv/blondcvtheme.C
cinelerra-5.1/plugins/theme_blond_cv/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_blond_cv/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_blond_cv/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/data/xpane_dn.png
cinelerra-5.1/plugins/theme_blond_cv/data/xpane_hi.png
cinelerra-5.1/plugins/theme_blond_cv/data/xpane_up.png
cinelerra-5.1/plugins/theme_blond_cv/data/ypane_dn.png
cinelerra-5.1/plugins/theme_blond_cv/data/ypane_hi.png
cinelerra-5.1/plugins/theme_blond_cv/data/ypane_up.png
cinelerra-5.1/plugins/theme_blue/bluetheme.C
cinelerra-5.1/plugins/theme_blue/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_blue/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_blue/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/data/xpane_dn.png
cinelerra-5.1/plugins/theme_blue/data/xpane_hi.png
cinelerra-5.1/plugins/theme_blue/data/xpane_up.png
cinelerra-5.1/plugins/theme_blue/data/ypane_dn.png
cinelerra-5.1/plugins/theme_blue/data/ypane_hi.png
cinelerra-5.1/plugins/theme_blue/data/ypane_up.png
cinelerra-5.1/plugins/theme_blue_dot/bluedottheme.C
cinelerra-5.1/plugins/theme_blue_dot/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_blue_dot/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/patch_checked.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/patch_checkedhi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/patch_dn.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/patch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/patch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_blue_dot/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/data/xpane_dn.png
cinelerra-5.1/plugins/theme_blue_dot/data/xpane_hi.png
cinelerra-5.1/plugins/theme_blue_dot/data/xpane_up.png
cinelerra-5.1/plugins/theme_blue_dot/data/ypane_dn.png
cinelerra-5.1/plugins/theme_blue_dot/data/ypane_hi.png
cinelerra-5.1/plugins/theme_blue_dot/data/ypane_up.png
cinelerra-5.1/plugins/theme_bright/brighttheme.C
cinelerra-5.1/plugins/theme_bright/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_bright/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_bright/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/data/xpane_dn.png
cinelerra-5.1/plugins/theme_bright/data/xpane_hi.png
cinelerra-5.1/plugins/theme_bright/data/xpane_up.png
cinelerra-5.1/plugins/theme_bright/data/ypane_dn.png
cinelerra-5.1/plugins/theme_bright/data/ypane_hi.png
cinelerra-5.1/plugins/theme_bright/data/ypane_up.png
cinelerra-5.1/plugins/theme_cakewalk/cakewalk.C
cinelerra-5.1/plugins/theme_cakewalk/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_cakewalk/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_cakewalk/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/data/xpane_dn.png
cinelerra-5.1/plugins/theme_cakewalk/data/xpane_hi.png
cinelerra-5.1/plugins/theme_cakewalk/data/xpane_up.png
cinelerra-5.1/plugins/theme_cakewalk/data/ypane_dn.png
cinelerra-5.1/plugins/theme_cakewalk/data/ypane_hi.png
cinelerra-5.1/plugins/theme_cakewalk/data/ypane_up.png
cinelerra-5.1/plugins/theme_hulk/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_hulk/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_hulk/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/xpane_dn.png
cinelerra-5.1/plugins/theme_hulk/data/xpane_hi.png
cinelerra-5.1/plugins/theme_hulk/data/xpane_up.png
cinelerra-5.1/plugins/theme_hulk/data/ypane_dn.png
cinelerra-5.1/plugins/theme_hulk/data/ypane_hi.png
cinelerra-5.1/plugins/theme_hulk/data/ypane_up.png
cinelerra-5.1/plugins/theme_hulk/hulktheme.C
cinelerra-5.1/plugins/theme_neophyte/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_neophyte/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_neophyte/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/data/xpane_dn.png
cinelerra-5.1/plugins/theme_neophyte/data/xpane_hi.png
cinelerra-5.1/plugins/theme_neophyte/data/xpane_up.png
cinelerra-5.1/plugins/theme_neophyte/data/ypane_dn.png
cinelerra-5.1/plugins/theme_neophyte/data/ypane_hi.png
cinelerra-5.1/plugins/theme_neophyte/data/ypane_up.png
cinelerra-5.1/plugins/theme_neophyte/neophyte.C
cinelerra-5.1/plugins/theme_pinklady/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_pinklady/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_pinklady/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/data/xpane_dn.png
cinelerra-5.1/plugins/theme_pinklady/data/xpane_hi.png
cinelerra-5.1/plugins/theme_pinklady/data/xpane_up.png
cinelerra-5.1/plugins/theme_pinklady/data/ypane_dn.png
cinelerra-5.1/plugins/theme_pinklady/data/ypane_hi.png
cinelerra-5.1/plugins/theme_pinklady/data/ypane_up.png
cinelerra-5.1/plugins/theme_pinklady/pinkladytheme.C
cinelerra-5.1/plugins/theme_suv/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_suv/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/expandpatch_checked.png
cinelerra-5.1/plugins/theme_suv/data/expandpatch_checkedhi.png
cinelerra-5.1/plugins/theme_suv/data/expandpatch_dn.png
cinelerra-5.1/plugins/theme_suv/data/expandpatch_hi.png
cinelerra-5.1/plugins/theme_suv/data/expandpatch_up.png
cinelerra-5.1/plugins/theme_suv/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/new_bg.png
cinelerra-5.1/plugins/theme_suv/data/new_bigbutton_dn.png
cinelerra-5.1/plugins/theme_suv/data/new_bigbutton_hi.png
cinelerra-5.1/plugins/theme_suv/data/new_bigbutton_up.png
cinelerra-5.1/plugins/theme_suv/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_suv/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/data/xpane_dn.png
cinelerra-5.1/plugins/theme_suv/data/xpane_hi.png
cinelerra-5.1/plugins/theme_suv/data/xpane_up.png
cinelerra-5.1/plugins/theme_suv/data/ypane_dn.png
cinelerra-5.1/plugins/theme_suv/data/ypane_hi.png
cinelerra-5.1/plugins/theme_suv/data/ypane_up.png
cinelerra-5.1/plugins/theme_suv/suv.C
cinelerra-5.1/plugins/theme_unflat/data/autorange_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/autorange_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/autorange_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/autorange_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/clapper.png [new file with mode: 0755]
cinelerra-5.1/plugins/theme_unflat/data/edge_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/edge_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/gang0.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/gang1.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/gang2.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/masterpatch.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/patchbay_bg.png
cinelerra-5.1/plugins/theme_unflat/data/span_off.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/span_on.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/tan_bump.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/tan_free.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/tan_tangent.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/tumblepatch_bottom.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/tumblepatch_hi.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/tumblepatch_top.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/tumblepatch_up.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/data/xpane_dn.png
cinelerra-5.1/plugins/theme_unflat/data/xpane_hi.png
cinelerra-5.1/plugins/theme_unflat/data/xpane_up.png
cinelerra-5.1/plugins/theme_unflat/data/ypane_dn.png
cinelerra-5.1/plugins/theme_unflat/data/ypane_hi.png
cinelerra-5.1/plugins/theme_unflat/data/ypane_up.png
cinelerra-5.1/plugins/theme_unflat/unflattheme.C
cinelerra-5.1/plugins/timeblur/Makefile [new file with mode: 0644]
cinelerra-5.1/plugins/timeblur/timeblur.C [new file with mode: 0644]
cinelerra-5.1/plugins/timeblur/timeblur.h [new file with mode: 0644]
cinelerra-5.1/plugins/timeblur/timeblurwindow.C [new file with mode: 0644]
cinelerra-5.1/plugins/timeblur/timeblurwindow.h [new file with mode: 0644]
cinelerra-5.1/plugins/timelapsehelper/Makefile [new file with mode: 0644]
cinelerra-5.1/plugins/timelapsehelper/timelapsehelper.C [new file with mode: 0644]
cinelerra-5.1/plugins/timestretch/timestretch.C
cinelerra-5.1/plugins/titler/titler.C
cinelerra-5.1/plugins/titler/titler.h
cinelerra-5.1/plugins/titler/titlerwindow.C
cinelerra-5.1/plugins/titler/titlerwindow.h
cinelerra-5.1/plugins/tracer/tracer.C
cinelerra-5.1/plugins/tracer/tracer.h
cinelerra-5.1/plugins/tracer/tracerwindow.C
cinelerra-5.1/po/cin.po
cinelerra-5.1/po/es.po
cinelerra-5.1/po/fr.po
cinelerra-5.1/po/ru.po
cinelerra-5.1/thirdparty/Makefile
cinelerra-5.1/thirdparty/downloads.txt
cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch0 [deleted file]
cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch2 [deleted file]
cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch4 [deleted file]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch0 [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch1 [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch1 with 100% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch2 [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch3 [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch3 with 70% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch5 [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch5 with 100% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch6 [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch6 with 100% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch7 [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch7 with 100% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patch8 [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patch8 with 73% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patchA [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.patchA with 100% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.patchB [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/ffmpeg-4.3.tar.xz [moved from cinelerra-5.1/thirdparty/src/ffmpeg-4.2.tar.xz with 53% similarity]
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch0
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch1
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch2
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch4
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch5
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch6
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch7
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch8
cinelerra-5.1/thirdparty/src/ffmpeg.git.patch9
cinelerra-5.1/thirdparty/src/ffmpeg.git.patchA [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/ffnvcodec.tar.xz
cinelerra-5.1/thirdparty/src/libaom-v1.0.0.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/libaom-v3.0.0.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libaom-v3.1.1.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libjpeg-turbo-2.0.4.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/libjpeg-turbo-2.0.5.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libjpeg-turbo-2.1.0.tar.gz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libvorbis-1.3.6.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/libvorbis-1.3.7.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libvpx-1.8.1.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/libvpx-1.8.2.patch1 [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libvpx-1.8.2.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/lilv-0.24.6.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/lilv-0.24.8.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/lv2-1.16.0.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/lv2-1.18.0.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/openexr-2.4.1.patch1 [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/openjpeg-2.3.1.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/openjpeg-2.4.0.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/serd-0.30.2.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/serd-0.30.4.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/x264-snapshot-20210615-master.patch1 [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/x264-snapshot-20210615-master.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/x265_3.2.1.tar.gz [deleted file]
cinelerra-5.1/thirdparty/src/x265_3.4.tar.xz [new file with mode: 0644]
cinelerra-5.1/tips/tips.en
cinelerra-5.1/tips/tips.es
cinelerra-5.1/tips/tips.ru

index 4a4c0e5849c5e407d399d990291220de4ab27190..ee236e3479b72e05621d5c68f2dac14007520f3c 100644 (file)
@@ -94,5 +94,5 @@
 <KEYFRAME TITLE="gear360 sideways, 7k"><SPHERECAM ENABLED_0=1 FOV_0=194 CENTER_X_0=2.520000e+01 CENTER_Y_0=5.139998e+01 ROTATE_X_0=50 ROTATE_Y_0=50 ROTATE_Z_0=90 ENABLED_1=1 FOV_1=1.946000e+02 CENTER_X_1=7.499999e+01 CENTER_Y_1=5.079997e+01 ROTATE_X_1=0 ROTATE_Y_1=4.990000e+01 ROTATE_Z_1=-8.900002e+01 FEATHER=1 DRAW_GUIDES=0 MODE=1></KEYFRAME>
 </PLUGIN>
 <PLUGIN TITLE=F_drawgrid>
-<KEYFRAME TITLE=rule_of_3rds>&lt;F_DRAWGRID x=-1 y=-1 width=iw/3 w=iw/3 height=ih/3 h=ih/3 color=invert c=invert thickness=2 t=2&gt;</KEYFRAME>
+<KEYFRAME TITLE=rule_of_3rds><F_DRAWGRID x=-1 y=-1 width=iw/3 w=iw/3 height=ih/3 h=ih/3 color=invert c=invert thickness=2 t=2></KEYFRAME>
 </PLUGIN>
index 2982fddae8819822702e2d62206807b4f87b423e..ea53b474a784e07af0dc912f9fc6e7cba497b662 100644 (file)
@@ -43,7 +43,7 @@ bin_install:  install-recursive
          if [ $$d = picon/cinfinity ]; then continue; fi; \
          cp -a $$d bin/plugins/picon/.; \
        done
-       cp -a db/utils/new_db "bin/cin_db" || true
+       test ! -f db/utils/new_db || cp -a db/utils/new_db "bin/cin_db"
 
 bin_uninstall:
        rm -rf bin
index a985c2de853d2a2d165a77ad6b129dfdde8cd215..d8d61c52436449bffe99c57b68717e68ee295988 100644 (file)
@@ -1,7 +1,7 @@
 # Maintainer: goodguy <lists.cinelerra-gg.org>
 pkgname=cin
 pkgver=5.1
-pkgrel=20200430
+pkgrel=20201031
 pkgdesc="Cinelerra git://git.cinelerra-gg.org/goodguy/cinelerra.git ($pkgrel)"
 arch=('x86_64')
 url="https://www.cinelerra-gg.org"
diff --git a/cinelerra-5.1/blds/bld_appimage.sh b/cinelerra-5.1/blds/bld_appimage.sh
new file mode 100644 (file)
index 0000000..a2378d7
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# this should bascically be the same as a static build, but the 
+# "make install" is followed by the appimage creation. After the
+# install does its work, the bin directory and subdirectories 
+# contain the whole application.
+
+# Install linuxdeploy (CLI version). Download from
+# https://github.com/linuxdeploy/linuxdeploy/releases/continuous . It is an
+# AppImage, best to use a directory bin under your home directory for all
+# AppImages, because at log-in time this is put in the path if it exists.
+
+
+( ./autogen.sh
+  ./configure --with-single-user --with-booby --enable-static-build
+  make && make install ) 2>&1 | tee log
+mv Makefile Makefile.cfg
+cp Makefile.devel Makefile
+
+mkdir AppDir                # create lowest level
+mkdir AppDir/usr
+
+cp -r bin AppDir/usr/    # copy whole of bin directory
+
+# We need to specify all executables, so linuxdeploy can pick up dependencies.
+# Any executable code in other places in not picked up (yet).
+linuxdeploy-x86_64.AppImage --appdir=AppDir -o appimage -d image/cin.desktop -i image/cin.svg -e bin/cin -e bin/mpeg2enc -e bin/mplex -e bin/hveg2enc -e bin/lv2ui -e bin/bdwrite -e bin/zmpeg3toc -e bin/zmpeg3show -e bin/zmpeg3cat -e bin/zmpeg3ifochk -e bin/zmpeg3cc2txt -e bin/mplexlo 2>&1 | tee appimage.log
+
+# There is now an appimage in the cinelerra-5.1 directory. 
index 93061b9494fc398da0e90e991c9db1c453624b95..beb042cf80d022288a7d8e59ec249adcc158c60f 100644 (file)
@@ -1,4 +1,4 @@
-%define ver 20200430
+%define ver 20201031
 %define cin cinelerra
 Summary: Multimedia Editing and construction
 
index 077a2fa0bb252d11ff096e38379240828a6081ec..58df16bf853854b5ba3e315548ad7e71dc58c542 100644 (file)
@@ -1,4 +1,4 @@
-cin (1:5.1.20200430) unstable; urgency=low
+cin (1:5.1.20201031) unstable; urgency=low
 
   [ guy goode ]
 
index ebb2fceff5a683dc96e84cf74be07feb724d038a..62bc980d0a4d6c30bd8a6a74695d441bb8da177e 100644 (file)
@@ -1,7 +1,7 @@
 Source: cin
 Section: video
 Priority: optional
-Standards-Version: 5.1.20200430
+Standards-Version: 5.1.20201031
 Maintainer: mailing list <cin@lists.cinelerra-gg.org>
 Homepage: https://www.cinelerra-gg.org/
 Build-Depends:
index 3b58cad65914515034410c0b2a08ee86822dc5a1..69c29a477fc3f0e739f3b04876cf0198ea2d7bb5 100644 (file)
@@ -48,6 +48,7 @@ void AAutomation::create_objects()
 
        autos[AUTOMATION_SPEED] = new FloatAutos(edl, track, 1.0);
        autos[AUTOMATION_SPEED]->create_objects();
+       ((FloatAutos*)autos[AUTOMATION_SPEED])->set_float_min(SPEED_MIN);
 
        autos[AUTOMATION_PAN] = new PanAutos(edl, track);
        autos[AUTOMATION_PAN]->create_objects();
index f6fdde4ae21ced66cbf1fe0743de976c53e328a5..03a6f9d03f57eaffa9df6a1a2a029c79f2177306 100644 (file)
@@ -36,6 +36,8 @@ const char *AboutPrefs::build_timestamp = COMPILEDATE;
 AboutPrefs::AboutPrefs(MWindow *mwindow, PreferencesWindow *pwindow)
  : PreferencesDialog(mwindow, pwindow)
 {
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("About");
 }
 
 AboutPrefs::~AboutPrefs()
index 78cef42dfb012925800523987fc2c844b317f57d..74d62d8dc1fb1dd3024e88f2ec5c7202f6843aef 100644 (file)
@@ -117,6 +117,7 @@ int ADevicePrefs::initialize(int creation)
                dialog->add_subwindow(menu = new ADriverMenu(x,
                        y + yS(10), this, (mode == MODERECORD), driver));
                menu->create_objects();
+               menu->context_help_set_keyword("Audio Out section");
        }
 
        switch(*driver) {
@@ -321,11 +322,13 @@ int ADevicePrefs::create_oss_objs()
                        path_title = new BC_Title(x1, y, _("Device path:"),
                                MEDIUMFONT, resources->text_default);
                        dialog->add_subwindow(path_title);
+                       path_title->context_help_set_keyword("Audio Out section");
                }
 
                oss_path[i] = new ADeviceTextBox(
                        x1, y1 + path_title->get_h() + margin, output_char);
                dialog->add_subwindow(oss_path[i]);
+               oss_path[i]->context_help_set_keyword("Audio Out section");
                x1 += oss_path[i]->get_w() + margin;
                if(i == 0) {
                        switch(mode) {
@@ -342,6 +345,7 @@ int ADevicePrefs::create_oss_objs()
                        bits_title = new BC_Title(x1, y, _("Bits:"),
                                        MEDIUMFONT, resources->text_default);
                        dialog->add_subwindow(bits_title);
+                       bits_title->context_help_set_keyword("Audio Out section");
                        oss_bits = new BitsPopup(dialog,
                                x1, y1 + bits_title->get_h() + margin, 
                                output_int, 0, 0, 0, 0, 1);
@@ -392,6 +396,7 @@ int ADevicePrefs::create_alsa_objs()
        path_title = new BC_Title(x1, y, _("Device:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(path_title);
+       path_title->context_help_set_keyword("Audio Out section");
        y1 += path_title->get_h() + margin;
        alsa_device = new ALSADevice(dialog,
                x1, y1, output_char, alsa_drivers);
@@ -413,6 +418,7 @@ int ADevicePrefs::create_alsa_objs()
        bits_title = new BC_Title(x1, y, _("Bits:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(bits_title);
+       bits_title->context_help_set_keyword("Audio Out section");
        y1 = y + bits_title->get_h() + margin;
        alsa_bits = new BitsPopup(dialog,
                        x1, y1, output_int, 0, 0, 0, 0, 1);
@@ -426,6 +432,7 @@ int ADevicePrefs::create_alsa_objs()
                                &out_config->interrupt_workaround,
                                _("Stop playback locks up."));
                dialog->add_subwindow(alsa_workaround);
+               alsa_workaround->context_help_set_keyword("Audio Out section");
        }
 #endif
        return 0;
@@ -452,8 +459,10 @@ int ADevicePrefs::create_esound_objs()
        server_title = new BC_Title(x1, y, _("Server:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(server_title);
+       server_title->context_help_set_keyword("Audio Out section");
        server = new ADeviceTextBox(x1, y + yS(20), output_char);
        dialog->add_subwindow(server);
+       server->context_help_set_keyword("Audio Out section");
 
        switch(mode) {
        case MODEPLAY:
@@ -470,8 +479,10 @@ int ADevicePrefs::create_esound_objs()
        port_title = new BC_Title(x1, y, _("Port:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(port_title);
+       port_title->context_help_set_keyword("Audio Out section");
        port = new ADeviceIntBox(x1, y + yS(20), output_int);
        dialog->add_subwindow(port);
+       port->context_help_set_keyword("Audio Out section");
        return 0;
 }
 
@@ -501,7 +512,9 @@ int ADevicePrefs::create_firewire_objs()
 
        if(output_char) {
                dialog->add_subwindow(path_title = new BC_Title(x1, y, _("Device Path:"), MEDIUMFONT, resources->text_default));
+               path_title->context_help_set_keyword("Audio Out section");
                dialog->add_subwindow(firewire_path = new ADeviceTextBox(x1, y + ys20, output_char));
+               firewire_path->context_help_set_keyword("Audio Out section");
                x1 += firewire_path->get_w() + xs5;
        }
 
@@ -523,8 +536,10 @@ int ADevicePrefs::create_firewire_objs()
        port_title = new BC_Title(x1, y, _("Port:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(port_title);
+       port_title->context_help_set_keyword("Audio Out section");
        firewire_port = new ADeviceIntBox(x1, y + ys20, output_int);
        dialog->add_subwindow(firewire_port);
+       firewire_port->context_help_set_keyword("Audio Out section");
 
        x1 += firewire_port->get_w() + xs5;
 
@@ -543,8 +558,10 @@ int ADevicePrefs::create_firewire_objs()
        channel_title = new BC_Title(x1, y, _("Channel:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(channel_title);
+       channel_title->context_help_set_keyword("Audio Out section");
        firewire_channel = new ADeviceIntBox(x1, y + ys20, output_int);
        dialog->add_subwindow(firewire_channel);
+       firewire_channel->context_help_set_keyword("Audio Out section");
        x1 += firewire_channel->get_w() + xs5;
 
 // Syt offset
@@ -567,8 +584,10 @@ int ADevicePrefs::create_firewire_objs()
                syt_title = new BC_Title(x1, y, _("Syt Offset:"),
                                MEDIUMFONT, resources->text_default);
                dialog->add_subwindow(syt_title);
+               syt_title->context_help_set_keyword("Audio Out section");
                firewire_syt = new ADeviceIntBox(x1, y + ys20, output_int);
                dialog->add_subwindow(firewire_syt);
+               firewire_syt->context_help_set_keyword("Audio Out section");
                x1 += firewire_syt->get_w() + xs5;
        }
 
@@ -587,12 +606,15 @@ int ADevicePrefs::create_dvb_objs()
        dvb_adapter_title = new BC_Title(x1, y2, _("DVB Adapter:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(dvb_adapter_title);
+       dvb_adapter_title->context_help_set_keyword("Audio Out section");
        dvb_adapter_path = new ADeviceTextBox(x1, y1, output_char);
        dialog->add_subwindow(dvb_adapter_path);
+       dvb_adapter_path->context_help_set_keyword("Audio Out section");
        int x2 = x1 + dvb_adapter_path->get_w() + xS(5);
        dvb_device_title = new BC_Title(x2, y2, _("dev:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(dvb_device_title);
+       dvb_device_title->context_help_set_keyword("Audio Out section");
        int *output_int = &in_config->dvb_in_device;
        dvb_adapter_device = new ADeviceTumbleBox(this, x2, y1, output_int, 0, 9, xS(20));
        dvb_adapter_device->create_objects();
@@ -600,6 +622,7 @@ int ADevicePrefs::create_dvb_objs()
        bits_title = new BC_Title(x2, y2, _("Bits:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(bits_title);
+       bits_title->context_help_set_keyword("Audio Out section");
        output_int = &in_config->dvb_in_bits;
        dvb_bits = new BitsPopup(dialog, x2, y1, output_int, 0, 0, 0, 0, 1);
        dvb_bits->create_objects();
@@ -607,6 +630,7 @@ int ADevicePrefs::create_dvb_objs()
        output_int =  &in_config->follow_audio;
        follow_audio_config = new BC_CheckBox(x1, y1, output_int, _("Follow audio config"));
        dialog->add_subwindow(follow_audio_config);
+       follow_audio_config->context_help_set_keyword("Audio Out section");
        return 0;
 }
 
@@ -619,6 +643,7 @@ int ADevicePrefs::create_v4l2mpeg_objs()
        bits_title = new BC_Title(x1, y2, _("Bits:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(bits_title);
+       bits_title->context_help_set_keyword("Audio Out section");
        int *output_int = &in_config->v4l2_in_bits;
        v4l2_bits = new BitsPopup(dialog, x1, y1, output_int, 0, 0, 0, 0, 1);
        v4l2_bits->create_objects();
@@ -626,6 +651,7 @@ int ADevicePrefs::create_v4l2mpeg_objs()
        follow_audio_config = new BC_CheckBox(x1, y1,
                        &in_config->follow_audio, _("Follow audio config"));
        dialog->add_subwindow(follow_audio_config);
+       follow_audio_config->context_help_set_keyword("Audio Out section");
        return 0;
 }
 
@@ -646,8 +672,10 @@ int ADevicePrefs::create_pulse_objs()
        x1 += menu->get_w() + xS(5);
        dialog->add_subwindow(server_title = new BC_Title(x1, y1,
                _("Server (blank for default):")));
+       server_title->context_help_set_keyword("Audio Out section");
        y1 += server_title->get_h() + yS(5);
        dialog->add_subwindow(server = new ADeviceTextBox(x1, y1, output_char));
+       server->context_help_set_keyword("Audio Out section");
 #endif
        return 0;
 }
index 25af1c983a7d0493f429b8a5ee98bfa9d6411c04..2842e062c1c991906f9ea0bfde745ae7e183e3e1 100644 (file)
@@ -242,8 +242,8 @@ void AffineUnit::process_package(LoadPackage *package)
        AffinePackage *pkg = (AffinePackage*)package;
        int min_in_x = server->in_x;
        int min_in_y = server->in_y;
-       int max_in_x = server->in_x + server->in_w - 1;
-       int max_in_y = server->in_y + server->in_h - 1;
+       int max_in_x = server->in_x + server->in_w;
+       int max_in_y = server->in_y + server->in_h;
 
 
 // printf("AffineUnit::process_package %d %d %d %d %d\n",
@@ -690,7 +690,7 @@ AffineEngine::AffineEngine(int total_clients, int total_packages)
 
 void AffineEngine::init_packages()
 {
-       int y1 = 0, npkgs = get_total_packages();
+       int y1 = out_y, npkgs = get_total_packages();
        for( int i=0; i<npkgs; ) {
                AffinePackage *package = (AffinePackage*)get_package(i);
                int y2 = out_y + (out_h * ++i / npkgs);
index 5de58f4e3a49d21e45ea620fe0fed9e84204cf40..d8fb4396437ecea793686c20b5d55539880bdfd6 100644 (file)
@@ -37,6 +37,7 @@
 #include "filexml.h"
 #include "floatautos.h"
 #include "language.h"
+#include "mainerror.h"
 #include "module.h"
 #include "patch.h"
 #include "plugin.h"
@@ -502,7 +503,7 @@ if(debug) printf("AModule::render %d %jd\n", __LINE__, fragment_len);
 // Clamp to end of transition
                        int64_t transition_len = 0;
                        Plugin *transition = get_edl()->tracks->plugin_exists(transition_id);
-                       if( transition && previous_edit ) {
+                       if( transition && transition->on && previous_edit ) {
                                transition_len = transition->length * sample_rate / edl_rate;
                                if(direction == PLAY_FORWARD &&
                                        start_position < edit_startproject + transition_len &&
@@ -534,7 +535,7 @@ if(debug) printf("AModule::render %d\n", __LINE__);
 
 
 // Read transition into temp and render
-                       if(transition && previous_edit)
+                       if(transition && transition->on && previous_edit)
                        {
                                int64_t previous_startproject = previous_edit->startproject *
                                        sample_rate /
@@ -592,13 +593,13 @@ if(debug) printf("AModule::render %d %jd\n", __LINE__, fragment_len);
                                        {
                                                current_position = start_position - edit_startproject;
                                        }
-
-                                       transition_server->process_transition(
-                                               transition_temp,
-                                               &output,
-                                               current_position,
-                                               transition_fragment_len,
-                                               transition->length);
+                                       if( transition_server ) {
+                                               transition_server->process_transition(
+                                                       transition_temp, &output, current_position,
+                                                       transition_fragment_len, transition->length);
+                                       }
+                                       else
+                                               eprintf("missing transition plugin: %s\n", transition->title);
 
 // Reverse output buffer here so transitions always render forward.
                                        if(direction == PLAY_REVERSE)
index 0e8adca2f159ba7ce8b32a8ec473df6c8be9efa9..678254abfbcc465c0ec4e45f62c8e2101ac11cb3 100644 (file)
@@ -182,14 +182,12 @@ void APatchGUI::update_faders(float v)
        double position = mwindow->edl->local_session->get_selectionstart(1);
        Autos *fade_autos = atrack->automation->autos[AUTOMATION_FADE];
        int need_undo = !fade_autos->auto_exists_for_editing(position);
-
        mwindow->undo->update_undo_before(_("fade"), need_undo ? 0 : this);
        FloatAuto *current = (FloatAuto*)fade_autos->get_auto_for_editing(position);
-       float change = v - current->get_value();
-       current->set_value(v);
-
-       if( track->gang && track->record )
-               patchbay->synchronize_faders(change, TRACK_AUDIO, track);
+       float change = v - current->get_value(edge);
+       current->bump_value(v, edge, span);
+       if( track->is_ganged() && track->is_armed() )
+               patchbay->synchronize_faders(change, TRACK_AUDIO, track, edge, span);
        mwindow->undo->update_undo_after(_("fade"), LOAD_AUTOMATION);
        change_source = 0;
 
@@ -220,33 +218,64 @@ int AFadePatch::handle_event()
        return 1;
 }
 
-AKeyFadePatch::AKeyFadePatch(MWindow *mwindow, APatchGUI *patch, int x, int y)
- : BC_SubWindow(x,y, xS(200),yS(20), GWindowGUI::auto_colors[AUTOMATION_FADE])
+AKeyFadePatch::AKeyFadePatch(MWindow *mwindow, APatchGUI *gui,
+                       int bump, int x, int y)
+ : BC_SubWindow(x,y, xS(200)+4,yS(bump ? 50 : 24)+4,
+               GWindowGUI::auto_colors[AUTOMATION_FADE])
 {
        this->mwindow = mwindow;
-       this->patch = patch;
+       this->gui = gui;
+}
+AKeyFadePatch::~AKeyFadePatch()
+{
 }
 
 void AKeyFadePatch::create_objects()
 {
-       int x = 0, y = 0;
-       float v = mwindow->get_float_auto(patch, AUTOMATION_FADE)->get_value();
+       int x = 2, x1 = x, y = 0, dy = 0;
+       FloatAuto *fade_auto = mwindow->get_float_auto(gui, AUTOMATION_FADE);
+       float v = fade_auto->get_value(gui->edge);
        add_subwindow(akey_fade_text = new AKeyFadeText(this, x, y, xS(64), v));
        x += akey_fade_text->get_w();
+       dy = bmax(dy, akey_fade_text->get_h());
        VFrame **lok_images = mwindow->theme->get_image_set("lok");
-       int w1 = get_w() - x - lok_images[0]->get_w();
+       int w1 = get_w()-2 - x - lok_images[0]->get_w();
        add_subwindow(akey_fade_slider = new AKeyFadeSlider(this, x, y, w1, v));
        x += akey_fade_slider->get_w();
+       dy = bmax(dy, akey_fade_slider->get_h());
        add_subwindow(akey_fade_ok = new AKeyFadeOK(this, x, y, lok_images));
+       dy = bmax(dy, akey_fade_ok->get_h());
+       if( fade_auto->is_bump() ) {
+               y += dy;
+               set_color(get_resources()->get_bg_color());
+               draw_box(0,y, get_w(),get_h());
+               add_subwindow(auto_edge = new AKeyPatchAutoEdge(mwindow, this, x1, y));
+               x1 += auto_edge->get_w() + xS(15);
+               add_subwindow(auto_span = new AKeyPatchAutoSpan(mwindow, this, x1, y));
+       }
+       draw_3d_border(0,0, get_w(), get_h(), 0);
        activate();
        show_window();
 }
 
+void AKeyFadePatch::set_edge(int edge)
+{
+       gui->edge = edge;
+       FloatAuto *fade_auto = mwindow->get_float_auto(gui, AUTOMATION_FADE);
+       float v = fade_auto->get_value(edge);
+       update(v);
+}
+
+void AKeyFadePatch::set_span(int span)
+{
+       gui->span = span;
+}
+
 void AKeyFadePatch::update(float v)
 {
        akey_fade_text->update(v);
        akey_fade_slider->update(v);
-       patch->update_faders(v);
+       gui->update_faders(v);
 }
 
 AKeyFadeOK::AKeyFadeOK(AKeyFadePatch *akey_fade_patch, int x, int y, VFrame **images)
@@ -257,9 +286,8 @@ AKeyFadeOK::AKeyFadeOK(AKeyFadePatch *akey_fade_patch, int x, int y, VFrame **im
 
 int AKeyFadeOK::handle_event()
 {
-       MWindowGUI *mgui = akey_fade_patch->mwindow->gui;
-       delete mgui->keyvalue_popup;
-       mgui->keyvalue_popup = 0;
+       MWindow *mwindow = akey_fade_patch->mwindow;
+       mwindow->gui->close_keyvalue_popup();
        return 1;
 }
 
@@ -278,7 +306,7 @@ int AKeyFadeText::handle_event()
 }
 
 AKeyFadeSlider::AKeyFadeSlider(AKeyFadePatch *akey_fade_patch, int x, int y, int w, float v)
- : AFadePatch(akey_fade_patch->patch, x, y, w, v)
+ : AFadePatch(akey_fade_patch->gui, x, y, w, v)
 {
        this->akey_fade_patch = akey_fade_patch;
 }
@@ -310,19 +338,13 @@ int APanPatch::handle_event()
        double position = mwindow->edl->local_session->get_selectionstart(1);
        Autos *pan_autos = patch->atrack->automation->autos[AUTOMATION_PAN];
        int need_undo = !pan_autos->auto_exists_for_editing(position);
-
        mwindow->undo->update_undo_before(_("pan"), need_undo ? 0 : this);
-
        current = (PanAuto*)pan_autos->get_auto_for_editing(position);
-
        current->handle_x = get_stick_x();
        current->handle_y = get_stick_y();
        memcpy(current->values, get_values(), sizeof(float) * mwindow->edl->session->audio_channels);
-
        mwindow->undo->update_undo_after(_("pan"), LOAD_AUTOMATION);
-
        mwindow->sync_parameters(CHANGE_PARAMS);
-
        if( need_undo && mwindow->edl->session->auto_conf->autos[AUTOMATION_PAN] ) {
                mwindow->gui->draw_overlays(1);
        }
@@ -368,9 +390,43 @@ AMixPatch::AMixPatch(MWindow *mwindow, APatchGUI *patch, int x, int y)
  : MixPatch(mwindow, patch, x, y)
 {
        set_tooltip(_("Mixer"));
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Recover Mixer Windows");
 }
 
 AMixPatch::~AMixPatch()
 {
 }
 
+AKeyPatchAutoEdge::AKeyPatchAutoEdge(MWindow *mwindow,
+               AKeyFadePatch *patch, int x, int y)
+ : BC_Toggle(x, y, mwindow->theme->get_image_set("bump_edge"),
+                patch->gui->edge,_("Edge"))
+{
+       this->mwindow = mwindow;
+       this->patch = patch;
+       set_tooltip(_("Bump uses left edge"));
+}
+
+int AKeyPatchAutoEdge::handle_event()
+{
+       patch->set_edge(get_value());
+       return 1;
+}
+
+AKeyPatchAutoSpan::AKeyPatchAutoSpan(MWindow *mwindow,
+               AKeyFadePatch *patch, int x, int y)
+ :  BC_Toggle(x, y, mwindow->theme->get_image_set("bump_span"),
+               patch->gui->span,_("Span"))
+{
+       this->mwindow = mwindow;
+       this->patch = patch;
+       set_tooltip(_("Bump spans to next"));
+}
+
+int AKeyPatchAutoSpan::handle_event()
+{
+       patch->set_span(get_value());
+       return 1;
+}
+
index 5b8411a43762677fc4da49c2f5ec1120a31ba552..a9bee09529dda94267225531f257ee51746f7423 100644 (file)
@@ -59,15 +59,21 @@ public:
 class AKeyFadePatch : public BC_SubWindow
 {
 public:
-       AKeyFadePatch(MWindow *mwindow, APatchGUI *patch, int x, int y);
+       AKeyFadePatch(MWindow *mwindow, APatchGUI *patch,
+                       int bump, int x, int y);
+       ~AKeyFadePatch();
        void create_objects();
+       void set_edge(int edge);
+       void set_span(int span);
        void update(float v);
 
        MWindow *mwindow;
-       APatchGUI *patch;
+       APatchGUI *gui;
        AKeyFadeOK *akey_fade_ok;
        AKeyFadeText *akey_fade_text;
        AKeyFadeSlider *akey_fade_slider;
+       AKeyPatchAutoEdge *auto_edge;
+       AKeyPatchAutoSpan *auto_span;
 };
 
 class AKeyFadeOK : public BC_Button
@@ -131,4 +137,22 @@ public:
        ~AMixPatch();
 };
 
+class AKeyPatchAutoEdge : public BC_Toggle
+{
+public:
+       AKeyPatchAutoEdge(MWindow *mwindow, AKeyFadePatch *patch, int x, int y);
+       int handle_event();
+       MWindow *mwindow;
+       AKeyFadePatch *patch;
+};
+
+class AKeyPatchAutoSpan : public BC_Toggle
+{
+public:
+       AKeyPatchAutoSpan(MWindow *mwindow, AKeyFadePatch *patch, int x, int y);
+       int handle_event();
+       MWindow *mwindow;
+       AKeyFadePatch *patch;
+};
+
 #endif
index 866a167df4f21183228a0b7dccdbb466489d180b..6a62b83efeeb48ed5b63546f12848f3579c5f0c3 100644 (file)
@@ -36,5 +36,7 @@ class APanPatch;
 class AKeyPanPatch;
 class AMeterPatch;
 class AMixPatch;
+class AKeyPatchAutoEdge;
+class AKeyPatchAutoSpan;
 
 #endif
index cb0279af049029c02861cfc183700e85052175e0..e9b75f21e6af90110e49b3f78fd12f752585d519 100644 (file)
@@ -38,6 +38,7 @@ AppearancePrefs::AppearancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
 {
        hms = 0;
        hmsf = 0;
+       timecode = 0;
        samples = 0;
        frames = 0;
        hex = 0;
@@ -46,12 +47,15 @@ AppearancePrefs::AppearancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
        thumbnails = 0;
        thumbnail_size = 0;
        vicon_size = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Appearance");
 }
 
 AppearancePrefs::~AppearancePrefs()
 {
        delete hms;
        delete hmsf;
+       delete timecode;
        delete samples;
        delete frames;
        delete hex;
@@ -78,41 +82,58 @@ void AppearancePrefs::create_objects()
        BC_Title *title;
        add_subwindow(title = new BC_Title(x, y, _("Layout:"), LARGEFONT,
                resources->text_default));
+       title->context_help_set_keyword("Layout section");
        y += title->get_h() + ys10;
        int y1 = y;
 
        ViewTheme *theme;
-       add_subwindow(new BC_Title(x, y, _("Theme:")));
+       add_subwindow(title = new BC_Title(x, y, _("Theme:")));
+       title->context_help_set_keyword("Layout section");
        add_subwindow(theme = new ViewTheme(x1, y, pwindow));
        theme->create_objects();
+       theme->context_help_set_keyword("Layout section");
        y += theme->get_h() + ys5;
 
        x = x0;
        ViewPluginIcons *plugin_icons;
-       add_subwindow(new BC_Title(x, y, _("Plugin Icons:")));
+       add_subwindow(title = new BC_Title(x, y, _("Plugin Icons:")));
+       title->context_help_set_keyword("Updatable Icon Image Support");
        add_subwindow(plugin_icons = new ViewPluginIcons(x1, y, pwindow));
        plugin_icons->create_objects();
-       y += plugin_icons->get_h() + ys15;
+       plugin_icons->context_help_set_keyword("Updatable Icon Image Support");
+       y += plugin_icons->get_h() + ys10;
+       add_subwindow(title = new BC_Title(x, y, _("Language:")));
+       title->context_help_set_keyword("Layout section");
+       LayoutLocale *layout_locale;
+       add_subwindow(layout_locale = new LayoutLocale(x1, y, pwindow));
+       layout_locale->create_objects();
+       layout_locale->context_help_set_keyword("Layout section");
+       y += layout_locale->get_h() + ys15;
        x1 = get_w()/2;
 
        int x2 = x1 + xS(160), y2 = y;
        y = y1;
 
-       add_subwindow(new BC_Title(x1, y, _("Layout Scale:")));
+       add_subwindow(title = new BC_Title(x1, y, _("Layout Scale:")));
+       title->context_help_set_keyword("Layout section");
        layout_scale = new ViewLayoutScale(pwindow, this, x2, y);
        layout_scale->create_objects();
        y += layout_scale->get_h() + ys5;
-       add_subwindow(new BC_Title(x1, y, _("View thumbnail size:")));
+       add_subwindow(title = new BC_Title(x1, y, _("View thumbnail size:")));
+       title->context_help_set_keyword("Layout section");
        thumbnail_size = new ViewThumbnailSize(pwindow, this, x2, y);
        thumbnail_size->create_objects();
        y += thumbnail_size->get_h() + ys5;
-       add_subwindow(new BC_Title(x1, y, _("Vicon quality:")));
+       add_subwindow(title = new BC_Title(x1, y, _("Vicon quality:")));
+       title->context_help_set_keyword("Layout section");
        vicon_size = new ViewViconSize(pwindow, this, x2, y);
        vicon_size->create_objects();
        y += vicon_size->get_h() + ys5;
-       add_subwindow(new BC_Title(x1, y, _("Vicon color mode:")));
+       add_subwindow(title = new BC_Title(x1, y, _("Vicon color mode:")));
+       title->context_help_set_keyword("Layout section");
        add_subwindow(vicon_color_mode = new ViewViconColorMode(pwindow, x2, y));
        vicon_color_mode->create_objects();
+       vicon_color_mode->context_help_set_keyword("Layout section");
        y += vicon_color_mode->get_h() + ys5;
        y = bmax(y, y2);        
        y += ys10;
@@ -122,32 +143,45 @@ void AppearancePrefs::create_objects()
        y1 = y;
        add_subwindow(title = new BC_Title(x, y, _("Time Format:"), LARGEFONT,
                resources->text_default));
+       title->context_help_set_keyword("Time Format section");
        y += title->get_h() + ys10;
        add_subwindow(hms = new TimeFormatHMS(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_HMS,
                x, y));
+       hms->context_help_set_keyword("Time Format section");
        y += ys20;
        add_subwindow(hmsf = new TimeFormatHMSF(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_HMSF,
                x, y));
+       hmsf->context_help_set_keyword("Time Format section");
+       y += ys20;
+       add_subwindow(timecode = new TimeFormatTimecode(pwindow, this,
+               pwindow->thread->edl->session->time_format == TIME_TIMECODE,
+               x, y));
+       timecode->context_help_set_keyword("Time Format section");
        y += ys20;
        add_subwindow(samples = new TimeFormatSamples(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_SAMPLES,
                x, y));
+       samples->context_help_set_keyword("Time Format section");
        y += ys20;
        add_subwindow(hex = new TimeFormatHex(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_SAMPLES_HEX,
                x, y));
+       hex->context_help_set_keyword("Time Format section");
        y += ys20;
        add_subwindow(frames = new TimeFormatFrames(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_FRAMES,
                x, y));
+       frames->context_help_set_keyword("Time Format section");
        y += ys20;
        add_subwindow(feet = new TimeFormatFeet(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_FEET_FRAMES,
                x, y));
+       feet->context_help_set_keyword("Time Format section");
        x += feet->get_w() + xS(15);
        add_subwindow(title = new BC_Title(x, y, _("Frames per foot:")));
+       title->context_help_set_keyword("Time Format section");
        x += title->get_w() + margin;
        sprintf(string, "%0.2f", pwindow->thread->edl->session->frames_per_foot);
        add_subwindow(new TimeFormatFeetSetting(pwindow,
@@ -157,14 +191,17 @@ void AppearancePrefs::create_objects()
        add_subwindow(seconds = new TimeFormatSeconds(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_SECONDS,
                x, y));
+       seconds->context_help_set_keyword("Time Format section");
        y += ys35;
        y2 = y;
        
        x = x1;  y = y1;
-       add_subwindow(new BC_Title(x, y, _("Color:"), LARGEFONT,
+       add_subwindow(title = new BC_Title(x, y, _("Color:"), LARGEFONT,
                resources->text_default));
+       title->context_help_set_keyword("Color section");
        y += ys35;
        add_subwindow(title = new BC_Title(x, y, _("Highlighting Inversion color:")));
+       title->context_help_set_keyword("Color section");
        x += title->get_w() + margin;
        char hex_color[BCSTRLEN];
        sprintf(hex_color, "%06x", preferences->highlight_inverse);
@@ -172,93 +209,129 @@ void AppearancePrefs::create_objects()
        x2 = x;  x = x1;
        y += ys35;
        add_subwindow(title = new BC_Title(x, y, _("Composer BG Color:")));
+       title->context_help_set_keyword("Color section");
        int clr_color = pwindow->thread->edl->session->cwindow_clear_color;
-       int clr_alpha = pwindow->thread->edl->session->cwindow_clear_alpha;
         add_subwindow(cwdw_bg_color = new Composer_BG_Color(pwindow,
-               x2, y, xS(80), yS(24), clr_color, clr_alpha));
+               x2, y, xS(80), yS(24), clr_color));
        draw_3d_border(x2-2,y-2, xS(80)+4,xS(24)+4, 1);
        cwdw_bg_color->create_objects();
+       cwdw_bg_color->context_help_set_keyword("Color section");
+       x2 += cwdw_bg_color->get_w();
        y += ys35;
 
-       x = x1;
-       add_subwindow(title = new BC_Title(x, y, _("YUV color space:")));
-       x += title->get_w() + margin;
+       add_subwindow(title = new BC_Title(x1, y, _("YUV color space:")));
+       title->context_help_set_keyword("Color Space and Color Range");
+       x = x2 - xS(120);
        add_subwindow(yuv_color_space = new YuvColorSpace(x, y, pwindow));
        yuv_color_space->create_objects();
+       yuv_color_space->context_help_set_keyword("Color Space and Color Range");
        y += yuv_color_space->get_h() + ys5;
 
-       x = x1;
-       add_subwindow(title = new BC_Title(x, y, _("YUV color range:")));
-       x += title->get_w() + margin;
+       add_subwindow(title = new BC_Title(x1, y, _("YUV color range:")));
+       title->context_help_set_keyword("Color Space and Color Range");
+       x = x2 - xS(100);
        add_subwindow(yuv_color_range = new YuvColorRange(x, y, pwindow));
        yuv_color_range->create_objects();
+       yuv_color_range->context_help_set_keyword("Color Space and Color Range");
        y += yuv_color_range->get_h() + ys35;
        if( y2 < y ) y2 = y;
 
        add_subwindow(new BC_Bar(x0, y2, get_w()-x0 - xs30));
-       y += ys15;
+       y += ys35;
 
        x = x0;  y1 = y;
        add_subwindow(title = new BC_Title(x, y, _("Warnings:"), LARGEFONT,
                resources->text_default));
+       title->context_help_set_keyword("Warnings section");
        y += title->get_h() + ys10;
        UseWarnIndecies *idx_warn = new UseWarnIndecies(pwindow, x, y);
        add_subwindow(idx_warn);
+       idx_warn->context_help_set_keyword("Warnings section");
        y += idx_warn->get_h() + ys5;
-       UseWarnVersion *ver_warn = new UseWarnVersion(pwindow, x, y);
-       add_subwindow(ver_warn);
-       y += ver_warn->get_h() + ys5;
-       UseWarnStack *stack_warn = new UseWarnStack(pwindow, x, y);
-       add_subwindow(stack_warn);
-       y += stack_warn->get_h() + ys5;
        BD_WarnRoot *bdwr_warn = new BD_WarnRoot(pwindow, x, y);
        add_subwindow(bdwr_warn);
+       bdwr_warn->context_help_set_keyword("Blu-ray Workaround for Mount");
        y += bdwr_warn->get_h() + ys5;
        UseWarnFileRef *warn_ref = new UseWarnFileRef(pwindow, x, y);
        add_subwindow(warn_ref);
+       warn_ref->context_help_set_keyword("File by Reference");
        y += warn_ref->get_h() + ys5;
+       
+       add_subwindow(new BC_Bar(x0, y, warn_ref->get_w()-x0 - xs30));
+       y += ys15;
+
+       add_subwindow(title = new BC_Title(x, y, _("Dangerous:"), LARGEFONT,
+               resources->text_default));
+       title->context_help_set_keyword("Dangerous section");
+       y += title->get_h() + ys10;
+
+       
+       UseUnsafeGUI *unsafe_gui = new UseUnsafeGUI(pwindow, x, y);
+       add_subwindow(unsafe_gui);
+       unsafe_gui->context_help_set_keyword("Advanced features");
+       y += unsafe_gui->get_h() + ys5;
+       OngoingBackups *ongoing_backups = new OngoingBackups(pwindow, x, y);
+       add_subwindow(ongoing_backups);
+       ongoing_backups->context_help_set_keyword("Backup and Perpetual Session");
+       y += ongoing_backups->get_h() + ys5;
 
        x = get_w() / 3 + xs30;
        y = y1;
        add_subwindow(title = new BC_Title(x, y, _("Flags:"), LARGEFONT,
                resources->text_default));
+       title->context_help_set_keyword("Flags section");
        y += title->get_h() + ys10;
        y1 = y;
        AutocolorAssets *autocolor_assets = new AutocolorAssets(pwindow, x, y);
        add_subwindow(autocolor_assets);
+       autocolor_assets->context_help_set_keyword("Color Title Bars and Assets");
        y += autocolor_assets->get_h() + ys5;
        PerpetualSession *perpetual = new PerpetualSession(x, y, pwindow);
        add_subwindow(perpetual);
+       perpetual->context_help_set_keyword("Backup and Perpetual Session");
        y += perpetual->get_h() + ys5;
        RectifyAudioToggle *rect_toggle = new RectifyAudioToggle(x, y, pwindow);
        add_subwindow(rect_toggle);
+       rect_toggle->context_help_set_keyword("Flags section");
        y += rect_toggle->get_h() + ys5;
        CtrlToggle *ctrl_toggle = new CtrlToggle(x, y, pwindow);
        add_subwindow(ctrl_toggle);
+       ctrl_toggle->context_help_set_keyword("Selection Methods");
        y += ctrl_toggle->get_h() + ys5;
        ForwardRenderDisplacement *displacement = new ForwardRenderDisplacement(pwindow, x, y);
        add_subwindow(displacement);
+       displacement->context_help_set_keyword("Always Show Next Frame");
        y += displacement->get_h() + ys5;
        UseTipWindow *tip_win = new UseTipWindow(pwindow, x, y);
        add_subwindow(tip_win);
+       tip_win->context_help_set_keyword("Flags section");
        y += tip_win->get_h() + ys5;
 
        x = 2*get_w() / 3 - xs30;
        y = y1;
        add_subwindow(thumbnails = new ViewThumbnails(x, y, pwindow));
+       thumbnails->context_help_set_keyword("Video Icons \\/ Audio Icons");
        y += thumbnails->get_h() + ys5;
        PopupMenuBtnup *pop_win = new PopupMenuBtnup(pwindow, x, y);
        add_subwindow(pop_win);
+       pop_win->context_help_set_keyword("Flags section");
        y += pop_win->get_h() + ys5;
        GrabFocusPolicy *grab_input_focus = new GrabFocusPolicy(pwindow, x, y);
        add_subwindow(grab_input_focus);
+       grab_input_focus->context_help_set_keyword("Flags section");
        y += grab_input_focus->get_h() + ys5;
        ActivateFocusPolicy *focus_activate = new ActivateFocusPolicy(pwindow, x, y);
        add_subwindow(focus_activate);
+       focus_activate->context_help_set_keyword("Flags section");
        y += focus_activate->get_h() + ys5;
        DeactivateFocusPolicy *focus_deactivate = new DeactivateFocusPolicy(pwindow, x, y);
        add_subwindow(focus_deactivate);
+       focus_deactivate->context_help_set_keyword("Flags section");
        y += focus_deactivate->get_h() + ys5;
+       AutoRotate *auto_rotate = new AutoRotate(pwindow, x, y);
+       add_subwindow(auto_rotate);
+       auto_rotate->context_help_set_keyword("Flags section");
+       y += auto_rotate->get_h() + ys5;
 }
 
 int AppearancePrefs::update(int new_value)
@@ -267,6 +340,7 @@ int AppearancePrefs::update(int new_value)
        pwindow->thread->edl->session->time_format = new_value;
        hms->update(new_value == TIME_HMS);
        hmsf->update(new_value == TIME_HMSF);
+       timecode->update(new_value == TIME_TIMECODE);
        samples->update(new_value == TIME_SAMPLES);
        hex->update(new_value == TIME_SAMPLES_HEX);
        frames->update(new_value == TIME_FRAMES);
@@ -296,6 +370,16 @@ int TimeFormatHMSF::handle_event()
        return 1;
 }
 
+TimeFormatTimecode::TimeFormatTimecode(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
+ : BC_Radial(x, y, value, TIME_TIMECODE_TEXT)
+{ this->pwindow = pwindow; this->tfwindow = tfwindow; }
+
+int TimeFormatTimecode::handle_event()
+{
+       tfwindow->update(TIME_TIMECODE);
+       return 1;
+}
+
 TimeFormatSamples::TimeFormatSamples(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
  : BC_Radial(x, y, value, TIME_SAMPLES_TEXT)
 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
@@ -446,6 +530,42 @@ int ViewPluginIconItem::handle_event()
        return 1;
 }
 
+LayoutLocale::LayoutLocale(int x, int y, PreferencesWindow *pwindow)
+ : BC_PopupMenu(x, y, xS(200), pwindow->thread->preferences->locale, 1)
+{
+       this->pwindow = pwindow;
+}
+LayoutLocale::~LayoutLocale()
+{
+}
+
+const char *LayoutLocale::locale_list[] = { LOCALE_LIST, 0 };
+
+void LayoutLocale::create_objects()
+{
+       for( const char *tp, **lp=locale_list; (tp=*lp)!=0; ++lp )
+               add_item(new LayoutLocaleItem(this, tp));
+}
+
+int LayoutLocale::handle_event()
+{
+       return 1;
+}
+
+LayoutLocaleItem::LayoutLocaleItem(LayoutLocale *popup, const char *text)
+ : BC_MenuItem(text)
+{
+       this->popup = popup;
+}
+
+int LayoutLocaleItem::handle_event()
+{
+       popup->set_text(get_text());
+       strcpy(popup->pwindow->thread->preferences->locale, get_text());
+       popup->handle_event();
+       return 1;
+}
+
 ViewLayoutScale::ViewLayoutScale(PreferencesWindow *pwindow,
                AppearancePrefs *aprefs, int x, int y)
  : BC_TumbleTextBox(aprefs,
@@ -592,29 +712,31 @@ int UseWarnIndecies::handle_event()
        return 1;
 }
 
-UseWarnVersion::UseWarnVersion(PreferencesWindow *pwindow, int x, int y)
- : BC_CheckBox(x, y, pwindow->thread->preferences->warn_version,
-       _("EDL version warns if mismatched"))
+UseUnsafeGUI::UseUnsafeGUI(PreferencesWindow *pwindow, int x, int y)
+ : BC_CheckBox(x, y, pwindow->thread->preferences->unsafe_gui,
+       _("Unsafe GUI in batchrender"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("Save to EDL path option becomes available and will overwrite EDL on disk. \n Warn if jobs/session mismatch option is available but can be unchecked."));
 }
 
-int UseWarnVersion::handle_event()
+int UseUnsafeGUI::handle_event()
 {
-       pwindow->thread->preferences->warn_version = get_value();
+       pwindow->thread->preferences->unsafe_gui = get_value();
        return 1;
 }
 
-UseWarnStack::UseWarnStack(PreferencesWindow *pwindow, int x, int y)
- : BC_CheckBox(x, y, pwindow->thread->preferences->warn_stack,
-       _("Stack warns if reference not modified"))
+OngoingBackups::OngoingBackups(PreferencesWindow *pwindow, int x, int y)
+ : BC_CheckBox(x, y, pwindow->thread->preferences->ongoing_backups,
+       _("Autosave continuous backups"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("When you stop Cinelerra, all but the newest 50 will be deleted but you risk \n running out of disk space if you do a lot of work without restarting."));
 }
 
-int UseWarnStack::handle_event()
+int OngoingBackups::handle_event()
 {
-       pwindow->thread->preferences->warn_stack = get_value();
+       pwindow->thread->preferences->ongoing_backups = get_value();
        return 1;
 }
 
@@ -703,6 +825,20 @@ int DeactivateFocusPolicy::handle_event()
        return 1;
 }
 
+AutoRotate::AutoRotate(PreferencesWindow *pwindow, int x, int y)
+ : BC_CheckBox(x, y, pwindow->thread->preferences->auto_rotate != 0,
+       _("Auto rotate ffmpeg media"))
+{
+       this->pwindow = pwindow;
+       set_tooltip(_("Automatically rotates media if legal rotation metadata in file."));
+}
+
+int AutoRotate::handle_event()
+{
+       pwindow->thread->preferences->auto_rotate = get_value();
+       return 1;
+}
+
 ForwardRenderDisplacement::ForwardRenderDisplacement(PreferencesWindow *pwindow, int x, int y)
  : BC_CheckBox(x, y, pwindow->thread->preferences->forward_render_displacement,
        _("Always show next frame"))
@@ -721,6 +857,7 @@ AutocolorAssets::AutocolorAssets(PreferencesWindow *pwindow, int x, int y)
        _("Autocolor assets"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("Displays automatically generated color overlay for the \n edits on the timeline that belong to the same media file."));
 }
 
 int AutocolorAssets::handle_event()
@@ -748,15 +885,19 @@ int HighlightInverseColor::handle_event()
        return 1;
 }
 
+// num. order of those entries must be same as in
+// guicast/bccolors.inc
 
-const char *YuvColorSpace::color_space[] = {
-       N_("BT601"), // COLOR_SPACE_BT601
+const char *YuvColorSpace::color_space[MAX_COLOR_SPACE] = {
+       N_("BT601_NTSC"), // COLOR SPACE BT601_NTSC
        N_("BT709"), // COLOR_SPACE_BT709
-       N_("BT2020"), // COLOR_SPACE_BT2020
+       N_("BT2020 NCL"), // COLOR_SPACE_BT2020_NCL
+       N_("BT601_PAL"), // COLOR_SPACE_BT601_PAL
+       N_("BT2020 CL"), // COLOR_SPACE_BT2020_CL
 };
 
 YuvColorSpace::YuvColorSpace(int x, int y, PreferencesWindow *pwindow)
- : BC_PopupMenu(x, y, xS(120),
+ : BC_PopupMenu(x, y, xS(140),
        _(color_space[pwindow->thread->preferences->yuv_color_space]), 1)
 {
        this->pwindow = pwindow;
@@ -840,6 +981,7 @@ PerpetualSession::PerpetualSession(int x, int y, PreferencesWindow *pwindow)
        pwindow->thread->preferences->perpetual_session, _("Perpetual session"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("Resume previous session on startup with undo/redo stack saved between sessions. \n On startup, previous project is loaded as if there was no stoppage."));
 }
 
 int PerpetualSession::handle_event()
@@ -853,6 +995,7 @@ CtrlToggle::CtrlToggle(int x, int y, PreferencesWindow *pwindow)
        pwindow->thread->preferences->ctrl_toggle, _("Clears before toggle"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("Drag and Drop editing - when using LMB on edit,\n clears all selected edits except this one."));
 }
 
 int CtrlToggle::handle_event()
@@ -866,6 +1009,7 @@ RectifyAudioToggle::RectifyAudioToggle(int x, int y, PreferencesWindow *pwindow)
        pwindow->thread->preferences->rectify_audio, _("Timeline Rectify Audio"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("Displays rectified audio showing only positive half of the waveform \n resulting in waveform stretched more over the height of the track."));
 }
 
 int RectifyAudioToggle::handle_event()
@@ -875,8 +1019,8 @@ int RectifyAudioToggle::handle_event()
 }
 
 Composer_BG_Color::Composer_BG_Color(PreferencesWindow *pwindow,
-               int x, int y, int w, int h, int color, int alpha)
- : ColorBoxButton(_("Composer BG color"), x, y, w, h, color, alpha, 1)
+               int x, int y, int w, int h, int color)
+ : ColorBoxButton(_("Composer BG color"), x, y, w, h, color, -1, 1)
 {
        this->pwindow = pwindow;
 }
@@ -898,7 +1042,6 @@ void Composer_BG_Color::handle_done_event(int result)
 int Composer_BG_Color::handle_new_color(int color, int alpha)
 {
        pwindow->thread->edl->session->cwindow_clear_color = color;
-       pwindow->thread->edl->session->cwindow_clear_alpha = alpha;
        return 1;
 }
 
index 8c3ddaecc6b596035ff0c7c1df83c31214af0190..590732b5b9e4167dc27e4940107ea1ae71d6e69a 100644 (file)
@@ -42,6 +42,7 @@ public:
        int update(int new_value);
        TimeFormatHMS *hms;
        TimeFormatHMSF *hmsf;
+       TimeFormatTimecode *timecode;
        TimeFormatSamples *samples;
        TimeFormatHex *hex;
        TimeFormatFrames *frames;
@@ -76,6 +77,15 @@ public:
        AppearancePrefs *tfwindow;
 };
 
+class TimeFormatTimecode : public BC_Radial
+{
+public:
+       TimeFormatTimecode(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y);
+       int handle_event();
+       PreferencesWindow *pwindow;
+       AppearancePrefs *tfwindow;
+};
+
 class TimeFormatSamples : public BC_Radial
 {
 public:
@@ -171,6 +181,27 @@ public:
        ViewPluginIcons *popup;
 };
 
+class LayoutLocale : public BC_PopupMenu
+{
+       static const char *locale_list[];
+public:
+       LayoutLocale(int x, int y, PreferencesWindow *pwindow);
+       ~LayoutLocale();
+
+       void create_objects();
+       int handle_event();
+
+       PreferencesWindow *pwindow;
+};
+
+class LayoutLocaleItem : public BC_MenuItem
+{
+public:
+       LayoutLocaleItem(LayoutLocale *popup, const char *text);
+       int handle_event();
+       LayoutLocale *popup;
+};
+
 class ViewLayoutScale : public BC_TumbleTextBox
 {
 public:
@@ -211,7 +242,8 @@ public:
 
 class ViewViconColorMode : public BC_PopupMenu
 {
-       static const char *vicon_color_modes[3];
+#define MAX_VICON_COLOR_MODE 3
+       static const char *vicon_color_modes[MAX_VICON_COLOR_MODE];
 public:
        ViewViconColorMode(PreferencesWindow *pwindow, int x, int y);
        ~ViewViconColorMode();
@@ -247,18 +279,18 @@ public:
        PreferencesWindow *pwindow;
 };
 
-class UseWarnVersion : public BC_CheckBox
+class UseUnsafeGUI : public BC_CheckBox
 {
 public:
-       UseWarnVersion(PreferencesWindow *pwindow, int x, int y);
+       UseUnsafeGUI(PreferencesWindow *pwindow, int x, int y);
        int handle_event();
        PreferencesWindow *pwindow;
 };
 
-class UseWarnStack : public BC_CheckBox
+class OngoingBackups: public BC_CheckBox
 {
 public:
-       UseWarnStack(PreferencesWindow *pwindow, int x, int y);
+       OngoingBackups(PreferencesWindow *pwindow, int x, int y);
        int handle_event();
        PreferencesWindow *pwindow;
 };
@@ -311,6 +343,14 @@ public:
        PreferencesWindow *pwindow;
 };
 
+class AutoRotate: public BC_CheckBox
+{
+public:
+       AutoRotate(PreferencesWindow *pwindow, int x, int y);
+       int handle_event();
+       PreferencesWindow *pwindow;
+};
+
 class ForwardRenderDisplacement : public BC_CheckBox
 {
 public:
@@ -337,8 +377,9 @@ public:
 
 class YuvColorSpace : public BC_PopupMenu
 {
-       static const char *color_space[3];
 public:
+#define MAX_COLOR_SPACE  5
+       static const char *color_space[MAX_COLOR_SPACE];
        YuvColorSpace(int x, int y, PreferencesWindow *pwindow);
        ~YuvColorSpace();
 
@@ -359,8 +400,9 @@ public:
 
 class YuvColorRange : public BC_PopupMenu
 {
-       static const char *color_range[2];
 public:
+#define MAX_COLOR_RANGE 2
+       static const char *color_range[MAX_COLOR_RANGE];
        YuvColorRange(int x, int y, PreferencesWindow *pwindow);
        ~YuvColorRange();
 
@@ -407,7 +449,7 @@ class Composer_BG_Color : public ColorBoxButton
 {
 public:
        Composer_BG_Color(PreferencesWindow *pwindow,
-               int x, int y, int w, int h, int color, int alpha);
+               int x, int y, int w, int h, int color);
        ~Composer_BG_Color();
        void handle_done_event(int result);
        int handle_new_color(int color, int alpha);
index 6b117a93faf5f89998af7b1fd036f0053814c11a..20c79101a9cd1adf452d40a5a9ad4cc0d7f1f7dc 100644 (file)
@@ -25,6 +25,7 @@
 class AppearancePrefs;
 class TimeFormatHMS;
 class TimeFormatHMSF;
+class TimeFormatTimecode;
 class TimeFormatSamples;
 class TimeFormatFrames;
 class TimeFormatHex;
@@ -50,6 +51,7 @@ class PopupMenuBtnup;
 class GrabFocusPolicy;
 class ActivateFocusPolicy;
 class DeactivateFocusPolicy;
+class AutoRotate;
 class ForwardRenderDisplacement;
 class HighlightInverseColor;
 class YuvColorSpace;
@@ -58,5 +60,6 @@ class YuvColorRange;
 class YuvColorRangeItem;
 class PerpetualSession;
 class Composer_BG_Color;
+class LayoutLocale;
 
 #endif
index fe169cbcd0d2623332b85f0135350ff39d72d388..c4301af0a30a2c3be033530844d424f2ac05d93d 100644 (file)
@@ -165,7 +165,9 @@ void Asset::reset_video()
        actual_width = width = 0;
        actual_height = height = 0;
        proxy_scale = 0; // not a proxy
+       proxy_edl = 0; // not proxy from edl
        video_length = 0;
+       timecode = -2; // unknown
        single_frame = 0;
        vmpeg_cmodel = BC_YUV420P;
        frame_rate = 0;
@@ -179,9 +181,9 @@ void Asset::boundaries()
 // sample_rate & frame_rate are user defined
 //     CLAMP(sample_rate, 1, 1000000);
 //     CLAMP(frame_rate, 0.001, 1000000);
-       CLAMP(channels, 0, 16);
-       CLAMP(width, 0, 10000);
-       CLAMP(height, 0, 10000);
+       CLAMP(channels, 0, MAX_CHANNELS-1);
+       CLAMP(width, 0, ASSET_MAX_WIDTH);
+       CLAMP(height, 0, ASSET_MAX_HEIGHT);
 //printf("Asset::boundaries %d %d %f\n", __LINE__, sample_rate, frame_rate);
 }
 
@@ -216,6 +218,7 @@ void Asset::copy_format(Asset *asset, int do_index)
        use_header = asset->use_header;
        aspect_ratio = asset->aspect_ratio;
        interlace_mode = asset->interlace_mode;
+       timecode = asset->timecode;
 
        video_data = asset->video_data;
        layers = asset->layers;
@@ -226,6 +229,7 @@ void Asset::copy_format(Asset *asset, int do_index)
        actual_width = asset->actual_width;
        actual_height = asset->actual_height;
        proxy_scale = asset->proxy_scale;
+       proxy_edl = asset->proxy_edl;
        strcpy(vcodec, asset->vcodec);
        strcpy(acodec, asset->acodec);
 
@@ -364,11 +368,6 @@ int Asset::equivalent(Asset &asset, int test_audio, int test_video, EDL *edl)
                        header == asset.header &&
                        dither == asset.dither &&
                        !strcmp(acodec, asset.acodec));
-               if( result && format == FILE_FFMPEG )
-                       result = !strcmp(ff_audio_options, asset.ff_audio_options) &&
-                               !strcmp(ff_sample_format, asset.ff_sample_format) &&
-                               ff_audio_bitrate == asset.ff_audio_bitrate &&
-                               ff_audio_quality == asset.ff_audio_quality;
        }
 
 
@@ -376,19 +375,13 @@ int Asset::equivalent(Asset &asset, int test_audio, int test_video, EDL *edl)
                result = (layers == asset.layers &&
                        program == asset.program &&
                        frame_rate == asset.frame_rate &&
-                       asset.interlace_mode    == interlace_mode &&
+                       asset.interlace_mode == interlace_mode &&
+                       asset.timecode == timecode &&
                        width == asset.width &&
                        height == asset.height &&
                        !strcmp(vcodec, asset.vcodec) &&
                        mov_sphere == asset.mov_sphere &&
                        jpeg_sphere == asset.jpeg_sphere);
-               if( result && format == FILE_FFMPEG )
-                       result = !strcmp(ff_video_options, asset.ff_video_options) &&
-                               !strcmp(ff_pixel_format, asset.ff_pixel_format) &&
-                               ff_video_bitrate == asset.ff_video_bitrate &&
-                               ff_video_quality == asset.ff_video_quality &&
-                               ff_color_space == asset.ff_color_space &&
-                               ff_color_range == asset.ff_color_range;
        }
 
        return result;
@@ -470,6 +463,7 @@ int Asset::read_video(FileXML *file)
        height = file->tag.get_property("HEIGHT", height);
        width = file->tag.get_property("WIDTH", width);
        proxy_scale = file->tag.get_property("PROXY_SCALE", 0);
+       proxy_edl = file->tag.get_property("PROXY_EDL", 0);
        layers = file->tag.get_property("LAYERS", layers);
        program = file->tag.get_property("PROGRAM", program);
 // This is loaded from the index file after the EDL but this
@@ -479,6 +473,7 @@ int Asset::read_video(FileXML *file)
        file->tag.get_property("VCODEC", vcodec);
 
        video_length = file->tag.get_property("VIDEO_LENGTH", (int64_t)0);
+       timecode = file->tag.get_property("TIMECODE", -2);
        mov_sphere = file->tag.get_property("MOV_SPHERE", 0);
        jpeg_sphere = file->tag.get_property("JPEG_SPHERE", 0);
        single_frame = file->tag.get_property("SINGLE_FRAME", (int64_t)0);
@@ -638,6 +633,7 @@ int Asset::write_video(FileXML *file)
        file->tag.set_property("HEIGHT", height);
        file->tag.set_property("WIDTH", width);
        file->tag.set_property("PROXY_SCALE", proxy_scale);
+       file->tag.set_property("PROXY_EDL", proxy_edl);
        file->tag.set_property("LAYERS", layers);
        file->tag.set_property("PROGRAM", program);
        file->tag.set_property("FRAMERATE", frame_rate);
@@ -645,6 +641,7 @@ int Asset::write_video(FileXML *file)
                file->tag.set_property("VCODEC", vcodec);
 
        file->tag.set_property("VIDEO_LENGTH", video_length);
+       file->tag.set_property("TIMECODE", timecode);
        file->tag.set_property("MOV_SPHERE", mov_sphere);
        file->tag.set_property("JPEG_SPHERE", jpeg_sphere);
        file->tag.set_property("SINGLE_FRAME", single_frame);
@@ -741,6 +738,7 @@ void Asset::load_defaults(BC_Hash *defaults,
                actual_height = GET_DEFAULT("ACTUAL_HEIGHT", actual_height);
                actual_width = GET_DEFAULT("ACTUAL_WIDTH", actual_width);
                proxy_scale = GET_DEFAULT("PROXY_SCALE", proxy_scale);
+               proxy_edl = GET_DEFAULT("PROXY_SCALE", proxy_edl);
                program = GET_DEFAULT("PROGRAM", program);
                layers = GET_DEFAULT("LAYERS", layers);
                if(EQUIV(frame_rate, 0)) frame_rate = GET_DEFAULT("FRAMERATE", frame_rate);
@@ -795,13 +793,6 @@ void Asset::load_defaults(BC_Hash *defaults,
        vmpeg_preset = GET_DEFAULT("VMPEG_PRESET", vmpeg_preset);
        vmpeg_field_order = GET_DEFAULT("VMPEG_FIELD_ORDER", vmpeg_field_order);
 
-       theora_fix_bitrate = GET_DEFAULT("THEORA_FIX_BITRATE", theora_fix_bitrate);
-       theora_bitrate = GET_DEFAULT("THEORA_BITRATE", theora_bitrate);
-       theora_quality = GET_DEFAULT("THEORA_QUALITY", theora_quality);
-       theora_sharpness = GET_DEFAULT("THEORA_SHARPNESS", theora_sharpness);
-       theora_keyframe_frequency = GET_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency);
-       theora_keyframe_force_frequency = GET_DEFAULT("THEORA_FORCE_KEYFRAME_FEQUENCY", theora_keyframe_force_frequency);
-
 
        ac3_bitrate = GET_DEFAULT("AC3_BITRATE", ac3_bitrate);
 
@@ -944,6 +935,7 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("ACTUAL_HEIGHT", actual_height);
                UPDATE_DEFAULT("ACTUAL_WIDTH", actual_width);
                UPDATE_DEFAULT("PROXY_SCALE", proxy_scale);
+               UPDATE_DEFAULT("PROXY_EDL", proxy_edl);
                UPDATE_DEFAULT("PROGRAM", program);
                UPDATE_DEFAULT("LAYERS", layers);
                UPDATE_DEFAULT("FRAMERATE", frame_rate);
@@ -989,11 +981,10 @@ int Asset::dump(FILE *fp)
                " height %d vcodec %s aspect_ratio %f ilace_mode %s\n",
                video_data, layers, program, frame_rate, width, height,
                vcodec, aspect_ratio,string);
-       fprintf(fp,"   actual_width %d actual_height %d proxy_scale %d"
-               " video_length %jd repeat %d\n",
-               actual_width, actual_height, proxy_scale, video_length,
-               single_frame);
-       fprintf(fp,"   video_length %jd repeat %d\n", video_length, single_frame);
+       fprintf(fp,"   actual_width %d actual_height %d proxy_scale %d proxy_edl %d\n",
+               actual_width, actual_height, proxy_scale, proxy_edl);
+       fprintf(fp,"   video_length %jd repeat %d timecode %f\n",
+               video_length, single_frame, timecode);
        fprintf(fp,"   mov_sphere=%d jpeg_sphere=%d\n", mov_sphere, jpeg_sphere);
        return 0;
 }
index 92b15794ced82f6f31a2144c87ad78c114564cf4..bb40ed4a32957a3577c2f021e6eff6bde48e346a 100644 (file)
 #include "pluginserver.inc"
 
 
-// Time code formats
-#define TC_DROPFRAME 0
-#define TC_NONDROPFRAME 1
-#define TC_PAL 2
-#define TC_FILM 3
-
 class Asset : public Indexable, public ListItem<Asset>
 {
 public:
@@ -147,16 +141,16 @@ public:
 
        int actual_width, actual_height;
        int width, height;
-// scale factor or 0 if not proxy
-       int proxy_scale;
+// scale factor or 0 if not proxy, proxy_edl if proxyed from nested_edl
+       int proxy_scale, proxy_edl;
 // String or FourCC describing compression
        char vcodec[BCTEXTLEN];
 
 // Length in frames
 // -1 means a still photo
        int64_t video_length;
-
-
+// timecode, unknown=-2, no timecode=-1, timecode>=0 
+       double timecode;
 
 // mp3 compression
        int mp3_bitrate;
index 6222f1c6913a05a6b686fa36f15f196c77e41abd..9bdf847f3f58cd7373d2e4d05cf45ab9ef09026d 100644 (file)
@@ -104,6 +104,14 @@ void AssetEdit::edit_asset(Indexable *indexable, int x, int y)
 
 void AssetEdit::handle_done_event(int result)
 {
+       if( !result && changed_params->timecode >= 0 ) {
+               double rate = indexable->get_frame_rate();
+               changed_params->timecode =
+                       atoi(window->tc_hrs->get_text()) * 3600 +
+                       atoi(window->tc_mins->get_text()) * 60 +
+                       atoi(window->tc_secs->get_text()) +
+                       atoi(window->tc_rest->get_text()) / rate;
+       }
 }
 
 void AssetEdit::handle_close_event(int result)
@@ -187,14 +195,16 @@ BC_Window* AssetEdit::new_gui()
 
 int AssetEdit::window_height()
 {
-       int h = 128 + 64;
-       if( indexable->have_audio() ) h += 200;
+       int h = yS(128 + 64);
+       if( indexable->have_audio() ) h += yS(200);
        if( indexable->have_video() ) {
-               h += 160;
+               h += yS(160);
                if( indexable->is_asset ) {
                        Asset *asset = (Asset *)indexable;
                        if( File::can_scale_input(asset) )
-                               h += 42;
+                               h += yS(42);
+                       if( asset->timecode >= 0 )
+                               h += yS(32);
                }
        }
        return yS(h);
@@ -218,6 +228,8 @@ AssetEditWindow::AssetEditWindow(MWindow *mwindow, AssetEdit *asset_edit)
        detail_dialog = 0;
        win_width = 0;
        win_height = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Info Asset Details");
 }
 
 
@@ -516,8 +528,35 @@ void AssetEditWindow::create_objects()
                                &asset_edit->changed_params->interlace_mode,
                                (ArrayList<BC_ListBoxItem*>*)&mwindow->interlace_asset_modes,
                                x2 + edit_ilace_mode->get_w(), y));
+                       y += title->get_h() + yS(15);
                }
        }
+       if( asset && asset->timecode >= 0 ) {
+               char text[BCSTRLEN], *tc = text;
+               Units::totext(tc, asset->timecode, TIME_HMSF,
+                       asset->sample_rate, asset->frame_rate);
+               const char *hrs  = tc;  tc = strchr(tc, ':');  *tc++ = 0;
+               const char *mins = tc;  tc = strchr(tc, ':');  *tc++ = 0;
+               const char *secs = tc;  tc = strchr(tc, ':');  *tc++ = 0;
+               const char *rest = tc;
+               int padw = BC_Title::calculate_w(this, ":", MEDIUMFONT);
+               int fldw = BC_Title::calculate_w(this, "00", MEDIUMFONT) + 5;
+               int hdrw = fldw + padw;  x = x2;
+               add_subwindow(title = new BC_Title(x, y, _("hour"), SMALLFONT));  x += hdrw;
+               add_subwindow(title = new BC_Title(x, y, _("min"),  SMALLFONT));  x += hdrw;
+               add_subwindow(title = new BC_Title(x, y, _("sec"),  SMALLFONT));  x += hdrw;
+               add_subwindow(title = new BC_Title(x, y, _("frms"), SMALLFONT));
+               y += title->get_h() + xS(3);
+               add_subwindow(title = new BC_Title(x1, y, _("Time Code Start:")));
+               add_subwindow(tc_hrs = new BC_TextBox(x=x2, y, fldw, 1, hrs));
+               add_subwindow(new BC_Title(x += tc_hrs->get_w(), y, ":"));
+               add_subwindow(tc_mins = new BC_TextBox(x += padw, y, fldw, 1, mins));
+               add_subwindow(new BC_Title(x += tc_mins->get_w(), y, ":"));
+               add_subwindow(tc_secs = new BC_TextBox(x += padw, y , fldw, 1, secs));
+               add_subwindow(new BC_Title(x += tc_secs->get_w(), y, ":"));
+               add_subwindow(tc_rest = new BC_TextBox(x += 10, y, fldw, 1, rest));
+               y += title->get_h() + ypad5;
+       }
 
        add_subwindow(new BC_OKButton(this));
        add_subwindow(new BC_CancelButton(this));
@@ -743,6 +782,8 @@ DetailAssetWindow::DetailAssetWindow(MWindow *mwindow,
        asset->add_user();
        info[0] = 0;
        text = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Info Asset Details");
 }
 
 DetailAssetWindow::~DetailAssetWindow()
index d74262938b847f961f836d7be5aa4c093a44ea84..24e0166ff90f31e5b74dad3436b3e533061bb9af 100644 (file)
@@ -80,6 +80,8 @@ public:
        AssetEdit *asset_edit;
        BC_Title *win_width;
        BC_Title *win_height;
+       BC_TextBox *tc_hrs, *tc_mins;
+       BC_TextBox *tc_secs, *tc_rest;
        DetailAssetDialog *detail_dialog;
        void show_info_detail();
 
index 56832ca9100e8e994cbf8e0f5446a2b0783b588e..bbdf172fc2dbcc1fb5a4ec5f334c1bcb8f01f904 100644 (file)
@@ -99,19 +99,15 @@ void AssetPopup::create_objects()
 
 void AssetPopup::paste_assets()
 {
-// Collect items into the drag vectors for temporary storage
-       gui->lock_window("AssetPopup::paste_assets");
-       mwindow->gui->lock_window("AssetPopup::paste_assets");
-       mwindow->cwindow->gui->lock_window("AssetPopup::paste_assets");
-
        int proxy = mwindow->edl->session->awindow_folder == AW_PROXY_FOLDER ? 1 : 0;
        gui->collect_assets(proxy);
+// Collect items into the drag vectors for temporary storage
+       gui->unlock_window();
+       mwindow->gui->lock_window("AssetPopup::paste_assets");
        mwindow->paste_assets(mwindow->edl->local_session->get_selectionstart(1),
                mwindow->edl->tracks->first, 0);   // do not overwrite
-
-       gui->unlock_window();
        mwindow->gui->unlock_window();
-       mwindow->cwindow->gui->unlock_window();
+       gui->lock_window("AssetPopup::paste_assets");
 }
 
 void AssetPopup::match_size()
@@ -302,8 +298,10 @@ AssetPopupBuildIndex::~AssetPopupBuildIndex()
 
 int AssetPopupBuildIndex::handle_event()
 {
+       popup->unlock_window();
 //printf("AssetPopupBuildIndex::handle_event 1\n");
        mwindow->rebuild_indices();
+       popup->lock_window("AssetPopupBuildIndex::handle_event");
        return 1;
 }
 
@@ -394,9 +392,11 @@ AssetPopupOpenMixer::~AssetPopupOpenMixer()
 
 int AssetPopupOpenMixer::handle_event()
 {
+       popup->unlock_window();
        mwindow->gui->lock_window("AssetPopupOpenMixer::handle_event");
        mwindow->create_mixers();
        mwindow->gui->unlock_window();
+       popup->lock_window("AssetPopupOpenMixer::handle_event");
        return 1;
 }
 
@@ -413,9 +413,11 @@ AssetPopupInsertMixer::~AssetPopupInsertMixer()
 
 int AssetPopupInsertMixer::handle_event()
 {
+       popup->unlock_window();
        mwindow->gui->lock_window("AssetPopupInsertMixer::handle_event");
        mwindow->create_mixers(-1);
        mwindow->gui->unlock_window();
+       popup->lock_window("AssetPopupInsertMixer::handle_event");
        return 1;
 }
 
@@ -683,6 +685,8 @@ AssetCopyWindow::AssetCopyWindow(AssetCopyDialog *copy_dialog)
        ACW_W, ACW_H, ACW_W, ACW_H, 1, 0, 1)
 {
        this->copy_dialog = copy_dialog;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Moving clips");
 }
 
 AssetCopyWindow::~AssetCopyWindow()
@@ -816,6 +820,8 @@ AssetPasteWindow::AssetPasteWindow(AssetPasteDialog *paste_dialog)
        APW_W, APW_H, APW_W, APW_H, 1, 0, 1)
 {
        this->paste_dialog = paste_dialog;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Moving clips");
 }
 
 AssetPasteWindow::~AssetPasteWindow()
@@ -951,8 +957,8 @@ int SnapshotMenuItem::handle_event()
                command.realtime = 0;
 
                RenderEngine render_engine(0, preferences, 0, 0);
-               CICache video_cache(preferences);
-               render_engine.set_vcache(&video_cache);
+               CICache *video_cache = new CICache(preferences);
+               render_engine.set_vcache(video_cache);
                render_engine.arm_command(&command);
 
                double position = edl->local_session->get_selectionstart(1);
@@ -962,6 +968,7 @@ int SnapshotMenuItem::handle_event()
                if( !ret )
                        ret = file.write_video_buffer(1);
                file.close_file();
+               video_cache->remove_user();
        }
        if( !ret ) {
                asset->folder_no = AW_MEDIA_FOLDER;
@@ -1019,104 +1026,26 @@ int GrabshotMenuItem::handle_event()
 }
 
 GrabshotThread::GrabshotThread(MWindow *mwindow)
- : Thread(1, 0, 0)
+ : BC_DragBox(mwindow->gui)
 {
        this->mwindow = mwindow;
-       popup = 0;
-       done = -1;
 }
+
 GrabshotThread::~GrabshotThread()
 {
-       delete popup;
 }
 
 void GrabshotThread::start(GrabshotMenuItem *menu_item)
 {
-       popup = new GrabshotPopup(this, menu_item->mode);
-       popup->lock_window("GrabshotThread::start");
-       for( int i=0; i<4; ++i )
-               edge[i] = new BC_Popup(mwindow->gui, 0,0, 1,1, ORANGE, 1);
-       mwindow->gui->grab_buttons();
-       mwindow->gui->grab_cursor();
-       popup->grab(mwindow->gui);
-       popup->create_objects();
-       popup->show_window();
-       popup->unlock_window();
-       done = 0;
-       Thread::start();
+       mode = menu_item->mode;
+       start_drag();
 }
 
-void GrabshotThread::run()
+int GrabshotThread::handle_done_event(int x0, int y0, int x1, int y1)
 {
-       popup->lock_window("GrabshotThread::run 0");
-       while( !done ) {
-               popup->update();
-               popup->unlock_window();
-               enable_cancel();
-               Timer::delay(200);
-               disable_cancel();
-               popup->lock_window("GrabshotThread::run 1");
-       }
-       mwindow->gui->ungrab_cursor();
-       mwindow->gui->ungrab_buttons();
-       popup->ungrab(mwindow->gui);
-       for( int i=0; i<4; ++i ) delete edge[i];
-       popup->unlock_window();
-       delete popup;  popup = 0;
-}
+       int cx = x0,    cy = y0;
+       int cw = x1-x0, ch = y1-y0;
 
-GrabshotPopup::GrabshotPopup(GrabshotThread *grab_thread, int mode)
- : BC_Popup(grab_thread->mwindow->gui, 0,0, 16,16, -1,1)
-{
-       this->grab_thread = grab_thread;
-       this->mode = mode;
-       dragging = -1;
-       grab_color = ORANGE;
-       x0 = y0 = x1 = y1 = -1;
-       lx0 = ly0 = lx1 = ly1 = -1;
-}
-GrabshotPopup::~GrabshotPopup()
-{
-}
-
-int GrabshotPopup::grab_event(XEvent *event)
-{
-       int cur_drag = dragging;
-       switch( event->type ) {
-       case ButtonPress:
-               if( cur_drag > 0 ) return 1;
-               x0 = event->xbutton.x_root;
-               y0 = event->xbutton.y_root;
-               if( !cur_drag ) {
-                       draw_selection(-1);
-                       if( event->xbutton.button == RIGHT_BUTTON ) break;
-                       if( x0>=get_x() && x0<get_x()+get_w() &&
-                           y0>=get_y() && y0<get_y()+get_h() ) break;
-               }
-               x1 = x0;  y1 = y0;
-               draw_selection(1);
-               dragging = 1;
-               return 1;
-       case ButtonRelease:
-               dragging = 0;
-       case MotionNotify:
-               if( cur_drag > 0 ) {
-                       x1 = event->xbutton.x_root;
-                       y1 = event->xbutton.y_root;
-                       draw_selection(0);
-               }
-               return 1;
-       default:
-               return 0;
-       }
-
-       int cx = lx0,     cy = ly0;
-       int cw = lx1-lx0, ch = ly1-ly0;
-       hide_window();
-       sync_display();
-       grab_thread->done = 1;
-
-       MWindow *mwindow = grab_thread->mwindow;
        Preferences *preferences = mwindow->preferences;
        char filename[BCTEXTLEN], snapshot_path[BCTEXTLEN];
        static const char *exts[] = { "png", "jpg", "tif", "ppm" };
@@ -1150,12 +1079,13 @@ int GrabshotPopup::grab_event(XEvent *event)
        }
 
 // no odd dimensions
-       int rw = get_root_w(0), rh = get_root_h(0);
+       int rw = mwindow->gui->get_root_w(0);
+       int rh = mwindow->gui->get_root_h(0);
        if( cx < 0 ) { cw += cx;  cx = 0; }
        if( cy < 0 ) { ch += cy;  cy = 0; }
        if( cx+cw > rw ) cw = rw-cx;
        if( cy+ch > rh ) ch = rh-cy;
-       if( !cw || !ch ) return 1;
+       if( !cw || !ch ) return 0;
 
        VFrame vframe(cw,ch, BC_RGB888);
        if( cx+cw < rw ) ++cw;
@@ -1198,37 +1128,3 @@ int GrabshotPopup::grab_event(XEvent *event)
        return 1;
 }
 
-void GrabshotPopup::update()
-{
-       set_color(grab_color ^= GREEN);
-       draw_box(0,0, get_w(),get_h());
-       flash(1);
-}
-
-void GrabshotPopup::draw_selection(int show)
-{
-       if( show < 0 ) {
-               for( int i=0; i<4; ++i ) hide_window(0);
-               flush();
-               return;
-       }
-
-       int nx0 = x0 < x1 ? x0 : x1;
-       int nx1 = x0 < x1 ? x1 : x0;
-       int ny0 = y0 < y1 ? y0 : y1;
-       int ny1 = y0 < y1 ? y1 : y0;
-       lx0 = nx0;  lx1 = nx1;  ly0 = ny0;  ly1 = ny1;
-
-       --nx0;  --ny0;
-       BC_Popup **edge = grab_thread->edge;
-       edge[0]->reposition_window(nx0,ny0, nx1-nx0, 1);
-       edge[1]->reposition_window(nx1,ny0, 1, ny1-ny0);
-       edge[2]->reposition_window(nx0,ny1, nx1-nx0, 1);
-       edge[3]->reposition_window(nx0,ny0, 1, ny1-ny0);
-
-       if( show > 0 ) {
-               for( int i=0; i<4; ++i ) edge[i]->show_window(0);
-       }
-       flush();
-}
-
index c948e0e135c81a1627cad4575dac7147bd4bfc03..176174f8a1b216555c830a08b9527de2735a2ba0 100644 (file)
@@ -430,40 +430,20 @@ public:
 
        int handle_event();
        GrabshotSubMenu *submenu;
-       int mode;
        GrabshotThread *grab_thread;
+       int mode;
 };
 
-class GrabshotThread : public Thread
+class GrabshotThread : public BC_DragBox
 {
 public:
        GrabshotThread(MWindow* mwindow);
        ~GrabshotThread();
-
-       MWindow *mwindow;
-       GrabshotPopup *popup;
-       BC_Popup *edge[4];
-       int done;
-
        void start(GrabshotMenuItem *menu_item);
-       void run();
-};
+       int handle_done_event(int x0, int y0, int x1, int y1);
 
-class GrabshotPopup : public BC_Popup
-{
-public:
-       GrabshotPopup(GrabshotThread *grab_thread, int mode);
-       ~GrabshotPopup();
-       int grab_event(XEvent *event);
-       void draw_selection(int invert);
-       void update();
-
-       GrabshotThread *grab_thread;
+       MWindow *mwindow;
        int mode;
-       int dragging;
-       int grab_color;
-       int x0, y0, x1, y1;
-       int lx0, ly0, lx1, ly1;
 };
 
 #endif
index 564c18cf19cfadafadf9ad11ad030834918d31d4..f623bce4ab7ee89522d75551e403e426e328fe2b 100644 (file)
@@ -36,6 +36,8 @@ AssetRemoveWindow::AssetRemoveWindow(MWindow *mwindow)
 {
        this->mwindow = mwindow;
        data = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Resources Window");
 }
 
 AssetRemoveWindow::~AssetRemoveWindow()
index 4171fa83d18338a46897ff2877852550279ab9ca..87a2ddafe08d4b58bff46f224b40811892ecf1ed 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "auto.h"
 #include "autos.h"
+#include "edl.h"
 #include "filexml.h"
 
 Auto::Auto()
@@ -29,10 +30,11 @@ Auto::Auto()
        this->edl = 0;
        this->autos = 0;
        position = 0;
-       skip = 0;
        WIDTH = xS(10);
        HEIGHT = yS(10);
        is_default = 0;
+       id = EDL::next_id();
+       orig_id = id;
 }
 
 Auto::Auto(EDL *edl, Autos *autos)
@@ -41,10 +43,11 @@ Auto::Auto(EDL *edl, Autos *autos)
        this->edl = edl;
        this->autos = autos;
        position = 0;
-       skip = 0;
        WIDTH = xS(10);
        HEIGHT = yS(10);
        is_default = 0;
+       id = EDL::next_id();
+       orig_id = id;
 }
 
 Auto& Auto::operator=(Auto& that)
@@ -66,6 +69,7 @@ void Auto::copy(int64_t start, int64_t end, FileXML *file, int default_only)
 
 void Auto::copy_from(Auto *that)
 {
+       this->orig_id = that->orig_id;
        this->position = that->position;
 }
 
@@ -75,8 +79,11 @@ int Auto::interpolate_from(Auto *a1, Auto *a2, int64_t new_position, Auto *templ
        if( !templ ) templ = previous;
        if( !templ && this->autos )
                templ = this->autos->default_auto;
-       if( templ )
+       if( templ ) {
+               int orig_id = this->orig_id;
                copy_from(templ);
+               this->orig_id = orig_id;
+       }
        position = new_position;
        return 0;
 }
index f91451ef03b19d8b54344ccbf6231396b55a090f..6330952459a3c14262598ecfe2cc86d0b328f1e6 100644 (file)
@@ -57,10 +57,9 @@ public:
 
        virtual void get_caption(char *string) {};
 
-
-       int skip;       // if added by selection event for moves
        EDL *edl;
        Autos *autos;
+       int id, orig_id;
        int WIDTH, HEIGHT;
 // Units native to the track
        int is_default;
index 615a9d55197f3b19cda11d376bb4803c4d6f1e28..b626d66ad9f42139cf6b3c1401124bfb1f76a582 100644 (file)
                value = INFINITYGAIN;                                   \
        if (autogrouptype == AUTOGROUPTYPE_VIDEO_FADE)                  \
                CLAMP(value, 0, 100);                                   \
-       if (autogrouptype == AUTOGROUPTYPE_ZOOM && value < 0)           \
-               value = 0;                                              \
-       else if (autogrouptype == AUTOGROUPTYPE_SPEED && value < 0.001) \
-               value = 0.001;
+       if (autogrouptype == AUTOGROUPTYPE_ZOOM && value < ZOOM_MIN)    \
+               value = ZOOM_MIN;                                       \
+       else if (autogrouptype == AUTOGROUPTYPE_SPEED && value < SPEED_MIN) \
+               value = SPEED_MIN;
 
 #define AUTOMATIONVIEWCLAMPS(value, autogrouptype)                     \
        if (autogrouptype == AUTOGROUPTYPE_ZOOM && value < 0)           \
                value = 0;                                              \
-       else if (autogrouptype == AUTOGROUPTYPE_SPEED && value < 0)     \
-               value = 0;
+       else if (autogrouptype == AUTOGROUPTYPE_SPEED && value < SPEED_MIN)     \
+               value = SPEED_MIN;
 
 
 class Automation
index f573c3ecce2d48b64a8c2dc4cfd2860de972676e..636eede386efd74a1c3dd4b02f9de55231551fdf 100644 (file)
@@ -43,6 +43,7 @@ enum
        AUTOMATION_PAN,
        AUTOMATION_MODE,
        AUTOMATION_MASK,
+// must be last or autos move when pasted due to speed pos shifts
        AUTOMATION_SPEED,
        AUTOMATION_TOTAL
 };
@@ -87,4 +88,11 @@ enum
        AUTOMATION_TYPE_PAN
 };
 
+#define SPEED_MIN 0.005
+#define SPEED_MAX 200.0
+#define ZOOM_MIN 0.001
+#define ZOOM_MAX 1000.
+#define XY_MIN -32767
+#define XY_MAX 32767
+
 #endif
index 73e89a917ceb448f5510379ecea05f6a63e74987..a48afbb508531f1abc99c477dbf9a6a46f853df5 100644 (file)
@@ -265,20 +265,21 @@ int Autos::auto_exists_for_editing(double position)
 
 Auto* Autos::get_auto_at_position(double position)
 {
-       int64_t unit_position = track->to_units(position, 0);
 
-       for(Auto *current = first;
-               current;
-               current = NEXT)
-       {
-               if(edl->equivalent(current->position, unit_position))
-               {
+       for( Auto *current=first; current; current=NEXT ) {
+               double pos = track->from_units(current->position);
+               if( edl->equivalent(position, pos) )
                        return current;
-               }
        }
        return 0;
 }
 
+Auto* Autos::get_auto(int id)
+{
+       Auto *current = first;
+       while( current && current->orig_id != id ) current = NEXT;
+       return current;
+}
 
 Auto* Autos::get_auto_for_editing(double position, int create)
 {
@@ -290,7 +291,7 @@ Auto* Autos::get_auto_for_editing(double position, int create)
        get_prev_auto(track->to_units(position, 0), PLAY_FORWARD, result);
        if( create > 0 ) create = edl->session->auto_keyframes;
        if( create && (!result || result->is_default ||
-              !EQUIV(track->from_units(result->position), position)) ) {
+           !EQUIV(track->from_units(result->position), position)) ) {
 //printf("Autos::get_auto_for_editing %p %p %p\n", default_auto, first, result);
                position = edl->align_to_frame(position, 0);
                result = insert_auto(track->to_units(position, 0));
@@ -383,10 +384,11 @@ Auto* Autos::insert_auto(int64_t position, Auto *templ)
 // Set curve mode
                if( !templ && result->is_floatauto() ) {
                        FloatAuto *floatauto = (FloatAuto *)result;
-                       floatauto->curve_mode =
+                       FloatAuto::t_mode new_mode =
                                edl->local_session->playback_start >= 0 &&
                                edl->local_session->playback_end < 0 ? FloatAuto::SMOOTH :
                                        (FloatAuto::t_mode) edl->local_session->floatauto_type;
+                       floatauto->change_curve_mode(new_mode, 0);
                }
        }
        else
index ee53f63a9c21494b90afbe426229d6f378331232..dcb997d8b76f8e5744843bfe7f3aa303ccc07849 100644 (file)
@@ -61,6 +61,7 @@ public:
        int auto_exists_for_editing(double position);
 // Returns auto at exact position, null if non-existent. ignores autokeyframming and align on frames
        Auto* get_auto_at_position(double position = -1);
+       Auto* get_auto(int id);
 
 // Get keyframe for editing with creation
 // create: <0: always new keyframe, =0: no new keyframe, >0: auto keyframe
index ba9617690a6edc76130b6703891ef27193862cf0..1629ba863984fa4109b4144a50ae409ac3318b8c 100644 (file)
@@ -189,7 +189,7 @@ int AVC1394GUISeekStart::handle_event()
 int  AVC1394GUISeekStart::keypress_event()
 {
        if(get_keypress() == HOME) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 
@@ -214,7 +214,7 @@ int AVC1394GUIRewind::handle_event()
 int  AVC1394GUIRewind::keypress_event()
 {
        if(get_keypress() == KPPLUS) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 AVC1394GUIReverse::AVC1394GUIReverse(MWindow *mwindow, AVC1394Control *avc, int x, int y)
@@ -246,7 +246,7 @@ int AVC1394GUIReverse::handle_event()
 int AVC1394GUIReverse::keypress_event()
 {
        if(get_keypress() == KP6) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 AVC1394GUIStop::AVC1394GUIStop(MWindow *mwindow, AVC1394Control *avc, int x, int y)
@@ -270,7 +270,7 @@ int AVC1394GUIStop::handle_event()
 int AVC1394GUIStop::keypress_event()
 {
        if(get_keypress() == KPINS) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 AVC1394GUIPlay::AVC1394GUIPlay(MWindow *mwindow, AVC1394Control *avc, int x, int y)
@@ -303,7 +303,7 @@ int AVC1394GUIPlay::handle_event()
 int AVC1394GUIPlay::keypress_event()
 {
        if(get_keypress() == KP3) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 AVC1394GUIPause::AVC1394GUIPause(MWindow *mwindow, AVC1394Control *avc, int x,
@@ -327,7 +327,7 @@ int AVC1394GUIPause::handle_event()
 
 int AVC1394GUIPause::keypress_event()
 {
-    return 0;
+    return context_help_check_and_show();
 }
 
 AVC1394GUIFForward::AVC1394GUIFForward(MWindow *mwindow, AVC1394Control *avc, int x, int y)
@@ -351,7 +351,7 @@ int AVC1394GUIFForward::handle_event()
 int AVC1394GUIFForward::keypress_event()
 {
        if(get_keypress() == KPENTER) return handle_event();
-    return 0;
+       return context_help_check_and_show();
 }
 
 
@@ -379,7 +379,7 @@ int AVC1394GUISeekEnd::handle_event()
 int AVC1394GUISeekEnd::keypress_event()
 {
        if(get_keypress() == END) return handle_event();
-     return 0;
+       return context_help_check_and_show();
 }
 
 #endif
index 1aa57e35b5ebf3eeb42ede875813adb50ec7a509..67c759180d05200a9034193f6e21e2887fbda066 100644 (file)
 #include "awindow.h"
 #include "awindowgui.h"
 #include "bccmodels.h"
-#include "bcsignals.h"
+#include "bcdisplayinfo.h"
 #include "bchash.h"
+#include "bcsignals.h"
+#include "bctimer.h"
 #include "binfolder.h"
 #include "cache.h"
 #include "cstrdup.h"
@@ -114,6 +116,8 @@ AssetVIcon::AssetVIcon(AssetPicon *picon, int w, int h, double framerate, int64_
 
 AssetVIcon::~AssetVIcon()
 {
+       if( picon->gui->vicon_thread->solo == this )
+               picon->gui->vicon_thread->solo = 0;
        picon->gui->vicon_thread->del_vicon(this);
        delete temp;
 }
@@ -124,7 +128,7 @@ VFrame *AssetVIcon::frame()
        AssetVIconThread *avt = picon->gui->vicon_thread;
        Indexable *idxbl = picon->indexable;
        Asset *asset = idxbl && idxbl->is_asset ? (Asset *)idxbl : 0;
-       if( !asset ) return vframes()>0 ? (VFrame*)*images[0] : 0;
+       if( !asset ) return vframes()>0 ? images[0]->vfrm : 0;
        if( !asset->video_data && audio_data && audio_size && length > 0 ) {
                if( !temp ) temp = new VFrame(0, -1, w, h, BC_RGB888, -1);
                temp->clear_frame();
@@ -162,30 +166,36 @@ VFrame *AssetVIcon::frame()
        }
        if( seq_no >= images.size() ) {
                MWindow *mwindow = picon->mwindow;
-               File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1);
-               if( !file ) {
-                       broken = 1;
-                       return 0;
-               }
                if( temp && (temp->get_w() != asset->width || temp->get_h() != asset->height) ) {
                        delete temp;  temp = 0;
                }
                if( !temp )
                        temp = new VFrame(0, -1, asset->width, asset->height, BC_RGB888, -1);
-               while( seq_no >= images.size() ) {
-                       mwindow->video_cache->check_in(asset);
-                       Thread::yield();
-                       file = mwindow->video_cache->check_out(asset, mwindow->edl, 0);
-                       if( !file ) { usleep(1000);  continue; }
-                       file->set_layer(0);
+               File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1);
+               if( !file ) { broken = 1;  return 0; }
+               Timer timer;
+               while( file && seq_no >= images.size() ) {
                        int64_t pos = images.size() / picon->gui->vicon_thread->refresh_rate * frame_rate;
                        file->set_video_position(pos,0);
+                       file->set_layer(0);
                        if( file->read_frame(temp) ) temp->clear_frame();
                        add_image(temp, vw, vh, vicon_cmodel);
+                       if( seq_no < images.size() ) break;
+                       mwindow->video_cache->check_in(asset);
+                       if( timer.get_difference() > 500 ) return 0;
+                       Thread::yield();
+                       if( avt->interrupted ) return 0;
+                       file = mwindow->video_cache->check_out(asset, mwindow->edl, 0);
+                       for( int retries=10; !file && --retries>=0; usleep(1000) ) {
+                               if( avt->interrupted ) return 0;
+                               file = mwindow->video_cache->check_out(asset, mwindow->edl, 0);
+                       }
+                       if( !file ) return 0;
                }
                mwindow->video_cache->check_in(asset);
        }
-       return *images[seq_no];
+       if( seq_no >= images.size() ) return 0;
+       return images[seq_no]->vfrm;
 }
 
 int64_t AssetVIcon::set_seq_no(int64_t no)
@@ -534,7 +544,7 @@ void AssetViewPopup::draw_vframe(VFrame *vframe)
        double total_length = edl->tracks->total_length();
        if( !total_length ) total_length = 1;
        for( Track *track=edl->tracks->first; track!=0; track=track->next ) {
-               if( !track->record ) continue;
+               if( !track->is_armed() ) continue;
                for( Edit *edit=track->edits->first; edit!=0; edit=edit->next ) {
                        Indexable *indexable = (Indexable *)edit->asset;
                        if( !indexable ) indexable = (Indexable *)edit->nested_edl;
@@ -605,22 +615,10 @@ AssetVIconThread::AssetVIconThread(AWindowGUI *gui, Preferences *preferences)
        case VICON_COLOR_MODE_HIGH:  vicon_cmodel = BC_RGB888;  break;
        }
        this->vicon_cmodel = vicon_cmodel;
-       this->draw_lock = new Mutex("AssetVIconThread::draw_lock");
 }
 
 AssetVIconThread::~AssetVIconThread()
 {
-       delete draw_lock;
-}
-
-void AssetVIconThread::drawing_started()
-{
-       draw_lock->lock("AssetVIconThread::drawing_started");
-}
-
-void AssetVIconThread::drawing_stopped()
-{
-       draw_lock->unlock();
 }
 
 void AssetVIconThread::set_view_popup(AssetVIcon *v, int draw_mode)
@@ -681,11 +679,11 @@ ViewPopup *AssetVIconThread::new_view_window(ViewPopup *vpopup)
        return av_popup;
 }
 
-void AssetVIconThread::close_view_popup()
+void AssetVIconThread::stop_vicon_drawing(int wait)
 {
        stop_drawing();
-       drawing_started(); // waits for draw lock
-       drawing_stopped();
+       gui->lock_window("AssetVIconThread::stop_vicon_drawing");
+       gui->unlock_window();
 }
 
 
@@ -950,6 +948,11 @@ void AssetPicon::create_objects()
                if( asset->video_data ) {
                        if( mwindow->preferences->use_thumbnails ) {
                                gui->unlock_window();
+                               char string[BCTEXTLEN];
+                               sprintf(string, _("Reading %s"), name);
+                               mwindow->gui->lock_window("AssetPicon::create_objects");
+                               mwindow->gui->show_message(string);
+                               mwindow->gui->unlock_window();
                                File *file = mwindow->video_cache->check_out(asset,
                                        mwindow->edl,
                                        1);
@@ -973,11 +976,6 @@ void AssetPicon::create_objects()
                                                        asset->width, asset->height,
                                                        BC_RGB888, -1);
                                        }
-                                       { char string[BCTEXTLEN];
-                                       sprintf(string, _("Reading %s"), name);
-                                       mwindow->gui->lock_window("AssetPicon::create_objects");
-                                       mwindow->gui->show_message(string);
-                                       mwindow->gui->unlock_window(); }
                                        file->read_frame(gui->temp_picon);
                                        mwindow->video_cache->check_in(asset);
 
@@ -1324,6 +1322,8 @@ AWindowGUI::AWindowGUI(MWindow *mwindow, AWindow *awindow)
        new_folder_thread = 0;
        modify_folder_thread = 0;
        folder_lock = new Mutex("AWindowGUI::folder_lock");
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Resources Window");
 }
 
 AWindowGUI::~AWindowGUI()
@@ -1695,17 +1695,12 @@ int AWindowGUI::start_vicon_drawing()
        return 1;
 }
 
-int AWindowGUI::stop_vicon_drawing()
+int AWindowGUI::stop_vicon_drawing(int wait)
 {
-       if( !vicon_thread->interrupted )
-               vicon_thread->stop_drawing();
+       vicon_thread->stop_vicon_drawing(wait);
        return 0;
 }
 
-void AWindowGUI::close_view_popup()
-{
-       vicon_thread->close_view_popup();
-}
 
 VFrame *AssetPicon::get_vicon_frame()
 {
@@ -1766,6 +1761,8 @@ AWindowRemovePluginGUI(AWindow *awindow, AWindowRemovePlugin *thread,
        VFrame *vframe = plugin->get_picon();
        icon = vframe ? create_pixmap(vframe) : 0;
        plugin_list.append(new BC_ListBoxItem(plugin->title, icon));
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Delete Plugins to save Resources Space");
 }
 
 AWindowRemovePluginGUI::
@@ -1879,6 +1876,8 @@ BC_Window* AWindowRemovePlugin::new_gui()
 
 int AWindowGUI::keypress_event()
 {
+       char title[BCTEXTLEN];
+       PluginServer* plugin = 0;
        switch( get_keypress() ) {
        case 'w': case 'W':
                if( ctrl_down() ) {
@@ -1900,7 +1899,7 @@ int AWindowGUI::keypress_event()
                return cycle_assetlist_format();
        case DELETE:
                if( shift_down() && ctrl_down() ) {
-                       PluginServer* plugin = selected_plugin();
+                       plugin = selected_plugin();
                        if( !plugin ) break;
                        remove_plugin = new AWindowRemovePlugin(awindow, plugin);
                        unlock_window();
@@ -1929,7 +1928,30 @@ int AWindowGUI::keypress_event()
                }
                break;
        }
-       return 0;
+// *** CONTEXT_HELP ***
+       if( get_keypress() != 'h' || ! alt_down() )         return 0;
+       if( ! is_tooltip_event_win() || ! cursor_inside() ) return 0;
+       // If some plugin is selected, show its help
+       // Otherwise show general help
+       plugin = selected_plugin();
+       if( plugin ) {
+               strcpy(title, plugin->title);
+               if( ! strcmp(title, "Overlay") ) {
+                       // "Overlay" plugin title is ambiguous
+                       if( plugin->audio ) strcat(title, " \\(Audio\\)");
+                       if( plugin->video ) strcat(title, " \\(Video\\)");
+               }
+               if( plugin->is_ffmpeg() ) {
+                       // FFmpeg plugins can be audio or video
+                       if( plugin->audio )
+                               strcpy(title, "FFmpeg Audio Plugins");
+                       if( plugin->video )
+                               strcpy(title, "FFmpeg Video Plugins");
+               }
+               context_help_show(title);
+       }
+       else context_help_show("Resources Window");
+       return 1;
 }
 
 
@@ -2083,6 +2105,21 @@ void AWindowGUI::update_asset_list()
                        AssetPicon *picon = new AssetPicon(mwindow,
                                this, current);
                        new_assets.append(picon);
+                       if( current->width > ASSET_MAX_WIDTH || current->height > ASSET_MAX_HEIGHT ) {
+                               eprintf(_("Warning: %s\n"
+                                       " dimensions %dx%d exceed asset maximum limits %dx%d\n"),
+                                       current->path, current->width, current->height,
+                                               ASSET_MAX_WIDTH, ASSET_MAX_HEIGHT);
+                       }
+                       else if( mwindow->edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL ) {
+                               int texture_limit = BC_DisplayInfo::get_gl_max_texture_size();
+                               if( texture_limit >= 0 &&
+                                   (current->width >= texture_limit || current->height >= texture_limit) ) {
+                                       eprintf(_("Warning: %s\n"
+                                               " dimensions %dx%d exceed OpenGL texture limit %d\n"),
+                                               current->path, current->width, current->height, texture_limit);
+                               }
+                       }
                }
        }
 
@@ -2207,14 +2244,16 @@ void AWindowGUI::sort_folders()
        update_assets();
 }
 
-EDL *AWindowGUI::collect_proxy(Indexable *indexable)
+EDL *AWindowGUI::collect_proxy(Asset *proxy_asset)
 {
-       Asset *proxy_asset = (Asset *)indexable;
        char path[BCTEXTLEN];
        int proxy_scale = mwindow->edl->session->proxy_scale;
        ProxyRender::from_proxy_path(path, proxy_asset, proxy_scale);
-       Asset *unproxy_asset = mwindow->edl->assets->get_asset(path);
-       if( !unproxy_asset || !unproxy_asset->layers ) return 0;
+       Indexable *unproxy_idxbl =
+               proxy_asset->proxy_edl ?
+                       (Indexable *) mwindow->edl->get_nested_edl(path) :
+                       (Indexable *) mwindow->edl->assets->get_asset(path);
+       if( !unproxy_idxbl || !unproxy_idxbl->get_video_layers() ) return 0;
 // make a clip from proxy video tracks and unproxy audio tracks
        EDL *proxy_edl = new EDL(mwindow->edl);
        proxy_edl->create_objects();
@@ -2223,7 +2262,7 @@ EDL *AWindowGUI::collect_proxy(Indexable *indexable)
        strcpy(proxy_edl->local_session->clip_title, path);
        strcpy(proxy_edl->local_session->clip_notes, _("Proxy clip"));
        proxy_edl->session->video_tracks = proxy_asset->layers;
-       proxy_edl->session->audio_tracks = unproxy_asset->channels;
+       proxy_edl->session->audio_tracks = unproxy_idxbl->get_audio_channels();
        proxy_edl->create_default_tracks();
        double length = proxy_asset->frame_rate > 0 ?
                ( proxy_asset->video_length >= 0 ?
@@ -2237,11 +2276,15 @@ EDL *AWindowGUI::collect_proxy(Indexable *indexable)
                if( current->data_type != TRACK_VIDEO ) continue;
                current->insert_asset(proxy_asset, 0, length, 0, vtrack++);
        }
-       length = (double)unproxy_asset->audio_length / unproxy_asset->sample_rate;
+       int64_t samples = unproxy_idxbl->get_audio_samples();
+       int sample_rate = unproxy_idxbl->get_sample_rate();
+       length = sample_rate > 0 ? (double)samples / sample_rate : 0;
        current = proxy_edl->tracks->first;
        for( int atrack=0; current; current=NEXT ) {
                if( current->data_type != TRACK_AUDIO ) continue;
-               current->insert_asset(unproxy_asset, 0, length, 0, atrack++);
+               Asset *asset = unproxy_idxbl->is_asset ? (Asset *)unproxy_idxbl : 0;
+               EDL *nested_edl = unproxy_idxbl->is_asset ? 0 : (EDL *)unproxy_idxbl;
+               current->insert_asset(asset, nested_edl, length, 0, atrack++);
        }
        proxy_edl->folder_no = AW_PROXY_FOLDER;
        return proxy_edl;
@@ -2257,7 +2300,7 @@ void AWindowGUI::collect_assets(int proxy)
                Indexable *indexable = result->indexable;
                if( proxy && indexable && indexable->is_asset &&
                    indexable->folder_no == AW_PROXY_FOLDER ) {
-                       EDL *drag_edl = collect_proxy(indexable);
+                       EDL *drag_edl = collect_proxy((Asset*)indexable);
                        if( drag_edl ) mwindow->session->drag_clips->append(drag_edl);
                        continue;
                }
@@ -2819,8 +2862,8 @@ int AWindowAssets::handle_event()
                break;
        }
        if( !vwindow || !vwindow->is_running() ) return 1;
-       if( proxy && picon_idxbl ) {
-               picon_edl = gui->collect_proxy(picon_idxbl);
+       if( proxy && picon_idxbl && picon_idxbl->is_asset ) {
+               picon_edl = gui->collect_proxy((Asset*)picon_idxbl);
                picon_idxbl = 0;
        }
 
@@ -2867,6 +2910,18 @@ int AWindowAssets::selection_changed()
 
                deactivate_selection();
        }
+       else if( get_button_down() && get_buttonpress() == LEFT_BUTTON &&
+                get_double_click() ) {
+               item = (AssetPicon*)get_selection(0, 0);
+               if( item ) {
+                       switch( folder ) {
+                       case AW_LABEL_FOLDER:
+                               if( !item->label ) break;
+                               mwindow->set_position(item->label->position);
+                               break;
+                       }
+               }
+       }
        else if( get_button_down() && !gui->play_off &&
                 mwindow->edl->session->assetlist_format != ASSETS_TEXT ) {
                item = (AssetPicon*)get_selection(0, 0);
@@ -3171,6 +3226,102 @@ void AWindowAssets::hide_tip_info()
        info_tip = -1;
 }
 
+// *** CONTEXT_HELP ***
+int AWindowAssets::keypress_event()
+{
+       int item;
+       char title[BCTEXTLEN];
+       AssetPicon *picon = 0;
+       PluginServer *plugin = 0;
+
+//     printf("AWindowAssets::keypress_event: %d\n", get_keypress());
+
+       // If not our context help keystroke, redispatch it
+       // to the event handler of the base class
+       if (get_keypress() != 'h' || ! alt_down() ||
+           ! is_tooltip_event_win() || ! cursor_inside())
+               return BC_ListBox::keypress_event();
+
+       switch (mwindow->edl->session->awindow_folder) {
+
+       case AW_AEFFECT_FOLDER:
+       case AW_VEFFECT_FOLDER:
+       case AW_ATRANSITION_FOLDER:
+       case AW_VTRANSITION_FOLDER:
+               // If plugin tips activated, show help for plugin under mouse
+               // Otherwise show help for the selected plugin
+               if (gui->tip_info) {
+                       item = BC_ListBox::get_highlighted_item();
+                       if (item >= 0 && item < gui->displayed_assets[0].size()) {
+                               picon = (AssetPicon *) gui->displayed_assets[0][item];
+                               if (picon) plugin = picon->plugin;
+                       }
+               }
+               else plugin = gui->selected_plugin();
+               // If some plugin is highlighted or selected, show its help
+               // Otherwise show more general help
+               if (plugin) {
+                       strcpy(title, plugin->title);
+                       if (! strcmp(title, "Overlay")) {
+                               // "Overlay" plugin title is ambiguous
+                               if (plugin->audio)
+                                       strcat(title, " \\(Audio\\)");
+                               if (plugin->video)
+                                       strcat(title, " \\(Video\\)");
+                       }
+                       if (plugin->is_ffmpeg()) {
+                               // FFmpeg plugins can be audio or video
+                               if (plugin->audio)
+                                       strcpy(title, "FFmpeg Audio Plugins");
+                               if (plugin->video)
+                                       strcpy(title, "FFmpeg Video Plugins");
+                       }
+                       context_help_show(title);
+                       return 1;
+               }
+               else {
+                       switch (mwindow->edl->session->awindow_folder) {
+                       case AW_AEFFECT_FOLDER:
+                               context_help_show("Audio Effects");
+                               return 1;
+                       case AW_VEFFECT_FOLDER:
+                               context_help_show("Video Effects");
+                               return 1;
+                       case AW_ATRANSITION_FOLDER:
+                               context_help_show("Audio Transitions");
+                               return 1;
+                       case AW_VTRANSITION_FOLDER:
+                               context_help_show("Video Transitions");
+                               return 1;
+                       default:
+                               context_help_show("Resources Window");
+                               return 1;
+                       }
+                       context_help_show("Resources Window");
+                       return 1;
+               }
+
+       case AW_LABEL_FOLDER:
+               context_help_show("Labels");
+               return 1;
+
+       case AW_CLIP_FOLDER:
+               context_help_show("Nested Clips");
+               return 1;
+
+       case AW_PROXY_FOLDER:
+               context_help_show("Proxy");
+               return 1;
+
+       default:
+               context_help_show("Resources Window");
+               return 1;
+       }
+
+       context_help_show("Resources Window");
+       return 1;
+}
+
 
 AWindowSearchTextBox::AWindowSearchTextBox(AWindowSearchText *search_text, int x, int y, int w)
  : BC_TextBox(x, y, w, 1, "")
index 6004247d4f158ec25264b05ff304e8cb6fe22f7a..311e3da1afa89cdcd27f4344367731772a1291ea 100644 (file)
@@ -208,14 +208,11 @@ public:
        void set_view_popup(AssetVIcon *v, int draw_mode);
        void set_view_popup(AssetVIcon *v);
        ViewPopup *new_view_window(ViewPopup *popup);
-       void drawing_started();
-       void drawing_stopped();
-       void close_view_popup();
+       void stop_vicon_drawing(int wait=0);
 
        AWindowGUI *gui;
        int draw_mode;
        int vicon_cmodel;
-       Mutex *draw_lock;
 };
 
 
@@ -271,7 +268,7 @@ public:
        int drag_stop();
 // Collect items into the drag vectors of MainSession
        void collect_assets(int proxy=0);
-       EDL *collect_proxy(Indexable *indexable);
+       EDL *collect_proxy(Asset *asset);
        void create_persistent_folder(ArrayList<BC_ListBoxItem*> *output,
                int do_audio,
                int do_video,
@@ -288,8 +285,7 @@ public:
        int save_defaults(BC_Hash *defaults);
        int load_defaults(BC_Hash *defaults);
        int start_vicon_drawing();
-       int stop_vicon_drawing();
-       void close_view_popup();
+       int stop_vicon_drawing(int wait=0);
        void update_picon(Indexable *indexable);
        int cycle_assetlist_format();
        void hide_tip_info();
@@ -416,6 +412,8 @@ public:
        int mouse_over_event(int no);
        void show_tip_info(const char *info, int no);
        void hide_tip_info();
+// *** CONTEXT_HELP ***
+       int keypress_event();
 
        MWindow *mwindow;
        AWindowGUI *gui;
index 9703361cb8b04167e26dc8e21c7f55a78e808b55..ace9e562ff735510f53027275484b639b9c72f48 100644 (file)
@@ -60,6 +60,8 @@
 #include "dvdcreate.h"
 #include "bdcreate.h"
 
+#include <stdlib.h>
+
 int BatchRenderThread::column_widths[] = { 42, 42, 42, 222, 222, 150 };
 const char *BatchRenderThread::column_titles[] = {
        N_("Enabled"), N_("Labeled"), N_("Farmed"), N_("Output"), N_("EDL"), N_("Elapsed")
@@ -121,6 +123,8 @@ BatchRenderJob *BatchRenderJob::copy()
 void BatchRenderJob::load(FileXML *file)
 {
        int result = 0;
+       char job_title[BCSTRLEN];
+       strcpy(job_title, file->tag.title);
 
        enabled = file->tag.get_property("ENABLED", enabled);
        farmed = file->tag.get_property("FARMED", farmed);
@@ -138,7 +142,7 @@ void BatchRenderJob::load(FileXML *file)
 // coding maintenance.  The defaults must now be stuffed into the XML for
 // unique storage.
                        BC_Hash defaults;
-                       defaults.load_string(file->read_text());
+                       defaults.load_string(file->read_text(job_title));
                        asset->load_defaults(&defaults,
                                "", 0, 1, 0, 0, 0);
                }
@@ -179,7 +183,9 @@ char *BatchRenderJob::create_script(EDL *edl, ArrayList<Indexable *> *idxbls)
 
 int BatchRenderJob::get_strategy()
 {
-       return Render::get_strategy(farmed, labeled);
+       int range = File::is_image_render(asset->format) ?
+               RANGE_1FRAME : RANGE_SELECTION;
+       return Render::get_strategy(farmed, labeled, range);
 }
 
 
@@ -193,7 +199,7 @@ BatchRenderThread::BatchRenderThread(MWindow *mwindow)
        default_job = 0;
        boot_defaults = 0;
        preferences = 0;
-       warn = 1;
+       warn = 0;
        render = 0;
        batch_path[0] = 0;
        do_farmed = 0;
@@ -264,7 +270,10 @@ void BatchRenderThread::load_jobs(char *path, Preferences *preferences)
        while( !result ) {
                if( !(result = file.read_tag()) ) {
                        if( file.tag.title_is("JOBS") ) {
+                               if (mwindow && mwindow->preferences->unsafe_gui)
                                warn = file.tag.get_property("WARN", 1);
+                               if (mwindow && !mwindow->preferences->unsafe_gui)
+                               warn = 0;
                        }
                        else if( file.tag.title_is("JOB") ) {
                                BatchRenderJob *job =  new BatchRenderJob(preferences, 0,0);
@@ -289,6 +298,7 @@ void BatchRenderThread::save_jobs(char *path)
 {
        FileXML file;
        file.tag.set_title("JOBS");
+       if (mwindow && mwindow->preferences->unsafe_gui)
        file.tag.set_property("WARN", warn);
        file.append_tag();
        file.append_newline();
@@ -383,6 +393,9 @@ void BatchRenderThread::update_selected_edl()
         FileXML xml_file;
        char *path = get_current_edl();
        EDL *edl = mwindow->edl;
+       // result = 1 if user cancelled operation
+       int result = ConfirmSave::test_file(mwindow, path);
+       if (!result) {
         edl->save_xml(&xml_file, path);
         xml_file.terminate_string();
         if( xml_file.write_to_file(path) ) {
@@ -390,6 +403,7 @@ void BatchRenderThread::update_selected_edl()
                sprintf(msg, _("Unable to save: %s"), path);
                MainError::show_error(msg);
        }
+       }
 }
 
 BatchRenderJob* BatchRenderThread::get_current_job()
@@ -729,6 +743,8 @@ BatchRenderGUI::BatchRenderGUI(MWindow *mwindow,
        this->mwindow = mwindow;
        this->thread = thread;
        use_renderfarm = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Batch Rendering");
 }
 
 BatchRenderGUI::~BatchRenderGUI()
@@ -788,8 +804,10 @@ void BatchRenderGUI::create_objects()
        y2 = y + edl_path_browse->get_h() + mwindow->theme->widget_border;
 
        x = x2;  y = y2;
+       if (mwindow->preferences->unsafe_gui) {
        add_subwindow(update_selected_edl = new BatchRenderUpdateEDL(thread, x, y));
        y += update_selected_edl->get_h() + mwindow->theme->widget_border;
+       }
        add_subwindow(use_current_edl = new BatchRenderCurrentEDL(thread, x, y));
        y += use_current_edl->get_h() + mwindow->theme->widget_border;
        if( !mwindow->edl || !mwindow->edl->path[0] ) use_current_edl->disable();
@@ -801,8 +819,10 @@ void BatchRenderGUI::create_objects()
        x += savelist_batch->get_w() + mwindow->theme->widget_border;
        add_subwindow(loadlist_batch = new BatchRenderLoadList(thread, x, y));
        y += loadlist_batch->get_h() + mwindow->theme->widget_border;
+       if (mwindow->preferences->unsafe_gui) {
        add_subwindow(warning = new BatchRenderWarning(thread, x2, y));
        y2 = y + warning->get_h() + mwindow->theme->widget_border;
+       }
        if( y2 > y1 ) y1 = y2;
        x = mwindow->theme->batchrender_x1, y = y1;
 
@@ -817,8 +837,10 @@ void BatchRenderGUI::create_objects()
        y += batch_list->get_h() + mwindow->theme->widget_border;
 
        add_subwindow(start_button = new BatchRenderStart(thread, x, y));
-       x = get_w() / 2 - BC_GenericButton::calculate_w(this, _("Stop")) / 2;
+       x = get_w() / 3 - BC_GenericButton::calculate_w(this, _("Stop")) / 3;
        add_subwindow(stop_button = new BatchRenderStop(thread, x, y));
+       x = get_w() / 1.5 - BC_GenericButton::calculate_w(this, _("?")) / 1.5;
+       add_subwindow(help_button = new BatchRenderHelp(thread, x, y));
        x = get_w() - BC_GenericButton::calculate_w(this, _("Close")) - xs10;
        add_subwindow(cancel_button = new BatchRenderCancel(thread, x, y));
 
@@ -831,6 +853,7 @@ void BatchRenderGUI::button_disable()
        new_batch->disable();
        delete_batch->disable();
        use_current_edl->disable();
+       if (mwindow->preferences->unsafe_gui)
        update_selected_edl->disable();
 }
 
@@ -840,6 +863,7 @@ void BatchRenderGUI::button_enable()
        delete_batch->enable();
        if( mwindow->edl && mwindow->edl->path[0] )
                use_current_edl->enable();
+       if (mwindow->preferences->unsafe_gui)
        update_selected_edl->enable();
 }
 
@@ -872,8 +896,10 @@ int BatchRenderGUI::resize_event(int w, int h)
        y2 = y + edl_path_browse->get_h() + mwindow->theme->widget_border;
 
        x = x2;  y = y2;
+       if (mwindow->preferences->unsafe_gui) {
        update_selected_edl->reposition_window(x, y);
        y += update_selected_edl->get_h() + mwindow->theme->widget_border;
+       }
        use_current_edl->reposition_window(x, y);
        y += use_current_edl->get_h() + mwindow->theme->widget_border;
        new_batch->reposition_window(x, y);
@@ -885,8 +911,9 @@ int BatchRenderGUI::resize_event(int w, int h)
        x += savelist_batch->get_w() + mwindow->theme->widget_border;
        loadlist_batch->reposition_window(x, y);
        y += loadlist_batch->get_h() + mwindow->theme->widget_border;
+       if (mwindow->preferences->unsafe_gui) {
        warning->reposition_window(x2, y);
-
+       }
        y1 = ys15 + BC_GenericButton::calculate_h() + mwindow->theme->widget_border;
        y2 = get_h() - y1 - batch_list->get_h();
        y2 -= list_title->get_h() + mwindow->theme->widget_border;
@@ -898,10 +925,12 @@ int BatchRenderGUI::resize_event(int w, int h)
        y += batch_list->get_h() + mwindow->theme->widget_border;
 
        start_button->reposition_window(x, y);
-       x = w / 2 - stop_button->get_w() / 2;
+       x = w / 3 - stop_button->get_w() / 3;
        stop_button->reposition_window(x, y);
        x = w - cancel_button->get_w() - xs10;
        cancel_button->reposition_window(x, y);
+       x = w / 1.5 - help_button->get_w() / 1.5;
+       help_button->reposition_window(x, y);
        return 1;
 }
 
@@ -1040,6 +1069,7 @@ BatchRenderNew::BatchRenderNew(BatchRenderThread *thread,
  : BC_GenericButton(x, y, _("New"))
 {
        this->thread = thread;
+       set_tooltip(_("Create a new batch"));
 }
 
 int BatchRenderNew::handle_event()
@@ -1052,6 +1082,7 @@ BatchRenderDelete::BatchRenderDelete(BatchRenderThread *thread, int x, int y)
  : BC_GenericButton(x, y, _("Delete"))
 {
        this->thread = thread;
+       set_tooltip(_("Delete loaded (highlighted) batch"));
 }
 
 int BatchRenderDelete::handle_event()
@@ -1134,7 +1165,7 @@ void BatchRenderSaveList::run()
 int BatchRenderSaveList::keypress_event() {
        if( get_keypress() == 's' ||
            get_keypress() == 'S' ) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 
@@ -1196,6 +1227,7 @@ void BatchRenderLoadList::run()
 
        int result2 = filewindow.run_window();
        if( !result2 ) {
+               thread->gui->lock_window("BatchRenderLoadList::run");
                strcpy(thread->batch_path, filewindow.get_submitted_path());
                thread->gui->batch_path->update(thread->batch_path);
                thread->mwindow->defaults->update("DEFAULT_BATCHLOADPATH", thread->batch_path);
@@ -1203,6 +1235,7 @@ void BatchRenderLoadList::run()
                thread->gui->create_list(1);
                thread->current_job = 0;
                thread->gui->change_job();
+               thread->gui->unlock_window();
        }
 
        startup_lock->lock("BatchRenderLoadList::run");
@@ -1213,7 +1246,7 @@ void BatchRenderLoadList::run()
 int BatchRenderLoadList::keypress_event() {
        if( get_keypress() == 'o' ||
            get_keypress() == 'O' ) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 BatchRenderCurrentEDL::BatchRenderCurrentEDL(BatchRenderThread *thread,
@@ -1222,6 +1255,7 @@ BatchRenderCurrentEDL::BatchRenderCurrentEDL(BatchRenderThre