bd/dvd create reworks, Makefile updates
authorGood Guy <good1.2guy@gmail.com>
Fri, 17 Jun 2016 20:54:39 +0000 (14:54 -0600)
committerGood Guy <good1.2guy@gmail.com>
Fri, 17 Jun 2016 20:54:39 +0000 (14:54 -0600)
44 files changed:
cinelerra-5.1/Makefile.am
cinelerra-5.1/Makefile.devel
cinelerra-5.1/cinelerra/Makefile
cinelerra-5.1/cinelerra/batchrender.C
cinelerra-5.1/cinelerra/batchrender.h
cinelerra-5.1/cinelerra/bdcreate.C
cinelerra-5.1/cinelerra/bdcreate.h
cinelerra-5.1/cinelerra/dvdcreate.C
cinelerra-5.1/cinelerra/dvdcreate.h
cinelerra-5.1/cinelerra/edl.h
cinelerra-5.1/cinelerra/edlsession.C
cinelerra-5.1/cinelerra/filempeg.C
cinelerra-5.1/cinelerra/interfaceprefs.C
cinelerra-5.1/cinelerra/mwindow.C
cinelerra-5.1/cinelerra/mwindow.h
cinelerra-5.1/cinelerra/preferences.h
cinelerra-5.1/cinelerra/rescale.C [new file with mode: 0644]
cinelerra-5.1/cinelerra/rescale.h [new file with mode: 0644]
cinelerra-5.1/cinelerra/wwindow.C
cinelerra-5.1/cinelerra/wwindow.h
cinelerra-5.1/configure.ac
cinelerra-5.1/db/Makefile
cinelerra-5.1/db/utils/Makefile
cinelerra-5.1/doc/Makefile
cinelerra-5.1/doc/cinelerra.html
cinelerra-5.1/ffmpeg/video/avc422.m2ts [moved from cinelerra-5.1/ffmpeg/video/bluray422.m2ts with 100% similarity]
cinelerra-5.1/ffmpeg/video/hevc422p10.m2ts [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/hevc422p8.m2ts [new file with mode: 0644]
cinelerra-5.1/guicast/Makefile
cinelerra-5.1/libzmpeg3/Makefile
cinelerra-5.1/mpeg2enc/Makefile
cinelerra-5.1/mplexlo/Makefile
cinelerra-5.1/plugin_config
cinelerra-5.1/plugin_defs
cinelerra-5.1/plugins/Makefile
cinelerra-5.1/plugins/scaleratio/.gdb_history [new file with mode: 0644]
cinelerra-5.1/plugins/scaleratio/Makefile [new file with mode: 0644]
cinelerra-5.1/plugins/scaleratio/picon.png [new file with mode: 0644]
cinelerra-5.1/plugins/scaleratio/scaleratio.C [new file with mode: 0644]
cinelerra-5.1/plugins/scaleratio/scaleratio.h [new file with mode: 0644]
cinelerra-5.1/plugins/scaleratio/scaleratiowin.C [new file with mode: 0644]
cinelerra-5.1/plugins/scaleratio/scaleratiowin.h [new file with mode: 0644]
cinelerra-5.1/po/Makefile
cinelerra-5.1/thirdparty/Makefile

index a3d3aa64f8389a19d71ccc9c5acc27fd04041fee..b15546ca57fec572ef824e23ce97e25a3aab2e46 100644 (file)
@@ -1,8 +1,8 @@
-PKG_CFLAGS_ := $(CFLAGS)
-PKG_CXXFLAGS_ := $(CXXFLAGS)
-PKG_LDFLAGS_ := $(LDFLAGS)
+CFLAGS_ := $(CFLAGS)
+CXXFLAGS_ := $(CXXFLAGS)
+LDFLAGS_ := $(LDFLAGS)
 
-export PKG_CFLAGS_ PKG_CXXFLAGS_ PKG_LDFLAGS_
+export CFLAGS_ CXXFLAGS_ LDFLAGS_
 unexport CFLAGS CXXFLAGS LDFLAGS
 
 AM_MAKEFLAGS := -j$(WANT_JOBS)
index 7996f3223ae5ff5ade69d7ddccab6a7660d7d1ba..beb20ec0f23a0db52dbd3a7e367a21f5ee4d44e7 100644 (file)
@@ -2,7 +2,7 @@
 
 TOPDIR := $(CURDIR)
 CFLAGS ?= -ggdb
-export CFLAGS
+export CFLAGS_ := $(CFLAGS)
 
 cpus:=$(shell grep -c "^proc" /proc/cpuinfo)
 jobs:=-j$(shell echo $$(($(cpus) + $(cpus)/2 +2)))
index 9715e368248d8cc9f2f46db69b4bf8f4667fc78b..8abbcdc36ac97d9cda85ba85e79e5c425c6dae31 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 OBJS = \
@@ -13,15 +12,15 @@ OBJS = \
        $(OBJDIR)/amodule.o \
        $(OBJDIR)/androidcontrol.o \
        $(OBJDIR)/apatchgui.o \
-       $(OBJDIR)/aplugin.o \
        $(OBJDIR)/apluginarray.o \
+       $(OBJDIR)/aplugin.o \
        $(OBJDIR)/apluginset.o \
        $(OBJDIR)/arender.o \
        $(OBJDIR)/assetedit.o \
+       $(OBJDIR)/asset.o \
        $(OBJDIR)/assetpopup.o \
        $(OBJDIR)/assetremove.o \
        $(OBJDIR)/assets.o \
-       $(OBJDIR)/asset.o \
        $(OBJDIR)/atrack.o \
        $(OBJDIR)/attachmentpoint.o \
        $(OBJDIR)/audio1394.o \
@@ -30,56 +29,66 @@ OBJS = \
        $(OBJDIR)/audiodvb.o \
        $(OBJDIR)/audioesound.o \
        $(OBJDIR)/audioidevice.o \
+       $(OBJDIR)/audiompeg.o \
        $(OBJDIR)/audioodevice.o \
        $(OBJDIR)/audiooss.o \
-       $(OBJDIR)/auto.o \
-       $(OBJDIR)/autos.o \
+       $(OBJDIR)/audiov4l2mpeg.o \
        $(OBJDIR)/autoconf.o \
        $(OBJDIR)/automation.o \
+       $(OBJDIR)/auto.o \
+       $(OBJDIR)/autos.o \
        $(OBJDIR)/avc1394control.o \
        $(OBJDIR)/avc1394transport.o \
-       $(OBJDIR)/awindow.o \
        $(OBJDIR)/awindowgui.o \
        $(OBJDIR)/awindowmenu.o \
+       $(OBJDIR)/awindow.o \
        $(OBJDIR)/batch.o \
        $(OBJDIR)/batchrender.o \
+       $(OBJDIR)/bdcreate.o \
        $(OBJDIR)/bitspopup.o \
        $(OBJDIR)/brender.o \
        $(OBJDIR)/browsebutton.o \
        $(OBJDIR)/byteorderpopup.o \
-       $(OBJDIR)/cache.o \
        $(OBJDIR)/cachebase.o \
+       $(OBJDIR)/cache.o \
        $(OBJDIR)/canvas.o \
        $(OBJDIR)/canvastools.o \
-       $(OBJDIR)/channel.o \
        $(OBJDIR)/channeldb.o \
        $(OBJDIR)/channeledit.o \
+       $(OBJDIR)/channelinfo.o \
+       $(OBJDIR)/channel.o \
        $(OBJDIR)/channelpicker.o \
        $(OBJDIR)/chantables.o \
-       $(OBJDIR)/clipedit.o \
        $(OBJDIR)/cicolors.o \
+       $(OBJDIR)/clipedit.o \
        $(OBJDIR)/colorpicker.o \
+       $(OBJDIR)/commercials.o \
        $(OBJDIR)/commonrender.o \
-       $(OBJDIR)/confirmsave.o \
        $(OBJDIR)/confirmquit.o \
+       $(OBJDIR)/confirmsave.o \
        $(OBJDIR)/cpanel.o \
        $(OBJDIR)/cplayback.o \
        $(OBJDIR)/ctimebar.o \
        $(OBJDIR)/ctracking.o \
        $(OBJDIR)/cursor.o \
-       $(OBJDIR)/cwindow.o \
        $(OBJDIR)/cwindowgui.o \
+       $(OBJDIR)/cwindow.o \
        $(OBJDIR)/cwindowtool.o \
+       $(OBJDIR)/dbwindow.o \
        $(OBJDIR)/dcoffset.o \
+       $(OBJDIR)/deleteallindexes.o \
        $(OBJDIR)/device1394input.o \
-       $(OBJDIR)/devicedvbinput.o \
        $(OBJDIR)/device1394output.o \
-       $(OBJDIR)/deleteallindexes.o \
-       $(OBJDIR)/dvbtune.o \
+       $(OBJDIR)/devicedvbinput.o \
+       $(OBJDIR)/devicempeginput.o \
+       $(OBJDIR)/devicev4l2base.o \
+       $(OBJDIR)/devicev4l2input.o \
        $(OBJDIR)/drivesync.o \
-       $(OBJDIR)/edit.o \
+       $(OBJDIR)/dvbtune.o \
+       $(OBJDIR)/dvdcreate.o \
        $(OBJDIR)/edithandles.o \
        $(OBJDIR)/editlength.o \
+       $(OBJDIR)/edit.o \
        $(OBJDIR)/editpanel.o \
        $(OBJDIR)/editpopup.o \
        $(OBJDIR)/edits.o \
@@ -88,21 +97,22 @@ OBJS = \
        $(OBJDIR)/exportedl.o \
        $(OBJDIR)/fadeengine.o \
        $(OBJDIR)/ffmpeg.o \
-       $(OBJDIR)/file.o \
        $(OBJDIR)/fileac3.o \
-       $(OBJDIR)/filebase.o \
        $(OBJDIR)/filebaseaudio.o \
+       $(OBJDIR)/filebase.o \
        $(OBJDIR)/filebaseulaw.o \
        $(OBJDIR)/filecr2.o \
-       $(OBJDIR)/fileffmpeg.o \
+       $(OBJDIR)/filedb.o \
        $(OBJDIR)/filedv.o \
        $(OBJDIR)/fileexr.o \
+       $(OBJDIR)/fileffmpeg.o \
        $(OBJDIR)/fileflac.o \
        $(OBJDIR)/fileformat.o \
        $(OBJDIR)/filegif.o \
-       $(OBJDIR)/filelist.o \
        $(OBJDIR)/filejpeg.o \
+       $(OBJDIR)/filelist.o \
        $(OBJDIR)/filempeg.o \
+       $(OBJDIR)/file.o \
        $(OBJDIR)/fileogg.o \
        $(OBJDIR)/filepng.o \
        $(OBJDIR)/filescene.o \
@@ -115,14 +125,14 @@ OBJS = \
        $(OBJDIR)/floatauto.o \
        $(OBJDIR)/floatautos.o \
        $(OBJDIR)/formatcheck.o \
-       $(OBJDIR)/formatpresets.o \
        $(OBJDIR)/formatpopup.o \
+       $(OBJDIR)/formatpresets.o \
        $(OBJDIR)/formattools.o \
        $(OBJDIR)/fourier.o \
        $(OBJDIR)/framecache.o \
        $(OBJDIR)/garbage.o \
-       $(OBJDIR)/gwindow.o \
        $(OBJDIR)/gwindowgui.o \
+       $(OBJDIR)/gwindow.o \
        $(OBJDIR)/iec61883input.o \
        $(OBJDIR)/iec61883output.o \
        $(OBJDIR)/indexable.o \
@@ -133,28 +143,28 @@ OBJS = \
        $(OBJDIR)/intautos.o \
        $(OBJDIR)/interfaceprefs.o \
        $(OBJDIR)/interlacemodes.o \
-       $(OBJDIR)/keyframe.o \
        $(OBJDIR)/keyframegui.o \
+       $(OBJDIR)/keyframehandles.o \
+       $(OBJDIR)/keyframe.o \
        $(OBJDIR)/keyframepopup.o \
        $(OBJDIR)/keyframes.o \
-       $(OBJDIR)/keyframehandles.o \
        $(OBJDIR)/labeledit.o \
        $(OBJDIR)/labelnavigate.o \
        $(OBJDIR)/labels.o \
-       $(OBJDIR)/levelwindow.o \
        $(OBJDIR)/levelwindowgui.o \
+       $(OBJDIR)/levelwindow.o \
        $(OBJDIR)/libdv.o \
        $(OBJDIR)/libmjpeg.o \
        $(OBJDIR)/loadbalance.o \
        $(OBJDIR)/loadfile.o \
        $(OBJDIR)/loadmode.o \
        $(OBJDIR)/localsession.o \
-       $(OBJDIR)/main.o \
        $(OBJDIR)/mainclock.o \
        $(OBJDIR)/maincursor.o \
        $(OBJDIR)/mainerror.o \
        $(OBJDIR)/mainindexes.o \
        $(OBJDIR)/mainmenu.o \
+       $(OBJDIR)/main.o \
        $(OBJDIR)/mainprogress.o \
        $(OBJDIR)/mainsession.o \
        $(OBJDIR)/mainundo.o \
@@ -163,6 +173,7 @@ OBJS = \
        $(OBJDIR)/maskautos.o \
        $(OBJDIR)/maskengine.o \
        $(OBJDIR)/mbuttons.o \
+       $(OBJDIR)/mediadb.o \
        $(OBJDIR)/menuaeffects.o \
        $(OBJDIR)/menuattacheffect.o \
        $(OBJDIR)/menuattachtransition.o \
@@ -173,13 +184,13 @@ OBJS = \
        $(OBJDIR)/meterpanel.o \
        $(OBJDIR)/module.o \
        $(OBJDIR)/mtimebar.o \
-       $(OBJDIR)/mwindow.o \
        $(OBJDIR)/mwindowedit.o \
        $(OBJDIR)/mwindowgui.o \
        $(OBJDIR)/mwindowmove.o \
+       $(OBJDIR)/mwindow.o \
        $(OBJDIR)/nestededls.o \
-       $(OBJDIR)/new.o \
        $(OBJDIR)/newfolder.o \
+       $(OBJDIR)/new.o \
        $(OBJDIR)/overlayframe.o \
        $(OBJDIR)/packagedispatcher.o \
        $(OBJDIR)/packagerenderer.o \
@@ -197,75 +208,83 @@ OBJS = \
        $(OBJDIR)/playbackengine.o \
        $(OBJDIR)/playbackprefs.o \
        $(OBJDIR)/playtransport.o \
-       $(OBJDIR)/plugin.o \
-       $(OBJDIR)/pluginaclient.o \
        $(OBJDIR)/pluginaclientlad.o \
+       $(OBJDIR)/pluginaclient.o \
        $(OBJDIR)/pluginarray.o \
        $(OBJDIR)/pluginclient.o \
        $(OBJDIR)/plugindialog.o \
+       $(OBJDIR)/pluginfclient.o \
+       $(OBJDIR)/plugin.o \
        $(OBJDIR)/pluginpopup.o \
-       $(OBJDIR)/pluginset.o \
        $(OBJDIR)/pluginserver.o \
+       $(OBJDIR)/pluginset.o \
        $(OBJDIR)/plugintclient.o \
        $(OBJDIR)/plugintoggles.o \
        $(OBJDIR)/pluginvclient.o \
        $(OBJDIR)/preferences.o \
        $(OBJDIR)/preferencesthread.o \
-       $(OBJDIR)/presets.o \
        $(OBJDIR)/presetsgui.o \
+       $(OBJDIR)/presets.o \
        $(OBJDIR)/question.o \
        $(OBJDIR)/quit.o \
        $(OBJDIR)/recconfirmdelete.o \
-       $(OBJDIR)/record.o \
        $(OBJDIR)/recordableatracks.o \
        $(OBJDIR)/recordablevtracks.o \
        $(OBJDIR)/recordaudio.o \
+       $(OBJDIR)/recordbatches.o \
        $(OBJDIR)/recordconfig.o \
        $(OBJDIR)/recordgui.o \
        $(OBJDIR)/recordlabel.o \
        $(OBJDIR)/recordmonitor.o \
+       $(OBJDIR)/record.o \
        $(OBJDIR)/recordprefs.o \
        $(OBJDIR)/recordscopes.o \
        $(OBJDIR)/recordthread.o \
        $(OBJDIR)/recordtransport.o \
        $(OBJDIR)/recordvideo.o \
+       $(OBJDIR)/remotecontrol.o \
        $(OBJDIR)/removefile.o \
-       $(OBJDIR)/render.o \
-       $(OBJDIR)/renderfarm.o \
-       $(OBJDIR)/renderfarmclient.o \
        $(OBJDIR)/renderengine.o \
+       $(OBJDIR)/renderfarmclient.o \
+       $(OBJDIR)/renderfarm.o \
+       $(OBJDIR)/render.o \
        $(OBJDIR)/renderprofiles.o \
        $(OBJDIR)/resample.o \
+       $(OBJDIR)/rescale.o \
        $(OBJDIR)/resizetrackthread.o \
        $(OBJDIR)/resourcepixmap.o \
        $(OBJDIR)/resourcethread.o \
-       $(OBJDIR)/samples.o \
        $(OBJDIR)/samplescroll.o \
+       $(OBJDIR)/samples.o \
        $(OBJDIR)/savefile.o \
        $(OBJDIR)/scenegraph.o \
        $(OBJDIR)/scopewindow.o \
        $(OBJDIR)/setformat.o \
        $(OBJDIR)/sha1.o \
        $(OBJDIR)/sharedlocation.o \
+       $(OBJDIR)/shbtnprefs.o \
        $(OBJDIR)/shmemory.o \
        $(OBJDIR)/sighandler.o \
+       $(OBJDIR)/signalstatus.o \
        $(OBJDIR)/splashgui.o \
        $(OBJDIR)/statusbar.o \
+       $(OBJDIR)/strack.o \
+       $(OBJDIR)/swindow.o \
        $(OBJDIR)/theme.o \
        $(OBJDIR)/threadexec.o \
        $(OBJDIR)/threadloader.o \
-       $(OBJDIR)/timelinepane.o \
        $(OBJDIR)/timebar.o \
        $(OBJDIR)/timeentry.o \
+       $(OBJDIR)/timelinepane.o \
        $(OBJDIR)/tipwindow.o \
-       $(OBJDIR)/track.o \
        $(OBJDIR)/trackcanvas.o \
        $(OBJDIR)/tracking.o \
-       $(OBJDIR)/tracks.o \
+       $(OBJDIR)/track.o \
        $(OBJDIR)/trackscroll.o \
        $(OBJDIR)/tracksedit.o \
-       $(OBJDIR)/transition.o \
+       $(OBJDIR)/tracks.o \
        $(OBJDIR)/transitionhandles.o \
+       $(OBJDIR)/transition.o \
        $(OBJDIR)/transitionpopup.o \
        $(OBJDIR)/transportque.o \
        $(OBJDIR)/tunerserver.o \
@@ -276,59 +295,39 @@ OBJS = \
        $(OBJDIR)/vdevicebase.o \
        $(OBJDIR)/vdevicebuz.o \
        $(OBJDIR)/vdevicedvb.o \
+       $(OBJDIR)/vdevicempeg.o \
        $(OBJDIR)/vdeviceprefs.o \
-       $(OBJDIR)/vdevicev4l.o \
-       $(OBJDIR)/vdevicev4l2.o \
        $(OBJDIR)/vdevicev4l2jpeg.o \
+       $(OBJDIR)/vdevicev4l2mpeg.o \
+       $(OBJDIR)/vdevicev4l2.o \
+       $(OBJDIR)/vdevicev4l.o \
        $(OBJDIR)/vdevicex11.o \
        $(OBJDIR)/vedit.o \
        $(OBJDIR)/vedits.o \
        $(OBJDIR)/videodevice.o \
        $(OBJDIR)/viewmenu.o \
-       $(OBJDIR)/virtualnode.o \
        $(OBJDIR)/virtualaconsole.o \
        $(OBJDIR)/virtualanode.o \
        $(OBJDIR)/virtualconsole.o \
+       $(OBJDIR)/virtualnode.o \
        $(OBJDIR)/virtualvconsole.o \
        $(OBJDIR)/virtualvnode.o \
        $(OBJDIR)/vmodule.o \
        $(OBJDIR)/vpatchgui.o \
        $(OBJDIR)/vplayback.o \
-       $(OBJDIR)/vplugin.o \
        $(OBJDIR)/vpluginarray.o \
+       $(OBJDIR)/vplugin.o \
        $(OBJDIR)/vpluginset.o \
-       $(OBJDIR)/vtimebar.o \
        $(OBJDIR)/vrender.o \
-       $(OBJDIR)/vtrack.o \
+       $(OBJDIR)/vtimebar.o \
        $(OBJDIR)/vtracking.o \
-       $(OBJDIR)/vwindow.o \
+       $(OBJDIR)/vtrack.o \
        $(OBJDIR)/vwindowgui.o \
+       $(OBJDIR)/vwindow.o \
        $(OBJDIR)/wavecache.o \
+       $(OBJDIR)/wwindow.o \
        $(OBJDIR)/zoombar.o \
        $(OBJDIR)/zoompanel.o \
-\
-       $(OBJDIR)/audiompeg.o \
-       $(OBJDIR)/audiov4l2mpeg.o \
-       $(OBJDIR)/bdcreate.o \
-       $(OBJDIR)/channelinfo.o \
-       $(OBJDIR)/commercials.o \
-       $(OBJDIR)/dbwindow.o \
-       $(OBJDIR)/devicempeginput.o \
-       $(OBJDIR)/devicev4l2base.o \
-       $(OBJDIR)/devicev4l2input.o \
-       $(OBJDIR)/dvdcreate.o \
-       $(OBJDIR)/filedb.o \
-       $(OBJDIR)/mediadb.o \
-       $(OBJDIR)/recordbatches.o \
-       $(OBJDIR)/remotecontrol.o \
-       $(OBJDIR)/shbtnprefs.o \
-       $(OBJDIR)/signalstatus.o \
-       $(OBJDIR)/strack.o \
-       $(OBJDIR)/swindow.o \
-       $(OBJDIR)/vdevicempeg.o \
-       $(OBJDIR)/vdevicev4l2mpeg.o \
-       $(OBJDIR)/wwindow.o \
-       $(OBJDIR)/pluginfclient.o \
 
 #      $(OBJDIR)/renderfarmfsclient.o \
 #      $(OBJDIR)/renderfarmfsserver.o \
index 9d52cd59531cd5c437c66a9d68a7eaf29b23c873..3fa755bcdcf898723d0e466b725dd7d4e2157b72 100644 (file)
@@ -206,6 +206,7 @@ BatchRenderThread::BatchRenderThread(MWindow *mwindow)
        default_job = 0;
        boot_defaults = 0;
        preferences = 0;
+       warn = 1;
        render = 0;
        file_entries = 0;
 }
@@ -220,6 +221,7 @@ BatchRenderThread::BatchRenderThread()
        default_job = 0;
        boot_defaults = 0;
        preferences = 0;
+       warn = 1;
        render = 0;
        file_entries = 0;
 }
@@ -236,8 +238,9 @@ BatchRenderThread::~BatchRenderThread()
        }
 }
 
-void BatchRenderThread::reset()
+void BatchRenderThread::reset(int warn)
 {
+       if( warn ) this->warn = 1;
        current_job = 0;
        rendering_job = -1;
        delete default_job;  default_job = 0;
@@ -310,7 +313,11 @@ void BatchRenderThread::load_jobs(char *path, Preferences *preferences)
        {
                if(!(result = file.read_tag()))
                {
-                       if(file.tag.title_is("JOB"))
+                       if(file.tag.title_is("JOBS"))
+                       {
+                               warn = file.tag.get_property("WARN", 1);
+                       }
+                       else if(file.tag.title_is("JOB"))
                        {
                                BatchRenderJob *job;
                                jobs.append(job = new BatchRenderJob(preferences));
@@ -323,6 +330,10 @@ void BatchRenderThread::load_jobs(char *path, Preferences *preferences)
 void BatchRenderThread::save_jobs(char *path)
 {
        FileXML file;
+       file.tag.set_title("JOBS");
+       file.tag.set_property("WARN", warn);
+       file.append_tag();
+       file.append_newline();
 
        for(int i = 0; i < jobs.total; i++)
        {
@@ -341,12 +352,7 @@ void BatchRenderThread::load_defaults(BC_Hash *defaults)
        if(default_job)
        {
                default_job->asset->load_defaults(defaults,
-                       "BATCHRENDER_",
-                       1,
-                       1,
-                       1,
-                       1,
-                       1);
+                       "BATCHRENDER_", 1, 1, 1, 1, 1);
                default_job->fix_strategy();
        }
 
@@ -363,12 +369,7 @@ void BatchRenderThread::save_defaults(BC_Hash *defaults)
        if(default_job)
        {
                default_job->asset->save_defaults(defaults,
-                       "BATCHRENDER_",
-                       1,
-                       1,
-                       1,
-                       1,
-                       1);
+                       "BATCHRENDER_", 1, 1, 1, 1, 1);
                defaults->update("BATCHRENDER_STRATEGY", default_job->strategy);
        }
        for(int i = 0; i < BATCHRENDER_COLUMNS; i++)
@@ -469,43 +470,71 @@ char* BatchRenderThread::get_current_edl()
 // Test EDL files for existence
 int BatchRenderThread::test_edl_files()
 {
-       for(int i = 0; i < jobs.total; i++)
-       {
-               if(jobs.values[i]->enabled)
-               {
-                       const char *path = jobs.values[i]->edl_path;
-                       if( *path == '@' ) ++path;
-                       FILE *fd = fopen(path, "r");
-                       if(!fd)
-                       {
-                               char string[BCTEXTLEN];
-                               sprintf(string, _("EDL %s not found.\n"), jobs.values[i]->edl_path);
-                               if(mwindow)
-                               {
-                                       ErrorBox error_box(_(PROGRAM_NAME ": Error"),
-                                               mwindow->gui->get_abs_cursor_x(1),
-                                               mwindow->gui->get_abs_cursor_y(1));
-                                       error_box.create_objects(string);
-                                       error_box.run_window();
-                                       gui->button_enable();
+       int not_equiv = 0, ret = 0;
+       const char *path = 0;
+
+       for( int i=0; !ret && i<jobs.size(); ++i ) {
+               if( !jobs.values[i]->enabled ) continue;
+               const char *path = jobs.values[i]->edl_path;
+               int is_script = *path == '@' ? 1 : 0;
+               if( is_script ) ++path;
+               FILE *fp = fopen(path, "r");
+               if( fp ) {
+                       if( warn && mwindow && !is_script ) {
+                               fseek(fp, 0, SEEK_END);
+                               int64_t sz = ftell(fp);
+                               fseek(fp, 0, SEEK_SET);
+                               char *bfr = new char[sz+1];
+                               int64_t len = fread(bfr, 1, sz+1, fp);
+                               if( len == sz ) {
+                                       FileXML file;  file.set_shared_input(bfr, len);
+                                       EDL *edl = new EDL; edl->create_objects();
+                                       edl->load_xml(&file, LOAD_ALL);
+                                       double pos = edl->equivalent_output(mwindow->edl);
+                                       if( pos >= 0 ) ++not_equiv;
+                                       edl->remove_user();
                                }
                                else
-                               {
-                                       fprintf(stderr,
-                                               "%s",
-                                               string);
-                               }
-
-                               is_rendering = 0;
-                               return 1;
-                       }
-                       else
-                       {
-                               fclose(fd);
+                                       ret = 1;
+                               delete [] bfr;
                        }
+                       fclose(fp);
                }
+               else
+                       ret = 1;
        }
-       return 0;
+
+       if( ret ) {
+               char string[BCTEXTLEN];
+               sprintf(string, _("EDL %s not found.\n"), path);
+               if( mwindow ) {
+                       ErrorBox error_box(_(PROGRAM_NAME ": Error"),
+                               mwindow->gui->get_abs_cursor_x(1),
+                               mwindow->gui->get_abs_cursor_y(1));
+                       error_box.create_objects(string);
+                       error_box.run_window();
+                       gui->button_enable();
+               }
+               else {
+                       fprintf(stderr, "%s", string);
+               }
+               is_rendering = 0;
+       }
+       else if( warn && mwindow && not_equiv > 0 ) {
+               fprintf(stderr, _("%d job EDLs do not match session edl\n"), not_equiv);
+               char string[BCTEXTLEN], *sp = string;
+               sp += sprintf(sp, _("%d job EDLs do not match session edl\n"),not_equiv);
+               sp += sprintf(sp, _("press cancel to abandon batch render"));
+               mwindow->show_warning(&warn, string);
+               if( mwindow->wait_warning() ) {
+                       gui->button_enable();
+                       is_rendering = 0;
+                       ret = 1;
+               }
+               gui->warning->update(warn);
+       }
+
+       return ret;
 }
 
 void BatchRenderThread::calculate_dest_paths(ArrayList<char*> *paths,
@@ -706,21 +735,9 @@ void BatchRenderThread::move_batch(int src, int dst)
 
 
 BatchRenderGUI::BatchRenderGUI(MWindow *mwindow,
-       BatchRenderThread *thread,
-       int x,
-       int y,
-       int w,
-       int h)
+       BatchRenderThread *thread, int x, int y, int w, int h)
  : BC_Window(_(PROGRAM_NAME ": Batch Render"),
-       x,
-       y,
-       w,
-       h,
-       50,
-       50,
-       1,
-       0,
-       1)
+       x, y, w, h, 50, 50, 1, 0, 1)
 {
        this->mwindow = mwindow;
        this->thread = thread;
@@ -780,7 +797,9 @@ void BatchRenderGUI::create_objects()
        add_subwindow(savelist_batch = new BatchRenderSaveList(thread, x, y));
        x += savelist_batch->get_w() + mwindow->theme->widget_border;
        add_subwindow(loadlist_batch = new BatchRenderLoadList(thread, x, y));
-       y2 = y + loadlist_batch->get_h() + mwindow->theme->widget_border;
+       y += loadlist_batch->get_h() + mwindow->theme->widget_border;
+       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;
 
@@ -1392,6 +1411,19 @@ int BatchRenderStop::handle_event()
 }
 
 
+BatchRenderWarning::BatchRenderWarning(BatchRenderThread *thread, int x, int y)
+ : BC_CheckBox(x, y, thread->warn, _("warn if jobs/session mismatched"))
+{
+       this->thread = thread;
+}
+
+int BatchRenderWarning::handle_event()
+{
+       thread->warn = get_value();
+       return 1;
+}
+
+
 BatchRenderCancel::BatchRenderCancel(BatchRenderThread *thread,
        int x,
        int y)
index d848d98907decf72c6387bc55fd13b3ca8d36de3..2791d0e43b7abac89e8c43f448f5118f2f2ffab3 100644 (file)
@@ -92,7 +92,7 @@ public:
        int test_edl_files();
        void calculate_dest_paths(ArrayList<char*> *paths,
                Preferences *preferences);
-       void reset();
+       void reset(int warn=0);
 // Load batch rendering jobs
        void load_jobs(char *path, Preferences *preferences);
 // Not applicable to western civilizations
@@ -134,25 +134,16 @@ public:
 // job being rendered
        int rendering_job;
        int is_rendering;
+       int warn;
        ArrayList<BC_ListBoxItem*> *file_entries;
 };
 
 
 
-
-
-
-
-
-
-
 class BatchRenderEDLPath : public BC_TextBox
 {
 public:
-       BatchRenderEDLPath(BatchRenderThread *thread,
-               int x,
-               int y,
-               int w,
+       BatchRenderEDLPath(BatchRenderThread *thread, int x, int y, int w,
                char *text);
        int handle_event();
        BatchRenderThread *thread;
@@ -162,9 +153,7 @@ public:
 class BatchRenderCurrentEDL : public BC_GenericButton
 {
 public:
-       BatchRenderCurrentEDL(BatchRenderThread *thread,
-               int x,
-               int y);
+       BatchRenderCurrentEDL(BatchRenderThread *thread, int x, int y);
        int handle_event();
        BatchRenderThread *thread;
 };
@@ -173,9 +162,7 @@ public:
 class BatchRenderUpdateEDL : public BC_GenericButton
 {
 public:
-       BatchRenderUpdateEDL(BatchRenderThread *thread,
-               int x,
-               int y);
+       BatchRenderUpdateEDL(BatchRenderThread *thread, int x, int y);
        int handle_event();
        BatchRenderThread *thread;
 };
@@ -184,9 +171,7 @@ public:
 class BatchRenderNew : public BC_GenericButton
 {
 public:
-       BatchRenderNew(BatchRenderThread *thread,
-               int x,
-               int y);
+       BatchRenderNew(BatchRenderThread *thread, int x, int y);
        int handle_event();
        BatchRenderThread *thread;
 };
@@ -194,9 +179,7 @@ public:
 class BatchRenderDelete : public BC_GenericButton
 {
 public:
-       BatchRenderDelete(BatchRenderThread *thread,
-               int x,
-               int y);
+       BatchRenderDelete(BatchRenderThread *thread, int x, int y);
        int handle_event();
        BatchRenderThread *thread;
 };
@@ -206,9 +189,7 @@ public:
 class BatchRenderSaveList : public BC_GenericButton, public Thread
 {
 public:
-       BatchRenderSaveList(BatchRenderThread *thread,
-                           int x,
-                           int y);
+       BatchRenderSaveList(BatchRenderThread *thread, int x, int y);
        ~BatchRenderSaveList();
        int handle_event();
        BatchRenderThread *thread;
@@ -221,9 +202,7 @@ public:
 class BatchRenderLoadList : public BC_GenericButton, public Thread
 {
 public:
-       BatchRenderLoadList(BatchRenderThread *thread,
-                           int x,
-                           int y);
+       BatchRenderLoadList(BatchRenderThread *thread, int x, int y);
        ~BatchRenderLoadList();
        int handle_event();
        BatchRenderThread *thread;
@@ -238,11 +217,7 @@ public:
 class BatchRenderList : public BC_ListBox
 {
 public:
-       BatchRenderList(BatchRenderThread *thread,
-               int x,
-               int y,
-               int w,
-               int h);
+       BatchRenderList(BatchRenderThread *thread, int x, int y, int w, int h);
        int handle_event();
        int selection_changed();
        int column_resize_event();
@@ -255,9 +230,7 @@ public:
 class BatchRenderStart : public BC_GenericButton
 {
 public:
-       BatchRenderStart(BatchRenderThread *thread,
-               int x,
-               int y);
+       BatchRenderStart(BatchRenderThread *thread, int x, int y);
        int handle_event();
        BatchRenderThread *thread;
 };
@@ -265,9 +238,15 @@ public:
 class BatchRenderStop : public BC_GenericButton
 {
 public:
-       BatchRenderStop(BatchRenderThread *thread,
-               int x,
-               int y);
+       BatchRenderStop(BatchRenderThread *thread, int x, int y);
+       int handle_event();
+       BatchRenderThread *thread;
+};
+
+class BatchRenderWarning : public BC_CheckBox
+{
+public:
+       BatchRenderWarning(BatchRenderThread *thread, int x, int y);
        int handle_event();
        BatchRenderThread *thread;
 };
@@ -275,9 +254,7 @@ public:
 class BatchRenderCancel : public BC_GenericButton
 {
 public:
-       BatchRenderCancel(BatchRenderThread *thread,
-               int x,
-               int y);
+       BatchRenderCancel(BatchRenderThread *thread, int x, int y);
        int handle_event();
        int keypress_event();
        BatchRenderThread *thread;
@@ -287,9 +264,7 @@ public:
 class BatchFormat : public FormatTools
 {
 public:
-       BatchFormat(MWindow *mwindow,
-                               BatchRenderGUI *gui,
-                               Asset *asset);
+       BatchFormat(MWindow *mwindow, BatchRenderGUI *gui, Asset *asset);
        ~BatchFormat();
 
        int handle_event();
@@ -336,6 +311,7 @@ public:
        BatchRenderDelete *delete_batch;
        BatchRenderSaveList *savelist_batch;
        BatchRenderLoadList *loadlist_batch;
+       BatchRenderWarning *warning;
        BatchRenderList *batch_list;
        BatchRenderStart *start_button;
        BatchRenderStop *stop_button;
index d9529c8d7a0f89c9bb2b7b1c87d444092d06e3f9..dc10bbc0e067af7c1cf6f7aab2b97d827a5dc992 100644 (file)
@@ -15,6 +15,7 @@
 #include "mwindowgui.h"
 #include "plugin.h"
 #include "pluginset.h"
+#include "rescale.h"
 #include "track.h"
 #include "tracks.h"
 
@@ -41,27 +42,28 @@ static struct bd_format {
        const char *name;
        int w, h;
        double framerate;
+       int interlaced, wide;
 } bd_formats[] = {
-       { "1920x1080 29.97i",     1920,1080, 29.97  },
-       { "1920x1080 25i",        1920,1080, 25     },
-       { "1920x1080 24p",        1920,1080, 24     },
-       { "1920x1080 23.976p",    1920,1080, 23.976 },
-       { "1280x720 59.94p",      1280,720,  59.94  },
-       { "1280x720 50p",         1280,720,  50     },
-       { "1280x720 23.976p",     1280,720,  23.976 },
-       { "1280x720 24p",         1280,720,  24     },
-       { "720x576 25i (PAL)",     720,576,  25     },
-       { "720x480 29.97i (NTSC)", 720,480,  29.97  },
+       { "1920x1080 29.97i",   1920,1080, 29.97,  1, 1 },
+       { "1920x1080 25i",      1920,1080, 25.,    1, 1 },
+       { "1920x1080 24p",      1920,1080, 24.,    0, 1 },
+       { "1920x1080 23.976p",  1920,1080, 23.976, 0, 1 },
+       { "1280x720  59.94p",   1280,720,  59.94,  0, 1 },
+       { "1280x720  50p",      1280,720,  50.,    0, 1 },
+       { "1280x720  23.976p",  1280,720,  23.976, 0, 1 },
+       { "1280x720  24p",      1280,720,  24.,    0, 1 },
+       { "720x576   25i",       720,576,  25.,    1, 0 },
+       { "720x480   29.97i",    720,480,  29.97,  1, 0 },
 };
 
 const int64_t CreateBD_Thread::BD_SIZE = 25000000000;
 const int CreateBD_Thread::BD_STREAMS = 1;
 const int CreateBD_Thread::BD_WIDTH = 1920;
 const int CreateBD_Thread::BD_HEIGHT = 1080;
-const double CreateBD_Thread::BD_ASPECT_WIDTH = 4.;
-const double CreateBD_Thread::BD_ASPECT_HEIGHT = 3.;
 const double CreateBD_Thread::BD_WIDE_ASPECT_WIDTH = 16.;
 const double CreateBD_Thread::BD_WIDE_ASPECT_HEIGHT = 9.;
+const double CreateBD_Thread::BD_ASPECT_WIDTH = 4.;
+const double CreateBD_Thread::BD_ASPECT_HEIGHT = 3.;
 const double CreateBD_Thread::BD_FRAMERATE = 24000. / 1001.;
 //const int CreateBD_Thread::BD_MAX_BITRATE = 40000000;
 const int CreateBD_Thread::BD_MAX_BITRATE = 8000000;
@@ -70,7 +72,6 @@ const int CreateBD_Thread::BD_WIDE_CHANNELS = 6;
 const double CreateBD_Thread::BD_SAMPLERATE = 48000;
 const double CreateBD_Thread::BD_KAUDIO_RATE = 224;
 
-
 CreateBD_MenuItem::CreateBD_MenuItem(MWindow *mwindow)
  : BC_MenuItem(_("BD Render..."), _("Ctrl-d"), 'd')
 {
@@ -91,19 +92,18 @@ CreateBD_Thread::CreateBD_Thread(MWindow *mwindow)
        this->mwindow = mwindow;
        this->gui = 0;
        this->use_deinterlace = 0;
-       this->use_scale = 0;
+       this->use_scale = Rescale::none;
        this->use_histogram = 0;
        this->use_inverse_telecine = 0;
        this->use_wide_audio = 0;
-       this->use_wide_aspect = 0;
        this->use_resize_tracks = 0;
        this->use_label_chapters = 0;
 
        this->bd_size = BD_SIZE;
        this->bd_width = BD_WIDTH;
        this->bd_height = BD_HEIGHT;
-       this->bd_aspect_width = BD_ASPECT_WIDTH;
-       this->bd_aspect_height = BD_ASPECT_HEIGHT;
+       this->bd_aspect_width = BD_WIDE_ASPECT_WIDTH;
+       this->bd_aspect_height = BD_WIDE_ASPECT_HEIGHT;
        this->bd_framerate = BD_FRAMERATE;
        this->bd_samplerate = BD_SAMPLERATE;
        this->bd_max_bitrate = BD_MAX_BITRATE;
@@ -288,15 +288,37 @@ void CreateBD_Thread::handle_close_event(int result)
                keyframe.set_data(data);
                insert_video_plugin("Inverse Telecine", &keyframe);
        }
-       if( use_scale ) {
-               sprintf(data,"<SCALE TYPE=%d X_FACTOR=%f Y_FACTOR=%f "
-                       "WIDTH=%d HEIGHT=%d CONSTRAIN=0>",
-                       max_w >= bd_width || max_h >= bd_height ? 1 : 0,
-                       max_w > 0 ? (double)bd_width/max_w : 1,
-                       max_h > 0 ? (double)bd_height/max_h : 1,
-                       bd_width, bd_height);
-               keyframe.set_data(data);
-               insert_video_plugin("Scale", &keyframe);
+       if( use_scale != Rescale::none ) {
+               double bd_aspect = bd_aspect_height > 0 ? bd_aspect_width / bd_aspect_height : 1;
+
+               Tracks *tracks = mwindow->edl->tracks;
+               for( Track *vtrk=tracks->first; vtrk; vtrk=vtrk->next ) {
+                       if( vtrk->data_type != TRACK_VIDEO ) continue;
+                       if( !vtrk->record ) continue;
+                       vtrk->expand_view = 1;
+                       PluginSet *plugin_set = new PluginSet(mwindow->edl, vtrk);
+                       vtrk->plugin_set.append(plugin_set);
+                       Edits *edits = vtrk->edits;
+                       for( Edit *edit=edits->first; edit; edit=edit->next ) {
+                               Indexable *indexable = edit->get_source();
+                               if( !indexable ) continue;
+                               Rescale in(indexable);
+                               Rescale out(bd_width, bd_height, bd_aspect);
+                               float src_w, src_h, dst_w, dst_h;
+                               in.rescale(out,use_scale, src_w,src_h, dst_w,dst_h);
+                               sprintf(data,"<SCALERATIO TYPE=%d"
+                                       " IN_W=%d IN_H=%d IN_ASPECT_RATIO=%f"
+                                       " OUT_W=%d OUT_H=%d OUT_ASPECT_RATIO=%f"
+                                       " SRC_X=%f SRC_Y=%f SRC_W=%f SRC_H=%f"
+                                       " DST_X=%f DST_Y=%f DST_W=%f DST_H=%f>", use_scale,
+                                       in.w, in.h, in.aspect, out.w, out.h, out.aspect,
+                                       0., 0., src_w, src_h, 0., 0., dst_w, dst_h);
+                               keyframe.set_data(data);
+                               plugin_set->insert_plugin(_("Scale Ratio"),
+                                       edit->startproject, edit->length,
+                                       PLUGIN_STANDALONE, 0, &keyframe, 0);
+                       }
+               }
        }
        if( use_resize_tracks )
                resize_tracks();
@@ -322,7 +344,7 @@ void CreateBD_Thread::handle_close_event(int result)
                keyframe.set_data(data);
                insert_video_plugin("Histogram", &keyframe);
        }
-       mwindow->batch_render->reset();
+       mwindow->batch_render->reset(1);
        create_bd_jobs(&mwindow->batch_render->jobs, tmp_path, asset_title);
        mwindow->save_backup();
        mwindow->undo->update_undo_after(_("create bd"), LOAD_ALL);
@@ -336,17 +358,16 @@ BC_Window* CreateBD_Thread::new_gui()
        memset(tmp_path,0,sizeof(tmp_path));
        strcpy(tmp_path,"/tmp");
        memset(asset_title,0,sizeof(asset_title));
-       time_t dt;      time(&dt);
-       struct tm dtm;  localtime_r(&dt, &dtm);
+       time_t dt;      time(&dt);
+       struct tm dtm;  localtime_r(&dt, &dtm);
        sprintf(asset_title, "bd_%02d%02d%02d-%02d%02d%02d",
                dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday,
                dtm.tm_hour, dtm.tm_min, dtm.tm_sec);
        use_deinterlace = 0;
-       use_scale = 0;
+       use_scale = Rescale::none;
        use_histogram = 0;
        use_inverse_telecine = 0;
        use_wide_audio = 0;
-       use_wide_aspect = 0;
        use_resize_tracks = 0;
        use_label_chapters = 0;
        use_standard = BD_1920x1080_2997i;
@@ -354,8 +375,8 @@ BC_Window* CreateBD_Thread::new_gui()
        bd_size = BD_SIZE;
        bd_width = BD_WIDTH;
        bd_height = BD_HEIGHT;
-       bd_aspect_width = BD_ASPECT_WIDTH;
-       bd_aspect_height = BD_ASPECT_HEIGHT;
+       bd_aspect_width = BD_WIDE_ASPECT_WIDTH;
+       bd_aspect_height = BD_WIDE_ASPECT_HEIGHT;
        bd_framerate = BD_FRAMERATE;
        bd_samplerate = BD_SAMPLERATE;
        bd_max_bitrate = BD_MAX_BITRATE;
@@ -373,7 +394,8 @@ BC_Window* CreateBD_Thread::new_gui()
                        has_standard = i;  break;
                }
        }
-       use_standard = has_standard >= 0 ? has_standard : BD_1920x1080_23976p;
+       if( has_standard >= 0 )
+               use_standard = has_standard;
 
        option_presets();
        int scr_x = mwindow->gui->get_screen_x(0, -1);
@@ -543,17 +565,6 @@ int CreateBD_InverseTelecine::handle_event()
 }
 
 
-CreateBD_Scale::CreateBD_Scale(CreateBD_GUI *gui, int x, int y)
- : BC_CheckBox(x, y, &gui->thread->use_scale, _("Scale"))
-{
-       this->gui = gui;
-}
-
-CreateBD_Scale::~CreateBD_Scale()
-{
-}
-
-
 CreateBD_ResizeTracks::CreateBD_ResizeTracks(CreateBD_GUI *gui, int x, int y)
  : BC_CheckBox(x, y, &gui->thread->use_resize_tracks, _("Resize Tracks"))
 {
@@ -595,17 +606,6 @@ CreateBD_WideAudio::~CreateBD_WideAudio()
 {
 }
 
-CreateBD_WideAspect::CreateBD_WideAspect(CreateBD_GUI *gui, int x, int y)
- : BC_CheckBox(x, y, &gui->thread->use_wide_aspect, _("Aspect 16x9"))
-{
-       this->gui = gui;
-}
-
-CreateBD_WideAspect::~CreateBD_WideAspect()
-{
-}
-
-
 
 CreateBD_GUI::CreateBD_GUI(CreateBD_Thread *thread, int x, int y, int w, int h)
  : BC_Window(_(PROGRAM_NAME ": Create BD"), x, y, w, h, 50, 50, 1, 0, 1)
@@ -618,13 +618,13 @@ CreateBD_GUI::CreateBD_GUI(CreateBD_Thread *thread, int x, int y, int w, int h)
        tmp_path = 0;
        btmp_path = 0;
        disk_space = 0;
+       standard = 0;
+       scale = 0;
        need_deinterlace = 0;
        need_inverse_telecine = 0;
-       need_scale = 0;
        need_resize_tracks = 0;
        need_histogram = 0;
        need_wide_audio = 0;
-       need_wide_aspect = 0;
        need_label_chapters = 0;
        ok = 0;
        cancel = 0;
@@ -661,40 +661,41 @@ void CreateBD_GUI::create_objects()
        int x0 = get_w() - 170;
        title = new BC_Title(x0, y, _("Media:"), MEDIUMFONT, YELLOW);
        add_subwindow(title);
-       x0 +=  title->get_w() + padx;
-       media_size = new CreateBD_MediaSize(this, x0, y);
+       int x1 =  x0+title->get_w()+padx;
+       media_size = new CreateBD_MediaSize(this, x1, y);
        media_size->create_objects();
        media_sizes.append(new BC_ListBoxItem("25GB"));
        media_sizes.append(new BC_ListBoxItem("50GB"));
        media_size->update_list(&media_sizes);
        media_size->update(media_sizes[0]->get_text());
        disk_space->update();
-       x0 = x;
        y += disk_space->get_h() + pady/2;
-       title = new BC_Title(x0, y, _("Format:"), MEDIUMFONT, YELLOW);
+       title = new BC_Title(x, y, _("Format:"), MEDIUMFONT, YELLOW);
        add_subwindow(title);
-       x0 +=  title->get_w() + padx;
-       standard = new CreateBD_Format(this, x0, y);
+       standard = new CreateBD_Format(this, title->get_w() + padx, y);
        add_subwindow(standard);
        standard->create_objects();
+       x0 -= 30;
+       title = new BC_Title(x0, y, _("Scale:"), MEDIUMFONT, YELLOW);
+       add_subwindow(title);
+       x1 = x0+title->get_w()+padx;
+       scale = new CreateBD_Scale(this, x1, y);
+       add_subwindow(scale);
+       scale->create_objects();
        y += standard->get_h() + pady/2;
        need_deinterlace = new CreateBD_Deinterlace(this, x, y);
        add_subwindow(need_deinterlace);
-       int x1 = x + 150, x2 = x1 + 150;
+       x1 = x + 170; //, x2 = x1 + 150;
        need_inverse_telecine = new CreateBD_InverseTelecine(this, x1, y);
        add_subwindow(need_inverse_telecine);
        y += need_deinterlace->get_h() + pady/2;
-       need_scale = new CreateBD_Scale(this, x, y);
-       add_subwindow(need_scale);
+       need_histogram = new CreateBD_Histogram(this, x, y);
+       add_subwindow(need_histogram);
        need_wide_audio = new CreateBD_WideAudio(this, x1, y);
        add_subwindow(need_wide_audio);
-       need_resize_tracks = new CreateBD_ResizeTracks(this, x2, y);
+       y += need_histogram->get_h() + pady/2;
+       need_resize_tracks = new CreateBD_ResizeTracks(this, x1, y);
        add_subwindow(need_resize_tracks);
-       y += need_scale->get_h() + pady/2;
-       need_histogram = new CreateBD_Histogram(this, x, y);
-       add_subwindow(need_histogram);
-       need_wide_aspect = new CreateBD_WideAspect(this, x1, y);
-       add_subwindow(need_wide_aspect);
 //     need_label_chapters = new CreateBD_LabelChapters(this, x2, y);
 //     add_subwindow(need_label_chapters);
        ok_w = BC_OKButton::calculate_w();
@@ -739,13 +740,12 @@ int CreateBD_GUI::close_event()
 
 void CreateBD_GUI::update()
 {
+       scale->set_value(thread->use_scale);
        need_deinterlace->set_value(thread->use_deinterlace);
        need_inverse_telecine->set_value(thread->use_inverse_telecine);
-       need_scale->set_value(thread->use_scale);
        need_resize_tracks->set_value(thread->use_resize_tracks);
        need_histogram->set_value(thread->use_histogram);
        need_wide_audio->set_value(thread->use_wide_audio);
-       need_wide_aspect->set_value(thread->use_wide_aspect);
 //     need_label_chapters->set_value(thread->use_label_chapters);
 }
 
@@ -765,7 +765,6 @@ insert_video_plugin(const char *title, KeyFrame *default_keyframe)
                                edit->startproject, edit->length,
                                PLUGIN_STANDALONE, 0, default_keyframe, 0);
                }
-               vtrk->optimize();
        }
        return 0;
 }
@@ -791,10 +790,9 @@ option_presets()
 {
 // reset only probed options
        use_deinterlace = 0;
-       use_scale = 0;
+       use_scale = Rescale::none;
        use_resize_tracks = 0;
        use_wide_audio = 0;
-       use_wide_aspect = 0;
        use_label_chapters = 0;
 
        if( !mwindow->edl ) return 1;
@@ -802,6 +800,11 @@ option_presets()
        bd_width = bd_formats[use_standard].w;
        bd_height = bd_formats[use_standard].h;
        bd_framerate = bd_formats[use_standard].framerate;
+       bd_aspect_width = bd_formats[use_standard].wide ?
+               BD_WIDE_ASPECT_WIDTH : BD_ASPECT_WIDTH;
+       bd_aspect_height = bd_formats[use_standard].wide ?
+               BD_WIDE_ASPECT_HEIGHT : BD_ASPECT_HEIGHT;
+       double bd_aspect = bd_aspect_width / bd_aspect_height;
 
        Tracks *tracks = mwindow->edl->tracks;
        max_w = 0;  max_h = 0;
@@ -816,10 +819,14 @@ option_presets()
                                Indexable *indexable = edit->get_source();
                                int w = indexable->get_w();
                                if( w > max_w ) max_w = w;
-                               if( w != bd_width ) use_scale = 1;
+                               if( w != bd_width ) use_scale = Rescale::scaled;
                                int h = indexable->get_h();
                                if( h > max_h ) max_h = h;
-                               if( h != bd_height ) use_scale = 1;
+                               if( h != bd_height ) use_scale = Rescale::scaled;
+                               float aw, ah;
+                               MWindow::create_aspect_ratio(aw, ah, w, h);
+                               double aspect = ah > 0 ? aw / ah : 1;
+                               if( !EQUIV(aspect, bd_aspect) ) use_scale = Rescale::scaled;
                        }
                        for( int i=0; i<trk->plugin_set.size(); ++i ) {
                                for(Plugin *plugin = (Plugin*)trk->plugin_set[i]->first;
@@ -828,6 +835,7 @@ option_presets()
                                        if( !strcmp(plugin->title, _("Deinterlace")) )
                                                has_deinterlace = 1;
                                        if( !strcmp(plugin->title, _("Auto Scale")) ||
+                                           !strcmp(plugin->title, _("Scale Ratio")) ||
                                            !strcmp(plugin->title, _("Scale")) )
                                                has_scale = 1;
                                }
@@ -836,8 +844,8 @@ option_presets()
                }
        }
        if( has_scale )
-               use_scale = 0;
-       if( use_scale ) {
+               use_scale = Rescale::none;
+       if( use_scale != Rescale::none ) {
                if( max_w != bd_width ) use_resize_tracks = 1;
                if( max_h != bd_height ) use_resize_tracks = 1;
        }
@@ -853,12 +861,6 @@ option_presets()
        if( !has_deinterlace && max_h > 2*bd_height ) use_deinterlace = 1;
        // Labels *labels = mwindow->edl->labels;
        // use_label_chapters = labels && labels->first ? 1 : 0;
-       float aw, ah;
-       MWindow::create_aspect_ratio(aw, ah, max_w, max_h);
-       if( aw == BD_WIDE_ASPECT_WIDTH && ah == BD_WIDE_ASPECT_HEIGHT )
-               use_wide_aspect = 1;
-       bd_aspect_width = use_wide_aspect ? BD_WIDE_ASPECT_WIDTH : BD_ASPECT_WIDTH;
-       bd_aspect_height = use_wide_aspect ? BD_WIDE_ASPECT_HEIGHT : BD_ASPECT_HEIGHT;
 
        if( tracks->recordable_audio_tracks() == BD_WIDE_CHANNELS )
                use_wide_audio = 1;
@@ -902,6 +904,7 @@ void CreateBD_Format::create_objects()
        for( int i=0; i<(int)(sizeof(bd_formats)/sizeof(bd_formats[0])); ++i ) {
                add_item(new CreateBD_FormatItem(this, i, bd_formats[i].name));
        }
+       set_value(gui->thread->use_standard);
 }
 
 int CreateBD_Format::handle_event()
@@ -911,6 +914,53 @@ int CreateBD_Format::handle_event()
        return 1;
 }
 
+
+CreateBD_ScaleItem::CreateBD_ScaleItem(CreateBD_Scale *popup,
+               int scale, const char *text)
+ : BC_MenuItem(text)
+{
+       this->popup = popup;
+       this->scale = scale;
+}
+
+CreateBD_ScaleItem::~CreateBD_ScaleItem()
+{
+}
+
+int CreateBD_ScaleItem::handle_event()
+{
+       popup->gui->thread->use_scale = scale;
+       popup->set_value(scale);
+       return popup->handle_event();
+}
+
+
+CreateBD_Scale::CreateBD_Scale(CreateBD_GUI *gui, int x, int y)
+ : BC_PopupMenu(x, y, 100, "", 1)
+{
+       this->gui = gui;
+}
+
+CreateBD_Scale::~CreateBD_Scale()
+{
+}
+
+void CreateBD_Scale::create_objects()
+{
+
+       for( int i=0; i<(int)Rescale::n_scale_types; ++i ) {
+               add_item(new CreateBD_ScaleItem(this, i, Rescale::scale_types[i]));
+       }
+       set_value(gui->thread->use_scale);
+}
+
+int CreateBD_Scale::handle_event()
+{
+       gui->update();
+       return 1;
+}
+
+
 CreateBD_MediaSize::CreateBD_MediaSize(CreateBD_GUI *gui, int x, int y)
  : BC_PopupTextBox(gui, 0, 0, x, y, 70,50)
 {
index f13bee747f6c4ece8b19394c34b0c3c2a36eeb6a..7efb242169ef25483ee767f9e5ec3cf6bfc3f7e3 100644 (file)
@@ -11,6 +11,7 @@
 #include "bctextbox.h"
 #include "browsebutton.h"
 #include "mwindow.h"
+#include "rescale.h"
 
 #include "bdcreate.inc"
 
@@ -49,7 +50,7 @@ public:
        char tmp_path[BCTEXTLEN];
        int use_deinterlace, use_inverse_telecine;
        int use_scale, use_resize_tracks;
-       int use_wide_audio, use_wide_aspect;
+       int use_wide_audio;
        int use_histogram, use_label_chapters;
        int use_standard;
 
@@ -138,15 +139,6 @@ public:
        CreateBD_GUI *gui;
 };
 
-class CreateBD_Scale : public BC_CheckBox
-{
-public:
-       CreateBD_Scale(CreateBD_GUI *gui, int x, int y);
-       ~CreateBD_Scale();
-
-       CreateBD_GUI *gui;
-};
-
 class CreateBD_ResizeTracks : public BC_CheckBox
 {
 public:
@@ -183,15 +175,6 @@ public:
        CreateBD_GUI *gui;
 };
 
-class CreateBD_WideAspect : public BC_CheckBox
-{
-public:
-       CreateBD_WideAspect(CreateBD_GUI *gui, int x, int y);
-       ~CreateBD_WideAspect();
-
-       CreateBD_GUI *gui;
-};
-
 class CreateBD_GUI : public BC_Window
 {
 public:
@@ -213,15 +196,14 @@ public:
        BrowseButton *btmp_path;
        CreateBD_DiskSpace *disk_space;
        CreateBD_Format *standard;
+       CreateBD_Scale *scale;
        ArrayList<BC_ListBoxItem *> media_sizes;
        CreateBD_MediaSize *media_size;
        CreateBD_Deinterlace *need_deinterlace;
        CreateBD_InverseTelecine *need_inverse_telecine;
-       CreateBD_Scale *need_scale;
        CreateBD_ResizeTracks *need_resize_tracks;
        CreateBD_Histogram *need_histogram;
        CreateBD_WideAudio *need_wide_audio;
-       CreateBD_WideAspect *need_wide_aspect;
        CreateBD_LabelChapters *need_label_chapters;
        int ok_x, ok_y, ok_w, ok_h;
        CreateBD_OK *ok;
@@ -247,8 +229,32 @@ public:
        int handle_event();
        CreateBD_Format(CreateBD_GUI *gui, int x, int y);
        ~CreateBD_Format();
+       void set_value(int v) { set_text(get_item(v)->get_text()); }
+
+       CreateBD_GUI *gui;
+};
+
+class CreateBD_ScaleItem : public BC_MenuItem
+{
+public:
+       int handle_event();
+       CreateBD_ScaleItem(CreateBD_Scale *popup, int scale, const char *text);
+       ~CreateBD_ScaleItem();
+
+       CreateBD_Scale *popup;
+       int scale;
+};
+
+class CreateBD_Scale : public BC_PopupMenu
+{
+public:
+       void create_objects();
+       int handle_event();
+       CreateBD_Scale(CreateBD_GUI *gui, int x, int y);
+       ~CreateBD_Scale();
 
        CreateBD_GUI *gui;
+       void set_value(int v) { set_text(Rescale::scale_types[v]); }
 };
 
 class CreateBD_MediaSize : public BC_PopupTextBox
index ed43a03b7f10ca2fc8429fd87bd8da8afcf5a1d6..c752ba812a8feda6437f8d59bf916157637fbcc1 100644 (file)
@@ -15,6 +15,7 @@
 #include "mwindowgui.h"
 #include "plugin.h"
 #include "pluginset.h"
+#include "rescale.h"
 #include "track.h"
 #include "tracks.h"
 
 #include <sys/stat.h>
 #include <sys/statfs.h>
 
-// DVD Creation
 
-#define HD_1920x1080_2997      0
-#define HD_1920x1080_2500      1
-#define HD_1280x720_5994p      2
-#define HD_1280x720_5000p      3
-#define HD_720x576_5000p       4
-#define HD_720x576_2500                5
-#define HD_720x480_5994p       6
-#define HD_720x480_2997                7
+#define DVD_PAL_4x3    0
+#define DVD_PAL_16x9   1
+#define DVD_NTSC_4x3   2
+#define DVD_NTSC_16x9  3
+
+#define DVD_NORM_PAL   0
+#define DVD_NORM_NTSC  1
+
+#define DVD_ASPECT_4x3 0
+#define DVD_ASPECT_16x9 1
 
-static struct hd_format {
+static struct dvd_norm {
        const char *name;
        int w, h;
        double framerate;
-} hd_formats[] = {
-       { "1920x1080 29.97",      1920,1080, 29.97  },
-       { "1920x1080 25",         1920,1080, 25     },
-       { "1280x720 59.94p",      1280,720,  59.94  },
-       { "1280x720 50p",         1280,720,  50     },
-       { "720x576 50p(PAL)",      720,576,  50     },
-       { "720x576 25 (PAL)",      720,576,  25     },
-       { "720x480 59.94p(NTSC)",  720,480,  59.94  },
-       { "720x480 29.97 (NTSC)",  720,480,  29.97  },
+} dvd_norms[] = {
+       { "PAL",  720,576, 25 },
+       { "NTSC", 720,480, 29.97 },
+};
+
+static struct dvd_aspect {
+       int w, h;
+} dvd_aspects[] = {
+       { 4, 3, },
+       { 16, 9, },
+};
+
+// DVD Creation
+
+static struct dvd_format {
+       int norm, aspect;
+} dvd_formats[] = {
+       { DVD_NORM_PAL,  DVD_ASPECT_4x3, },
+       { DVD_NORM_PAL,  DVD_ASPECT_16x9, },
+       { DVD_NORM_NTSC, DVD_ASPECT_4x3, },
+       { DVD_NORM_NTSC, DVD_ASPECT_16x9, },
 };
 
 const int64_t CreateDVD_Thread::DVD_SIZE = 4700000000;
@@ -90,7 +104,6 @@ CreateDVD_Thread::CreateDVD_Thread(MWindow *mwindow)
        this->use_histogram = 0;
        this->use_inverse_telecine = 0;
        this->use_wide_audio = 0;
-       this->use_wide_aspect = 0;
        this->use_ffmpeg = 0;
        this->use_resize_tracks = 0;
        this->use_label_chapters = 0;
@@ -181,8 +194,9 @@ int CreateDVD_Thread::create_dvd_jobs(ArrayList<BatchRenderJob*> *jobs,
        fprintf(fp,"mkdir -p $1/iso\n");
        fprintf(fp,"\n");
 // dvdauthor ver 0.7.0 requires this to work
-       fprintf(fp,"export VIDEO_FORMAT=%s\n",
-               use_standard == HD_720x576_2500 ? "PAL" : "NTSC");
+       int norm = dvd_formats[use_standard].norm;
+       const char *name = dvd_norms[norm].name;
+       fprintf(fp,"export VIDEO_FORMAT=%s\n", name);
        fprintf(fp,"dvdauthor -x - <<eof\n");
        fprintf(fp,"<dvdauthor dest=\"$1/iso\">\n");
        fprintf(fp,"  <vmgm>\n");
@@ -190,9 +204,11 @@ int CreateDVD_Thread::create_dvd_jobs(ArrayList<BatchRenderJob*> *jobs,
        fprintf(fp,"  </vmgm>\n");
        fprintf(fp,"  <titleset>\n");
        fprintf(fp,"    <titles>\n");
+       char std[BCSTRLEN], *cp = std;
+       for( const char *np=name; *np!=0; ++cp,++np) *cp = *np + 'a'-'A';
+       *cp = 0;
        fprintf(fp,"    <video format=\"%s\" aspect=\"%d:%d\" resolution=\"%dx%d\"/>\n",
-               use_standard == HD_720x576_2500 ? "pal" : "ntsc",
-               (int)session->aspect_w, (int)session->aspect_h,
+               std, (int)session->aspect_w, (int)session->aspect_h,
                session->output_w, session->output_h);
        fprintf(fp,"    <audio format=\"ac3\" lang=\"en\"/>\n");
        fprintf(fp,"    <pgc>\n");
@@ -363,16 +379,39 @@ void CreateDVD_Thread::handle_close_event(int result)
                keyframe.set_data(data);
                insert_video_plugin("Inverse Telecine", &keyframe);
        }
-       if( use_scale ) {
-               sprintf(data,"<SCALE TYPE=%d X_FACTOR=%f Y_FACTOR=%f "
-                       "WIDTH=%d HEIGHT=%d CONSTRAIN=0>",
-                       max_w >= dvd_width || max_h >= dvd_height ? 1 : 0,
-                       max_w > 0 ? (double)dvd_width/max_w : 1,
-                       max_h > 0 ? (double)dvd_height/max_h : 1,
-                       dvd_width, dvd_height);
-               keyframe.set_data(data);
-               insert_video_plugin("Scale", &keyframe);
+       if( use_scale != Rescale::none ) {
+               double dvd_aspect = dvd_aspect_height > 0 ? dvd_aspect_width/dvd_aspect_height : 1;
+
+               Tracks *tracks = mwindow->edl->tracks;
+               for( Track *vtrk=tracks->first; vtrk; vtrk=vtrk->next ) {
+                       if( vtrk->data_type != TRACK_VIDEO ) continue;
+                       if( !vtrk->record ) continue;
+                       vtrk->expand_view = 1;
+                       PluginSet *plugin_set = new PluginSet(mwindow->edl, vtrk);
+                       vtrk->plugin_set.append(plugin_set);
+                       Edits *edits = vtrk->edits;
+                       for( Edit *edit=edits->first; edit; edit=edit->next ) {
+                               Indexable *indexable = edit->get_source();
+                               if( !indexable ) continue;
+                               Rescale in(indexable);
+                               Rescale out(dvd_width, dvd_height, dvd_aspect);
+                               float src_w, src_h, dst_w, dst_h;
+                               in.rescale(out,use_scale, src_w,src_h, dst_w,dst_h);
+                               sprintf(data,"<SCALERATIO TYPE=%d"
+                                       " IN_W=%d IN_H=%d IN_ASPECT_RATIO=%f"
+                                       " OUT_W=%d OUT_H=%d OUT_ASPECT_RATIO=%f"
+                                       " SRC_X=%f SRC_Y=%f SRC_W=%f SRC_H=%f"
+                                       " DST_X=%f DST_Y=%f DST_W=%f DST_H=%f>", use_scale,
+                                       in.w, in.h, in.aspect, out.w, out.h, out.aspect,
+                                       0., 0., src_w, src_h, 0., 0., dst_w, dst_h);
+                               keyframe.set_data(data);
+                               plugin_set->insert_plugin(_("Scale Ratio"),
+                                       edit->startproject, edit->length,
+                                       PLUGIN_STANDALONE, 0, &keyframe, 0);
+                       }
+               }
        }
+
        if( use_resize_tracks )
                resize_tracks();
        if( use_histogram ) {
@@ -397,7 +436,7 @@ void CreateDVD_Thread::handle_close_event(int result)
                keyframe.set_data(data);
                insert_video_plugin("Histogram", &keyframe);
        }
-       mwindow->batch_render->reset();
+       mwindow->batch_render->reset(1);
        create_dvd_jobs(&mwindow->batch_render->jobs, tmp_path, asset_title);
        mwindow->save_backup();
        mwindow->undo->update_undo_after(_("create dvd"), LOAD_ALL);
@@ -417,15 +456,14 @@ BC_Window* CreateDVD_Thread::new_gui()
                dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday,
                dtm.tm_hour, dtm.tm_min, dtm.tm_sec);
        use_deinterlace = 0;
-       use_scale = 0;
+       use_scale = Rescale::none;
        use_histogram = 0;
        use_inverse_telecine = 0;
        use_wide_audio = 0;
-       use_wide_aspect = 0;
        use_ffmpeg = 0;
        use_resize_tracks = 0;
        use_label_chapters = 0;
-       use_standard = HD_720x480_2997;
+       use_standard = DVD_NTSC_4x3;
 
        dvd_size = DVD_SIZE;
        dvd_width = DVD_WIDTH;
@@ -441,26 +479,36 @@ BC_Window* CreateDVD_Thread::new_gui()
        int has_standard = -1;
        if( mwindow->edl ) {
                EDLSession *session = mwindow->edl->session;
+               double framerate = session->frame_rate;
+               double aspect_ratio = session->aspect_h > 0 ?
+                       session->aspect_w / session->aspect_h > 0 : 1;
+               int output_w = session->output_w, output_h = session->output_h;
 // match the session to any known standard
-               for( int i=0; i<(int)(sizeof(hd_formats)/sizeof(hd_formats[0])); ++i ) {
-                       if( !EQUIV(session->frame_rate, hd_formats[i].framerate) ) continue;
-                       if( session->output_w != hd_formats[i].w ) continue;
-                       if( session->output_h != hd_formats[i].h ) continue;
+               for( int i=0; i<(int)(sizeof(dvd_formats)/sizeof(dvd_formats[0])); ++i ) {
+                       int norm = dvd_formats[i].norm;
+                       if( !EQUIV(framerate, dvd_norms[norm].framerate) ) continue;
+                       if( output_w != dvd_norms[norm].w ) continue;
+                       if( output_h != dvd_norms[norm].h ) continue;
+                       int aspect = dvd_formats[i].aspect;
+                       double dvd_aspect_ratio =
+                               (double)dvd_aspects[aspect].w / dvd_aspects[aspect].h; 
+                       if( !EQUIV(aspect_ratio, dvd_aspect_ratio) ) continue;
                        has_standard = i;  break;
                }
                if( has_standard < 0 ) {
 // or use the default standard
-                       if( !strcmp(mwindow->default_standard, "NTSC") ) has_standard = HD_720x480_2997;
-                       else if( !strcmp(mwindow->default_standard, "PAL") ) has_standard = HD_720x576_2500;
+                       if( !strcmp(mwindow->default_standard, "NTSC") ) has_standard = DVD_NTSC_4x3;
+                       else if( !strcmp(mwindow->default_standard, "PAL") ) has_standard = DVD_PAL_4x3;
                }
        }
-       use_standard = has_standard >= 0 ? has_standard : HD_720x480_2997;
+       if( has_standard >= 0 )
+               use_standard = has_standard;
 
        option_presets();
        int scr_x = mwindow->gui->get_screen_x(0, -1);
        int scr_w = mwindow->gui->get_screen_w(0, -1);
        int scr_h = mwindow->gui->get_screen_h(0, -1);
-       int w = 500, h = 280;
+       int w = 520, h = 280;
        int x = scr_x + scr_w/2 - w/2, y = scr_h/2 - h/2;
 
        gui = new CreateDVD_GUI(this, x, y, w, h);
@@ -625,17 +673,6 @@ int CreateDVD_InverseTelecine::handle_event()
 }
 
 
-CreateDVD_Scale::CreateDVD_Scale(CreateDVD_GUI *gui, int x, int y)
- : BC_CheckBox(x, y, &gui->thread->use_scale, _("Scale"))
-{
-       this->gui = gui;
-}
-
-CreateDVD_Scale::~CreateDVD_Scale()
-{
-}
-
-
 CreateDVD_ResizeTracks::CreateDVD_ResizeTracks(CreateDVD_GUI *gui, int x, int y)
  : BC_CheckBox(x, y, &gui->thread->use_resize_tracks, _("Resize Tracks"))
 {
@@ -677,16 +714,6 @@ CreateDVD_WideAudio::~CreateDVD_WideAudio()
 {
 }
 
-CreateDVD_WideAspect::CreateDVD_WideAspect(CreateDVD_GUI *gui, int x, int y)
- : BC_CheckBox(x, y, &gui->thread->use_wide_aspect, _("Aspect 16x9"))
-{
-       this->gui = gui;
-}
-
-CreateDVD_WideAspect::~CreateDVD_WideAspect()
-{
-}
-
 CreateDVD_UseFFMpeg::CreateDVD_UseFFMpeg(CreateDVD_GUI *gui, int x, int y)
  : BC_CheckBox(x, y, &gui->thread->use_ffmpeg, _("Use FFMPEG"))
 {
@@ -711,13 +738,13 @@ CreateDVD_GUI::CreateDVD_GUI(CreateDVD_Thread *thread, int x, int y, int w, int
        tmp_path = 0;
        btmp_path = 0;
        disk_space = 0;
+       standard = 0;
+       scale = 0;
        need_deinterlace = 0;
        need_inverse_telecine = 0;
-       need_scale = 0;
        need_resize_tracks = 0;
        need_histogram = 0;
        need_wide_audio = 0;
-       need_wide_aspect = 0;
        need_label_chapters = 0;
        ok = 0;
        cancel = 0;
@@ -754,43 +781,45 @@ void CreateDVD_GUI::create_objects()
        int x0 = get_w() - 170;
        title = new BC_Title(x0, y, _("Media:"), MEDIUMFONT, YELLOW);
        add_subwindow(title);
-       x0 +=  title->get_w() + padx;
-       media_size = new CreateDVD_MediaSize(this, x0, y);
+       int x1 = x0+title->get_w()+padx;
+       media_size = new CreateDVD_MediaSize(this, x1, y);
        media_size->create_objects();
        media_sizes.append(new BC_ListBoxItem("4.7GB"));
        media_sizes.append(new BC_ListBoxItem("8.3GB"));
        media_size->update_list(&media_sizes);
        media_size->update(media_sizes[0]->get_text());
        disk_space->update();
-       x0 = x;
        y += disk_space->get_h() + pady/2;
-       title = new BC_Title(x0, y, _("Format:"), MEDIUMFONT, YELLOW);
+       title = new BC_Title(x, y, _("Format:"), MEDIUMFONT, YELLOW);
        add_subwindow(title);
-       x0 +=  title->get_w() + padx;
-       standard = new CreateDVD_Format(this, x0, y);
+       standard = new CreateDVD_Format(this, title->get_w() + padx, y);
        add_subwindow(standard);
        standard->create_objects();
+       x0 -= 30;
+       title = new BC_Title(x0, y, _("Scale:"), MEDIUMFONT, YELLOW);
+       add_subwindow(title);
+       x1 = x0+title->get_w()+padx;
+       scale = new CreateDVD_Scale(this, x1, y);
+       add_subwindow(scale);
+       scale->create_objects();
        y += standard->get_h() + pady/2;
        need_deinterlace = new CreateDVD_Deinterlace(this, x, y);
        add_subwindow(need_deinterlace);
-       int x1 = x + 150, x2 = x1 + 150;
+       x1 = x + 170;
+       int x2 = x1 + 170;
        need_inverse_telecine = new CreateDVD_InverseTelecine(this, x1, y);
        add_subwindow(need_inverse_telecine);
        need_use_ffmpeg = new CreateDVD_UseFFMpeg(this, x2, y);
        add_subwindow(need_use_ffmpeg);
        y += need_deinterlace->get_h() + pady/2;
-       need_scale = new CreateDVD_Scale(this, x, y);
-       add_subwindow(need_scale);
+       need_histogram = new CreateDVD_Histogram(this, x, y);
+       add_subwindow(need_histogram);
        need_wide_audio = new CreateDVD_WideAudio(this, x1, y);
        add_subwindow(need_wide_audio);
        need_resize_tracks = new CreateDVD_ResizeTracks(this, x2, y);
        add_subwindow(need_resize_tracks);
-       y += need_scale->get_h() + pady/2;
-       need_histogram = new CreateDVD_Histogram(this, x, y);
-       add_subwindow(need_histogram);
-       need_wide_aspect = new CreateDVD_WideAspect(this, x1, y);
-       add_subwindow(need_wide_aspect);
-       need_label_chapters = new CreateDVD_LabelChapters(this, x2, y);
+       y += need_histogram->get_h() + pady/2;
+       need_label_chapters = new CreateDVD_LabelChapters(this, x1, y);
        add_subwindow(need_label_chapters);
        ok_w = BC_OKButton::calculate_w();
        ok_h = BC_OKButton::calculate_h();
@@ -834,14 +863,13 @@ int CreateDVD_GUI::close_event()
 
 void CreateDVD_GUI::update()
 {
+       scale->set_value(thread->use_scale);
        need_deinterlace->set_value(thread->use_deinterlace);
        need_inverse_telecine->set_value(thread->use_inverse_telecine);
-       need_scale->set_value(thread->use_scale);
        need_use_ffmpeg->set_value(thread->use_ffmpeg);
        need_resize_tracks->set_value(thread->use_resize_tracks);
        need_histogram->set_value(thread->use_histogram);
        need_wide_audio->set_value(thread->use_wide_audio);
-       need_wide_aspect->set_value(thread->use_wide_aspect);
        need_label_chapters->set_value(thread->use_label_chapters);
 }
 
@@ -861,7 +889,6 @@ insert_video_plugin(const char *title, KeyFrame *default_keyframe)
                                edit->startproject, edit->length,
                                PLUGIN_STANDALONE, 0, default_keyframe, 0);
                }
-               vtrk->optimize();
        }
        return 0;
 }
@@ -887,17 +914,21 @@ option_presets()
 {
 // reset only probed options
        use_deinterlace = 0;
-       use_scale = 0;
+       use_scale = Rescale::none;
        use_resize_tracks = 0;
        use_wide_audio = 0;
-       use_wide_aspect = 0;
        use_label_chapters = 0;
 
        if( !mwindow->edl ) return 1;
 
-       dvd_width = hd_formats[use_standard].w;
-       dvd_height = hd_formats[use_standard].h;
-       dvd_framerate = hd_formats[use_standard].framerate;
+       int norm = dvd_formats[use_standard].norm;
+       dvd_width = dvd_norms[norm].w;
+       dvd_height = dvd_norms[norm].h;
+       dvd_framerate = dvd_norms[norm].framerate;
+       int aspect = dvd_formats[use_standard].aspect;
+       dvd_aspect_width = dvd_aspects[aspect].w;
+       dvd_aspect_height = dvd_aspects[aspect].h;
+       double dvd_aspect = dvd_aspect_height > 0 ? dvd_aspect_width/dvd_aspect_height : 1;
 
        Tracks *tracks = mwindow->edl->tracks;
        max_w = 0;  max_h = 0;
@@ -912,10 +943,14 @@ option_presets()
                                Indexable *indexable = edit->get_source();
                                int w = indexable->get_w();
                                if( w > max_w ) max_w = w;
-                               if( w != dvd_width ) use_scale = 1;
+                               if( w != dvd_width ) use_scale = Rescale::scaled;
                                int h = indexable->get_h();
                                if( h > max_h ) max_h = h;
-                               if( h != dvd_height ) use_scale = 1;
+                               if( h != dvd_height ) use_scale = Rescale::scaled;
+                               float aw, ah;
+                               MWindow::create_aspect_ratio(aw, ah, w, h);
+                               double aspect = ah > 0 ? aw / ah : 1;
+                               if( !EQUIV(aspect, dvd_aspect) ) use_scale = Rescale::scaled;
                        }
                        for( int i=0; i<trk->plugin_set.size(); ++i ) {
                                for(Plugin *plugin = (Plugin*)trk->plugin_set[i]->first;
@@ -924,6 +959,7 @@ option_presets()
                                        if( !strcmp(plugin->title, _("Deinterlace")) )
                                                has_deinterlace = 1;
                                        if( !strcmp(plugin->title, _("Auto Scale")) ||
+                                           !strcmp(plugin->title, _("Scale Ratio")) ||
                                            !strcmp(plugin->title, _("Scale")) )
                                                has_scale = 1;
                                }
@@ -932,8 +968,8 @@ option_presets()
                }
        }
        if( has_scale )
-               use_scale = 0;
-       if( use_scale ) {
+               use_scale = Rescale::none;
+       if( use_scale != Rescale::none ) {
                if( max_w != dvd_width ) use_resize_tracks = 1;
                if( max_h != dvd_height ) use_resize_tracks = 1;
        }
@@ -950,13 +986,6 @@ option_presets()
        Labels *labels = mwindow->edl->labels;
        use_label_chapters = labels && labels->first ? 1 : 0;
 
-       float aw, ah;
-       MWindow::create_aspect_ratio(aw, ah, max_w, max_h);
-       if( aw == DVD_WIDE_ASPECT_WIDTH && ah == DVD_WIDE_ASPECT_HEIGHT )
-               use_wide_aspect = 1;
-       dvd_aspect_width = use_wide_aspect ? DVD_WIDE_ASPECT_WIDTH : DVD_ASPECT_WIDTH;
-       dvd_aspect_height = use_wide_aspect ? DVD_WIDE_ASPECT_HEIGHT : DVD_ASPECT_HEIGHT;
-
        if( tracks->recordable_audio_tracks() == DVD_WIDE_CHANNELS )
                use_wide_audio = 1;
 
@@ -966,8 +995,8 @@ option_presets()
 
 
 CreateDVD_FormatItem::CreateDVD_FormatItem(CreateDVD_Format *popup,
-               int standard, const char *name)
- : BC_MenuItem(name)
+               int standard, const char *text)
+ : BC_MenuItem(text)
 {
        this->popup = popup;
        this->standard = standard;
@@ -986,7 +1015,7 @@ int CreateDVD_FormatItem::handle_event()
 
 
 CreateDVD_Format::CreateDVD_Format(CreateDVD_GUI *gui, int x, int y)
- : BC_PopupMenu(x, y, 180, hd_formats[gui->thread->use_standard].name, 1)
+ : BC_PopupMenu(x, y, 180, "", 1)
 {
        this->gui = gui;
 }
@@ -997,9 +1026,16 @@ CreateDVD_Format::~CreateDVD_Format()
 
 void CreateDVD_Format::create_objects()
 {
-       for( int i=0; i<(int)(sizeof(hd_formats)/sizeof(hd_formats[0])); ++i ) {
-               add_item(new CreateDVD_FormatItem(this, i, hd_formats[i].name));
+       for( int i=0; i<(int)(sizeof(dvd_formats)/sizeof(dvd_formats[0])); ++i ) {
+               int norm = dvd_formats[i].norm;
+               int aspect = dvd_formats[i].aspect;
+               char item_text[BCTEXTLEN];
+               sprintf(item_text,"%4s (%5.2f) %dx%d",
+                       dvd_norms[norm].name, dvd_norms[norm].framerate,
+                       dvd_aspects[aspect].w, dvd_aspects[aspect].h);
+               add_item(new CreateDVD_FormatItem(this, i, item_text));
        }
+       set_value(gui->thread->use_standard);
 }
 
 int CreateDVD_Format::handle_event()
@@ -1009,6 +1045,53 @@ int CreateDVD_Format::handle_event()
        return 1;
 }
 
+
+CreateDVD_ScaleItem::CreateDVD_ScaleItem(CreateDVD_Scale *popup,
+               int scale, const char *text)
+ : BC_MenuItem(text)
+{
+       this->popup = popup;
+       this->scale = scale;
+}
+
+CreateDVD_ScaleItem::~CreateDVD_ScaleItem()
+{
+}
+
+int CreateDVD_ScaleItem::handle_event()
+{
+       popup->gui->thread->use_scale = scale;
+       popup->set_value(scale);
+       return popup->handle_event();
+}
+
+
+CreateDVD_Scale::CreateDVD_Scale(CreateDVD_GUI *gui, int x, int y)
+ : BC_PopupMenu(x, y, 100, "", 1)
+{
+       this->gui = gui;
+}
+
+CreateDVD_Scale::~CreateDVD_Scale()
+{
+}
+
+void CreateDVD_Scale::create_objects()
+{
+
+       for( int i=0; i<(int)Rescale::n_scale_types; ++i ) {
+               add_item(new CreateDVD_ScaleItem(this, i, Rescale::scale_types[i]));
+       }
+       set_value(gui->thread->use_scale);
+}
+
+int CreateDVD_Scale::handle_event()
+{
+       gui->update();
+       return 1;
+}
+
+
 CreateDVD_MediaSize::CreateDVD_MediaSize(CreateDVD_GUI *gui, int x, int y)
  : BC_PopupTextBox(gui, 0, 0, x, y, 70,50)
 {
index 8e267e8251c3a608a9e518e5fd444215cab0244a..6454a720d9769d8b43f2e72f9b05e4b5abcf806b 100644 (file)
@@ -11,6 +11,7 @@
 #include "bctextbox.h"
 #include "browsebutton.h"
 #include "mwindow.h"
+#include "rescale.h"
 
 #include "dvdcreate.inc"
 
@@ -48,7 +49,7 @@ public:
        char tmp_path[BCTEXTLEN];
        int use_deinterlace, use_inverse_telecine;
        int use_scale, use_resize_tracks;
-       int use_wide_audio, use_wide_aspect;
+       int use_wide_audio;
        int use_histogram, use_label_chapters;
        int use_ffmpeg, use_standard;
 
@@ -137,15 +138,6 @@ public:
        CreateDVD_GUI *gui;
 };
 
-class CreateDVD_Scale : public BC_CheckBox
-{
-public:
-       CreateDVD_Scale(CreateDVD_GUI *gui, int x, int y);
-       ~CreateDVD_Scale();
-
-       CreateDVD_GUI *gui;
-};
-
 class CreateDVD_ResizeTracks : public BC_CheckBox
 {
 public:
@@ -182,15 +174,6 @@ public:
        CreateDVD_GUI *gui;
 };
 
-class CreateDVD_WideAspect : public BC_CheckBox
-{
-public:
-       CreateDVD_WideAspect(CreateDVD_GUI *gui, int x, int y);
-       ~CreateDVD_WideAspect();
-
-       CreateDVD_GUI *gui;
-};
-
 class CreateDVD_UseFFMpeg : public BC_CheckBox
 {
 public:
@@ -221,16 +204,15 @@ public:
        BrowseButton *btmp_path;
        CreateDVD_DiskSpace *disk_space;
        CreateDVD_Format *standard;
+       CreateDVD_Scale *scale;
        ArrayList<BC_ListBoxItem *> media_sizes;
        CreateDVD_MediaSize *media_size;
        CreateDVD_Deinterlace *need_deinterlace;
        CreateDVD_InverseTelecine *need_inverse_telecine;
-       CreateDVD_Scale *need_scale;
        CreateDVD_UseFFMpeg *need_use_ffmpeg;
        CreateDVD_ResizeTracks *need_resize_tracks;
        CreateDVD_Histogram *need_histogram;
        CreateDVD_WideAudio *need_wide_audio;
-       CreateDVD_WideAspect *need_wide_aspect;
        CreateDVD_LabelChapters *need_label_chapters;
        int ok_x, ok_y, ok_w, ok_h;
        CreateDVD_OK *ok;
@@ -242,7 +224,7 @@ class CreateDVD_FormatItem : public BC_MenuItem
 {
 public:
        int handle_event();
-       CreateDVD_FormatItem(CreateDVD_Format *popup, int standard, const char *name);
+       CreateDVD_FormatItem(CreateDVD_Format *popup, int standard, const char *text);
        ~CreateDVD_FormatItem();
 
        CreateDVD_Format *popup;
@@ -256,8 +238,32 @@ public:
        int handle_event();
        CreateDVD_Format(CreateDVD_GUI *gui, int x, int y);
        ~CreateDVD_Format();
+       void set_value(int v) { set_text(get_item(v)->get_text()); }
+
+       CreateDVD_GUI *gui;
+};
+
+class CreateDVD_ScaleItem : public BC_MenuItem
+{
+public:
+       int handle_event();
+       CreateDVD_ScaleItem(CreateDVD_Scale *popup, int scale, const char *text);
+       ~CreateDVD_ScaleItem();
+
+       CreateDVD_Scale *popup;
+       int scale;
+};
+
+class CreateDVD_Scale : public BC_PopupMenu
+{
+public:
+       void create_objects();
+       int handle_event();
+       CreateDVD_Scale(CreateDVD_GUI *gui, int x, int y);
+       ~CreateDVD_Scale();
 
        CreateDVD_GUI *gui;
+       void set_value(int v) { set_text(Rescale::scale_types[v]); }
 };
 
 class CreateDVD_MediaSize : public BC_PopupTextBox
index 12d08afed7a7eb1ae4afa048861a9d071521dfd5..69494c2552b698ada884e7377a6a1292a76f4102 100644 (file)
@@ -118,7 +118,7 @@ public:
 // Return the number of seconds from the beginning of this which are
 // equivalent to the argument.
 // If they're completely equivalent, -1 is returned;
-// This is used by BRender.
+// This is used by BRender + BatchRender.
        double equivalent_output(EDL *edl);
 // Set project path for filename prefixes in the assets
        void set_path(char *path);
index 50ba297e4ac697875b22971235405bf440bde932..cbca6297b0e2aa8400f5b787142a56f3b0f01d85 100644 (file)
@@ -24,6 +24,7 @@
 #include "autoconf.h"
 #include "bccmodels.h"
 #include "bchash.h"
+#include "clip.h"
 #include "edl.h"
 #include "edlsession.h"
 #include "filexml.h"
@@ -172,7 +173,7 @@ void EDLSession::equivalent_output(EDLSession *session, double *result)
 {
        if(session->output_w != output_w ||
                session->output_h != output_h ||
-               session->frame_rate != frame_rate ||
+               !EQUIV(session->frame_rate, frame_rate) ||
                session->color_model != color_model ||
                session->interpolation_type != interpolation_type ||
                session->interpolate_raw != interpolate_raw ||
@@ -335,14 +336,13 @@ int EDLSession::load_defaults(BC_Hash *defaults)
        video_write_length = defaults->get("VIDEO_WRITE_LENGTH", 30);
        view_follows_playback = defaults->get("VIEW_FOLLOWS_PLAYBACK", 1);
        vwindow_meter = defaults->get("VWINDOW_METER", 0);
-
+       vwindow_zoom = defaults->get("VWINDOW_ZOOM", (float)1);
 
        decode_subtitles = defaults->get("DECODE_SUBTITLES", decode_subtitles);
        subtitle_number = defaults->get("SUBTITLE_NUMBER", subtitle_number);
        label_cells = defaults->get("LABEL_CELLS", label_cells);
        program_no = defaults->get("PROGRAM_NO", program_no);
 
-       vwindow_zoom = defaults->get("VWINDOW_ZOOM", (float)1);
        boundaries();
 
        return 0;
@@ -640,6 +640,7 @@ int EDLSession::load_xml(FileXML *file,
                subtitle_number = file->tag.get_property("SUBTITLE_NUMBER", subtitle_number);
                label_cells = file->tag.get_property("LABEL_CELLS", label_cells);
                program_no = file->tag.get_property("PROGRAM_NO", program_no);
+
                boundaries();
        }
 
index d1eb02c15dbeb04fe532c49c5794f51e843ceab3..c34cc731307ade5dbb526a1000bcdc875d4b24e3 100644 (file)
@@ -2089,17 +2089,6 @@ void MPEGConfigVideo::update_cmodel_objs()
 }
 
 
-
-
-
-
-
-
-
-
-
-
-
 MPEGDerivative::MPEGDerivative(int x, int y, MPEGConfigVideo *gui)
  : BC_PopupMenu(x, y, 150, derivative_to_string(gui->asset->vmpeg_derivative))
 {
@@ -2120,42 +2109,21 @@ int MPEGDerivative::handle_event()
 
 int MPEGDerivative::string_to_derivative(char *string)
 {
-       if(!strcasecmp(derivative_to_string(1), string))
-               return 1;
-       if(!strcasecmp(derivative_to_string(2), string))
-               return 2;
-
+       if( !strcasecmp(derivative_to_string(1), string) ) return 1;
+       if( !strcasecmp(derivative_to_string(2), string) ) return 2;
        return 1;
 }
 
 char* MPEGDerivative::derivative_to_string(int derivative)
 {
-       switch(derivative)
-       {
-               case 1:
-                       return _("MPEG-1");
-                       break;
-
-               case 2:
-                       return _("MPEG-2");
-                       break;
-
-               default:
-                       return _("MPEG-1");
-                       break;
+       switch(derivative) {
+       case 1: return _("MPEG-1");
+       case 2: return _("MPEG-2");
        }
+       return _("MPEG-1");
 }
 
 
-
-
-
-
-
-
-
-
-
 MPEGPreset::MPEGPreset(int x, int y, MPEGConfigVideo *gui)
  : BC_PopupMenu(x, y, 200, value_to_string(gui->asset->vmpeg_preset))
 {
@@ -2164,8 +2132,7 @@ MPEGPreset::MPEGPreset(int x, int y, MPEGConfigVideo *gui)
 
 void MPEGPreset::create_objects()
 {
-       for(int i = 0; i < 10; i++)
-       {
+       for(int i = 0; i < 14; i++) {
                add_item(new BC_MenuItem(value_to_string(i)));
        }
 }
@@ -2178,8 +2145,7 @@ int MPEGPreset::handle_event()
 
 int MPEGPreset::string_to_value(char *string)
 {
-       for(int i = 0; i < 10; i++)
-       {
+       for(int i = 0; i < 14; i++) {
                if(!strcasecmp(value_to_string(i), string))
                        return i;
        }
@@ -2188,20 +2154,23 @@ int MPEGPreset::string_to_value(char *string)
 
 char* MPEGPreset::value_to_string(int derivative)
 {
-       switch(derivative)
-       {
-               case 0: return _("Generic MPEG-1"); break;
-               case 1: return _("standard VCD"); break;
-               case 2: return _("user VCD"); break;
-               case 3: return _("Generic MPEG-2"); break;
-               case 4: return _("standard SVCD"); break;
-               case 5: return _("user SVCD"); break;
-               case 6: return _("VCD Still sequence"); break;
-               case 7: return _("SVCD Still sequence"); break;
-               case 8: return _("DVD NAV"); break;
-               case 9: return _("DVD"); break;
-               default: return _("Generic MPEG-1"); break;
+       switch( derivative ) {
+       case 0: return _("Generic MPEG-1"); break;
+       case 1: return _("standard VCD"); break;
+       case 2: return _("user VCD"); break;
+       case 3: return _("Generic MPEG-2"); break;
+       case 4: return _("standard SVCD"); break;
+       case 5: return _("user SVCD"); break;
+       case 6: return _("VCD Still sequence"); break;
+       case 7: return _("SVCD Still sequence"); break;
+       case 8: return _("DVD NAV"); break;
+       case 9: return _("DVD"); break;
+       case 10: return _("ATSC 480i"); break;
+       case 11: return _("ATSC 480p"); break;
+       case 12: return _("ATSC 720p"); break;
+       case 13: return _("ATSC 1080i"); break;
        }
+       return _("Generic MPEG-1");
 }
 
 
index a9944e953779901412ca1cc939980b1408052077..d924a272660819295e5a82740b38ce101b97eace 100644 (file)
@@ -92,6 +92,7 @@ void InterfacePrefs::create_objects()
 
        y += get_text_height(LARGEFONT) + 5;
 
+       int y1 = y;
 
        add_subwindow(hms = new TimeFormatHMS(pwindow, this, 
                pwindow->thread->edl->session->time_format == TIME_HMS, 
@@ -128,12 +129,16 @@ void InterfacePrefs::create_objects()
        add_subwindow(seconds = new TimeFormatSeconds(pwindow, this, 
                pwindow->thread->edl->session->time_format == TIME_SECONDS, 
                x, y));
-
        y += 35;
-       add_subwindow(new UseTipWindow(pwindow, x, y));
-       add_subwindow(new UseWarnIndecies(pwindow, x+200, y));
 
-       y += 35;
+       x1 = get_w()/2;
+       UseTipWindow *tip_win = new UseTipWindow(pwindow, x1, y1);
+       add_subwindow(tip_win);
+       y1 += tip_win->get_h() + 5;
+       UseWarnIndecies *idx_win = new UseWarnIndecies(pwindow, x1, y1);
+       add_subwindow(idx_win);
+       y1 += idx_win->get_h() + 25;
+
        add_subwindow(new BC_Bar(5, y,  get_w() - 10));
        y += 5;
 
@@ -178,7 +183,7 @@ void InterfacePrefs::create_objects()
 
        add_subwindow(new BC_Title(x, y, _("Editing"), LARGEFONT, resources->text_default));
 
-       int y1 = y + 5;
+       y1 = y + 5;
        y += 35;
        add_subwindow(title = new BC_Title(x, y, _("Keyframe reticle:")));
        x1 = x + title->get_w() + 10;
@@ -692,8 +697,6 @@ int UseWarnIndecies::handle_event()
 }
 
 
-
-
 ScanCommercials::ScanCommercials(PreferencesWindow *pwindow, int x, int y)
  : BC_CheckBox(x, 
        y, 
index ad361ecf3e35109af1958b7be0eb44e7822d3e5b..a9e813af4131a8f9aaf61f1b23b190d3696ce967 100644 (file)
@@ -902,6 +902,11 @@ void MWindow::show_warning(int *do_warning, const char *text)
        wwindow->show_warning(do_warning, text);
 }
 
+int MWindow::wait_warning()
+{
+       return wwindow->wait_result();
+}
+
 void MWindow::init_theme()
 {
        Timer timer;
index 00e9dea829621b75af16b5e631253e4b9f5249ae..ede2ffe6afe616a712f2b64488eb67115a48fbb0 100644 (file)
@@ -584,6 +584,7 @@ public:
 // Warning window
        WWindow *wwindow;
        void show_warning(int *do_warning, const char *text);
+       int wait_warning();
 // Levels
        LevelWindow *lwindow;
 // Lock during creation and destruction of GUI
index 7cc90b5a46289e255face8e24a361cdb80c9c692..412d57214337fc8c47757ab1e49bd458173fdd94 100644 (file)
@@ -102,6 +102,7 @@ public:
        int ffmpeg_early_probe;
 // ffmpeg builds marker indexes as it builds idx files
        int ffmpeg_marker_indexes;
+// warning
        int warn_indexes;
 
 // Default positions for channels
diff --git a/cinelerra-5.1/cinelerra/rescale.C b/cinelerra-5.1/cinelerra/rescale.C
new file mode 100644 (file)
index 0000000..9f96ac2
--- /dev/null
@@ -0,0 +1,68 @@
+#include "rescale.h"
+#include "indexable.h"
+#include "mwindow.h"
+
+const char *Rescale::scale_types[] = {
+  "None", "Scaled", "Cropped", "Filled", "Horiz Edge", "Vert Edge",
+};
+
+Rescale::Rescale(int w, int h, double aspect)
+{
+       this->w = w;
+       this->h = h;
+       this->aspect = aspect;
+}
+
+Rescale::Rescale(Indexable *in)
+{
+       this->w = in->get_w();
+       this->h = in->get_h();
+       float aw, ah;
+       MWindow::create_aspect_ratio(aw, ah, this->w, this->h);
+       this->aspect = ah > 0 ? aw / ah : 1;
+}
+
+Rescale::~Rescale()
+{
+}
+
+void Rescale::rescale(Rescale &out, int type,
+               float &src_w,float &src_h, float &dst_w,float &dst_h)
+{
+       int in_w = w, in_h = h;
+       int out_w = out.w, out_h = out.h;
+
+       src_w = in_w;  src_h = in_h;
+       dst_w = out_w; dst_h = out_h;
+       double r = out.aspect / aspect;
+
+       switch( type ) {
+       case cropped:
+               if( r < 1 )
+                       src_w = in_w * r;
+               else
+                       src_h = in_h / r;
+               break;
+       case filled:
+               if( r < 1 )
+                       dst_h = out_h * r;
+               else
+                       dst_w = out_w / r;
+               break;
+       case horiz_edge:
+               if( r < 1 )
+                       dst_h = out_h * r;
+               else
+                       src_h = in_h / r;
+               break;
+       case vert_edge:
+               if( r < 1 )
+                       src_w = in_w * r;
+               else
+                       dst_w = out_w / r;
+               break;
+       default:
+               break;
+       }
+}
+
diff --git a/cinelerra-5.1/cinelerra/rescale.h b/cinelerra-5.1/cinelerra/rescale.h
new file mode 100644 (file)
index 0000000..046a9c7
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __RESCALE_H__
+#define __RESCALE_H__
+#include "indexable.inc"
+
+class Rescale {
+public:
+       enum { none, scaled, cropped, filled, horiz_edge, vert_edge, n_scale_types };
+       static const char *scale_types[];
+
+       Rescale(int w, int h, double aspect);
+       Rescale(Indexable *in);
+       ~Rescale();
+
+       int w, h;
+       double aspect;
+
+       void rescale(Rescale &out, int type,
+               float &src_w,float &src_h, float &dst_w,float &dst_h);
+};
+
+#endif
index e0db1b7ca4d0ab1101625c68795da36e4457a480..7759d7d0a45069eb19689b7524165c0878899d6c 100644 (file)
@@ -31,6 +31,7 @@ WWindow::WWindow(MWindow *mwindow)
  : BC_DialogThread()
 {
        this->mwindow = mwindow;
+       this->result = 0;
 }
 
 WWindow::~WWindow()
@@ -43,11 +44,13 @@ void WWindow::show_warning(int *do_warning, const char *warn_text)
        if( running() ) return;
        this->do_warning = do_warning;
        this->warn_text = warn_text;
+       this->result = 0;
        start();
 }
 
 void WWindow::handle_close_event(int result)
 {
+       this->result = result;
        gui = 0;
 }
 
@@ -61,6 +64,13 @@ BC_Window* WWindow::new_gui()
        return gui;
 }
 
+int WWindow::wait_result()
+{
+       if( !running() ) return -1;
+       join();
+       return result;
+}
+
 WWindowGUI::WWindowGUI(WWindow *thread, int x, int y)
  : BC_Window(_(PROGRAM_NAME ": Warning"), x, y, 640, 100, 640, 100, 0, 0, 1)
 {
index b1f9b67251273993fa266f6277d672e14d7e43c1..efead2eea4b3a428abcf205d4dd9302dba3437d4 100644 (file)
@@ -41,10 +41,12 @@ public:
        void handle_close_event(int result);
        void show_warning(int *do_warning, const char *warn_text);
        BC_Window* new_gui();
+       int wait_result();
 
        MWindow *mwindow;
        WWindowGUI *gui;
        int *do_warning;
+       int result;
        const char *warn_text;
 };
 
index 625797199c14fbab94b13a929d4730bd386d7e3f..d304dcd8fa238ab7483ffdd3b60fc6ba576b8003 100644 (file)
@@ -731,7 +731,15 @@ echo "WANT_CIN := $WANT_CIN"
 for w in $CFG_WANTS; do ww=WANT_$w; echo "WANT_$w := ${!ww}"; done
 echo ""
 
-echo "CFLAGS ?= ${CFLAGS:--g -O2}"
+echo "ifndef CFLAGS_"
+echo "ifdef CFLAGS"
+echo "CFLAGS_ := \$(CFLAGS)"
+echo "else"
+echo "CFLAGS_ := ${CFLAGS:--g -O2}"
+echo "endif"
+echo "endif"
+
+echo "CFLAGS := \$(CFLAGS_)"
 echo "CFLAGS += '-DCIN=\"\$(WANT_CIN)\"'"
 echo "CFLAGS += '-DCINLIB_DIR=\"$WANT_CINLIB_DIR\"'"
 echo "CFLAGS += '-DCINDAT_DIR=\"$WANT_CINDAT_DIR\"'"
@@ -742,7 +750,6 @@ echo "CFLAGS += '-DLADSPA_DIR=\"$WANT_LADSPA_DIR\"'"
 for flg in $CFG_CFLAGS; do echo "CFLAGS += $flg"; done
 echo ""
 for flg in $CFG_CXXFLAGS; do echo "CXXFLAGS += $flg"; done
-echo "unexport CFLAGS CXXFLAGS"
 echo ""
 
 if test  $WANT_X264_HIDEPTH = "yes" ; then
@@ -792,5 +799,7 @@ echo "libraries += -Wl,--end-group"
 echo "libraries += \$(thirdparty_libraries)"
 echo "libraries += \$(system_libs)"
 echo "libraries += \$(EXTRA_LIBS)"
-echo "export thirdparty_libraries libraries"
 echo ""
+echo "export thirdparty_libraries libraries"
+echo "export CFLAGS_ CXXFLAGS_ LDFLAGS_"
+echo "unexport CFLAGS CXXFLAGS LDFLAGS"
index fa2b5fe4ada18f591dedbcd224d3a86f70b4af8c..9e4ea0b8ecb5e3dcb68b6474d05348a577486269 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 $(shell mkdir -p $(OBJDIR))
index 3a5eff85ee97cd49d47a7465d807ef4304d88c3e..3ded9944876f55d4bcd1c802cee56ec2688ba82f 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/../..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/../..
 include $(TOPDIR)/global_config
 
 $(shell mkdir -p $(OBJDIR))
index 11615c304fec654c598a51e251234eb2e8182a68..84b6c650897419671ab93ac3fd5b76deaecb2071 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 TARGET_DIR := $(BINDIR)/doc
index 0f2a1c4a9c197e3845abaf580bd07d3073581a5c..f7742b50255d5412af5c4941c5be52bb556d99cd 100644 (file)
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Created by GNU Texinfo 6.0, http://www.gnu.org/software/texinfo/ -->
 <head>
 <title>SECRETS OF CINELERRA</title>
-<meta http-equiv="Content-Type" content="text/html">
+
 <meta name="description" content="SECRETS OF CINELERRA">
-<meta name="generator" content="makeinfo 4.13">
-<link title="Top" rel="top" href="#Top">
-<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<style type="text/css"><!--
-  pre.display { font-family:inherit }
-  pre.format  { font-family:inherit }
-  pre.smalldisplay { font-family:inherit; font-size:smaller }
-  pre.smallformat  { font-family:inherit; font-size:smaller }
-  pre.smallexample { font-size:smaller }
-  pre.smalllisp    { font-size:smaller }
-  span.sc    { font-variant:small-caps }
-  span.roman { font-family:serif; font-weight:normal; } 
-  span.sansserif { font-family:sans-serif; font-weight:normal; } 
---></style>
+<meta name="keywords" content="SECRETS OF CINELERRA">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="#Top" rel="start" title="TOP">
+<link href="#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="dir.html#Top" rel="up" title="(dir)">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+kbd {font-style: oblique}
+pre.display {font-family: inherit}
+pre.format {font-family: inherit}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: inherit; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: inherit; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nocodebreak {white-space: nowrap}
+span.nolinebreak {white-space: nowrap}
+span.roman {font-family: serif; font-weight: normal}
+span.sansserif {font-family: sans-serif; font-weight: normal}
+ul.no-bullet {list-style: none}
+-->
+</style>
+
+
 </head>
-<body>
-<div class="node">
-<a name="Top"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ABOUT-CINELERRA">ABOUT CINELERRA</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
 
-</div>
+<body lang="en">
+<h1 class="settitle" align="center">SECRETS OF CINELERRA</h1>
 
-<h2 class="unnumbered">SECRETS OF CINELERRA</h2>
 
-<div align="center"></div>
+<a name="Top"></a>
+<div class="header">
+<p>
+Next: <a href="#ABOUT-CINELERRA" accesskey="n" rel="next">ABOUT CINELERRA</a>, Up: <a href="dir.html#Top" accesskey="u" rel="up">(dir)</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SEC_Top"></a>
 
-   <p>Version 4.1
 
-   <p>by Adam Williams
+<p>Version 4.1
+</p>
+<p>by Adam Williams
+</p>
+<p>Copyright &copy; 2011
+</p>
 
-   <p>Copyright &copy; 2011
 
+<a name="SHORT-CONTENTS"></a>
 <h2 class="chapter">1 SHORT CONTENTS</h2>
 
-<ul class="menu">
-<li><a accesskey="1" href="#ABOUT-CINELERRA">ABOUT CINELERRA</a>:           Cinelerra in brief. 
-<li><a accesskey="2" href="#INSTALLATION">INSTALLATION</a>:              Making Cinelerra work on your system. 
-<li><a accesskey="3" href="#CONFIGURATION">CONFIGURATION</a>:             Adjusting the behavior of Cinelerra. 
-<li><a accesskey="4" href="#CREATING-A-NEW-PROJECT">CREATING A NEW PROJECT</a>:    Creating a new project
-<li><a accesskey="5" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>:          The most often used user interfaces. 
-<li><a accesskey="6" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>:  Moving media between disk and Cinelerra. 
-<li><a accesskey="7" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>:    Moving around the media. 
-<li><a accesskey="8" href="#EDITING">EDITING</a>:                   Moving the media in time. 
-<li><a accesskey="9" href="#USING-EFFECTS">USING EFFECTS</a>:             Altering the media. 
-<li><a href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>:  Changing the way the media is displayed. 
-<li><a href="#COMPOSITING">COMPOSITING</a>:               Overlaying different sources of video. 
-<li><a href="#KEYFRAMES">KEYFRAMES</a>:                 Making effects change over time. 
-<li><a href="#CAPTURING-MEDIA">CAPTURING MEDIA</a>:           Moving media from the real world to disk. 
-<li><a href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>:     Making Cinelerra run better on Linux. 
-<li><a href="#TROUBLESHOOTING">TROUBLESHOOTING</a>:           Problems with Cinelerra. 
-<li><a href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>:      Unusual applications of Cinelerra to common problems. 
-<li><a href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>:       Secrets of the more complicated effects. 
-<li><a href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>:          How to write new effects. 
-<li><a href="#KEYBOARD-SHORTCUTS">KEYBOARD SHORTCUTS</a>:        How to accelerate most commands with the keyboard. 
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#ABOUT-CINELERRA" accesskey="1">ABOUT CINELERRA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Cinelerra in brief.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#INSTALLATION" accesskey="2">INSTALLATION</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Making Cinelerra work on your system.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CONFIGURATION" accesskey="3">CONFIGURATION</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Adjusting the behavior of Cinelerra.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CREATING-A-NEW-PROJECT" accesskey="4">CREATING A NEW PROJECT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Creating a new project
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#THE-MAIN-WINDOWS" accesskey="5">THE MAIN WINDOWS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The most often used user interfaces.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LOADING-AND-SAVING-FILES" accesskey="6">LOADING AND SAVING FILES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving media between disk and Cinelerra.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#NAVIGATING-THE-PROJECT" accesskey="7">NAVIGATING THE PROJECT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving around the media.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#EDITING" accesskey="8">EDITING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving the media in time.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-EFFECTS" accesskey="9">USING EFFECTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Altering the media.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Changing the way the media is displayed.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COMPOSITING">COMPOSITING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Overlaying different sources of video.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#KEYFRAMES">KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Making effects change over time.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CAPTURING-MEDIA">CAPTURING MEDIA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving media from the real world to disk.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Making Cinelerra run better on Linux.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TROUBLESHOOTING">TROUBLESHOOTING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Problems with Cinelerra.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Unusual applications of Cinelerra to common problems.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Secrets of the more complicated effects.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to write new effects.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#KEYBOARD-SHORTCUTS">KEYBOARD SHORTCUTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to accelerate most commands with the keyboard.
+</td></tr>
+</table>
+
+
+
+<a name="SEC_Contents"></a>
+<h2 class="contents-heading">Table of Contents</h2>
+
+<div class="contents">
+
+<ul class="no-bullet">
+  <li><a name="toc-SHORT-CONTENTS" href="#SHORT-CONTENTS">1 SHORT CONTENTS</a></li>
+  <li><a name="toc-ABOUT-CINELERRA-1" href="#ABOUT-CINELERRA">2 ABOUT CINELERRA</a>
+  <ul class="no-bullet">
+    <li><a name="toc-ABOUT-THIS-MANUAL-1" href="#ABOUT-THIS-MANUAL">2.1 ABOUT THIS MANUAL</a></li>
+  </ul></li>
+  <li><a name="toc-INSTALLATION-1" href="#INSTALLATION">3 INSTALLATION</a>
+  <ul class="no-bullet">
+    <li><a name="toc-INSTALLING-AN-RPM-1" href="#INSTALLING-AN-RPM">3.1 INSTALLING AN RPM</a></li>
+    <li><a name="toc-COMPILING-FROM-SCRATCH-1" href="#COMPILING-FROM-SCRATCH">3.2 COMPILING FROM SCRATCH</a></li>
+    <li><a name="toc-RUNNING-CINELERRA-1" href="#RUNNING-CINELERRA">3.3 RUNNING CINELERRA</a></li>
+  </ul></li>
+  <li><a name="toc-CONFIGURATION-1" href="#CONFIGURATION">4 CONFIGURATION</a>
+  <ul class="no-bullet">
+    <li><a name="toc-ENVIRONMENT-VARIABLES-1" href="#ENVIRONMENT-VARIABLES">4.1 ENVIRONMENT VARIABLES</a></li>
+    <li><a name="toc-AUDIO-DRIVERS-1" href="#AUDIO-DRIVERS">4.2 AUDIO DRIVERS</a>
+    <ul class="no-bullet">
+      <li><a name="toc-COMMON-SOUND-DRIVER-ATTRIBUTES-1" href="#COMMON-SOUND-DRIVER-ATTRIBUTES">4.2.1 COMMON SOUND DRIVER ATTRIBUTES</a></li>
+      <li><a name="toc-OSS-1" href="#OSS">4.2.2 OSS</a></li>
+      <li><a name="toc-OSS-Envy24-1" href="#OSS-Envy24">4.2.3 OSS Envy24</a></li>
+      <li><a name="toc-ALSA-1" href="#ALSA">4.2.4 ALSA</a></li>
+      <li><a name="toc-ESOUND-1" href="#ESOUND">4.2.5 ESOUND</a></li>
+      <li><a name="toc-RAW-1394-1" href="#RAW-1394">4.2.6 RAW 1394</a></li>
+      <li><a name="toc-DV-1394-1" href="#DV-1394">4.2.7 DV 1394</a></li>
+      <li><a name="toc-IEC-61883-1" href="#IEC-61883">4.2.8 IEC 61883</a></li>
+    </ul></li>
+    <li><a name="toc-VIDEO-DRIVERS-1" href="#VIDEO-DRIVERS">4.3 VIDEO DRIVERS</a>
+    <ul class="no-bullet">
+      <li><a name="toc-COMMON-VIDEO-DRIVER-ATTRIBUTES-1" href="#COMMON-VIDEO-DRIVER-ATTRIBUTES">4.3.1 COMMON VIDEO DRIVER ATTRIBUTES</a></li>
+      <li><a name="toc-X11-1" href="#X11">4.3.2 X11</a></li>
+      <li><a name="toc-X11_002dXV-1" href="#X11_002dXV">4.3.3 X11-XV</a></li>
+      <li><a name="toc-X11_002dOPENGL-1" href="#X11_002dOPENGL">4.3.4 X11-OPENGL</a></li>
+      <li><a name="toc-BUZ-1" href="#BUZ">4.3.5 BUZ</a></li>
+      <li><a name="toc-RAW-1394-VIDEO-PLAYBACK-1" href="#RAW-1394-VIDEO-PLAYBACK">4.3.6 RAW 1394 VIDEO PLAYBACK</a></li>
+      <li><a name="toc-DV-1394-VIDEO-PLAYBACK-1" href="#DV-1394-VIDEO-PLAYBACK">4.3.7 DV 1394 VIDEO PLAYBACK</a></li>
+      <li><a name="toc-IEC-61883-VIDEO-PLAYBACK-1" href="#IEC-61883-VIDEO-PLAYBACK">4.3.8 IEC 61883 VIDEO PLAYBACK</a></li>
+    </ul></li>
+    <li><a name="toc-PLAYBACK-1" href="#PLAYBACK">4.4 PLAYBACK</a>
+    <ul class="no-bullet">
+      <li><a name="toc-AUDIO-OUT-1" href="#AUDIO-OUT">4.4.1 AUDIO OUT</a></li>
+      <li><a name="toc-VIDEO-OUT-1" href="#VIDEO-OUT">4.4.2 VIDEO OUT</a></li>
+    </ul></li>
+    <li><a name="toc-RECORDING-1" href="#RECORDING">4.5 RECORDING</a>
+    <ul class="no-bullet">
+      <li><a name="toc-FILE-FORMAT-1" href="#FILE-FORMAT">4.5.1 FILE FORMAT</a></li>
+      <li><a name="toc-AUDIO-IN-1" href="#AUDIO-IN">4.5.2 AUDIO IN</a></li>
+      <li><a name="toc-VIDEO-IN-1" href="#VIDEO-IN">4.5.3 VIDEO IN</a></li>
+    </ul></li>
+    <li><a name="toc-PERFORMANCE-1" href="#PERFORMANCE">4.6 PERFORMANCE</a>
+    <ul class="no-bullet">
+      <li><a name="toc-BACKGROUND-RENDERING-1" href="#BACKGROUND-RENDERING">4.6.1 BACKGROUND RENDERING</a></li>
+      <li><a name="toc-RENDERFARM-1" href="#RENDERFARM">4.6.2 RENDERFARM</a></li>
+    </ul></li>
+    <li><a name="toc-INTERFACE-1" href="#INTERFACE">4.7 INTERFACE</a></li>
+    <li><a name="toc-ABOUT-1" href="#ABOUT">4.8 ABOUT</a></li>
+  </ul></li>
+  <li><a name="toc-CREATING-A-NEW-PROJECT-1" href="#CREATING-A-NEW-PROJECT">5 CREATING A NEW PROJECT</a>
+  <ul class="no-bullet">
+    <li><a name="toc-USING-THE-NEW-PROJECT-DIALOG-1" href="#USING-THE-NEW-PROJECT-DIALOG">5.1 USING THE NEW PROJECT DIALOG</a></li>
+    <li><a name="toc-CHANGING-PARAMETERS-AFTER-LOADING-1" href="#CHANGING-PARAMETERS-AFTER-LOADING">5.2 CHANGING PARAMETERS AFTER LOADING</a></li>
+  </ul></li>
+  <li><a name="toc-THE-MAIN-WINDOWS-1" href="#THE-MAIN-WINDOWS">6 THE MAIN WINDOWS</a>
+  <ul class="no-bullet">
+    <li><a name="toc-VIEWER-1" href="#VIEWER">6.1 VIEWER</a></li>
+    <li><a name="toc-COMPOSITOR-1" href="#COMPOSITOR">6.2 COMPOSITOR</a>
+    <ul class="no-bullet">
+      <li><a name="toc-PROTECT-VIDEO-1" href="#PROTECT-VIDEO">6.2.1 PROTECT VIDEO</a></li>
+      <li><a name="toc-MAGNIFYING-GLASS-1" href="#MAGNIFYING-GLASS">6.2.2 MAGNIFYING GLASS</a></li>
+      <li><a name="toc-MASKS-TOOL-1" href="#MASKS-TOOL">6.2.3 MASKS TOOL</a></li>
+      <li><a name="toc-CAMERA-1" href="#CAMERA">6.2.4 CAMERA</a></li>
+      <li><a name="toc-PROJECTOR-1" href="#PROJECTOR">6.2.5 PROJECTOR</a></li>
+      <li><a name="toc-CROP-TOOL-1" href="#CROP-TOOL">6.2.6 CROP TOOL</a></li>
+      <li><a name="toc-EYEDROPPER-1" href="#EYEDROPPER">6.2.7 EYEDROPPER</a></li>
+      <li><a name="toc-TOOL-INFO-1" href="#TOOL-INFO">6.2.8 TOOL INFO</a></li>
+      <li><a name="toc-SAFE-REGIONS-TOOL-1" href="#SAFE-REGIONS-TOOL">6.2.9 SAFE REGIONS TOOL</a></li>
+    </ul></li>
+    <li><a name="toc-PROGRAM-1" href="#PROGRAM">6.3 PROGRAM</a></li>
+    <li><a name="toc-RESOURCES-1" href="#RESOURCES">6.4 RESOURCES</a></li>
+    <li><a name="toc-SOUND-LEVEL-METERS-1" href="#SOUND-LEVEL-METERS">6.5 SOUND LEVEL METERS</a></li>
+    <li><a name="toc-OTHER-WINDOWS-1" href="#OTHER-WINDOWS">6.6 OTHER WINDOWS</a></li>
+  </ul></li>
+  <li><a name="toc-LOADING-AND-SAVING-FILES-1" href="#LOADING-AND-SAVING-FILES">7 LOADING AND SAVING FILES</a>
+  <ul class="no-bullet">
+    <li><a name="toc-SUPPORTED-FILE-FORMATS-1" href="#SUPPORTED-FILE-FORMATS">7.1 SUPPORTED FILE FORMATS</a>
+    <ul class="no-bullet">
+      <li><a name="toc-QUICKTIME-1" href="#QUICKTIME">7.1.1 QUICKTIME</a></li>
+      <li><a name="toc-MPEG_002d4-AUDIO-1" href="#MPEG_002d4-AUDIO">7.1.2 MPEG-4 AUDIO</a></li>
+      <li><a name="toc-IMAGE-SEQUENCES-1" href="#IMAGE-SEQUENCES">7.1.3 IMAGE SEQUENCES</a></li>
+      <li><a name="toc-STILL-IMAGES-1" href="#STILL-IMAGES">7.1.4 STILL IMAGES</a>
+      <ul class="no-bullet">
+        <li><a name="toc-OPEN-EXR-IMAGES-1" href="#OPEN-EXR-IMAGES">7.1.4.1 OPEN EXR IMAGES</a></li>
+        <li><a name="toc-RAW-DIGITAL-CAMERA-IMAGES-1" href="#RAW-DIGITAL-CAMERA-IMAGES">7.1.4.2 RAW DIGITAL CAMERA IMAGES</a></li>
+      </ul></li>
+      <li><a name="toc-AVI-1" href="#AVI">7.1.5 AVI</a></li>
+      <li><a name="toc-MPEG-FILES-CONTAINING-VIDEO-1" href="#MPEG-FILES-CONTAINING-VIDEO">7.1.6 MPEG FILES CONTAINING VIDEO</a></li>
+      <li><a name="toc-DVD-MOVIES-1" href="#DVD-MOVIES">7.1.7 DVD MOVIES</a></li>
+      <li><a name="toc-MPEG-1-AUDIO-1" href="#MPEG-1-AUDIO">7.1.8 MPEG 1 AUDIO</a></li>
+      <li><a name="toc-OGG-THEORA_002fVORBIS-1" href="#OGG-THEORA_002fVORBIS">7.1.9 OGG THEORA/VORBIS</a></li>
+      <li><a name="toc-EDIT-DECISION-LIST-1" href="#EDIT-DECISION-LIST">7.1.10 EDIT DECISION LIST</a></li>
+    </ul></li>
+    <li><a name="toc-LOADING-FILES-1" href="#LOADING-FILES">7.2 LOADING FILES</a>
+    <ul class="no-bullet">
+      <li><a name="toc-INSERTION-STRATEGY-1" href="#INSERTION-STRATEGY">7.2.1 INSERTION STRATEGY</a></li>
+      <li><a name="toc-LOADING-MULTIPLE-FILES-1" href="#LOADING-MULTIPLE-FILES">7.2.2 LOADING MULTIPLE FILES</a></li>
+    </ul></li>
+    <li><a name="toc-LOADING-THE-BACKUP-1" href="#LOADING-THE-BACKUP">7.3 LOADING THE BACKUP</a></li>
+    <li><a name="toc-SAVING-FILES-1" href="#SAVING-FILES">7.4 SAVING FILES</a></li>
+    <li><a name="toc-RENDERING-FILES-1" href="#RENDERING-FILES">7.5 RENDERING FILES</a>
+    <ul class="no-bullet">
+      <li><a name="toc-SINGLE-FILE-RENDERING-1" href="#SINGLE-FILE-RENDERING">7.5.1 SINGLE FILE RENDERING</a></li>
+      <li><a name="toc-BATCH-RENDERING-1" href="#BATCH-RENDERING">7.5.2 BATCH RENDERING</a></li>
+      <li><a name="toc-THE-RENDER-FARM-1" href="#THE-RENDER-FARM">7.5.3 THE RENDER FARM</a></li>
+      <li><a name="toc-COMMAND-LINE-RENDERING-1" href="#COMMAND-LINE-RENDERING">7.5.4 COMMAND LINE RENDERING</a></li>
+    </ul></li>
+  </ul></li>
+  <li><a name="toc-NAVIGATING-THE-PROJECT-1" href="#NAVIGATING-THE-PROJECT">8 NAVIGATING THE PROJECT</a>
+  <ul class="no-bullet">
+    <li><a name="toc-NAVIGATING-THE-PROGRAM-WINDOW-1" href="#NAVIGATING-THE-PROGRAM-WINDOW">8.1 NAVIGATING THE PROGRAM WINDOW</a>
+    <ul class="no-bullet">
+      <li><a name="toc-THE-INSERTION-POINT-1" href="#THE-INSERTION-POINT">8.1.1 THE INSERTION POINT</a></li>
+      <li><a name="toc-THE-IN_002fOUT-POINTS-1" href="#THE-IN_002fOUT-POINTS">8.1.2 THE IN/OUT POINTS</a></li>
+      <li><a name="toc-USING-LABELS-IN-THE-PROGRAM-WINDOW-1" href="#USING-LABELS-IN-THE-PROGRAM-WINDOW">8.1.3 USING LABELS IN THE PROGRAM WINDOW</a></li>
+    </ul></li>
+    <li><a name="toc-NAVIGATING-THE-VIEWER-AND-COMPOSITOR-1" href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR">8.2 NAVIGATING THE VIEWER AND COMPOSITOR</a></li>
+    <li><a name="toc-NAVIGATING-THE-RESOURCES-1" href="#NAVIGATING-THE-RESOURCES">8.3 NAVIGATING THE RESOURCES</a></li>
+    <li><a name="toc-USING-THE-TRANSPORT-CONTROLS-1" href="#USING-THE-TRANSPORT-CONTROLS">8.4 USING THE TRANSPORT CONTROLS</a></li>
+    <li><a name="toc-USING-BACKGROUND-RENDERING-1" href="#USING-BACKGROUND-RENDERING">8.5 USING BACKGROUND RENDERING</a></li>
+  </ul></li>
+  <li><a name="toc-EDITING-1" href="#EDITING">9 EDITING</a>
+  <ul class="no-bullet">
+    <li><a name="toc-THE-PATCHBAY-1" href="#THE-PATCHBAY">9.1 THE PATCHBAY</a></li>
+    <li><a name="toc-NUDGING-TRACKS-1" href="#NUDGING-TRACKS">9.2 NUDGING TRACKS</a></li>
+    <li><a name="toc-PANNING-TRACKS-1" href="#PANNING-TRACKS">9.3 PANNING TRACKS</a></li>
+    <li><a name="toc-AUTOMATIC-TRACK-PANNING-1" href="#AUTOMATIC-TRACK-PANNING">9.4 AUTOMATIC TRACK PANNING</a></li>
+    <li><a name="toc-STANDARD-AUDIO-MAPPINGS-1" href="#STANDARD-AUDIO-MAPPINGS">9.5 STANDARD AUDIO MAPPINGS</a></li>
+    <li><a name="toc-MANIPULATING-TRACKS-1" href="#MANIPULATING-TRACKS">9.6 MANIPULATING TRACKS</a></li>
+    <li><a name="toc-TWO-SCREEN-EDITING-1" href="#TWO-SCREEN-EDITING">9.7 TWO SCREEN EDITING</a></li>
+    <li><a name="toc-DRAG-AND-DROP-EDITING-1" href="#DRAG-AND-DROP-EDITING">9.8 DRAG AND DROP EDITING</a></li>
+    <li><a name="toc-CUT-AND-PASTE-EDITING-1" href="#CUT-AND-PASTE-EDITING">9.9 CUT AND PASTE EDITING</a></li>
+    <li><a name="toc-TRIMMING-1" href="#TRIMMING">9.10 TRIMMING</a></li>
+  </ul></li>
+  <li><a name="toc-USING-EFFECTS-1" href="#USING-EFFECTS">10 USING EFFECTS</a>
+  <ul class="no-bullet">
+    <li><a name="toc-REALTIME-EFFECTS-1" href="#REALTIME-EFFECTS">10.1 REALTIME EFFECTS</a>
+    <ul class="no-bullet">
+      <li><a name="toc-REALTIME-EFFECT-TYPES-1" href="#REALTIME-EFFECT-TYPES">10.1.1 REALTIME EFFECT TYPES</a></li>
+      <li><a name="toc-EDITING-REALTIME-EFFECTS-1" href="#EDITING-REALTIME-EFFECTS">10.1.2 EDITING REALTIME EFFECTS</a></li>
+    </ul></li>
+    <li><a name="toc-RENDERED-EFFECTS-1" href="#RENDERED-EFFECTS">10.2 RENDERED EFFECTS</a></li>
+    <li><a name="toc-TRANSITIONS-1" href="#TRANSITIONS">10.3 TRANSITIONS</a></li>
+    <li><a name="toc-LADSPA-EFFECTS-1" href="#LADSPA-EFFECTS">10.4 LADSPA EFFECTS</a></li>
+    <li><a name="toc-EFFECT-PRESETS-1" href="#EFFECT-PRESETS">10.5 EFFECT PRESETS</a></li>
+  </ul></li>
+  <li><a name="toc-SETTING-PROJECT-ATTRIBUTES-1" href="#SETTING-PROJECT-ATTRIBUTES">11 SETTING PROJECT ATTRIBUTES</a>
+  <ul class="no-bullet">
+    <li><a name="toc-AUDIO-CHANNEL-POSITIONS-1" href="#AUDIO-CHANNEL-POSITIONS">11.1 AUDIO CHANNEL POSITIONS</a></li>
+    <li><a name="toc-COLOR-MODEL-1" href="#COLOR-MODEL">11.2 COLOR MODEL</a></li>
+    <li><a name="toc-ASPECT-RATIO-1" href="#ASPECT-RATIO">11.3 ASPECT RATIO</a></li>
+  </ul></li>
+  <li><a name="toc-COMPOSITING-1" href="#COMPOSITING">12 COMPOSITING</a>
+  <ul class="no-bullet">
+    <li><a name="toc-THE-CAMERA-AND-PROJECTOR-1" href="#THE-CAMERA-AND-PROJECTOR">12.1 THE CAMERA AND PROJECTOR</a></li>
+    <li><a name="toc-MASKS-1" href="#MASKS">12.2 MASKS</a></li>
+    <li><a name="toc-CROPPING-1" href="#CROPPING">12.3 CROPPING</a></li>
+    <li><a name="toc-SAFE-REGIONS-1" href="#SAFE-REGIONS">12.4 SAFE REGIONS</a></li>
+    <li><a name="toc-OVERLAY-MODES-1" href="#OVERLAY-MODES">12.5 OVERLAY MODES</a></li>
+    <li><a name="toc-TRACK-AND-OUTPUT-SIZES-1" href="#TRACK-AND-OUTPUT-SIZES">12.6 TRACK AND OUTPUT SIZES</a></li>
+  </ul></li>
+  <li><a name="toc-KEYFRAMES-1" href="#KEYFRAMES">13 KEYFRAMES</a>
+  <ul class="no-bullet">
+    <li><a name="toc-CURVE-KEYFRAMES-1" href="#CURVE-KEYFRAMES">13.1 CURVE KEYFRAMES</a></li>
+    <li><a name="toc-CHANGING-BEZIER-_0026-LINEAR-MODE-1" href="#CHANGING-BEZIER-_0026-LINEAR-MODE">13.2 CHANGING BEZIER &amp; LINEAR MODE</a></li>
+    <li><a name="toc-SNAPPING-TO-NEIGHBOR-KEYFRAMES-1" href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES">13.3 SNAPPING TO NEIGHBOR KEYFRAMES</a></li>
+    <li><a name="toc-NAVIGATING-CURVE-KEYFRAMES-1" href="#NAVIGATING-CURVE-KEYFRAMES">13.4 NAVIGATING CURVE KEYFRAMES</a></li>
+    <li><a name="toc-TOGGLE-KEYFRAMES-1" href="#TOGGLE-KEYFRAMES">13.5 TOGGLE KEYFRAMES</a></li>
+    <li><a name="toc-AUTOMATIC-KEYFRAMES-1" href="#AUTOMATIC-KEYFRAMES">13.6 AUTOMATIC KEYFRAMES</a></li>
+    <li><a name="toc-COMPOSITOR-KEYFRAMES-1" href="#COMPOSITOR-KEYFRAMES">13.7 COMPOSITOR KEYFRAMES</a></li>
+    <li><a name="toc-EDITING-KEYFRAMES-1" href="#EDITING-KEYFRAMES">13.8 EDITING KEYFRAMES</a></li>
+    <li><a name="toc-KEYFRAME-SPANNING-1" href="#KEYFRAME-SPANNING">13.9 KEYFRAME SPANNING</a></li>
+  </ul></li>
+  <li><a name="toc-CAPTURING-MEDIA-1" href="#CAPTURING-MEDIA">14 CAPTURING MEDIA</a>
+  <ul class="no-bullet">
+    <li><a name="toc-BATCHES-1" href="#BATCHES">14.1 BATCHES</a></li>
+    <li><a name="toc-EDITING-TUNER-INFORMATION-1" href="#EDITING-TUNER-INFORMATION">14.2 EDITING TUNER INFORMATION</a></li>
+  </ul></li>
+  <li><a name="toc-IMPROVING-PERFORMANCE-1" href="#IMPROVING-PERFORMANCE">15 IMPROVING PERFORMANCE</a>
+  <ul class="no-bullet">
+    <li><a name="toc-DISABLING-SWAP-SPACE-1" href="#DISABLING-SWAP-SPACE">15.1 DISABLING SWAP SPACE</a></li>
+    <li><a name="toc-ENLARGING-SOUND-BUFFERS-1" href="#ENLARGING-SOUND-BUFFERS">15.2 ENLARGING SOUND BUFFERS</a></li>
+    <li><a name="toc-FREEING-MORE-SHARED-MEMORY-1" href="#FREEING-MORE-SHARED-MEMORY">15.3 FREEING MORE SHARED MEMORY</a></li>
+    <li><a name="toc-SPEEDING-UP-THE-HARD-DRIVE-1" href="#SPEEDING-UP-THE-HARD-DRIVE">15.4 SPEEDING UP THE HARD DRIVE</a></li>
+    <li><a name="toc-DISABLING-CRON-1" href="#DISABLING-CRON">15.5 DISABLING CRON</a></li>
+    <li><a name="toc-REDUCING-USB-MOUSE-SENSITIVITY-1" href="#REDUCING-USB-MOUSE-SENSITIVITY">15.6 REDUCING USB MOUSE SENSITIVITY</a></li>
+    <li><a name="toc-ASSORTED-X-TWEEKS-1" href="#ASSORTED-X-TWEEKS">15.7 ASSORTED X TWEEKS</a></li>
+    <li><a name="toc-SPEEDING-UP-THE-FILE-SYSTEM-1" href="#SPEEDING-UP-THE-FILE-SYSTEM">15.8 SPEEDING UP THE FILE SYSTEM</a></li>
+    <li><a name="toc-IMPROVING-ZORAN-VIDEO-1" href="#IMPROVING-ZORAN-VIDEO">15.9 IMPROVING ZORAN VIDEO</a>
+    <ul class="no-bullet">
+      <li><a name="toc-NEW-IN-2_002e6_002e5" href="#NEW-IN-2_002e6_002e5">15.9.1 NEW IN 2.6.5</a></li>
+    </ul></li>
+  </ul></li>
+  <li><a name="toc-TROUBLESHOOTING-1" href="#TROUBLESHOOTING">16 TROUBLESHOOTING</a>
+  <ul class="no-bullet">
+    <li><a name="toc-BUZ-DRIVER-CRASHES-1" href="#BUZ-DRIVER-CRASHES">16.1 BUZ DRIVER CRASHES</a></li>
+    <li><a name="toc-DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK-1" href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK">16.2 DRAGGING IN AND OUT POINTS DOESN&rsquo;T WORK</a></li>
+    <li><a name="toc-LOCKING-UP-WHEN-LOADING-FILES-1" href="#LOCKING-UP-WHEN-LOADING-FILES">16.3 LOCKING UP WHEN LOADING FILES</a></li>
+    <li><a name="toc-SYNCHRONIZATION-LOST-WHILE-RECORDING-1" href="#SYNCHRONIZATION-LOST-WHILE-RECORDING">16.4 SYNCHRONIZATION LOST WHILE RECORDING</a></li>
+    <li><a name="toc-APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK-1" href="#APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK">16.5 APPLYING LINEARIZE FOLLOWED BY BLUR DOESN&rsquo;T WORK</a></li>
+  </ul></li>
+  <li><a name="toc-SECRETS-OF-CINELERRA-1" href="#SECRETS-OF-CINELERRA">17 SECRETS OF CINELERRA</a>
+  <ul class="no-bullet">
+    <li><a name="toc-DOLBY-PRO-LOGIC-ENCODING-1" href="#DOLBY-PRO-LOGIC-ENCODING">17.1 DOLBY PRO LOGIC ENCODING</a></li>
+    <li><a name="toc-ANALOG-TV-CLEANING-1" href="#ANALOG-TV-CLEANING">17.2 ANALOG TV CLEANING</a></li>
+    <li><a name="toc-DEFEATING-INTERLACING-1" href="#DEFEATING-INTERLACING">17.3 DEFEATING INTERLACING</a></li>
+    <li><a name="toc-MAKING-VIDEO-LOOK-LIKE-FILM-1" href="#MAKING-VIDEO-LOOK-LIKE-FILM">17.4 MAKING VIDEO LOOK LIKE FILM</a></li>
+    <li><a name="toc-CLEARING-OUT-HAZE-1" href="#CLEARING-OUT-HAZE">17.5 CLEARING OUT HAZE</a></li>
+    <li><a name="toc-MAKING-A-DVD-1" href="#MAKING-A-DVD">17.6 MAKING A DVD</a></li>
+    <li><a name="toc-MAKING-A-RINGTONE-1" href="#MAKING-A-RINGTONE">17.7 MAKING A RINGTONE</a></li>
+    <li><a name="toc-TIME-STRETCHING-AUDIO-1" href="#TIME-STRETCHING-AUDIO">17.8 TIME STRETCHING AUDIO</a></li>
+    <li><a name="toc-PITCH-SHIFTING-AUDIO-1" href="#PITCH-SHIFTING-AUDIO">17.9 PITCH SHIFTING AUDIO</a></li>
+    <li><a name="toc-TEXT-TO-MOVIE-1" href="#TEXT-TO-MOVIE">17.10 TEXT TO MOVIE</a></li>
+  </ul></li>
+  <li><a name="toc-SECRETS-OF-CINELERRA-EFFECTS-1" href="#SECRETS-OF-CINELERRA-EFFECTS">18 SECRETS OF CINELERRA EFFECTS</a>
+  <ul class="no-bullet">
+    <li><a name="toc-1080-TO-480-1" href="#g_t1080-TO-480">18.1 1080 TO 480</a></li>
+    <li><a name="toc-CHROMA-KEY-1" href="#CHROMA-KEY">18.2 CHROMA KEY</a></li>
+    <li><a name="toc-COMPRESSOR-1" href="#COMPRESSOR">18.3 COMPRESSOR</a></li>
+    <li><a name="toc-DECIMATE-1" href="#DECIMATE">18.4 DECIMATE</a></li>
+    <li><a name="toc-DEINTERLACE-1" href="#DEINTERLACE">18.5 DEINTERLACE</a></li>
+    <li><a name="toc-DIFFERENCE-KEY-1" href="#DIFFERENCE-KEY">18.6 DIFFERENCE KEY</a></li>
+    <li><a name="toc-FIELDS-TO-FRAMES-1" href="#FIELDS-TO-FRAMES">18.7 FIELDS TO FRAMES</a></li>
+    <li><a name="toc-FREEZE-FRAME-1" href="#FREEZE-FRAME">18.8 FREEZE FRAME</a></li>
+    <li><a name="toc-HISTOGRAM-1" href="#HISTOGRAM">18.9 HISTOGRAM</a></li>
+    <li><a name="toc-INVERSE-TELECINE-1" href="#INVERSE-TELECINE">18.10 INVERSE TELECINE</a></li>
+    <li><a name="toc-INTERPOLATE-VIDEO-1" href="#INTERPOLATE-VIDEO">18.11 INTERPOLATE VIDEO</a></li>
+    <li><a name="toc-LENS-1" href="#LENS">18.12 LENS</a></li>
+    <li><a name="toc-LINEARIZE-1" href="#LINEARIZE">18.13 LINEARIZE</a></li>
+    <li><a name="toc-LIVE-AUDIO-1" href="#LIVE-AUDIO">18.14 LIVE AUDIO</a></li>
+    <li><a name="toc-LIVE-VIDEO-1" href="#LIVE-VIDEO">18.15 LIVE VIDEO</a></li>
+    <li><a name="toc-LOOP-1" href="#LOOP">18.16 LOOP</a></li>
+    <li><a name="toc-MOTION-1" href="#MOTION">18.17 MOTION</a>
+    <ul class="no-bullet">
+      <li><a name="toc-SECRETS-OF-MOTION-TRACKING-1" href="#SECRETS-OF-MOTION-TRACKING">18.17.1 SECRETS OF MOTION TRACKING</a></li>
+      <li><a name="toc-2-PASS-MOTION-TRACKING-1" href="#g_t2-PASS-MOTION-TRACKING">18.17.2 2 PASS MOTION TRACKING</a></li>
+      <li><a name="toc-USING-BLUR-TO-IMPROVE-MOTION-TRACKING-1" href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING">18.17.3 USING BLUR TO IMPROVE MOTION TRACKING</a></li>
+      <li><a name="toc-USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING-1" href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING">18.17.4 USING HISTOGRAM TO IMPROVE MOTION TRACKING</a></li>
+      <li><a name="toc-INTERPOLATING-MOTION-BETWEEN-FRAMES-1" href="#INTERPOLATING-MOTION-BETWEEN-FRAMES">18.17.5 INTERPOLATING MOTION BETWEEN FRAMES</a></li>
+      <li><a name="toc-FILLING-IN-THE-BLACK-AREAS-1" href="#FILLING-IN-THE-BLACK-AREAS">18.17.6 FILLING IN THE BLACK AREAS</a></li>
+    </ul></li>
+    <li><a name="toc-MOTION-2-POINT-1" href="#MOTION-2-POINT">18.18 MOTION 2 POINT</a></li>
+    <li><a name="toc-REFRAMERT-1" href="#REFRAMERT">18.19 REFRAMERT</a></li>
+    <li><a name="toc-REFRAME-1" href="#REFRAME">18.20 REFRAME</a></li>
+    <li><a name="toc-RESAMPLE-1" href="#RESAMPLE">18.21 RESAMPLE</a></li>
+    <li><a name="toc-REVERSE-VIDEO_002fAUDIO-1" href="#REVERSE-VIDEO_002fAUDIO">18.22 REVERSE VIDEO/AUDIO</a></li>
+    <li><a name="toc-SWAP-FRAMES-1" href="#SWAP-FRAMES">18.23 SWAP FRAMES</a></li>
+    <li><a name="toc-THRESHOLD-1" href="#THRESHOLD">18.24 THRESHOLD</a></li>
+    <li><a name="toc-TIME-AVERAGE-1" href="#TIME-AVERAGE">18.25 TIME AVERAGE</a></li>
+    <li><a name="toc-TITLER-1" href="#TITLER">18.26 TITLER</a>
+    <ul class="no-bullet">
+      <li><a name="toc-ADDING-FONTS-TO-THE-TITLER-1" href="#ADDING-FONTS-TO-THE-TITLER">18.26.1 ADDING FONTS TO THE TITLER</a></li>
+      <li><a name="toc-THE-TITLE_002dSAFE-REGION-1" href="#THE-TITLE_002dSAFE-REGION">18.26.2 THE TITLE-SAFE REGION</a></li>
+      <li><a name="toc-MAKING-TITLES-LOOK-GOOD-1" href="#MAKING-TITLES-LOOK-GOOD">18.26.3 MAKING TITLES LOOK GOOD</a></li>
+    </ul></li>
+    <li><a name="toc-VIDEO-SCOPE-1" href="#VIDEO-SCOPE">18.27 VIDEO SCOPE</a></li>
+  </ul></li>
+  <li><a name="toc-PLUGIN-AUTHORING-1" href="#PLUGIN-AUTHORING">19 PLUGIN AUTHORING</a>
+  <ul class="no-bullet">
+    <li><a name="toc-INTRODUCING-THE-PULL-METHOD-1" href="#INTRODUCING-THE-PULL-METHOD">19.1 INTRODUCING THE PULL METHOD</a></li>
+    <li><a name="toc-COMMON-PLUGIN-FUNCTIONS-1" href="#COMMON-PLUGIN-FUNCTIONS">19.2 COMMON PLUGIN FUNCTIONS</a>
+    <ul class="no-bullet">
+      <li><a name="toc-THE-PROCESSING-OBJECT-1" href="#THE-PROCESSING-OBJECT">19.2.1 THE PROCESSING OBJECT</a></li>
+      <li><a name="toc-THE-CONFIGURATION-OBJECT-1" href="#THE-CONFIGURATION-OBJECT">19.2.2 THE CONFIGURATION OBJECT</a></li>
+      <li><a name="toc-THE-USER-INTERFACE-OBJECT-1" href="#THE-USER-INTERFACE-OBJECT">19.2.3 THE USER INTERFACE OBJECT</a></li>
+    </ul></li>
+    <li><a name="toc-REALTIME-PLUGINS-1" href="#REALTIME-PLUGINS">19.3 REALTIME PLUGINS</a></li>
+    <li><a name="toc-NONREALTIME-PLUGINS-1" href="#NONREALTIME-PLUGINS">19.4 NONREALTIME PLUGINS</a></li>
+    <li><a name="toc-AUDIO-PLUGINS-1" href="#AUDIO-PLUGINS">19.5 AUDIO PLUGINS</a></li>
+    <li><a name="toc-VIDEO-PLUGINS-1" href="#VIDEO-PLUGINS">19.6 VIDEO PLUGINS</a></li>
+    <li><a name="toc-TRANSITION-PLUGINS-1" href="#TRANSITION-PLUGINS">19.7 TRANSITION PLUGINS</a></li>
+    <li><a name="toc-PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK-1" href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK">19.8 PLUGIN GUI&rsquo;S WHICH UPDATE DURING PLAYBACK</a></li>
+    <li><a name="toc-PLUGIN-QUERIES-1" href="#PLUGIN-QUERIES">19.9 PLUGIN QUERIES</a>
+    <ul class="no-bullet">
+      <li><a name="toc-SYSTEM-QUERIES-1" href="#SYSTEM-QUERIES">19.9.1 SYSTEM QUERIES</a></li>
+      <li><a name="toc-TIMING-QUERIES-1" href="#TIMING-QUERIES">19.9.2 TIMING QUERIES</a></li>
+    </ul></li>
+    <li><a name="toc-USING-OPENGL-1" href="#USING-OPENGL">19.10 USING OPENGL</a>
+    <ul class="no-bullet">
+      <li><a name="toc-GETTING-OPENGL-DATA-1" href="#GETTING-OPENGL-DATA">19.10.1 GETTING OPENGL DATA</a></li>
+      <li><a name="toc-DRAWING-USING-OPENGL-1" href="#DRAWING-USING-OPENGL">19.10.2 DRAWING USING OPENGL</a></li>
+      <li><a name="toc-USING-SHADERS-1" href="#USING-SHADERS">19.10.3 USING SHADERS</a></li>
+      <li><a name="toc-AGGREGATING-PLUGINS-1" href="#AGGREGATING-PLUGINS">19.10.4 AGGREGATING PLUGINS</a></li>
+    </ul></li>
+  </ul></li>
+  <li><a name="toc-KEYBOARD-SHORTCUTS-1" href="#KEYBOARD-SHORTCUTS">20 KEYBOARD SHORTCUTS</a>
+  <ul class="no-bullet">
+    <li><a name="toc-PROGRAM-WINDOW" href="#PROGRAM-WINDOW">20.1 PROGRAM WINDOW</a>
+    <ul class="no-bullet">
+      <li><a name="toc-Editing-Media" href="#Editing-Media">20.1.1 Editing Media</a></li>
+      <li><a name="toc-Editing-Labels-_0026-In_002fOut-Points" href="#Editing-Labels-_0026-In_002fOut-Points">20.1.2 Editing Labels &amp; In/Out Points</a></li>
+      <li><a name="toc-Navigation" href="#Navigation">20.1.3 Navigation</a></li>
+      <li><a name="toc-File-operations" href="#File-operations">20.1.4 File operations</a></li>
+      <li><a name="toc-Key-Frame-Editing" href="#Key-Frame-Editing">20.1.5 Key Frame Editing</a></li>
+      <li><a name="toc-Track-Manipulation" href="#Track-Manipulation">20.1.6 Track Manipulation</a></li>
+      <li><a name="toc-What_0027s-drawn-on-the-timeline" href="#What_0027s-drawn-on-the-timeline">20.1.7 What&rsquo;s drawn on the timeline</a></li>
+    </ul></li>
+    <li><a name="toc-VIEWER-_0026-COMPOSITOR-WINDOWS" href="#VIEWER-_0026-COMPOSITOR-WINDOWS">20.2 VIEWER &amp; COMPOSITOR WINDOWS</a></li>
+    <li><a name="toc-PLAYBACK-TRANSPORT" href="#PLAYBACK-TRANSPORT">20.3 PLAYBACK TRANSPORT</a></li>
+    <li><a name="toc-RECORD-WINDOW" href="#RECORD-WINDOW">20.4 RECORD WINDOW</a></li>
+  </ul></li>
 </ul>
-
-   <div class="contents">
-<h2>Table of Contents</h2>
-<ul>
-<li><a name="toc_Top" href="#Top">SECRETS OF CINELERRA</a>
-<li><a name="toc_Top" href="#Top">1 SHORT CONTENTS</a>
-<li><a name="toc_ABOUT-CINELERRA" href="#ABOUT-CINELERRA">2 ABOUT CINELERRA</a>
-<ul>
-<li><a href="#ABOUT-THIS-MANUAL">2.1 ABOUT THIS MANUAL</a>
-</li></ul>
-<li><a name="toc_INSTALLATION" href="#INSTALLATION">3 INSTALLATION</a>
-<ul>
-<li><a href="#INSTALLING-AN-RPM">3.1 INSTALLING AN RPM</a>
-<li><a href="#COMPILING-FROM-SCRATCH">3.2 COMPILING FROM SCRATCH</a>
-<li><a href="#RUNNING-CINELERRA">3.3 RUNNING CINELERRA</a>
-</li></ul>
-<li><a name="toc_CONFIGURATION" href="#CONFIGURATION">4 CONFIGURATION</a>
-<ul>
-<li><a href="#ENVIRONMENT-VARIABLES">4.1 ENVIRONMENT VARIABLES</a>
-<li><a href="#AUDIO-DRIVERS">4.2 AUDIO DRIVERS</a>
-<ul>
-<li><a href="#COMMON-SOUND-DRIVER-ATTRIBUTES">4.2.1 COMMON SOUND DRIVER ATTRIBUTES</a>
-<li><a href="#OSS">4.2.2 OSS</a>
-<li><a href="#OSS-Envy24">4.2.3 OSS Envy24</a>
-<li><a href="#ALSA">4.2.4 ALSA</a>
-<li><a href="#ESOUND">4.2.5 ESOUND</a>
-<li><a href="#RAW-1394">4.2.6 RAW 1394</a>
-<li><a href="#DV-1394">4.2.7 DV 1394</a>
-<li><a href="#IEC-61883">4.2.8 IEC 61883</a>
-</li></ul>
-<li><a href="#VIDEO-DRIVERS">4.3 VIDEO DRIVERS</a>
-<ul>
-<li><a href="#COMMON-VIDEO-DRIVER-ATTRIBUTES">4.3.1 COMMON VIDEO DRIVER ATTRIBUTES</a>
-<li><a href="#X11">4.3.2 X11</a>
-<li><a href="#X11_002dXV">4.3.3 X11-XV</a>
-<li><a href="#X11_002dOPENGL">4.3.4 X11-OPENGL</a>
-<li><a href="#BUZ">4.3.5 BUZ</a>
-<li><a href="#RAW-1394-VIDEO-PLAYBACK">4.3.6 RAW 1394 VIDEO PLAYBACK</a>
-<li><a href="#DV-1394-VIDEO-PLAYBACK">4.3.7 DV 1394 VIDEO PLAYBACK</a>
-<li><a href="#IEC-61883-VIDEO-PLAYBACK">4.3.8 IEC 61883 VIDEO PLAYBACK</a>
-</li></ul>
-<li><a href="#PLAYBACK">4.4 PLAYBACK</a>
-<ul>
-<li><a href="#AUDIO-OUT">4.4.1 AUDIO OUT</a>
-<li><a href="#VIDEO-OUT">4.4.2 VIDEO OUT</a>
-</li></ul>
-<li><a href="#RECORDING">4.5 RECORDING</a>
-<ul>
-<li><a href="#FILE-FORMAT">4.5.1 FILE FORMAT</a>
-<li><a href="#AUDIO-IN">4.5.2 AUDIO IN</a>
-<li><a href="#VIDEO-IN">4.5.3 VIDEO IN</a>
-</li></ul>
-<li><a href="#PERFORMANCE">4.6 PERFORMANCE</a>
-<ul>
-<li><a href="#BACKGROUND-RENDERING">4.6.1 BACKGROUND RENDERING</a>
-<li><a href="#RENDERFARM">4.6.2 RENDERFARM</a>
-</li></ul>
-<li><a href="#INTERFACE">4.7 INTERFACE</a>
-<li><a href="#ABOUT">4.8 ABOUT</a>
-</li></ul>
-<li><a name="toc_CREATING-A-NEW-PROJECT" href="#CREATING-A-NEW-PROJECT">5 CREATING A NEW PROJECT</a>
-<ul>
-<li><a href="#USING-THE-NEW-PROJECT-DIALOG">5.1 USING THE NEW PROJECT DIALOG</a>
-<li><a href="#CHANGING-PARAMETERS-AFTER-LOADING">5.2 CHANGING PARAMETERS AFTER LOADING</a>
-</li></ul>
-<li><a name="toc_THE-MAIN-WINDOWS" href="#THE-MAIN-WINDOWS">6 THE MAIN WINDOWS</a>
-<ul>
-<li><a href="#VIEWER">6.1 VIEWER</a>
-<li><a href="#COMPOSITOR">6.2 COMPOSITOR</a>
-<ul>
-<li><a href="#PROTECT-VIDEO">6.2.1 PROTECT VIDEO</a>
-<li><a href="#MAGNIFYING-GLASS">6.2.2 MAGNIFYING GLASS</a>
-<li><a href="#MASKS-TOOL">6.2.3 MASKS TOOL</a>
-<li><a href="#CAMERA">6.2.4 CAMERA</a>
-<li><a href="#PROJECTOR">6.2.5 PROJECTOR</a>
-<li><a href="#CROP-TOOL">6.2.6 CROP TOOL</a>
-<li><a href="#EYEDROPPER">6.2.7 EYEDROPPER</a>
-<li><a href="#TOOL-INFO">6.2.8 TOOL INFO</a>
-<li><a href="#SAFE-REGIONS-TOOL">6.2.9 SAFE REGIONS TOOL</a>
-</li></ul>
-<li><a href="#PROGRAM">6.3 PROGRAM</a>
-<li><a href="#RESOURCES">6.4 RESOURCES</a>
-<li><a href="#SOUND-LEVEL-METERS">6.5 SOUND LEVEL METERS</a>
-<li><a href="#OTHER-WINDOWS">6.6 OTHER WINDOWS</a>
-</li></ul>
-<li><a name="toc_LOADING-AND-SAVING-FILES" href="#LOADING-AND-SAVING-FILES">7 LOADING AND SAVING FILES</a>
-<ul>
-<li><a href="#SUPPORTED-FILE-FORMATS">7.1 SUPPORTED FILE FORMATS</a>
-<ul>
-<li><a href="#QUICKTIME">7.1.1 QUICKTIME</a>
-<li><a href="#MPEG_002d4-AUDIO">7.1.2 MPEG-4 AUDIO</a>
-<li><a href="#IMAGE-SEQUENCES">7.1.3 IMAGE SEQUENCES</a>
-<li><a href="#STILL-IMAGES">7.1.4 STILL IMAGES</a>
-<ul>
-<li><a href="#OPEN-EXR-IMAGES">7.1.4.1 OPEN EXR IMAGES</a>
-<li><a href="#RAW-DIGITAL-CAMERA-IMAGES">7.1.4.2 RAW DIGITAL CAMERA IMAGES</a>
-</li></ul>
-<li><a href="#AVI">7.1.5 AVI</a>
-<li><a href="#MPEG-FILES-CONTAINING-VIDEO">7.1.6 MPEG FILES CONTAINING VIDEO</a>
-<li><a href="#DVD-MOVIES">7.1.7 DVD MOVIES</a>
-<li><a href="#MPEG-1-AUDIO">7.1.8 MPEG 1 AUDIO</a>
-<li><a href="#OGG-THEORA_002fVORBIS">7.1.9 OGG THEORA/VORBIS</a>
-<li><a href="#EDIT-DECISION-LIST">7.1.10 EDIT DECISION LIST</a>
-</li></ul>
-<li><a href="#LOADING-FILES">7.2 LOADING FILES</a>
-<ul>
-<li><a href="#INSERTION-STRATEGY">7.2.1 INSERTION STRATEGY</a>
-<li><a href="#LOADING-MULTIPLE-FILES">7.2.2 LOADING MULTIPLE FILES</a>
-</li></ul>
-<li><a href="#LOADING-THE-BACKUP">7.3 LOADING THE BACKUP</a>
-<li><a href="#SAVING-FILES">7.4 SAVING FILES</a>
-<li><a href="#RENDERING-FILES">7.5 RENDERING FILES</a>
-<ul>
-<li><a href="#SINGLE-FILE-RENDERING">7.5.1 SINGLE FILE RENDERING</a>
-<li><a href="#BATCH-RENDERING">7.5.2 BATCH RENDERING</a>
-<li><a href="#THE-RENDER-FARM">7.5.3 THE RENDER FARM</a>
-<li><a href="#COMMAND-LINE-RENDERING">7.5.4 COMMAND LINE RENDERING</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_NAVIGATING-THE-PROJECT" href="#NAVIGATING-THE-PROJECT">8 NAVIGATING THE PROJECT</a>
-<ul>
-<li><a href="#NAVIGATING-THE-PROGRAM-WINDOW">8.1 NAVIGATING THE PROGRAM WINDOW</a>
-<ul>
-<li><a href="#THE-INSERTION-POINT">8.1.1 THE INSERTION POINT</a>
-<li><a href="#THE-IN_002fOUT-POINTS">8.1.2 THE IN/OUT POINTS</a>
-<li><a href="#USING-LABELS-IN-THE-PROGRAM-WINDOW">8.1.3 USING LABELS IN THE PROGRAM WINDOW</a>
-</li></ul>
-<li><a href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR">8.2 NAVIGATING THE VIEWER AND COMPOSITOR</a>
-<li><a href="#NAVIGATING-THE-RESOURCES">8.3 NAVIGATING THE RESOURCES</a>
-<li><a href="#USING-THE-TRANSPORT-CONTROLS">8.4 USING THE TRANSPORT CONTROLS</a>
-<li><a href="#USING-BACKGROUND-RENDERING">8.5 USING BACKGROUND RENDERING</a>
-</li></ul>
-<li><a name="toc_EDITING" href="#EDITING">9 EDITING</a>
-<ul>
-<li><a href="#THE-PATCHBAY">9.1 THE PATCHBAY</a>
-<li><a href="#NUDGING-TRACKS">9.2 NUDGING TRACKS</a>
-<li><a href="#PANNING-TRACKS">9.3 PANNING TRACKS</a>
-<li><a href="#AUTOMATIC-TRACK-PANNING">9.4 AUTOMATIC TRACK PANNING</a>
-<li><a href="#STANDARD-AUDIO-MAPPINGS">9.5 STANDARD AUDIO MAPPINGS</a>
-<li><a href="#MANIPULATING-TRACKS">9.6 MANIPULATING TRACKS</a>
-<li><a href="#TWO-SCREEN-EDITING">9.7 TWO SCREEN EDITING</a>
-<li><a href="#DRAG-AND-DROP-EDITING">9.8 DRAG AND DROP EDITING</a>
-<li><a href="#CUT-AND-PASTE-EDITING">9.9 CUT AND PASTE EDITING</a>
-<li><a href="#TRIMMING">9.10 TRIMMING</a>
-</li></ul>
-<li><a name="toc_USING-EFFECTS" href="#USING-EFFECTS">10 USING EFFECTS</a>
-<ul>
-<li><a href="#REALTIME-EFFECTS">10.1 REALTIME EFFECTS</a>
-<ul>
-<li><a href="#REALTIME-EFFECT-TYPES">10.1.1 REALTIME EFFECT TYPES</a>
-<li><a href="#EDITING-REALTIME-EFFECTS">10.1.2 EDITING REALTIME EFFECTS</a>
-</li></ul>
-<li><a href="#RENDERED-EFFECTS">10.2 RENDERED EFFECTS</a>
-<li><a href="#TRANSITIONS">10.3 TRANSITIONS</a>
-<li><a href="#LADSPA-EFFECTS">10.4 LADSPA EFFECTS</a>
-<li><a href="#EFFECT-PRESETS">10.5 EFFECT PRESETS</a>
-</li></ul>
-<li><a name="toc_SETTING-PROJECT-ATTRIBUTES" href="#SETTING-PROJECT-ATTRIBUTES">11 SETTING PROJECT ATTRIBUTES</a>
-<ul>
-<li><a href="#AUDIO-CHANNEL-POSITIONS">11.1 AUDIO CHANNEL POSITIONS</a>
-<li><a href="#COLOR-MODEL">11.2 COLOR MODEL</a>
-<li><a href="#ASPECT-RATIO">11.3 ASPECT RATIO</a>
-</li></ul>
-<li><a name="toc_COMPOSITING" href="#COMPOSITING">12 COMPOSITING</a>
-<ul>
-<li><a href="#THE-CAMERA-AND-PROJECTOR">12.1 THE CAMERA AND PROJECTOR</a>
-<li><a href="#MASKS">12.2 MASKS</a>
-<li><a href="#CROPPING">12.3 CROPPING</a>
-<li><a href="#SAFE-REGIONS">12.4 SAFE REGIONS</a>
-<li><a href="#OVERLAY-MODES">12.5 OVERLAY MODES</a>
-<li><a href="#TRACK-AND-OUTPUT-SIZES">12.6 TRACK AND OUTPUT SIZES</a>
-</li></ul>
-<li><a name="toc_KEYFRAMES" href="#KEYFRAMES">13 KEYFRAMES</a>
-<ul>
-<li><a href="#CURVE-KEYFRAMES">13.1 CURVE KEYFRAMES</a>
-<li><a href="#CHANGING-BEZIER-_0026-LINEAR-MODE">13.2 CHANGING BEZIER &amp; LINEAR MODE</a>
-<li><a href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES">13.3 SNAPPING TO NEIGHBOR KEYFRAMES</a>
-<li><a href="#NAVIGATING-CURVE-KEYFRAMES">13.4 NAVIGATING CURVE KEYFRAMES</a>
-<li><a href="#TOGGLE-KEYFRAMES">13.5 TOGGLE KEYFRAMES</a>
-<li><a href="#AUTOMATIC-KEYFRAMES">13.6 AUTOMATIC KEYFRAMES</a>
-<li><a href="#COMPOSITOR-KEYFRAMES">13.7 COMPOSITOR KEYFRAMES</a>
-<li><a href="#EDITING-KEYFRAMES">13.8 EDITING KEYFRAMES</a>
-<li><a href="#KEYFRAME-SPANNING">13.9 KEYFRAME SPANNING</a>
-</li></ul>
-<li><a name="toc_CAPTURING-MEDIA" href="#CAPTURING-MEDIA">14 CAPTURING MEDIA</a>
-<ul>
-<li><a href="#BATCHES">14.1 BATCHES</a>
-<li><a href="#EDITING-TUNER-INFORMATION">14.2 EDITING TUNER INFORMATION</a>
-</li></ul>
-<li><a name="toc_IMPROVING-PERFORMANCE" href="#IMPROVING-PERFORMANCE">15 IMPROVING PERFORMANCE</a>
-<ul>
-<li><a href="#DISABLING-SWAP-SPACE">15.1 DISABLING SWAP SPACE</a>
-<li><a href="#ENLARGING-SOUND-BUFFERS">15.2 ENLARGING SOUND BUFFERS</a>
-<li><a href="#FREEING-MORE-SHARED-MEMORY">15.3 FREEING MORE SHARED MEMORY</a>
-<li><a href="#SPEEDING-UP-THE-HARD-DRIVE">15.4 SPEEDING UP THE HARD DRIVE</a>
-<li><a href="#DISABLING-CRON">15.5 DISABLING CRON</a>
-<li><a href="#REDUCING-USB-MOUSE-SENSITIVITY">15.6 REDUCING USB MOUSE SENSITIVITY</a>
-<li><a href="#ASSORTED-X-TWEEKS">15.7 ASSORTED X TWEEKS</a>
-<li><a href="#SPEEDING-UP-THE-FILE-SYSTEM">15.8 SPEEDING UP THE FILE SYSTEM</a>
-<li><a href="#IMPROVING-ZORAN-VIDEO">15.9 IMPROVING ZORAN VIDEO</a>
-<ul>
-<li><a href="#IMPROVING-ZORAN-VIDEO">15.9.1 NEW IN 2.6.5</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_TROUBLESHOOTING" href="#TROUBLESHOOTING">16 TROUBLESHOOTING</a>
-<ul>
-<li><a href="#BUZ-DRIVER-CRASHES">16.1 BUZ DRIVER CRASHES</a>
-<li><a href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK">16.2 DRAGGING IN AND OUT POINTS DOESN'T WORK</a>
-<li><a href="#LOCKING-UP-WHEN-LOADING-FILES">16.3 LOCKING UP WHEN LOADING FILES</a>
-<li><a href="#SYNCHRONIZATION-LOST-WHILE-RECORDING">16.4 SYNCHRONIZATION LOST WHILE RECORDING</a>
-<li><a href="#APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK">16.5 APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK</a>
-</li></ul>
-<li><a name="toc_SECRETS-OF-CINELERRA" href="#SECRETS-OF-CINELERRA">17 SECRETS OF CINELERRA</a>
-<ul>
-<li><a href="#DOLBY-PRO-LOGIC-ENCODING">17.1 DOLBY PRO LOGIC ENCODING</a>
-<li><a href="#ANALOG-TV-CLEANING">17.2 ANALOG TV CLEANING</a>
-<li><a href="#DEFEATING-INTERLACING">17.3 DEFEATING INTERLACING</a>
-<li><a href="#MAKING-VIDEO-LOOK-LIKE-FILM">17.4 MAKING VIDEO LOOK LIKE FILM</a>
-<li><a href="#CLEARING-OUT-HAZE">17.5 CLEARING OUT HAZE</a>
-<li><a href="#MAKING-A-DVD">17.6 MAKING A DVD</a>
-<li><a href="#MAKING-A-RINGTONE">17.7 MAKING A RINGTONE</a>
-<li><a href="#TIME-STRETCHING-AUDIO">17.8 TIME STRETCHING AUDIO</a>
-<li><a href="#PITCH-SHIFTING-AUDIO">17.9 PITCH SHIFTING AUDIO</a>
-<li><a href="#TEXT-TO-MOVIE">17.10 TEXT TO MOVIE</a>
-</li></ul>
-<li><a name="toc_SECRETS-OF-CINELERRA-EFFECTS" href="#SECRETS-OF-CINELERRA-EFFECTS">18 SECRETS OF CINELERRA EFFECTS</a>
-<ul>
-<li><a href="#1080-TO-480">18.1 1080 TO 480</a>
-<li><a href="#CHROMA-KEY">18.2 CHROMA KEY</a>
-<li><a href="#COMPRESSOR">18.3 COMPRESSOR</a>
-<li><a href="#DECIMATE">18.4 DECIMATE</a>
-<li><a href="#DEINTERLACE">18.5 DEINTERLACE</a>
-<li><a href="#DIFFERENCE-KEY">18.6 DIFFERENCE KEY</a>
-<li><a href="#FIELDS-TO-FRAMES">18.7 FIELDS TO FRAMES</a>
-<li><a href="#FREEZE-FRAME">18.8 FREEZE FRAME</a>
-<li><a href="#HISTOGRAM">18.9 HISTOGRAM</a>
-<li><a href="#INVERSE-TELECINE">18.10 INVERSE TELECINE</a>
-<li><a href="#INTERPOLATE-VIDEO">18.11 INTERPOLATE VIDEO</a>
-<li><a href="#LENS">18.12 LENS</a>
-<li><a href="#LINEARIZE">18.13 LINEARIZE</a>
-<li><a href="#LIVE-AUDIO">18.14 LIVE AUDIO</a>
-<li><a href="#LIVE-VIDEO">18.15 LIVE VIDEO</a>
-<li><a href="#LOOP">18.16 LOOP</a>
-<li><a href="#MOTION">18.17 MOTION</a>
-<ul>
-<li><a href="#SECRETS-OF-MOTION-TRACKING">18.17.1 SECRETS OF MOTION TRACKING</a>
-<li><a href="#2-PASS-MOTION-TRACKING">18.17.2 2 PASS MOTION TRACKING</a>
-<li><a href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING">18.17.3 USING BLUR TO IMPROVE MOTION TRACKING</a>
-<li><a href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING">18.17.4 USING HISTOGRAM TO IMPROVE MOTION TRACKING</a>
-<li><a href="#INTERPOLATING-MOTION-BETWEEN-FRAMES">18.17.5 INTERPOLATING MOTION BETWEEN FRAMES</a>
-<li><a href="#FILLING-IN-THE-BLACK-AREAS">18.17.6 FILLING IN THE BLACK AREAS</a>
-</li></ul>
-<li><a href="#MOTION-2-POINT">18.18 MOTION 2 POINT</a>
-<li><a href="#REFRAMERT">18.19 REFRAMERT</a>
-<li><a href="#REFRAME">18.20 REFRAME</a>
-<li><a href="#RESAMPLE">18.21 RESAMPLE</a>
-<li><a href="#REVERSE-VIDEO_002fAUDIO">18.22 REVERSE VIDEO/AUDIO</a>
-<li><a href="#SWAP-FRAMES">18.23 SWAP FRAMES</a>
-<li><a href="#THRESHOLD">18.24 THRESHOLD</a>
-<li><a href="#TIME-AVERAGE">18.25 TIME AVERAGE</a>
-<li><a href="#TITLER">18.26 TITLER</a>
-<ul>
-<li><a href="#ADDING-FONTS-TO-THE-TITLER">18.26.1 ADDING FONTS TO THE TITLER</a>
-<li><a href="#THE-TITLE_002dSAFE-REGION">18.26.2 THE TITLE-SAFE REGION</a>
-<li><a href="#MAKING-TITLES-LOOK-GOOD">18.26.3 MAKING TITLES LOOK GOOD</a>
-</li></ul>
-<li><a href="#VIDEO-SCOPE">18.27 VIDEO SCOPE</a>
-</li></ul>
-<li><a name="toc_PLUGIN-AUTHORING" href="#PLUGIN-AUTHORING">19 PLUGIN AUTHORING</a>
-<ul>
-<li><a href="#INTRODUCING-THE-PULL-METHOD">19.1 INTRODUCING THE PULL METHOD</a>
-<li><a href="#COMMON-PLUGIN-FUNCTIONS">19.2 COMMON PLUGIN FUNCTIONS</a>
-<ul>
-<li><a href="#THE-PROCESSING-OBJECT">19.2.1 THE PROCESSING OBJECT</a>
-<li><a href="#THE-CONFIGURATION-OBJECT">19.2.2 THE CONFIGURATION OBJECT</a>
-<li><a href="#THE-USER-INTERFACE-OBJECT">19.2.3 THE USER INTERFACE OBJECT</a>
-</li></ul>
-<li><a href="#REALTIME-PLUGINS">19.3 REALTIME PLUGINS</a>
-<li><a href="#NONREALTIME-PLUGINS">19.4 NONREALTIME PLUGINS</a>
-<li><a href="#AUDIO-PLUGINS">19.5 AUDIO PLUGINS</a>
-<li><a href="#VIDEO-PLUGINS">19.6 VIDEO PLUGINS</a>
-<li><a href="#TRANSITION-PLUGINS">19.7 TRANSITION PLUGINS</a>
-<li><a href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK">19.8 PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>
-<li><a href="#PLUGIN-QUERIES">19.9 PLUGIN QUERIES</a>
-<ul>
-<li><a href="#SYSTEM-QUERIES">19.9.1 SYSTEM QUERIES</a>
-<li><a href="#TIMING-QUERIES">19.9.2 TIMING QUERIES</a>
-</li></ul>
-<li><a href="#USING-OPENGL">19.10 USING OPENGL</a>
-<ul>
-<li><a href="#GETTING-OPENGL-DATA">19.10.1 GETTING OPENGL DATA</a>
-<li><a href="#DRAWING-USING-OPENGL">19.10.2 DRAWING USING OPENGL</a>
-<li><a href="#USING-SHADERS">19.10.3 USING SHADERS</a>
-<li><a href="#AGGREGATING-PLUGINS">19.10.4 AGGREGATING PLUGINS</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_KEYBOARD-SHORTCUTS" href="#KEYBOARD-SHORTCUTS">20 KEYBOARD SHORTCUTS</a>
-<ul>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1 PROGRAM WINDOW</a>
-<ul>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1.1 Editing Media</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1.2 Editing Labels &amp; In/Out Points</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1.3 Navigation</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1.4 File operations</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1.5 Key Frame Editing</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1.6 Track Manipulation</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.1.7 What's drawn on the timeline</a>
-</li></ul>
-<li><a href="#KEYBOARD-SHORTCUTS">20.2 VIEWER &amp; COMPOSITOR WINDOWS</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.3 PLAYBACK TRANSPORT</a>
-<li><a href="#KEYBOARD-SHORTCUTS">20.4 RECORD WINDOW</a>
-</li></ul>
-</li></ul>
 </div>
 
-<div class="node">
-<a name="ABOUT-CINELERRA"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#INSTALLATION">INSTALLATION</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Top">Top</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+
+
+
+
+<hr>
+<a name="ABOUT-CINELERRA"></a>
+<div class="header">
+<p>
+Next: <a href="#INSTALLATION" accesskey="n" rel="next">INSTALLATION</a>, Previous: <a href="#Top" accesskey="p" rel="prev">TOP</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="ABOUT-CINELERRA-1"></a>
 <h2 class="chapter">2 ABOUT CINELERRA</h2>
 
 <p><b>BROADCAST 1.0</b>
-
-   <p>In 1996 our first editor came out: Broadcast 1.0.  It was just a window
+</p>
+<p>In 1996 our first editor came out: Broadcast 1.0.  It was just a window
 with a waveform in it, it could cut and paste stereo audio waveforms on
 a UNIX box, except unlike other audio editors it could handle files up
 to 2 gigabytes with only 64 megs of RAM.  That was a feature normally
 only accessible to the highest end professional audio houses.
+</p>
 
-   <p><b>BROADCAST 2.0</b>
-
-   <p>In 1997 Broadcast 1.0 was replaced by Broadcast 2.0.  This time the
+<p><b>BROADCAST 2.0</b>
+</p>
+<p>In 1997 Broadcast 1.0 was replaced by Broadcast 2.0.  This time the
 window had a menubar, patchbay, console, and transport control. 
 Broadcast 2.0 still only handled audio but this time it handled
 unlimited tracks, and it could perform effects on audio and save the
@@ -406,10 +463,10 @@ performed as the audio was playing back, in realtime.  A user could mix
 unlimited numbers of tracks, adjust fade, pan, and EQ, and hear the
 result instantly.   Amazingly this real time tweeking is still
 unavailable on most audio programs.
-
-   <p><b>BROADCAST 2000</b>
-
-   <p>But Broadcast 2.0 still didn't handle video and it wasn't very graceful
+</p>
+<p><b>BROADCAST 2000</b>
+</p>
+<p>But Broadcast 2.0 still didn&rsquo;t handle video and it wasn&rsquo;t very graceful
 at audio either.  In 1999 video broke into the story with Broadcast
 2000.  This iteration of the Broadcast series could do wonders with
 audio and offered a pretty good video feature set.  It could edit video
@@ -421,13 +478,14 @@ lot of processing and editing on video and audio that would otherwise
 involve many hours setting up command line sequences and writing to
 disk. For a time it seemed as if the original dream of immersive movie
 making for everyone regardless of income level had arrived.
+</p>
+<p><b>CINELERRA</b>
+</p>
 
-   <p><b>CINELERRA</b>
-
-   <p>Later on Broadcast 2000 began to come short.  Its audio and video was
+<p>Later on Broadcast 2000 began to come short.  Its audio and video was
 graceful if you knew how to use it efficiently, but quality issues and
 new user interface techniques were emerging.  Broadcast 2000 kept the
-audio interface from its ancestors, which didn't apply well to video. 
+audio interface from its ancestors, which didn&rsquo;t apply well to video. 
 Users likewise were maturing.  No longer would it be sufficient to just
 edit video on a UNIX box.  Most users expected on UNIX the same thing
 they got in Win or Mac. In mid 2000 designs for a Broadcast 2000
@@ -436,288 +494,362 @@ from the series and the software would now be called Cinelerra.
 Cinelerra would allow users to configure certain effects in much less
 time than required with Broadcast 2000.  It would begin to emulate some
 of the features found in Win and Mac software while not attempting to
-become a clone.  It's interface would be designed for video from the
+become a clone.  It&rsquo;s interface would be designed for video from the
 ground up, while supplementing that with the Broadcast audio
 interface.  As always, quality improvements would happen.
-
-   <p><b>LINUX DERIVATIVES</b>
-
-   <p>Linux became more and more fragmented after corporations adopted it. 
+</p>
+<p><b>LINUX DERIVATIVES</b>
+</p>
+<p>Linux became more and more fragmented after corporations adopted it. 
 Threading once worked the same on all derivatives.  Today there are more
 threading models than days of the week.  We try to focus on 1 of the
 most popular Linux derivatives at any moment.  The threading model is
 ported to that Linux derivative shortly before a release, but Linux
 derivatives quickly evolve to new threading models and everything
 breaks.
-
-   <p>Also, there is no consistent behaviour for sound and video drivers.  The
+</p>
+<p>Also, there is no consistent behaviour for sound and video drivers.  The
 situation with video capture has improved in that modern video sources
 can all be mounted like disk drives.  The audio capture drivers have
 been a bit more reliable.
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#ABOUT-THIS-MANUAL">ABOUT THIS MANUAL</a>
-</ul>
 
-<div class="node">
-<a name="ABOUT-THIS-MANUAL"></a>
-<p><hr>
-Up:&nbsp;<a rel="up" accesskey="u" href="#ABOUT-CINELERRA">ABOUT CINELERRA</a>
 
-</div>
 
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#ABOUT-THIS-MANUAL" accesskey="1">ABOUT THIS MANUAL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
+<a name="ABOUT-THIS-MANUAL"></a>
+<div class="header">
+<p>
+Up: <a href="#ABOUT-CINELERRA" accesskey="u" rel="up">ABOUT CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="ABOUT-THIS-MANUAL-1"></a>
 <h3 class="section">2.1 ABOUT THIS MANUAL</h3>
 
 <p>This is the original manual for Cinelerra.  This manual has been copied
 and translated into many languages on many websites in varying degrees
 of completeness.
-
-   <p>Organizing information in the easiest manner for users to find out what
-they need to know is sort of like cataloging the internet.  They've
+</p>
+<p>Organizing information in the easiest manner for users to find out what
+they need to know is sort of like cataloging the internet.  They&rsquo;ve
 been trying to get it right for 30 years and will probably keep trying
 until the end of time.
-
-   <p>There a lot of fragments of documentation scattered throughout the
+</p>
+<p>There a lot of fragments of documentation scattered throughout the
 internet about Cinelerra.  This document attempts to combine all the
 pieces of information in one piece.
-
-   <p>Like the operating system and compiler for a piece of software, the
+</p>
+<p>Like the operating system and compiler for a piece of software, the
 document writing format is the most important thing in choosing our
 document format.  We wanted a format which would be readable regardless
 of corporate whims and fads.  A piece of software which compiles on GCC
 and Linux will be usable as long as there are C compilers.  Documents
-written in Texinfo will be readable as long as there's a C compiler.
-
-   <p>After many years of searching for the perfect documentation format
-we've arrived at TexInfo.  This format can be converted to HTML,
+written in Texinfo will be readable as long as there&rsquo;s a C compiler.
+</p>
+<p>After many years of searching for the perfect documentation format
+we&rsquo;ve arrived at TexInfo.  This format can be converted to HTML,
 printed, automatically indexed, but most importantly is not bound to
 any commercial word processor.
-
-   <p>There are no screenshots in this manual.  Screenshots become obsolete
+</p>
+<p>There are no screenshots in this manual.  Screenshots become obsolete
 quickly and as a result confuse the users.  What looks one way in a
 screenshot will always look different in the real program because the
 real program and the manual are always evolving, never perfectly
 synchronized.  It is true that manuals should have screenshots, but our
 objective in omitting screenshots is to keep the software costs minimal
-so you don't have to pay for it.  That includes additional labor to
+so you don&rsquo;t have to pay for it.  That includes additional labor to
 synchronize the manual with the software.
-
-   <p>In addition to telling you the basic editing features of Cinelerra this
-manual covers tricks that won't be described anywhere else.  We're
+</p>
+<p>In addition to telling you the basic editing features of Cinelerra this
+manual covers tricks that won&rsquo;t be described anywhere else.  We&rsquo;re
 going to try to come up with certain things you can do with Cinelerra
-that you wouldn't think of on your own.
+that you wouldn&rsquo;t think of on your own.
+</p>
+
+
+
+
+
+
+
+
 
-<div class="node">
-<a name="INSTALLATION"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CONFIGURATION">CONFIGURATION</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ABOUT-CINELERRA">ABOUT CINELERRA</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+
+
+
+
+<hr>
+<a name="INSTALLATION"></a>
+<div class="header">
+<p>
+Next: <a href="#CONFIGURATION" accesskey="n" rel="next">CONFIGURATION</a>, Previous: <a href="#ABOUT-CINELERRA" accesskey="p" rel="prev">ABOUT CINELERRA</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="INSTALLATION-1"></a>
 <h2 class="chapter">3 INSTALLATION</h2>
 
+
 <p>The Cinelerra package contains Cinelerra and most of the libraries
 needed to run it.  We try to include all the dependancies because of
 the difficulty in tracking down the right versions.  Also included are
 some utilities for handling files.  The following are the general
 contents of all Cinelerra packages.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 <b>Foreign language translations</b> - These go into /usr/share/locale.
 
-     <li>
+</li><li> 
 <b>Cinelerra executable</b> - This goes into /usr/bin
 
-     <li>
+</li><li> 
 <b>Cinelerra plugins</b> - These go into /usr/lib/cinelerra in 32 bit
 systems and /usr/lib64/cinelerra in 64 bit systems.
 
-     <li>
+</li><li> 
 <b>soundtest</b> - Utility for determining sound card buffer size.
 
-     <li>
+</li><li> 
 <b>mplexlo</b> - Multiplexing of MPEG elementary streams without standards
 conformance but more efficiently.
 
-     <li>
+</li><li> 
 <b>mpeg3cat</b> - Utility for reading an MPEG file from a certain standard
 and outputting it to stdout.
 
-     <li>
+</li><li> 
 <b>mpeg3toc, mpeg3cat, mpeg3dump</b> - Utilities/ for indexing and reading MPEG files.
 
-     <li>
+</li><li> 
 <b>mpeg3peek</b> - Utility for displaying the byte offset of a frame in an
 MPEG file.
 
-   </ul>
+</li></ul>
 
-<ul class="menu">
-<li><a accesskey="1" href="#INSTALLING-AN-RPM">INSTALLING AN RPM</a>
-<li><a accesskey="2" href="#COMPILING-FROM-SCRATCH">COMPILING FROM SCRATCH</a>
-<li><a accesskey="3" href="#RUNNING-CINELERRA">RUNNING CINELERRA</a>
-</ul>
 
-<div class="node">
-<a name="INSTALLING-AN-RPM"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COMPILING-FROM-SCRATCH">COMPILING FROM SCRATCH</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#INSTALLATION">INSTALLATION</a>
 
-</div>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#INSTALLING-AN-RPM" accesskey="1">INSTALLING AN RPM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COMPILING-FROM-SCRATCH" accesskey="2">COMPILING FROM SCRATCH</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RUNNING-CINELERRA" accesskey="3">RUNNING CINELERRA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
 
-<h3 class="section">3.1 INSTALLING AN RPM</h3>
 
-<p>Cinelerra is easiest installed by downloading an RPM and running
 
-<pre class="example">     rpm -U --force --nodeps hvirtual*.rpm
-</pre>
-   <p>on a Fedora 4 system.
 
-   <p>On systems which don't support RPM look for a utility called
+
+
+
+<hr>
+<a name="INSTALLING-AN-RPM"></a>
+<div class="header">
+<p>
+Next: <a href="#COMPILING-FROM-SCRATCH" accesskey="n" rel="next">COMPILING FROM SCRATCH</a>, Up: <a href="#INSTALLATION" accesskey="u" rel="up">INSTALLATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="INSTALLING-AN-RPM-1"></a>
+<h3 class="section">3.1 INSTALLING AN RPM</h3>
+
+<p>Cinelerra is easiest installed by downloading an RPM and running
+</p>
+<div class="example">
+<pre class="example">rpm -U --force --nodeps hvirtual*.rpm
+</pre></div>
+
+<p>on a Fedora 4 system.
+</p>
+<p>On systems which don&rsquo;t support RPM look for a utility called
 <b>rpm2cpio</b>.  Download a Cinelerra RPM and from the /
 directory run
+</p>
+<div class="example">
+<pre class="example">rpm2cpio hvirtual*.rpm | cpio -i --make-directories
+</pre></div>
 
-<pre class="example">     rpm2cpio hvirtual*.rpm | cpio -i --make-directories
-</pre>
-   <p>This doesn't always work because there are many forks of the C library,
+<p>This doesn&rsquo;t always work because there are many forks of the C library,
 each incompatible with the others.  This is the biggest reason to
 compile from scratch.
+</p>
+
+
 
-<div class="node">
-<a name="COMPILING-FROM-SCRATCH"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RUNNING-CINELERRA">RUNNING CINELERRA</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INSTALLING-AN-RPM">INSTALLING AN RPM</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#INSTALLATION">INSTALLATION</a>
 
-</div>
 
+
+<hr>
+<a name="COMPILING-FROM-SCRATCH"></a>
+<div class="header">
+<p>
+Next: <a href="#RUNNING-CINELERRA" accesskey="n" rel="next">RUNNING CINELERRA</a>, Previous: <a href="#INSTALLING-AN-RPM" accesskey="p" rel="prev">INSTALLING AN RPM</a>, Up: <a href="#INSTALLATION" accesskey="u" rel="up">INSTALLATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="COMPILING-FROM-SCRATCH-1"></a>
 <h3 class="section">3.2 COMPILING FROM SCRATCH</h3>
 
 <p>It should be noted that the compiler used in building Cinelerra
 binaries is the free GNU compiler and very conservative optimization
 flags.  Alternative optimization flags and compilers produce varying
-results.  Compiling the source is hard and there's no warranty if the
+results.  Compiling the source is hard and there&rsquo;s no warranty if the
 source code fails to compile, but the method for compiling starts by
 downloading the source code and decompressing.
-
-   <p>The compilation is verified on a vanilla Fedora 4 installation,
-workstation mode.  Fedora doesn't install a lot of dependancies like
+</p>
+<p>The compilation is verified on a vanilla Fedora 4 installation,
+workstation mode.  Fedora doesn&rsquo;t install a lot of dependancies like
 <b>nasm</b> and <b>yasm</b>.  Yes, 3 assemblers are now required to assemble
-x86 code.  Compiling the source is hard and there's no warranty if the
+x86 code.  Compiling the source is hard and there&rsquo;s no warranty if the
 source code fails to compile, but the method for compiling starts by
 downloading the source code and decompressing.
+</p>
+<div class="example">
+<pre class="example">tar jxf cinelerra*.tar.bz2
+</pre></div>
+
 
-<pre class="example">     tar jxf cinelerra*.tar.bz2
-</pre>
-   <p>The compilation is verified on a Fedora 4 installation.  Fedora 4
-doesn't install a lot of the reqiured compilers.  Mainly <b>nasm</b> and
+<p>The compilation is verified on a Fedora 4 installation.  Fedora 4
+doesn&rsquo;t install a lot of the reqiured compilers.  Mainly <b>nasm</b> and
 <b>yasm</b>, 2 of the 3 assemblers.  These have to be installed manually
 for compilation to succeed.
-
-   <p>Enter the hvirtual directory
-
-<pre class="example">     cd cinelerra
-</pre>
-   <p>Then run
-
-<pre class="example">     ./configure
-</pre>
-   <p>This checks the build environment for the right tools and should give
+</p>
+<p>Enter the hvirtual directory
+</p>
+<div class="example">
+<pre class="example">cd cinelerra
+</pre></div>
+
+<p>Then run
+</p>
+<div class="example">
+<pre class="example">./configure
+</pre></div>
+
+<p>This checks the build environment for the right tools and should give
 you an error if a tool is missing.  Once that succeeds run
+</p>
+<div class="example">
+<pre class="example">make
+</pre></div>
 
-<pre class="example">     make
-</pre>
-   <p>The make procedure should run through all the directories and put
+<p>The make procedure should run through all the directories and put
 binaries in the <b>i686</b> or <b>x86_64</b> directories.  When NFS was
 a lot faster, we compiled Alpha and i686 binaries in the same
 filesystem with the objects in different subdirectories, so all the
 binaries are still put in subdirectories.
-
-   <p>A lot of libraries are included to get the version numbers right.  Some
-of the libraries don't compile on SMP systems.  One solution is to
+</p>
+<p>A lot of libraries are included to get the version numbers right.  Some
+of the libraries don&rsquo;t compile on SMP systems.  One solution is to
 disable SMP when rebooting and reenable it when compilation is
 finished.  Another solution is to rerun make over and over until it
 gets through the offending libraries.
+</p>
 
-   <p>Once finished, make sure you are root and run
+<p>Once finished, make sure you are root and run
+</p>
+<div class="example">
+<pre class="example">make install
+</pre></div>
 
-<pre class="example">     make install
-</pre>
-   <p>to install the binaries.  If installation fails it means something
-failed to compile or you weren't root.  Run <b>make</b> again and watch
+<p>to install the binaries.  If installation fails it means something
+failed to compile or you weren&rsquo;t root.  Run <b>make</b> again and watch
 for errors.
-
-   <p>Sometimes you'll want to run <b>make clean</b> if you're programming
-something or the system libraries change.  In this case, you'll
+</p>
+<p>Sometimes you&rsquo;ll want to run <b>make clean</b> if you&rsquo;re programming
+something or the system libraries change.  In this case, you&rsquo;ll
 probably need to run <b>configure</b> again because some libraries delete
 their configuration files in <b>make clean</b>.
-
-<div class="node">
+</p>
+<hr>
 <a name="RUNNING-CINELERRA"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMPILING-FROM-SCRATCH">COMPILING FROM SCRATCH</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#INSTALLATION">INSTALLATION</a>
-
+<div class="header">
+<p>
+Previous: <a href="#COMPILING-FROM-SCRATCH" accesskey="p" rel="prev">COMPILING FROM SCRATCH</a>, Up: <a href="#INSTALLATION" accesskey="u" rel="up">INSTALLATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="RUNNING-CINELERRA-1"></a>
 <h3 class="section">3.3 RUNNING CINELERRA</h3>
 
+
 <p>The simplest way to run Cinelerra is by running
+</p>
 
-<pre class="example">     /usr/bin/cinelerra
-</pre>
-   <p>This command hides a much more capable command line interface.  Run
+<div class="example">
+<pre class="example">/usr/bin/cinelerra
+</pre></div>
+
+<p>This command hides a much more capable command line interface.  Run
 <b>cinelerra -h</b> to get a listing of command line options.  The use of
 these options is described in several sections.
+</p>
+<p>For rendering from the command line See <a href="#RENDERING-FILES">RENDERING FILES</a>.
+</p>
+
+
+
+
+
 
-   <p>For rendering from the command line See <a href="#RENDERING-FILES">RENDERING FILES</a>.
 
-<div class="node">
-<a name="CONFIGURATION"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CREATING-A-NEW-PROJECT">CREATING A NEW PROJECT</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INSTALLATION">INSTALLATION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+
+<hr>
+<a name="CONFIGURATION"></a>
+<div class="header">
+<p>
+Next: <a href="#CREATING-A-NEW-PROJECT" accesskey="n" rel="next">CREATING A NEW PROJECT</a>, Previous: <a href="#INSTALLATION" accesskey="p" rel="prev">INSTALLATION</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CONFIGURATION-1"></a>
 <h2 class="chapter">4 CONFIGURATION</h2>
 
+
 <p>Because of the variety of uses, Cinelerra cannot be run optimally
 without some intimate configuration for your specific needs. Very few
 parameters are adjustible at compile time.  Runtime configuration is
 the only option for most configuration because of the multitude of
 parameters.
-
-   <p>Here we discuss not only the configuration options but which of the
-different API's in Linux are supported.
-
-   <p>Go to <b>settings-&gt;preferences</b> and to see the options.
-
-<ul class="menu">
-<li><a accesskey="1" href="#ENVIRONMENT-VARIABLES">ENVIRONMENT VARIABLES</a>:   These environment variables are recognized by Cinelerra
-<li><a accesskey="2" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>:           Information about the audio drivers
-<li><a accesskey="3" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>:           Information about the video drivers
-<li><a accesskey="4" href="#PLAYBACK">PLAYBACK</a>:                Configuring parameters related to playback. 
-<li><a accesskey="5" href="#RECORDING">RECORDING</a>:               Configuring parameters related to recording. 
-<li><a accesskey="6" href="#PERFORMANCE">PERFORMANCE</a>:             Configuring parameters related to how fast things go. 
-<li><a accesskey="7" href="#INTERFACE">INTERFACE</a>:               Configuring the user interface. 
-<li><a accesskey="8" href="#ABOUT">ABOUT</a>:                   Viewing information about the program. 
-</ul>
-
-<div class="node">
+</p>
+<p>Here we discuss not only the configuration options but which of the
+different API&rsquo;s in Linux are supported.
+</p>
+<p>Go to <b>settings-&gt;preferences</b> and to see the options.
+</p>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#ENVIRONMENT-VARIABLES" accesskey="1">ENVIRONMENT VARIABLES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">These environment variables are recognized by Cinelerra
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#AUDIO-DRIVERS" accesskey="2">AUDIO DRIVERS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Information about the audio drivers
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#VIDEO-DRIVERS" accesskey="3">VIDEO DRIVERS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Information about the video drivers
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PLAYBACK" accesskey="4">PLAYBACK</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Configuring parameters related to playback.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RECORDING" accesskey="5">RECORDING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Configuring parameters related to recording.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PERFORMANCE" accesskey="6">PERFORMANCE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Configuring parameters related to how fast things go.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#INTERFACE" accesskey="7">INTERFACE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Configuring the user interface.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#ABOUT" accesskey="8">ABOUT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Viewing information about the program.
+</td></tr>
+</table>
+
+
+<hr>
 <a name="ENVIRONMENT-VARIABLES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
-
+<div class="header">
+<p>
+Next: <a href="#AUDIO-DRIVERS" accesskey="n" rel="next">AUDIO DRIVERS</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="ENVIRONMENT-VARIABLES-1"></a>
 <h3 class="section">4.1 ENVIRONMENT VARIABLES</h3>
 
 <p>In UNIX derivatives, environment variables are global variables in the
@@ -725,77 +857,91 @@ shell which all applications can read.  They are set with a command
 like <b>set VARIABLE=value</b>.  All the environment variables can be
 viewed with a command like <b>env</b>.  Cinelerra recognizes the following
 environment variables:
-
-     <ul>
-<li><b>LADSPA_PATH</b> - If you want to use LADSPA plugins, this must be
+</p>
+<ul>
+<li> <b>LADSPA_PATH</b> - If you want to use LADSPA plugins, this must be
 defined: a colon separated list of directories to search for LADSPA
 plugins.  These are not native Cinelerra plugins.  See <a href="#LADSPA-EFFECTS">LADSPA EFFECTS</a>.
 
-   </ul>
 
-<div class="node">
-<a name="AUDIO-DRIVERS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ENVIRONMENT-VARIABLES">ENVIRONMENT VARIABLES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
+</li></ul>
 
-</div>
 
+
+
+
+
+<hr>
+<a name="AUDIO-DRIVERS"></a>
+<div class="header">
+<p>
+Next: <a href="#VIDEO-DRIVERS" accesskey="n" rel="next">VIDEO DRIVERS</a>, Previous: <a href="#ENVIRONMENT-VARIABLES" accesskey="p" rel="prev">ENVIRONMENT VARIABLES</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="AUDIO-DRIVERS-1"></a>
 <h3 class="section">4.2 AUDIO DRIVERS</h3>
 
 <p>The audio drivers are used for both recording and playback to get data
 to and from the hardware.  Since the same drivers are used for both
 recording and playback, their functionality is described here in a
 separate section.
-
-<ul class="menu">
-<li><a accesskey="1" href="#COMMON-SOUND-DRIVER-ATTRIBUTES">COMMON SOUND DRIVER ATTRIBUTES</a>:  Attributes used for more than one sound driver. 
-<li><a accesskey="2" href="#OSS">OSS</a>:  Notes about the OSS driver
-<li><a accesskey="3" href="#OSS-Envy24">OSS Envy24</a>:  Notes about the OSS driver for the Envy24 chip
-<li><a accesskey="4" href="#ALSA">ALSA</a>:  Notes about the ALSA driver
-<li><a accesskey="5" href="#ESOUND">ESOUND</a>:  Notes about the ESound driver
-<li><a accesskey="6" href="#RAW-1394">RAW 1394</a>:  Notes about the Raw1394 driver
-<li><a accesskey="7" href="#DV-1394">DV 1394</a>:  Notes about the DV1394 driver
-<li><a accesskey="8" href="#IEC-61883">IEC 61883</a>:  Notes about the IEC 61883 driver
-</ul>
-
-<div class="node">
+</p>
+
+
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#COMMON-SOUND-DRIVER-ATTRIBUTES" accesskey="1">COMMON SOUND DRIVER ATTRIBUTES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Attributes used for more than one sound driver.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#OSS" accesskey="2">OSS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes about the OSS driver
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#OSS-Envy24" accesskey="3">OSS Envy24</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes about the OSS driver for the Envy24 chip
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#ALSA" accesskey="4">ALSA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes about the ALSA driver
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#ESOUND" accesskey="5">ESOUND</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes about the ESound driver
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RAW-1394" accesskey="6">RAW 1394</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes about the Raw1394 driver
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DV-1394" accesskey="7">DV 1394</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes about the DV1394 driver
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#IEC-61883" accesskey="8">IEC 61883</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes about the IEC 61883 driver
+</td></tr>
+</table>
+
+<hr>
 <a name="COMMON-SOUND-DRIVER-ATTRIBUTES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#OSS">OSS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#OSS" accesskey="n" rel="next">OSS</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="COMMON-SOUND-DRIVER-ATTRIBUTES-1"></a>
 <h4 class="subsection">4.2.1 COMMON SOUND DRIVER ATTRIBUTES</h4>
 
-     <ul>
-<li>DEVICE PATH
+<ul>
+<li> DEVICE PATH
 
-     <p>Usually a file in the <b>/dev/</b> directory which controls the
+<p>Usually a file in the <b>/dev/</b> directory which controls the
 device.
-
-     <li>
+</p>
+</li><li> 
 BITS
 
-     <p>The number of bits of precision Cinelerra should set the device for. 
+<p>The number of bits of precision Cinelerra should set the device for. 
 This sometimes has a figuritive meaning.  Some sound drivers need to be
-set to 32 bits to perform 24 bit playback and won't play anything when
+set to 32 bits to perform 24 bit playback and won&rsquo;t play anything when
 set to 24 bits.  Some sound drivers need to be set to 24 bits for 24
 bit playback.
+</p>
+</li></ul>
 
-</ul>
 
-<div class="node">
-<a name="OSS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#OSS-Envy24">OSS Envy24</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMMON-SOUND-DRIVER-ATTRIBUTES">COMMON SOUND DRIVER ATTRIBUTES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
 
+<hr>
+<a name="OSS"></a>
+<div class="header">
+<p>
+Next: <a href="#OSS-Envy24" accesskey="n" rel="next">OSS Envy24</a>, Previous: <a href="#COMMON-SOUND-DRIVER-ATTRIBUTES" accesskey="p" rel="prev">COMMON SOUND DRIVER ATTRIBUTES</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="OSS-1"></a>
 <h4 class="subsection">4.2.2 OSS</h4>
 
 <p>This was the first Linux sound driver.  It had an open source
@@ -803,31 +949,28 @@ implementation and a commercial implementation with more sound cards
 supported.  It was the standard sound driver up to linux 2.4.  It still
 is the only sound driver which an i386 binary can use when running on
 an x86_64 system.
-
-<div class="node">
+</p>
+<hr>
 <a name="OSS-Envy24"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ALSA">ALSA</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#OSS">OSS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#ALSA" accesskey="n" rel="next">ALSA</a>, Previous: <a href="#OSS" accesskey="p" rel="prev">OSS</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="OSS-Envy24-1"></a>
 <h4 class="subsection">4.2.3 OSS Envy24</h4>
 
 <p>The commercial version of OSS had a variant for 24 bit 96 Khz
 soundcards.  This variant required significant changes to the way the
 sound drivers were used, which is what the OSS Envy24 variant is for.
+</p>
 
-<div class="node">
+<hr>
 <a name="ALSA"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ESOUND">ESOUND</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#OSS-Envy24">OSS Envy24</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#ESOUND" accesskey="n" rel="next">ESOUND</a>, Previous: <a href="#OSS-Envy24" accesskey="p" rel="prev">OSS Envy24</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="ALSA-1"></a>
 <h4 class="subsection">4.2.4 ALSA</h4>
 
 <p>ALSA is the most common sound driver in Linux 2.6.  It supports the
@@ -838,346 +981,352 @@ changing.  A program which works with it one day may not the next day.
 New wrappers are being developed on top of ALSA at such a pace, we plan
 to support them at regular intervals, not at every new release of a new
 wrapper.
-
-   <p>ALSA is no longer portable between i386 and x86_64.  If an i386 binary
-tries to play back on an x86_64 kernel it'll crash.  For this scenario,
+</p>
+<p>ALSA is no longer portable between i386 and x86_64.  If an i386 binary
+tries to play back on an x86_64 kernel it&rsquo;ll crash.  For this scenario,
 use OSS.
-
-<div class="node">
+</p>
+<hr>
 <a name="ESOUND"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RAW-1394">RAW 1394</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ALSA">ALSA</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#RAW-1394" accesskey="n" rel="next">RAW 1394</a>, Previous: <a href="#ALSA" accesskey="p" rel="prev">ALSA</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="ESOUND-1"></a>
 <h4 class="subsection">4.2.5 ESOUND</h4>
 
 <p>ESOUND was a sound server that sat on top of OSS.  It was written for a
 window manager called Enlightenment.  It supported a limited number of
 bits and had high latency compared to modern times but multiplexed
-multiple audio sources.  It's unknown whether it still works.
-
-<div class="node">
+multiple audio sources.  It&rsquo;s unknown whether it still works.
+</p>
+<hr>
 <a name="RAW-1394"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DV-1394">DV 1394</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ESOUND">ESOUND</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#DV-1394" accesskey="n" rel="next">DV 1394</a>, Previous: <a href="#ESOUND" accesskey="p" rel="prev">ESOUND</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="RAW-1394-1"></a>
 <h4 class="subsection">4.2.6 RAW 1394</h4>
 
 <p>The first interface between linux software and firewire camcorders. 
 This was the least reliable way to play audio to a camcorder.  It
 consisted of a library on top of the kernel commands.
-
-<div class="node">
+</p>
+<hr>
 <a name="DV-1394"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#IEC-61883">IEC 61883</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#RAW-1394">RAW 1394</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#IEC-61883" accesskey="n" rel="next">IEC 61883</a>, Previous: <a href="#RAW-1394" accesskey="p" rel="prev">RAW 1394</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="DV-1394-1"></a>
 <h4 class="subsection">4.2.7 DV 1394</h4>
 
 <p>The second rewrite of DV camcorder support in Linux.  This was the most
 reliable way to play audio to a camcorder.  This consisted of direct
 kernel commands.
-
-<div class="node">
+</p>
+<hr>
 <a name="IEC-61883"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DV-1394">DV 1394</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>
-
+<div class="header">
+<p>
+Previous: <a href="#DV-1394" accesskey="p" rel="prev">DV 1394</a>, Up: <a href="#AUDIO-DRIVERS" accesskey="u" rel="up">AUDIO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="IEC-61883-1"></a>
 <h4 class="subsection">4.2.8 IEC 61883</h4>
 
 <p>The third rewrite of DV camcorder support in Linux.  This is a library
 on top of RAW 1394 which is a library on top of the kernel commands. 
-It's less reliable than DV 1394 but more reliable than RAW 1394.  The
+It&rsquo;s less reliable than DV 1394 but more reliable than RAW 1394.  The
 next rewrite ought to fix that.
+</p>
+
+
 
-<div class="node">
-<a name="VIDEO-DRIVERS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PLAYBACK">PLAYBACK</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
 
-</div>
 
+
+
+<hr>
+<a name="VIDEO-DRIVERS"></a>
+<div class="header">
+<p>
+Next: <a href="#PLAYBACK" accesskey="n" rel="next">PLAYBACK</a>, Previous: <a href="#AUDIO-DRIVERS" accesskey="p" rel="prev">AUDIO DRIVERS</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="VIDEO-DRIVERS-1"></a>
 <h3 class="section">4.3 VIDEO DRIVERS</h3>
 
 <p>The audio drivers are used for both recording and playback to get data
 to and from the hardware.  Since the same drivers are used for both
 recording and playback, their functionality is described here in a
 separate section.
-
-<ul class="menu">
-<li><a accesskey="1" href="#COMMON-VIDEO-DRIVER-ATTRIBUTES">COMMON VIDEO DRIVER ATTRIBUTES</a>:  Parameters used by more than one driver. 
-<li><a accesskey="2" href="#X11">X11</a>
-<li><a accesskey="3" href="#X11_002dXV">X11-XV</a>
-<li><a accesskey="4" href="#X11_002dOPENGL">X11-OPENGL</a>
-<li><a accesskey="5" href="#BUZ">BUZ</a>
-<li><a accesskey="6" href="#RAW-1394-VIDEO-PLAYBACK">RAW 1394 VIDEO PLAYBACK</a>
-<li><a accesskey="7" href="#DV-1394-VIDEO-PLAYBACK">DV 1394 VIDEO PLAYBACK</a>
-<li><a accesskey="8" href="#IEC-61883-VIDEO-PLAYBACK">IEC 61883 VIDEO PLAYBACK</a>
-</ul>
-
-<div class="node">
+</p>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#COMMON-VIDEO-DRIVER-ATTRIBUTES" accesskey="1">COMMON VIDEO DRIVER ATTRIBUTES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Parameters used by more than one driver.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#X11" accesskey="2">X11</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#X11_002dXV" accesskey="3">X11-XV</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#X11_002dOPENGL" accesskey="4">X11-OPENGL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#BUZ" accesskey="5">BUZ</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RAW-1394-VIDEO-PLAYBACK" accesskey="6">RAW 1394 VIDEO PLAYBACK</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DV-1394-VIDEO-PLAYBACK" accesskey="7">DV 1394 VIDEO PLAYBACK</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#IEC-61883-VIDEO-PLAYBACK" accesskey="8">IEC 61883 VIDEO PLAYBACK</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
 <a name="COMMON-VIDEO-DRIVER-ATTRIBUTES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#X11">X11</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#X11" accesskey="n" rel="next">X11</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="COMMON-VIDEO-DRIVER-ATTRIBUTES-1"></a>
 <h4 class="subsection">4.3.1 COMMON VIDEO DRIVER ATTRIBUTES</h4>
 
-     <ul>
-<li>
+
+<ul>
+<li> 
 DISPLAY
 
-     <p>The is intended for dual monitor
+<p>The is intended for dual monitor
 displays.  Depending on the value of Display, the Compositor window
 will appear on a different monitor from the rest of the windows.
-
-     <li>
+</p>
+</li><li> 
 DEVICE PATH
 
-     <p>Usually a file in the <b>/dev/</b> directory
+<p>Usually a file in the <b>/dev/</b> directory
 which controls the device.
-
-     <li>
+</p>
+</li><li> 
 SWAP FIELDS
 
-     <p>Make the even lines odd and the odd lines even
+<p>Make the even lines odd and the odd lines even
 when sending to the device.  On an NTSC or 1080i monitor the fields may
 need to be swapped to prevent jittery motion.
-
-     <li>
+</p>
+</li><li> 
 OUTPUT CHANNEL
 
-     <p>Devices with multiple outputs may need a
+<p>Devices with multiple outputs may need a
 specific connector to send video on.
-
-     <li>
+</p>
+</li><li> 
 PORT
 
-     <p>The IEEE1394 standard specifies something known as the
+<p>The IEEE1394 standard specifies something known as the
 <b>port</b>.  This is probably the firewire card number in the system
 to use.
-
-     <li>
+</p>
+</li><li> 
 CHANNEL
 
-     <p>The IEEE1394 standard specifies something known as the
-<b>channel</b>.  For DV cameras it's always <b>63</b>.
-
-</ul>
+<p>The IEEE1394 standard specifies something known as the
+<b>channel</b>.  For DV cameras it&rsquo;s always <b>63</b>.
+</p>
+</li></ul>
 
-<div class="node">
+<hr>
 <a name="X11"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#X11_002dXV">X11-XV</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMMON-VIDEO-DRIVER-ATTRIBUTES">COMMON VIDEO DRIVER ATTRIBUTES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#X11_002dXV" accesskey="n" rel="next">X11-XV</a>, Previous: <a href="#COMMON-VIDEO-DRIVER-ATTRIBUTES" accesskey="p" rel="prev">COMMON VIDEO DRIVER ATTRIBUTES</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="X11-1"></a>
 <h4 class="subsection">4.3.2 X11</h4>
 
 <p>This was the first method of video playback on any UNIX system, valid
 all the way until 1999.  It just writes the RGB triplet for each pixel
-directly to the window.  It's the slowest playback method.  It's still
-useful as a fallback when graphics hardware can't handle very large
+directly to the window.  It&rsquo;s the slowest playback method.  It&rsquo;s still
+useful as a fallback when graphics hardware can&rsquo;t handle very large
 frames.
-
-<div class="node">
-<a name="X11-XV"></a>
+</p>
+<hr>
 <a name="X11_002dXV"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#X11_002dOPENGL">X11-OPENGL</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#X11">X11</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#X11_002dOPENGL" accesskey="n" rel="next">X11-OPENGL</a>, Previous: <a href="#X11" accesskey="p" rel="prev">X11</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="X11_002dXV-1"></a>
 <h4 class="subsection">4.3.3 X11-XV</h4>
 
 <p>This was the second big method of video playback in UNIX starting in
-1999.  It converts YUV to RGB in hardware with scaling.  It's the
-preferred playback method but can't handle large frame sizes.  The
+1999.  It converts YUV to RGB in hardware with scaling.  It&rsquo;s the
+preferred playback method but can&rsquo;t handle large frame sizes.  The
 maximum video size for XV is usually 1920x1080.
+</p>
 
-<div class="node">
-<a name="X11-OPENGL"></a>
+<hr>
 <a name="X11_002dOPENGL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#BUZ">BUZ</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#X11_002dXV">X11-XV</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#BUZ" accesskey="n" rel="next">BUZ</a>, Previous: <a href="#X11_002dXV" accesskey="p" rel="prev">X11-XV</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="X11_002dOPENGL-1"></a>
 <h4 class="subsection">4.3.4 X11-OPENGL</h4>
 
 <p>The most powerful video playback method is OpenGL.  With this driver,
 most effects are done in hardware.  OpenGL allows video sizes up to the
 maximum texture size, which is usually larger than what XV supports,
 depending on the graphics driver.
-
-   <p>OpenGL doesn't affect rendering.  It just accelerates playback.  OpenGL
+</p>
+<p>OpenGL doesn&rsquo;t affect rendering.  It just accelerates playback.  OpenGL
 relies on PBuffers and shaders to do video rendering.  The graphics
 driver must support OpenGL 2 and Cinelerra needs to be explicitely
 compiled with OpenGL 2 support.  This requires compiling it on a system
 with the OpenGL 2 headers.
-
-   <p>PBuffers are known to be fickle.  If the graphics card doesn't have
-enough memory or doesn't have the right visuals, PBuffers won't work. 
-Try seeking several frames or restarting Cinelerra if OpenGL doesn't
+</p>
+<p>PBuffers are known to be fickle.  If the graphics card doesn&rsquo;t have
+enough memory or doesn&rsquo;t have the right visuals, PBuffers won&rsquo;t work. 
+Try seeking several frames or restarting Cinelerra if OpenGL doesn&rsquo;t
 work.
-
-   <p>Because of OpenGL limitations, X11-OpenGL processes everything in 8 bit
+</p>
+<p>Because of OpenGL limitations, X11-OpenGL processes everything in 8 bit
 colormodels, although the difference between YUV and RGB is retained.
-
-   <p>The <b>scaling equation</b> in Preferences is ignored by OpenGL.  OpenGL
+</p>
+<p>The <b>scaling equation</b> in Preferences is ignored by OpenGL.  OpenGL
 always uses linear scaling.
-
-   <p>Project and track sizes need to be multiples of 4 for OpenGL to work.
-
-   <p>To get the most acceleration, OpenGL-enabled effects must be placed
+</p>
+<p>Project and track sizes need to be multiples of 4 for OpenGL to work.  
+</p>
+<p>To get the most acceleration, OpenGL-enabled effects must be placed
 after software-only effects.  All rendering before the last
 software-only effect is done in software.  The core Cinelerra
 operations like camera and projector are of course OpenGL.
+</p>
 
-<div class="node">
-<a name="BUZ"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RAW-1394-VIDEO-PLAYBACK">RAW 1394 VIDEO PLAYBACK</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#X11_002dOPENGL">X11-OPENGL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
 
+<hr>
+<a name="BUZ"></a>
+<div class="header">
+<p>
+Next: <a href="#RAW-1394-VIDEO-PLAYBACK" accesskey="n" rel="next">RAW 1394 VIDEO PLAYBACK</a>, Previous: <a href="#X11_002dOPENGL" accesskey="p" rel="prev">X11-OPENGL</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="BUZ-1"></a>
 <h4 class="subsection">4.3.5 BUZ</h4>
 
 <p>This is a method for playing motion JPEG-A files directly to a
 composite analog signal.  It uses a popular hack of the Video4Linux 1
 driver from 2000 to decompress JPEG in hardware.  Sadly, even though
 analog output is largely obsolete, newer drivers have replaced BUZ.
-
-<div class="node">
+</p>
+<hr>
 <a name="RAW-1394-VIDEO-PLAYBACK"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DV-1394-VIDEO-PLAYBACK">DV 1394 VIDEO PLAYBACK</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#BUZ">BUZ</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#DV-1394-VIDEO-PLAYBACK" accesskey="n" rel="next">DV 1394 VIDEO PLAYBACK</a>, Previous: <a href="#BUZ" accesskey="p" rel="prev">BUZ</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="RAW-1394-VIDEO-PLAYBACK-1"></a>
 <h4 class="subsection">4.3.6 RAW 1394 VIDEO PLAYBACK</h4>
 
 <p>The first interface between linux software and firewire camcorders. 
 This was the least reliable way to play video to a camcorder.  It
 consisted of a library on top of the kernel commands.
+</p>
 
-<div class="node">
+<hr>
 <a name="DV-1394-VIDEO-PLAYBACK"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#IEC-61883-VIDEO-PLAYBACK">IEC 61883 VIDEO PLAYBACK</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#RAW-1394-VIDEO-PLAYBACK">RAW 1394 VIDEO PLAYBACK</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
-
+<div class="header">
+<p>
+Next: <a href="#IEC-61883-VIDEO-PLAYBACK" accesskey="n" rel="next">IEC 61883 VIDEO PLAYBACK</a>, Previous: <a href="#RAW-1394-VIDEO-PLAYBACK" accesskey="p" rel="prev">RAW 1394 VIDEO PLAYBACK</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="DV-1394-VIDEO-PLAYBACK-1"></a>
 <h4 class="subsection">4.3.7 DV 1394 VIDEO PLAYBACK</h4>
 
 <p>The second rewrite of DV camcorder support in Linux.  This was the most
 reliable way to play video to a camcorder.  This consisted of direct
 kernel commands.
-
-<div class="node">
+</p>
+<hr>
 <a name="IEC-61883-VIDEO-PLAYBACK"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DV-1394-VIDEO-PLAYBACK">DV 1394 VIDEO PLAYBACK</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>
-
+<div class="header">
+<p>
+Previous: <a href="#DV-1394-VIDEO-PLAYBACK" accesskey="p" rel="prev">DV 1394 VIDEO PLAYBACK</a>, Up: <a href="#VIDEO-DRIVERS" accesskey="u" rel="up">VIDEO DRIVERS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="IEC-61883-VIDEO-PLAYBACK-1"></a>
 <h4 class="subsection">4.3.8 IEC 61883 VIDEO PLAYBACK</h4>
 
+
 <p>The third rewrite of DV camcorder support in Linux.  This is a library
 on top of RAW 1394 which is a library on top of the kernel commands. 
-It's less reliable than DV 1394 but more reliable than RAW 1394.  The
+It&rsquo;s less reliable than DV 1394 but more reliable than RAW 1394.  The
 next rewrite ought to fix that.
+</p>
 
-<div class="node">
-<a name="PLAYBACK"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RECORDING">RECORDING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
 
-</div>
 
-<h3 class="section">4.4 PLAYBACK</h3>
 
-<ul class="menu">
-<li><a accesskey="1" href="#AUDIO-OUT">AUDIO OUT</a>
-<li><a accesskey="2" href="#VIDEO-OUT">VIDEO OUT</a>
-</ul>
 
-<div class="node">
-<a name="AUDIO-OUT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#VIDEO-OUT">VIDEO OUT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLAYBACK">PLAYBACK</a>
 
+<hr>
+<a name="PLAYBACK"></a>
+<div class="header">
+<p>
+Next: <a href="#RECORDING" accesskey="n" rel="next">RECORDING</a>, Previous: <a href="#VIDEO-DRIVERS" accesskey="p" rel="prev">VIDEO DRIVERS</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
+<a name="PLAYBACK-1"></a>
+<h3 class="section">4.4 PLAYBACK</h3>
 
+
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#AUDIO-OUT" accesskey="1">AUDIO OUT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#VIDEO-OUT" accesskey="2">VIDEO OUT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+
+
+<hr>
+<a name="AUDIO-OUT"></a>
+<div class="header">
+<p>
+Next: <a href="#VIDEO-OUT" accesskey="n" rel="next">VIDEO OUT</a>, Up: <a href="#PLAYBACK" accesskey="u" rel="up">PLAYBACK</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="AUDIO-OUT-1"></a>
 <h4 class="subsection">4.4.1 AUDIO OUT</h4>
 
 <p>These determine what happens when you play sound from the timeline.
+</p>
+<ul>
+<li> SAMPLES TO SEND TO CONSOLE:
 
-     <ul>
-<li>SAMPLES TO SEND TO CONSOLE:
-
-     <p>For playing audio, small fragments of sound are read from disk and
+<p>For playing audio, small fragments of sound are read from disk and
 processed in a virtual console sequentially.  A larger value here
 causes more latency when you change mixing parameters but gives more
 reliable playback.
-
-     <p>Some sound drivers don't allow changing of the console fragment so
+</p>
+<p>Some sound drivers don&rsquo;t allow changing of the console fragment so
 latency is unchanged no matter what this value is.
-
-     <p>A good way of ensuring high quality playback was to read bigger
+</p>
+<p>A good way of ensuring high quality playback was to read bigger
 fragments from the disk and break them into smaller fragments for the
 soundcard.  That changed when the virtual console moved from the push
 model to the pull model.  Since different stages of the rendering
 pipeline can change the rate of the incoming data, it would now be real
 hard to disconnect size of the console fragments from the size of the
 fragments read from disk.
-
-     <li>
+</p>
+</li><li> 
 AUDIO OFFSET:
 
-     <p>The ability to tell the exact playback position on Linux sound drivers
-is pretty bad if it's provided at all.  Since this information is
+<p>The ability to tell the exact playback position on Linux sound drivers
+is pretty bad if it&rsquo;s provided at all.  Since this information is
 required for proper video synchronization, it has to be accurate.  The
 <b>AUDIO OFFSET</b> allows users to adjust the position returned by the
-sound driver to reflect reality.  The audio offset doesn't affect the
+sound driver to reflect reality.  The audio offset doesn&rsquo;t affect the
 audio playback or rendering at all.  It merely changes the
 synchronization of video playback.
-
-     <p>The easiest way to set the audio offset is to create a timeline with 1
+</p>
+<p>The easiest way to set the audio offset is to create a timeline with 1
 video track and one audio track.  Expand the audio track and center the
 audio pan.  The frame rate should be something over 24fps and the
 sampling rate should be over 32000.  The frame size should be small
@@ -1186,198 +1335,217 @@ a region of the timeline starting at 10 seconds and ending at 20
 seconds.  Drop a <b>gradient</b> effect on the video track and configure
 it to be clearly visible.  Drop a <b>synthesizer</b> effect on the audio
 and configure it to be clearly audible.
-
-     <p>Play the timeline from 0 and watch to see if the gradient effect starts
-exactly when the audio starts.  If it doesn't, expand the audio track
+</p>
+<p>Play the timeline from 0 and watch to see if the gradient effect starts
+exactly when the audio starts.  If it doesn&rsquo;t, expand the audio track
 and adjust the nudge.  If the audio starts ahead of the video, decrease
 the nudge value.  If the audio starts after the video, increase the
 nudge value.  Once the tracks play back synchronized, copy the nudge
 value to the <b>AUDIO OFFSET</b> value in preferences.
-
-     <p><b>Note:</b> if you change sound drivers or you change the value of <b>USE
-SOFTWARE FOR POSITIONING INFORMATION</b>, you'll need to change the audio
+</p>
+<p><b>Note:</b> if you change sound drivers or you change the value of <b>USE
+SOFTWARE FOR POSITIONING INFORMATION</b>, you&rsquo;ll need to change the audio
 offset because different sound drivers are unequally inaccurate.
-
-     <li>
+</p>
+</li><li> 
 VIEW FOLLOWS PLAYBACK
 
-     <p>Causes the timeline window to scroll when the playback cursor moves. 
+<p>Causes the timeline window to scroll when the playback cursor moves. 
 This can bog down the X Server or cause the timeline window to lock up
 for long periods of time while drawing the assetse.
+</p>
+</li><li> USE SOFTWARE FOR POSITIONING INFORMATION
 
-     <li>USE SOFTWARE FOR POSITIONING INFORMATION
-
-     <p>Most soundcards and sound drivers don't give reliable information on
+<p>Most soundcards and sound drivers don&rsquo;t give reliable information on
 the number of samples the card has played. When playing video you need
 this information for synchronization. This option causes the sound
 driver to be ignored and a software timer to be used for
 synchronization.
+</p>
+</li><li> AUDIO PLAYBACK IN REALTIME:
 
-     <li>AUDIO PLAYBACK IN REALTIME:
-
-     <p>Back in the days when 150Mhz was the maximum, this allowed
+<p>Back in the days when 150Mhz was the maximum, this allowed
 uninterrupted playback on heavy loads.  It forces the audio playback to
-the highest priority in the kernel.  Today it's most useful for
+the highest priority in the kernel.  Today it&rsquo;s most useful for
 achieving very low latency between console tweeks and soundcard
 output.  You must be root to get realtime priority.
+</p>
+</li><li> AUDIO DRIVER
 
-     <li>AUDIO DRIVER
-
-     <p>There are many sound drivers for Linux.  This allows selecting one
+<p>There are many sound drivers for Linux.  This allows selecting one
 sound driver and setting parameters specific to it.  The sound drivers
 and their parameters are described in the sound driver section. 
 See <a href="#AUDIO-DRIVERS">AUDIO DRIVERS</a>.
+</p>
+</li></ul>
 
-   </ul>
 
-<div class="node">
-<a name="VIDEO-OUT"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AUDIO-OUT">AUDIO OUT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLAYBACK">PLAYBACK</a>
 
-</div>
 
+<hr>
+<a name="VIDEO-OUT"></a>
+<div class="header">
+<p>
+Previous: <a href="#AUDIO-OUT" accesskey="p" rel="prev">AUDIO OUT</a>, Up: <a href="#PLAYBACK" accesskey="u" rel="up">PLAYBACK</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="VIDEO-OUT-1"></a>
 <h4 class="subsection">4.4.2 VIDEO OUT</h4>
 
 <p>These determine how video gets from the timeline to your eyes.
+</p>
+<ul>
+<li> PLAY EVERY FRAME
 
-     <ul>
-<li>PLAY EVERY FRAME
-
-     <p>Causes every frame of video to be displayed even if it means falling
+<p>Causes every frame of video to be displayed even if it means falling
 behind the audio.  This should always be on unless you use mostly
-uncompressed codecs.  Most compressed codecs don't support frame
+uncompressed codecs.  Most compressed codecs don&rsquo;t support frame
 dropping anymore.
+</p>
+
 
-     <li>
+</li><li> 
 FRAMERATE ACHIEVED
 
-     <p>The number of frames per second being displayed during playback.  This
+<p>The number of frames per second being displayed during playback.  This
 is only updated during playback.
+</p>
+</li><li> DECODE FRAMES ASYNCHRONOUSLY
 
-     <li>DECODE FRAMES ASYNCHRONOUSLY
-
-     <p>If you have lots of memory and more than one CPU, this option can
+<p>If you have lots of memory and more than one CPU, this option can
 improve playback performance by decoding video on one CPU as fast as
 possible while dedicating other CPU to displaying video only.  It
 assumes all playback operations are forward and no frames are dropped. 
 Operations involving reverse playback or frame dropping are negatively
 impacted.
-
-     <p>Since this option requires enourmous amounts of memory, it may crash if
+</p>
+<p>Since this option requires enourmous amounts of memory, it may crash if
 the input frames are very large.
+</p>
 
-     <li>
+</li><li> 
 SCALING EQUATION
 
-     <p>When video playback involves any kind of scaling or translation, this
-algorithm is used.  This doesn't affect 1:1 playback.
-
-          <ul>
-<li>NEAREST NEIGHBOR ENLARGE AND REDUCE
+<p>When video playback involves any kind of scaling or translation, this
+algorithm is used.  This doesn&rsquo;t affect 1:1 playback.
+</p>
+<ul>
+<li> NEAREST NEIGHBOR ENLARGE AND REDUCE
 
-          <p>lowest but fastest
+<p>lowest but fastest
 quality.  Produces jagged edges and uneven motion.
+</p>
 
-          <li>
+</li><li> 
 BICUBIC ENLARGE AND BILINEAR REDUCE
 
-          <p>highest but slowest
+<p>highest but slowest
 quality.  For enlarging a bicubic interpolation is used, which blurs
-slightly but doesn't reveal stair steps.  For reduction a bilinear
+slightly but doesn&rsquo;t reveal stair steps.  For reduction a bilinear
 interpolation is used, which produces very sharp images and reduces
 noise.  The bilinear reduced images can be sharpened with a sharpen
 effect with less noise than a normal sized image.
-
-          <li>
+</p>
+</li><li> 
 BILINEAR ENLARGE AND BILINEAR REDUCE
 
-          <p>when slight enlargement
+<p>when slight enlargement
 is needed a bilinear enlargement looks better than a bicubic
 enlargement.
+</p>
+</li></ul>
 
-     </ul>
 
-     <li>
+</li><li> 
 PRELOAD BUFFER FOR QUICKTIME
 
-     <p>The Quicktime/AVI decoder can handle DVD sources better when this is
+<p>The Quicktime/AVI decoder can handle DVD sources better when this is
 around 10000000.  This reduces the amount of seeking required. 
 Unfortunately when reading high bitrate sources from a hard drive, this
 tends to slow it down.  For normal use this should be 0.
+</p>
 
-     <li>
+</li><li> 
 DVD SUBTITLE TO DISPLAY
 
-     <p>DVD IFO files usually contain subtitle tracks.  These must be decoded
+<p>DVD IFO files usually contain subtitle tracks.  These must be decoded
 with by the MPEG decoder.  Select <b>Enable subtitles</b> to enable
 subtitle decoding.  There are usually multiple subtitle tracks starting
 from 0.  The subtitle track to be decoded for all MPEG streams goes in
 the DVD subtitlee to display text box.  Go to the asset corresponding
 to the MPEG file in the Resources window and right click.  Click on
 Info.  The number of subtitle tracks is given at the bottom.
+</p>
 
-     <li>
+</li><li> 
 INTERPOLATE CR2 IMAGES
 
-     <p>Enables interpolation of CR2 images.  This is required since the raw
-image in a CR2 file is a bayer pattern.  The interpolation uses dcraw's
+<p>Enables interpolation of CR2 images.  This is required since the raw
+image in a CR2 file is a bayer pattern.  The interpolation uses dcraw&rsquo;s
 built-in interpolation and is very slow.  This operation can be
 disabled and the <b>Interpolate Pixels</b> effect used instead for fast
 previewing.
+</p>
 
-     <li>
+</li><li> 
 WHITE BALANCE CR2 IMAGES
 
-     <p>This enables white balancing for CR2 images if interpolation is also
-enabled.  It uses the camera's matrix which is contained in the CR2
+<p>This enables white balancing for CR2 images if interpolation is also
+enabled.  It uses the camera&rsquo;s matrix which is contained in the CR2
 file.  White balancing is not performed if interpolation is not
 performed because white balancing needs a blending of all 3 primary
-colors.
-
-     <p>Disabling white balancing is useful for operations involving dark frame
+colors. 
+</p>
+<p>Disabling white balancing is useful for operations involving dark frame
 subtraction.  The dark frame and the long exposure need to have the
 same color matrix.
-
-     <p>If you disable <b>Interpolate CR2 Images</b> and use the <b>Interpolate
+</p>
+<p>If you disable <b>Interpolate CR2 Images</b> and use the <b>Interpolate
 Pixels</b> effect, be aware the <b>Interpolate Pixels</b> effect always does
-both interpolation and white balancing using the camera's matrix,
+both interpolation and white balancing using the camera&rsquo;s matrix,
 regardless of the settings in Preferences.  Dark frame subtraction
 needs to be performed before <b>Interpolate Pixels</b>.
+</p>
+</li><li> 
+
 
-     <li>
 
-     <p>VIDEO DRIVER
+VIDEO DRIVER
 
-     <p>Normally video on the timeline goes to the compositor window during
+<p>Normally video on the timeline goes to the compositor window during
 continuous playback and when the insertion point is repositioned. 
 Instead of sending video to the Compositor window the video driver can
 be set to send video to another output device during continuous
-playback.  This doesn't affect where video goes when the insertion
+playback.  This doesn&rsquo;t affect where video goes when the insertion
 point is repositioned, however.
-
-     <p>The video drivers and their parameters are described in the video
+</p>
+<p>The video drivers and their parameters are described in the video
 driver section.  See <a href="#VIDEO-DRIVERS">VIDEO DRIVERS</a>.
+</p>
+
+</li></ul>
 
-   </ul>
 
-<div class="node">
-<a name="RECORDING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PERFORMANCE">PERFORMANCE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PLAYBACK">PLAYBACK</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
 
-</div>
 
+<hr>
+<a name="RECORDING"></a>
+<div class="header">
+<p>
+Next: <a href="#PERFORMANCE" accesskey="n" rel="next">PERFORMANCE</a>, Previous: <a href="#PLAYBACK" accesskey="p" rel="prev">PLAYBACK</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="RECORDING-1"></a>
 <h3 class="section">4.5 RECORDING</h3>
 
-<ul class="menu">
-<li><a accesskey="1" href="#FILE-FORMAT">FILE FORMAT</a>
-<li><a accesskey="2" href="#AUDIO-IN">AUDIO IN</a>
-<li><a accesskey="3" href="#VIDEO-IN">VIDEO IN</a>
-</ul>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#FILE-FORMAT" accesskey="1">FILE FORMAT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#AUDIO-IN" accesskey="2">AUDIO IN</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#VIDEO-IN" accesskey="3">VIDEO IN</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+
 
 <p>The parameters here affect what happens when you go to
 <b>File-&gt;Record...</b>.  The intention was to make <b>File-&gt;Record...</b> go
@@ -1386,15 +1554,15 @@ lengthy dialog to configure the file format.  Instead the file format
 for recording is set here and it is applied to all recordings.  Also
 set here is the hardware for recording, since the hardware determines
 the supported file format in most cases.
+</p>
 
-<div class="node">
+<hr>
 <a name="FILE-FORMAT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AUDIO-IN">AUDIO IN</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#RECORDING">RECORDING</a>
-
+<div class="header">
+<p>
+Next: <a href="#AUDIO-IN" accesskey="n" rel="next">AUDIO IN</a>, Up: <a href="#RECORDING" accesskey="u" rel="up">RECORDING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="FILE-FORMAT-1"></a>
 <h4 class="subsection">4.5.1 FILE FORMAT</h4>
 
 <p>This determines the output file format for recordings.  It depends
@@ -1406,1027 +1574,1113 @@ configuration dialog to set the codec corresponding to audio and
 video.  The audio and video is wrapped in a wrapper defined by the
 <b>File Format</b> menu.  Different wrappers may record audio only, video
 only, or both.
-
-   <p>Some video drivers can only record to a certain wrapper.  DV, for
-example, can only record to Quicktime with DV as the video compression. 
+</p>
+<p>Some video drivers can only record to a certain wrapper.  DV, for
+example, can only record to Quicktime with DV as the video compression.
 If the video driver is changed, the file format may be updated to give
 the supported output.  If you change the file format to an unsupported
 format, it may not work with the video driver.
+</p>
 
-<div class="node">
-<a name="AUDIO-IN"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#VIDEO-IN">VIDEO IN</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#FILE-FORMAT">FILE FORMAT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#RECORDING">RECORDING</a>
 
+<hr>
+<a name="AUDIO-IN"></a>
+<div class="header">
+<p>
+Next: <a href="#VIDEO-IN" accesskey="n" rel="next">VIDEO IN</a>, Previous: <a href="#FILE-FORMAT" accesskey="p" rel="prev">FILE FORMAT</a>, Up: <a href="#RECORDING" accesskey="u" rel="up">RECORDING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="AUDIO-IN-1"></a>
 <h4 class="subsection">4.5.2 AUDIO IN</h4>
 
 <p>These determine what happens when you record audio.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 RECORD DRIVER
 
-     <p>This is used for recording audio in the Record window.  It may be
+<p>This is used for recording audio in the Record window.  It may be
 shared with the Record Driver for video if the audio and video are
 wrapped in the same stream.  It takes variable parameters depending on
 the driver.  The parameters have the same meaning as they do for
 playback.
-
-          <ul>
-<li>
+</p>
+<ul>
+<li> 
 DEVICE PATH
 
-          <p>Usually a file in the <b>/dev/</b> directory which controls the
+<p>Usually a file in the <b>/dev/</b> directory which controls the
 device.
-
-          <li>
+</p>
+</li><li> 
 BITS
 
-          <p>The number of bits of precision Cinelerra should set the device for. 
+<p>The number of bits of precision Cinelerra should set the device for. 
 This sometimes has a figuritive meaning.  Some sound drivers need to be
-set to 32 bits to perform 24 bit recording and won't record anything
+set to 32 bits to perform 24 bit recording and won&rsquo;t record anything
 when set to 24 bits.  Some sound drivers need to be set to 24 bits for
 24 bit recording.
+</p>
+
 
-     </ul>
+</li></ul>
 
-     <li>
+</li><li> 
 SAMPLES TO WRITE AT A TIME
 
-     <p>Audio is first read in small fragments from the device.  Many small
+<p>Audio is first read in small fragments from the device.  Many small
 fragments are combined into a large fragment before writing to disk. 
 The disk writing process is done in a different thread.  The value here
 determines how large the combination of fragments is for each disk
 write.
-
-     <li>
+</p>
+</li><li> 
 SAMPLE RATE FOR RECORDING
 
-     <p>Regardless of what the project settings are.  This is the sample rate
+<p>Regardless of what the project settings are.  This is the sample rate
 used for recording.  This should be the highest the audio device
 supports.
+</p>
+</li></ul>
 
-   </ul>
-
-<div class="node">
+<hr>
 <a name="VIDEO-IN"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AUDIO-IN">AUDIO IN</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#RECORDING">RECORDING</a>
-
+<div class="header">
+<p>
+Previous: <a href="#AUDIO-IN" accesskey="p" rel="prev">AUDIO IN</a>, Up: <a href="#RECORDING" accesskey="u" rel="up">RECORDING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="VIDEO-IN-1"></a>
 <h4 class="subsection">4.5.3 VIDEO IN</h4>
 
 <p>These determine what happens when you record video.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 RECORD DRIVER
 
-     <p>This is used for recording video in the Record window.  It may be
+<p>This is used for recording video in the Record window.  It may be
 shared with the Record Driver for audio if the audio and video are
 wrapped in the same stream.  It takes variable parameters depending on
 the driver.  The parameters have the same meaning as they do for
 playback.
-
-     <li>
+</p>
+</li><li> 
 FRAMES TO RECORD TO DISK AT A TIME
 
-     <p>Frames are recorded in a pipeline.  First frames are buffered in the
-device.  Then they're read into a larger buffer for writing to disk. 
+<p>Frames are recorded in a pipeline.  First frames are buffered in the
+device.  Then they&rsquo;re read into a larger buffer for writing to disk. 
 The disk writing is done in a different thread as the device reading. 
 For certain codecs the disk writing uses multiple processors.  This
 value determines how many frames are written to disk at a time.
-
-     <li>
+</p>
+</li><li> 
 FRAMES TO BUFFER IN DEVICE
 
-     <p>The number of frames to store in the device before reading.  This
+<p>The number of frames to store in the device before reading.  This
 determines how much latency there can be in the system before frames
 are dropped.
+</p>
+</li><li> USE SOFTWARE FOR POSITIONING INFORMATION
 
-     <li>USE SOFTWARE FOR POSITIONING INFORMATION
-
-     <p>Video uses audio for
+<p>Video uses audio for
+</p>
 
-     <p>synchronization but most soundcards don't give accurate position
+<p>synchronization but most soundcards don&rsquo;t give accurate position
 information.  This calculates an estimation of audio position in
 software instead of the hardware for synchronization.
-
-     <li>
+</p>
+</li><li> 
 SYNC DRIVES AUTOMATICALLY
 
-     <p>For high bitrate recording the drives may be fast enough to store the
+<p>For high bitrate recording the drives may be fast enough to store the
 data but Linux may wait several minutes and stall as it writes several
 minutes of data at a time.  This forces Linux to flush its buffers
 every second instead of every few minutes and produce slightly better
 realtime behavior.
-
-     <li>
+</p>
+</li><li> 
 SIZE OF CAPTURED FRAME
 
-     <p>This is the size of the frames recorded.  It is independant of the
+<p>This is the size of the frames recorded.  It is independant of the
 project frame size because most video devices only record a fixed frame
-size.  If the frame size given here isn't supported by the device it
+size.  If the frame size given here isn&rsquo;t supported by the device it
 might crash Cinelerra.
+</p>
+</li><li> FRAME RATE FOR RECORDING
+
+<p>The frame rate recorded is different from the project settings.  This
+sets the recorded frame rate.
+</p>
+</li></ul>
+
+
+
+
 
-     <li>FRAME RATE FOR RECORDING
 
-     <p>The frame rate recorded is different from the project settings.  This
-sets the recorded frame rate.
 
-   </ul>
 
-<div class="node">
+<hr>
 <a name="PERFORMANCE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#INTERFACE">INTERFACE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#RECORDING">RECORDING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
-
+<div class="header">
+<p>
+Next: <a href="#INTERFACE" accesskey="n" rel="next">INTERFACE</a>, Previous: <a href="#RECORDING" accesskey="p" rel="prev">RECORDING</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="PERFORMANCE-1"></a>
 <h3 class="section">4.6 PERFORMANCE</h3>
 
-<p>You'll spend most of your time configuring this section.  The main
+
+<p>You&rsquo;ll spend most of your time configuring this section.  The main
 focus of performance is rendering parameters not available in the
-rendering dialog.
+rendering dialog.  
+</p>
+
+
+
+
+<ul>
+<li> CACHE ITEMS
+
 
-     <ul>
-<li>CACHE ITEMS
 
-     <p>To speed up rendering, several assets are kept open simultaneously. 
+<p>To speed up rendering, several assets are kept open simultaneously.
 This determines how many are kept open.  A number too large may exhaust
 your memory pretty fast and result in a crash.  A number too small may
 result in slow playback as assets need to be reopened more frequently.
+</p>
 
-     <li>
+</li><li> 
 SECONDS TO PREROLL RENDERS
 
-     <p>Some effects need a certain amount of time to settle in.  This sets a
+<p>Some effects need a certain amount of time to settle in.  This sets a
 number of seconds to render without writing to disk before the selected
-region is rendered.  When using the renderfarm you'll sometimes need to
+region is rendered.  When using the renderfarm you&rsquo;ll sometimes need to
 preroll to get seemless transitions between the jobs.  Every job in a
 renderfarm is prerolled by this value.  This does not affect background
 rendering, however.  Background rendering uses a different preroll
 value.
-
-     <li>
+</p>
+</li><li> 
 FORCE SINGLE PROCESSOR USE
 
-     <p>Cinelerra tries to use all processors on the system by default but
-sometimes you'll only want to use one processor, like in a renderfarm
+<p>Cinelerra tries to use all processors on the system by default but
+sometimes you&rsquo;ll only want to use one processor, like in a renderfarm
 client.  This forces only one processer to be used.  The operating
 system, however, usually uses the second processor anyway for disk
 access so this option is really a 1.25 processor mode.  The value of
 this parameter is used in renderfarm clients.
+</p>
+</li></ul>
 
-   </ul>
 
-<ul class="menu">
-<li><a accesskey="1" href="#BACKGROUND-RENDERING">BACKGROUND RENDERING</a>
-<li><a accesskey="2" href="#RENDERFARM">RENDERFARM</a>
-</ul>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#BACKGROUND-RENDERING" accesskey="1">BACKGROUND RENDERING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RENDERFARM" accesskey="2">RENDERFARM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-<div class="node">
-<a name="BACKGROUND-RENDERING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RENDERFARM">RENDERFARM</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PERFORMANCE">PERFORMANCE</a>
 
+<hr>
+<a name="BACKGROUND-RENDERING"></a>
+<div class="header">
+<p>
+Next: <a href="#RENDERFARM" accesskey="n" rel="next">RENDERFARM</a>, Up: <a href="#PERFORMANCE" accesskey="u" rel="up">PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="BACKGROUND-RENDERING-1"></a>
 <h4 class="subsection">4.6.1 BACKGROUND RENDERING</h4>
 
 <p>Background rendering was originally concieved to allow HDTV effects to
 be displayed in realtime.  Background rendering causes temporary output
 to constantly be rendered while the timeline is being modified.  The
-temporary output is played during playack whenever possible.  It's very
+temporary output is played during playack whenever possible.  It&rsquo;s very
 useful for transitions and previewing effects which are too slow to
 display in a reasonable amount of time.  If renderfarm is enabled, the
 renderfarm is used for background rendering, giving you the potential
 for realtime effects if enough network bandwidth and CPU nodes exist.
+</p>
+<ul>
+<li> FRAMES PER BACKGROUND RENDERING JOB
 
-     <ul>
-<li>FRAMES PER BACKGROUND RENDERING JOB
-
-     <p>This only works if renderfarm is being used, otherwise background
+<p>This only works if renderfarm is being used, otherwise background
 rendering creates a single job for the entire timeline.  The number of
 frames specified here is scaled to the relative CPU speed of rendering
 nodes and used in a single renderfarm job.  The optimum number is 10 -
 30 since network bandwidth is used to initialize each job.
+</p>
 
-     <li>FRAMES TO PREROLL BACKGROUND
 
-     <p>This is the number of frames to render ahead of each background
+</li><li> FRAMES TO PREROLL BACKGROUND
+
+<p>This is the number of frames to render ahead of each background
 rendering job.  Background rendering is degraded when preroll is used
 since the jobs are small.  When using background rendering, this number
 is ideally 0.  Some effects may require 3 frames of preroll.
+</p>
+
 
-     <li>OUTPUT FOR BACKGROUND RENDERING
 
-     <p>Background rendering generates a sequence of image files in a certain
+
+</li><li> OUTPUT FOR BACKGROUND RENDERING
+
+<p>Background rendering generates a sequence of image files in a certain
 directory.  This parameter determines the filename prefix of the image
 files.  It should be on a fast disk, accessible to every node in the
 renderfarm by the same path.  Since hundreds of thousands of image
-files are usually created, <b>ls</b> commands won't work in the
-background rendering directory.  The <img src="magnify.png" alt="magnify.png"> browse button for
-this option normally won't work either, but the <img src="wrench.png" alt="wrench.png">
+files are usually created, <b>ls</b> commands won&rsquo;t work in the
+background rendering directory.  The <img src="magnify.png" alt="magnify"> browse button for
+this option normally won&rsquo;t work either, but the <img src="wrench.png" alt="wrench">
 configuration button for this option works.
+</p>
+</li><li> FILE FORMAT
 
-     <li>FILE FORMAT
-
-     <p>The file format for background rendering has to be a sequence of
+<p>The file format for background rendering has to be a sequence of
 images. The format of the image sequence determines the quality and
 speed of playback.  JPEG is good most of the time.
+</p>
 
-   </ul>
+</li></ul>
 
-<div class="node">
+<hr>
 <a name="RENDERFARM"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#BACKGROUND-RENDERING">BACKGROUND RENDERING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PERFORMANCE">PERFORMANCE</a>
-
+<div class="header">
+<p>
+Previous: <a href="#BACKGROUND-RENDERING" accesskey="p" rel="prev">BACKGROUND RENDERING</a>, Up: <a href="#PERFORMANCE" accesskey="u" rel="up">PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="RENDERFARM-1"></a>
 <h4 class="subsection">4.6.2 RENDERFARM</h4>
 
 <p>To use the renderfarm set these options.  Ignore them for a standalone
 system
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 USE RENDER FARM FOR RENDERING
 
-     <p>When selected, all the
+<p>When selected, all the
 <b>file-&gt;render</b> operations use the renderfarm.
-
-     <li>
+</p>
+</li><li> 
 NODES
 
-     <p>Displays all the nodes on the renderfarm and which ones are active.
-
-     <p>Nodes are added by entering the host name of the node, verifying the
+<p>Displays all the nodes on the renderfarm and which ones are active. 
+</p>
+<p>Nodes are added by entering the host name of the node, verifying the
 value of <b>port</b> and hitting <b>add node</b>.
-
-     <p>Computer freaks may be better off editing the
+</p>
+<p>Computer freaks may be better off editing the
 <b>~/.bcast/.Cinelerra_rc</b> file than this if they have hundreds of
 nodes.  Remember that .Cinelerra_rc is overwritten whenever a copy of
 Cinelerra exits.
-
-     <p>Select the <b>ON</b> column to activate and deactivate nodes once they
+</p>
+<p>Select the <b>ON</b> column to activate and deactivate nodes once they
 are created.
-
-     <p>Nodes may be edited by highlighting a row and hitting <b>apply changes</b>.
-
-     <li>
+</p>
+<p>Nodes may be edited by highlighting a row and hitting <b>apply changes</b>.
+</p>
+</li><li> 
 HOSTNAME
 
-     <p>Edit the hostname of an existing node or enter the hostname of a new
+<p>Edit the hostname of an existing node or enter the hostname of a new
 node here.
-
-     <li>
+</p>
+</li><li> 
 PORT
 
-     <p>Edit the port of an existing node or enter the port of a new node here.
-
-     <li>
+<p>Edit the port of an existing node or enter the port of a new node here.
+</p>
+</li><li> 
 REPLACE NODE
 
-     <p>When editing an existing node, hit this to commit the changes to
-<b>HOSTNAME</b> and <b>PORT</b>.  The changes won't be committed if you
-don't hit this button.
-
-     <li>
+<p>When editing an existing node, hit this to commit the changes to
+<b>HOSTNAME</b> and <b>PORT</b>.  The changes won&rsquo;t be committed if you
+don&rsquo;t hit this button.
+</p>
+</li><li> 
 ADD NODE
 
-     <p>Create a new node with the <b>HOSTNAME</b> and <b>PORT</b> settings.
-
-     <li>
+<p>Create a new node with the <b>HOSTNAME</b> and <b>PORT</b> settings.
+</p>
+</li><li> 
 DELETE NODE
 
-     <p>Deletes whatever node is highlighted in the <b>NODES</b> list.
-
-     <li>
+<p>Deletes whatever node is highlighted in the <b>NODES</b> list.
+</p>
+</li><li> 
 SORT NODES
 
-     <p>Sorts the <b>NODES</b> list based on the hostname.
-
-     <li>
+<p>Sorts the <b>NODES</b> list based on the hostname.
+</p>
+</li><li> 
 RESET RATES
 
-     <p>This sets the framerate for all the nodes to 0.  Frame rates are used
+<p>This sets the framerate for all the nodes to 0.  Frame rates are used
 to scale job sizes based on CPU speed of the node.  Frame rates are
 only calculated when renderfarm is enabled.
+</p>
 
-     <li>
+
+
+
+
+</li><li> 
 TOTAL JOBS TO CREATE
 
-     <p>Determines the number of jobs to dispatch to the renderfarm.  The more
+<p>Determines the number of jobs to dispatch to the renderfarm.  The more
 jobs you create, the more finely balanced the renderfarm becomes.
-
-     <p>Determine the total jobs to create by multiplying the number of nodes
+</p>
+<p>Determine the total jobs to create by multiplying the number of nodes
 including the master node by some number.  Multiply them by 1 to have
 one job dispatched for every node.  Multiply them by 3 to have 3 jobs
 dispatched for every node.  If you have 10 slave nodes and one master
 node, specify 33 to have a well balanced renderfarm.
+</p>
+</li></ul>
 
-   </ul>
 
-<div class="node">
-<a name="INTERFACE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ABOUT">ABOUT</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PERFORMANCE">PERFORMANCE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
 
-</div>
 
+
+<hr>
+<a name="INTERFACE"></a>
+<div class="header">
+<p>
+Next: <a href="#ABOUT" accesskey="n" rel="next">ABOUT</a>, Previous: <a href="#PERFORMANCE" accesskey="p" rel="prev">PERFORMANCE</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="INTERFACE-1"></a>
 <h3 class="section">4.7 INTERFACE</h3>
 
 <p>These parameters affect purely how the user interface works.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 INDEX FILES GO HERE
 
-     <p>Back in the days when 4 MB/sec was unearthly speed for a hard drive,
+<p>Back in the days when 4 MB/sec was unearthly speed for a hard drive,
 index files were introduced to speed up drawing the audio tracks.  This
 option determines where index files are placed on the hard drive.
+</p>
 
-     <li>
+</li><li> 
 SIZE OF INDEX FILE
 
-     <p>Determines the size of an index file. Larger index sizes allow smaller
-files to be drawn faster while slowing down the drawing of large files. 
+<p>Determines the size of an index file. Larger index sizes allow smaller
+files to be drawn faster while slowing down the drawing of large files.
 Smaller index sizes allow large files to be drawn faster while slowing
 down small files.
-
-     <li>
+</p>
+</li><li> 
 NUMBER OF INDEX FILES TO KEEP
 
-     <p>To keep the index directory from becoming unruly, old index files are
+<p>To keep the index directory from becoming unruly, old index files are
 deleted. This determines the maximum number of index files to keep in
 the directory.
-
-     <li>
+</p>
+</li><li> 
 DELETE ALL INDEXES
 
-     <p>When you change the index size or you want to clean out excessive index
+<p>When you change the index size or you want to clean out excessive index
 files, this deletes all the index files.
+</p>
+</li><li> USE HOURS:MINUTES:SECONDS.XXX
 
-     <li>USE HOURS:MINUTES:SECONDS.XXX
-
-     <p>Various representations of time are given.  Select the most convenient
+<p>Various representations of time are given.  Select the most convenient
 one.  The time representation can also be changed by <b>CTRL</b>
 clicking on the time ruler.
+</p>
+</li><li> USE THUMBNAILS
 
-     <li>USE THUMBNAILS
-
-     <p>The Resource Window displays thumbnails of assets by default.  This can
+<p>The Resource Window displays thumbnails of assets by default.  This can
 take a long time to set up.  This option disables the thumbnails.
+</p>
+</li><li> CLICKING IN/OUT POINTS DOES WHAT
 
-     <li>CLICKING IN/OUT POINTS DOES WHAT
-
-     <p>Cinelerra not only allows you to perform editing by dragging in/out
+<p>Cinelerra not only allows you to perform editing by dragging in/out
 points but also defines three seperate operations which occur when you
 drag an in/out point. For each mouse button you select the behavior in
 this window. The usage of each editing mode is described in editing.
+</p>
+</li><li> MIN DB FOR METER
 
-     <li>MIN DB FOR METER
-
-     <p>Some sound sources have a lower noise threshold than others. 
+<p>Some sound sources have a lower noise threshold than others. 
 Everything below the noise threshold is meaningless.  This option sets
 the meters to clip below a certain level.  Consumer soundcards usually
-bottom out at -65.  Professional soundcards bottom out at -90. 
+bottom out at -65.  Professional soundcards bottom out at -90.
 See <a href="#SOUND-LEVEL-METERS">SOUND LEVEL METERS</a>.
+</p>
+</li><li> MAX DB FOR METER
 
-     <li>MAX DB FOR METER
-
-     <p>This sets the maximum sound level represented by the sound meters.  No
+<p>This sets the maximum sound level represented by the sound meters.  No
 matter what this value is, no soundcard can play sound over 0 db.  This
 value is presented merely to show how far over the limit a sound wave
-is. 
+is.
 See <a href="#SOUND-LEVEL-METERS">SOUND LEVEL METERS</a>.
+</p>
+</li><li> THEME
 
-     <li>THEME
-
-     <p>Cinelerra supports variable themes.  Select one here and restart
+<p>Cinelerra supports variable themes.  Select one here and restart
 Cinelerra to see it.
+</p>
+</li></ul>
 
-   </ul>
 
-<div class="node">
-<a name="ABOUT"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INTERFACE">INTERFACE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a>
 
+<hr>
+<a name="ABOUT"></a>
+<div class="header">
+<p>
+Previous: <a href="#INTERFACE" accesskey="p" rel="prev">INTERFACE</a>, Up: <a href="#CONFIGURATION" accesskey="u" rel="up">CONFIGURATION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="ABOUT-1"></a>
 <h3 class="section">4.8 ABOUT</h3>
 
 <p>This section gives you information about the copyright, the time of the
 current build, the lack of a warranty, and the versions of some of the
 libraries.  Be sure to agree to the terms of the lack of the warranty.
+</p>
+
 
-<div class="node">
-<a name="CREATING-A-NEW-PROJECT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CONFIGURATION">CONFIGURATION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+
+<hr>
+<a name="CREATING-A-NEW-PROJECT"></a>
+<div class="header">
+<p>
+Next: <a href="#THE-MAIN-WINDOWS" accesskey="n" rel="next">THE MAIN WINDOWS</a>, Previous: <a href="#CONFIGURATION" accesskey="p" rel="prev">CONFIGURATION</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CREATING-A-NEW-PROJECT-1"></a>
 <h2 class="chapter">5 CREATING A NEW PROJECT</h2>
 
 <p>There are 2 ways to create a new project: going to <b>File-&gt;New</b> or
 loading new files See <a href="#LOADING-FILES">LOADING FILES</a>.  Once a new project is
 created, all the parameters can be changed later without creating a new
-project.
+project.  
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#USING-THE-NEW-PROJECT-DIALOG">USING THE NEW PROJECT DIALOG</a>
-<li><a accesskey="2" href="#CHANGING-PARAMETERS-AFTER-LOADING">CHANGING PARAMETERS AFTER LOADING</a>
-</ul>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#USING-THE-NEW-PROJECT-DIALOG" accesskey="1">USING THE NEW PROJECT DIALOG</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CHANGING-PARAMETERS-AFTER-LOADING" accesskey="2">CHANGING PARAMETERS AFTER LOADING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-<div class="node">
-<a name="USING-THE-NEW-PROJECT-DIALOG"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CHANGING-PARAMETERS-AFTER-LOADING">CHANGING PARAMETERS AFTER LOADING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CREATING-A-NEW-PROJECT">CREATING A NEW PROJECT</a>
 
-</div>
 
+<hr>
+<a name="USING-THE-NEW-PROJECT-DIALOG"></a>
+<div class="header">
+<p>
+Next: <a href="#CHANGING-PARAMETERS-AFTER-LOADING" accesskey="n" rel="next">CHANGING PARAMETERS AFTER LOADING</a>, Up: <a href="#CREATING-A-NEW-PROJECT" accesskey="u" rel="up">CREATING A NEW PROJECT</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="USING-THE-NEW-PROJECT-DIALOG-1"></a>
 <h3 class="section">5.1 USING THE NEW PROJECT DIALOG</h3>
 
 <p>One way is to go to <b>File-&gt;New</b>.  This dialog contains the parameters
 for the new project.  The sections of the <b>New</b> dialog are described
 here:
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 <b>Presets</b> - Select an option from this menu to have all the project
 settings set to one of the known standards.
 
-     <li><b>Audio -&gt; Tracks</b> - Sets the number of audio tracks the new project
+</li><li> <b>Audio -&gt; Tracks</b> - Sets the number of audio tracks the new project
 should have.  Tracks can be added or deleted later, but options are
 provided here for convenience.
 
-     <li><b>Audio -&gt; Channels</b> - Sets the number of audio channels the new
-project should have.  The number of audio channels doesn't have to be
+</li><li> <b>Audio -&gt; Channels</b> - Sets the number of audio channels the new
+project should have.  The number of audio channels doesn&rsquo;t have to be
 the same as the number of tracks.
 
-     <li><b>Audio -&gt; Samplerate</b> - Sets the samplerate of the audio.  The
-project samplerate doesn't have to be the same as the media sample rate
+</li><li> <b>Audio -&gt; Samplerate</b> - Sets the samplerate of the audio.  The
+project samplerate doesn&rsquo;t have to be the same as the media sample rate
 that you load.  Media is resampled to match the project sample rate.
 
-     <li><b>Video -&gt; Tracks</b> - Sets the number of video tracks the new project
+</li><li> <b>Video -&gt; Tracks</b> - Sets the number of video tracks the new project
 should have.  Tracks can be added or deleted later, but options are
 provided here for convenience.
 
-     <li><b>Video -&gt; Framerate</b> - Sets the framerate of the video.  The project
-framerate doesn't have to be the same as the media frame rate that you
+</li><li> <b>Video -&gt; Framerate</b> - Sets the framerate of the video.  The project
+framerate doesn&rsquo;t have to be the same as the media frame rate that you
 load.  Media is reframed to match the project framerate.
 
-     <li><b>Video -&gt; Canvas size</b> - Sets the size of the video output.  Each
+</li><li> <b>Video -&gt; Canvas size</b> - Sets the size of the video output.  Each
 track also has its own frame size.  Initially the <b>New</b> dialog
 creates video tracks whose sizes all match the video output, but the
 video track sizes can be changed later without changing the video
 output.
 
-     <li><b>Video -&gt; Aspect ratio</b> - Sets the aspect ratio.  The aspect ratio is
+</li><li> <b>Video -&gt; Aspect ratio</b> - Sets the aspect ratio.  The aspect ratio is
 applied to the video output.  The aspect ratio can be different than
 the number of horizontal pixels / the number of vertical pixels. 
 Setting a different aspect ratio than the number of pixels results in
 nonsquare pixels.
 
-     <li><b>Video -&gt; Auto aspect ratio</b> - If this is checked, the <b>New</b> dialog
+</li><li> <b>Video -&gt; Auto aspect ratio</b> - If this is checked, the <b>New</b> dialog
 always recalculates the <b>Aspect ratio</b> setting when the <b>Canvas
 size</b> is changed.  This ensures pixels are always square.
 
-     <li><b>Video -&gt; Color model</b> - This sets the color model video intermediates
-in the project will be stored in.  Color models are described in a
+</li><li> <b>Video -&gt; Color model</b> - This sets the color model video intermediates
+in the project will be stored in.  Color models are described in a 
 separate section See <a href="#COLOR-MODEL">COLOR MODEL</a>.
 
-   </ul>
+</li></ul>
+
+
+
+
+
+
 
-<div class="node">
-<a name="CHANGING-PARAMETERS-AFTER-LOADING"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#USING-THE-NEW-PROJECT-DIALOG">USING THE NEW PROJECT DIALOG</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CREATING-A-NEW-PROJECT">CREATING A NEW PROJECT</a>
 
-</div>
 
+
+
+
+
+<hr>
+<a name="CHANGING-PARAMETERS-AFTER-LOADING"></a>
+<div class="header">
+<p>
+Previous: <a href="#USING-THE-NEW-PROJECT-DIALOG" accesskey="p" rel="prev">USING THE NEW PROJECT DIALOG</a>, Up: <a href="#CREATING-A-NEW-PROJECT" accesskey="u" rel="up">CREATING A NEW PROJECT</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CHANGING-PARAMETERS-AFTER-LOADING-1"></a>
 <h3 class="section">5.2 CHANGING PARAMETERS AFTER LOADING</h3>
 
 <p>After a project is created, you have to use the set format dialog to
 change parameters without deleting the project.  Go to <b>Settings-&gt;Set
-format</b>.
-
-   <p>Most of the options are identical to the <b>File-&gt;New</b>
+format</b>.  
+</p>
+<p>Most of the options are identical to the <b>File-&gt;New</b>
 options except the lack of a number of tracks to create and the
 addition of audio channel locations.
+</p>
+<p>This section is discussed in See <a href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>.
+</p>
+
 
-   <p>This section is discussed in See <a href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>.
 
-<div class="node">
-<a name="THE-MAIN-WINDOWS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CREATING-A-NEW-PROJECT">CREATING A NEW PROJECT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+<hr>
+<a name="THE-MAIN-WINDOWS"></a>
+<div class="header">
+<p>
+Next: <a href="#LOADING-AND-SAVING-FILES" accesskey="n" rel="next">LOADING AND SAVING FILES</a>, Previous: <a href="#CREATING-A-NEW-PROJECT" accesskey="p" rel="prev">CREATING A NEW PROJECT</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THE-MAIN-WINDOWS-1"></a>
 <h2 class="chapter">6 THE MAIN WINDOWS</h2>
 
-<p>When Cinelerra first starts, you'll get four main windows.  Hitting
+<p>When Cinelerra first starts, you&rsquo;ll get four main windows.  Hitting
 <b>CTRL-w</b> in any window closes it.
-
-<ul class="menu">
-<li><a accesskey="1" href="#VIEWER">VIEWER</a>
-<li><a accesskey="2" href="#COMPOSITOR">COMPOSITOR</a>
-<li><a accesskey="3" href="#PROGRAM">PROGRAM</a>
-<li><a accesskey="4" href="#RESOURCES">RESOURCES</a>
-<li><a accesskey="5" href="#SOUND-LEVEL-METERS">SOUND LEVEL METERS</a>
-<li><a accesskey="6" href="#OTHER-WINDOWS">OTHER WINDOWS</a>
-</ul>
-
-<div class="node">
+</p>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#VIEWER" accesskey="1">VIEWER</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COMPOSITOR" accesskey="2">COMPOSITOR</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PROGRAM" accesskey="3">PROGRAM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RESOURCES" accesskey="4">RESOURCES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SOUND-LEVEL-METERS" accesskey="5">SOUND LEVEL METERS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#OTHER-WINDOWS" accesskey="6">OTHER WINDOWS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
 <a name="VIEWER"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COMPOSITOR">COMPOSITOR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>
-
+<div class="header">
+<p>
+Next: <a href="#COMPOSITOR" accesskey="n" rel="next">COMPOSITOR</a>, Up: <a href="#THE-MAIN-WINDOWS" accesskey="u" rel="up">THE MAIN WINDOWS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="VIEWER-1"></a>
 <h3 class="section">6.1 VIEWER</h3>
 
-<p>In here you'll scrub around source media and clips, selecting regions
+
+<p>In here you&rsquo;ll scrub around source media and clips, selecting regions
 to paste into the project.  Operations done in the viewer affect a
 temporary EDL or a clip but not the timeline.
-
-<div class="node">
+</p>
+<hr>
 <a name="COMPOSITOR"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PROGRAM">PROGRAM</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#VIEWER">VIEWER</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>
-
+<div class="header">
+<p>
+Next: <a href="#PROGRAM" accesskey="n" rel="next">PROGRAM</a>, Previous: <a href="#VIEWER" accesskey="p" rel="prev">VIEWER</a>, Up: <a href="#THE-MAIN-WINDOWS" accesskey="u" rel="up">THE MAIN WINDOWS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="COMPOSITOR-1"></a>
 <h3 class="section">6.2 COMPOSITOR</h3>
 
-<p>This window displays the output of the timeline.  It's the interface
+
+<p>This window displays the output of the timeline.  It&rsquo;s the interface
 for most compositing operations or operations that affect the
 appearance of the timeline output.  Operations done in the Compositor
-affect the timeline but don't affect clips.
-
-   <p>The video output has several navigation functions.  The video output
+affect the timeline but don&rsquo;t affect clips.
+</p>
+<p>The video output has several navigation functions.  The video output
 size is either locked to the window size or unlocked with scrollbars
 for navigation.  The video output can be zoomed in and out and panned. 
-Navigating the video output this way doesn't affect the rendered
+Navigating the video output this way doesn&rsquo;t affect the rendered
 output, it just changes the point of view in the compositor window.
-
-   <p>If it is unlocked from the window size, middle clicking and dragging
+</p>
+<p>If it is unlocked from the window size, middle clicking and dragging
 anywhere in the video pans the point of view.
-
-   <p>Hitting the + and - keys zooms in and out of the video output.
-
-   <p>Underneath the video output are copies of many of the functions
+</p>
+<p>Hitting the + and - keys zooms in and out of the video output.
+</p>
+<p>Underneath the video output are copies of many of the functions
 available in the main window.  In addition there is a
-<img src="cwindow_zoom.png" alt="cwindow_zoom.png"> zoom menu and a <img src="cwindow_light.png" alt="cwindow_light.png"> tally light.
-
-   <p>The zoom menu jumps to all the possible zoom settings and, through the
+<img src="cwindow_zoom.png" alt="cwindow_zoom"> zoom menu and a <img src="cwindow_light.png" alt="cwindow_light"> tally light.
+</p>
+<p>The zoom menu jumps to all the possible zoom settings and, through the
 <b>Auto</b> option, locks the video to the window size.  The zoom menu
 does not affect the window size.
-
-   <p>The tally light turns red when rendering is happening.  This is useful
+</p>
+<p>The tally light turns red when rendering is happening.  This is useful
 for knowing if the output is current.
-
-   <p>Right clicking anywhere in the video output brings up a menu with all
+</p>
+<p>Right clicking anywhere in the video output brings up a menu with all
 the zoom levels and some other options.  In this particular case the
-zoom levels resize the entire window and not just the video.
-
-   <p>The <b>reset camera</b> and <b>reset projector</b> options center the camera
+zoom levels resize the entire window and not just the video.  
+</p>
+<p>The <b>reset camera</b> and <b>reset projector</b> options center the camera
 and projector See <a href="#COMPOSITING">COMPOSITING</a>.
-
-   <p>The <b>Hide controls</b> option hides everything except the video.
-
-   <p>On the left of the video output is a toolbar specific to the compositor
+</p>
+<p>The <b>Hide controls</b> option hides everything except the video.
+</p>
+<p>On the left of the video output is a toolbar specific to the compositor
 window.  Here are the functions in the toolbar:
-
-<ul class="menu">
-<li><a accesskey="1" href="#PROTECT-VIDEO">PROTECT VIDEO</a>
-<li><a accesskey="2" href="#MAGNIFYING-GLASS">MAGNIFYING GLASS</a>
-<li><a accesskey="3" href="#MASKS-TOOL">MASKS TOOL</a>
-<li><a accesskey="4" href="#CAMERA">CAMERA</a>
-<li><a accesskey="5" href="#PROJECTOR">PROJECTOR</a>
-<li><a accesskey="6" href="#CROP-TOOL">CROP TOOL</a>
-<li><a accesskey="7" href="#EYEDROPPER">EYEDROPPER</a>
-<li><a accesskey="8" href="#TOOL-INFO">TOOL INFO</a>
-<li><a accesskey="9" href="#SAFE-REGIONS-TOOL">SAFE REGIONS TOOL</a>
-</ul>
-
-<div class="node">
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#PROTECT-VIDEO" accesskey="1">PROTECT VIDEO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MAGNIFYING-GLASS" accesskey="2">MAGNIFYING GLASS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MASKS-TOOL" accesskey="3">MASKS TOOL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CAMERA" accesskey="4">CAMERA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PROJECTOR" accesskey="5">PROJECTOR</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CROP-TOOL" accesskey="6">CROP TOOL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#EYEDROPPER" accesskey="7">EYEDROPPER</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TOOL-INFO" accesskey="8">TOOL INFO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SAFE-REGIONS-TOOL" accesskey="9">SAFE REGIONS TOOL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
 <a name="PROTECT-VIDEO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MAGNIFYING-GLASS">MAGNIFYING GLASS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#MAGNIFYING-GLASS" accesskey="n" rel="next">MAGNIFYING GLASS</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="PROTECT-VIDEO-1"></a>
 <h4 class="subsection">6.2.1 PROTECT VIDEO</h4>
 
-<div class="block-image"><img src="protect.png" alt="protect.png"></div>
+<img src="protect.png" alt="protect">
 
-   <p>This disables changes to the compositor output from clicks in it.  It
+<p>This disables changes to the compositor output from clicks in it.  It
 is an extra layer on top of the track arming toggle to prevent
 unwanted changes.
-
-<div class="node">
+</p>
+<hr>
 <a name="MAGNIFYING-GLASS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MASKS-TOOL">MASKS TOOL</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PROTECT-VIDEO">PROTECT VIDEO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#MASKS-TOOL" accesskey="n" rel="next">MASKS TOOL</a>, Previous: <a href="#PROTECT-VIDEO" accesskey="p" rel="prev">PROTECT VIDEO</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="MAGNIFYING-GLASS-1"></a>
 <h4 class="subsection">6.2.2 MAGNIFYING GLASS</h4>
 
-<div class="block-image"><img src="magnify.png" alt="magnify.png"></div>
+<img src="magnify.png" alt="magnify">
 
-   <p>This zooms in and out of the compositor output without resizing the
+<p>This zooms in and out of the compositor output without resizing the
 window.  If the video output is currently locked to the size of the
 window, clicking in it with the magnifying glass unlocks it and
 creates scrollbars for navigation.
-
-   <p>Left clicking in the video zooms in.
-
-   <p>Ctrl clicking in the video zooms out.
-
-   <p>Rotating the wheel on a wheel mouse zooms in and out.
-
-<div class="node">
+</p>
+<p>Left clicking in the video zooms in.
+</p>
+<p>Ctrl clicking in the video zooms out.
+</p>
+<p>Rotating the wheel on a wheel mouse zooms in and out.
+</p>
+
+<hr>
 <a name="MASKS-TOOL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CAMERA">CAMERA</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MAGNIFYING-GLASS">MAGNIFYING GLASS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#CAMERA" accesskey="n" rel="next">CAMERA</a>, Previous: <a href="#MAGNIFYING-GLASS" accesskey="p" rel="prev">MAGNIFYING GLASS</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="MASKS-TOOL-1"></a>
 <h4 class="subsection">6.2.3 MASKS TOOL</h4>
 
-<div class="block-image"><img src="mask.png" alt="mask.png"></div>
+<img src="mask.png" alt="mask">
 
-   <p>This brings up the mask editing tool See <a href="#MASKS">MASKS</a>.  Enable the
-<img src="toolwindow.png" alt="toolwindow.png"> tool window to see options for this tool.
-
-<div class="node">
+<p>This brings up the mask editing tool See <a href="#MASKS">MASKS</a>.  Enable the
+<img src="toolwindow.png" alt="toolwindow"> tool window to see options for this tool.
+</p>
+<hr>
 <a name="CAMERA"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PROJECTOR">PROJECTOR</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MASKS-TOOL">MASKS TOOL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#PROJECTOR" accesskey="n" rel="next">PROJECTOR</a>, Previous: <a href="#MASKS-TOOL" accesskey="p" rel="prev">MASKS TOOL</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="CAMERA-1"></a>
 <h4 class="subsection">6.2.4 CAMERA</h4>
 
-<div class="block-image"><img src="camera.png" alt="camera.png"></div>
 
-   <p>This brings up the camera editing tool See <a href="#THE-CAMERA-AND-PROJECTOR">THE CAMERA AND PROJECTOR</a>.  Enable the <img src="toolwindow.png" alt="toolwindow.png"> tool window to see options
-for this tool.
+<img src="camera.png" alt="camera">
 
-<div class="node">
+<p>This brings up the camera editing tool See <a href="#THE-CAMERA-AND-PROJECTOR">THE CAMERA AND PROJECTOR</a>.  Enable the <img src="toolwindow.png" alt="toolwindow"> tool window to see options
+for this tool.
+</p>
+<hr>
 <a name="PROJECTOR"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CROP-TOOL">CROP TOOL</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CAMERA">CAMERA</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#CROP-TOOL" accesskey="n" rel="next">CROP TOOL</a>, Previous: <a href="#CAMERA" accesskey="p" rel="prev">CAMERA</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="PROJECTOR-1"></a>
 <h4 class="subsection">6.2.5 PROJECTOR</h4>
 
-<div class="block-image"><img src="projector.png" alt="projector.png"></div>
+<img src="projector.png" alt="projector">
 
-   <p>This brings up the projector editing tool See <a href="#THE-CAMERA-AND-PROJECTOR">THE CAMERA AND PROJECTOR</a>.  Enable the <img src="toolwindow.png" alt="toolwindow.png"> tool window to see options
+<p>This brings up the projector editing tool See <a href="#THE-CAMERA-AND-PROJECTOR">THE CAMERA AND PROJECTOR</a>.  Enable the <img src="toolwindow.png" alt="toolwindow"> tool window to see options
 for this tool.
-
-<div class="node">
+</p>
+<hr>
 <a name="CROP-TOOL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#EYEDROPPER">EYEDROPPER</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PROJECTOR">PROJECTOR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#EYEDROPPER" accesskey="n" rel="next">EYEDROPPER</a>, Previous: <a href="#PROJECTOR" accesskey="p" rel="prev">PROJECTOR</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="CROP-TOOL-1"></a>
 <h4 class="subsection">6.2.6 CROP TOOL</h4>
 
-<div class="block-image"><img src="crop.png" alt="crop.png"></div>
+<img src="crop.png" alt="crop">
 
-   <p>This brings up the cropping tool See <a href="#CROPPING">CROPPING</a>.  The
-<img src="toolwindow.png" alt="toolwindow.png"> tool window must be enabled to use this tool.
-
-<div class="node">
+<p>This brings up the cropping tool See <a href="#CROPPING">CROPPING</a>.  The
+<img src="toolwindow.png" alt="toolwindow"> tool window must be enabled to use this tool.
+</p>
+<hr>
 <a name="EYEDROPPER"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TOOL-INFO">TOOL INFO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CROP-TOOL">CROP TOOL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#TOOL-INFO" accesskey="n" rel="next">TOOL INFO</a>, Previous: <a href="#CROP-TOOL" accesskey="p" rel="prev">CROP TOOL</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="EYEDROPPER-1"></a>
 <h4 class="subsection">6.2.7 EYEDROPPER</h4>
 
-<div class="block-image"><img src="eyedrop.png" alt="eyedrop.png"></div>
+<img src="eyedrop.png" alt="eyedrop">
 
-   <p>This brings up the eyedropper.  The eyedropper detects whatever color
+<p>This brings up the eyedropper.  The eyedropper detects whatever color
 is under it and stores it in a temporary area.  Enabling the
-<img src="toolwindow.png" alt="toolwindow.png"> tool info shows the currently selected color.  Click
+<img src="toolwindow.png" alt="toolwindow"> tool info shows the currently selected color.  Click
 anywhere in the video output to select the color at that point.
-
-   <p>The eyedropper not only lets you see areas which are clipped, but its
+</p>
+<p>The eyedropper not only lets you see areas which are clipped, but its
 value can be applied to many effects.  Different effects handle the
 eyedropper differently.
+</p>
 
-<div class="node">
+<hr>
 <a name="TOOL-INFO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SAFE-REGIONS-TOOL">SAFE REGIONS TOOL</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#EYEDROPPER">EYEDROPPER</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Next: <a href="#SAFE-REGIONS-TOOL" accesskey="n" rel="next">SAFE REGIONS TOOL</a>, Previous: <a href="#EYEDROPPER" accesskey="p" rel="prev">EYEDROPPER</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="TOOL-INFO-1"></a>
 <h4 class="subsection">6.2.8 TOOL INFO</h4>
 
-<div class="block-image"><img src="toolwindow.png" alt="toolwindow.png"></div>
+<img src="toolwindow.png" alt="toolwindow">
 
-   <p>This brings up a window containing options for the currently selected
+<p>This brings up a window containing options for the currently selected
 tool.
+</p>
 
-<div class="node">
+<hr>
 <a name="SAFE-REGIONS-TOOL"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TOOL-INFO">TOOL INFO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITOR">COMPOSITOR</a>
-
+<div class="header">
+<p>
+Previous: <a href="#TOOL-INFO" accesskey="p" rel="prev">TOOL INFO</a>, Up: <a href="#COMPOSITOR" accesskey="u" rel="up">COMPOSITOR</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="SAFE-REGIONS-TOOL-1"></a>
 <h4 class="subsection">6.2.9 SAFE REGIONS TOOL</h4>
 
-<div class="block-image"><img src="titlesafe.png" alt="titlesafe.png"></div>
+<img src="titlesafe.png" alt="titlesafe">
 
-   <p>This draws the safe regions in the video output.  This doesn't affect
+<p>This draws the safe regions in the video output.  This doesn&rsquo;t affect
 the rendered output See <a href="#SAFE-REGIONS">SAFE REGIONS</a>.
+</p>
+
+
+
+
+
+
 
-<div class="node">
-<a name="PROGRAM"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RESOURCES">RESOURCES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMPOSITOR">COMPOSITOR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>
 
-</div>
 
+
+<hr>
+<a name="PROGRAM"></a>
+<div class="header">
+<p>
+Next: <a href="#RESOURCES" accesskey="n" rel="next">RESOURCES</a>, Previous: <a href="#COMPOSITOR" accesskey="p" rel="prev">COMPOSITOR</a>, Up: <a href="#THE-MAIN-WINDOWS" accesskey="u" rel="up">THE MAIN WINDOWS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="PROGRAM-1"></a>
 <h3 class="section">6.3 PROGRAM</h3>
 
+
 <p>This contains the timeline and the entry point for all menu driven
 operations.  The timeline consists of a vertical stack of tracks with
 horizontal representation of time.  This defines the output of
 rendering operations and what is saved when you save files.  Left of
 the timeline is the patchbay which contains options affecting each
 track.
-
-   <p>Under the <b>Window</b> menu you'll find options affecting the main
+</p>
+<p>Under the <b>Window</b> menu you&rsquo;ll find options affecting the main
 windows.  <b>default positions</b> repositions all the windows to a 4
 screen editing configuration.  On dual headed displays, the
 <b>default positions</b> operation fills only one monitor with windows.
+</p>
 
-<div class="node">
+<hr>
 <a name="RESOURCES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SOUND-LEVEL-METERS">SOUND LEVEL METERS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PROGRAM">PROGRAM</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>
-
+<div class="header">
+<p>
+Next: <a href="#SOUND-LEVEL-METERS" accesskey="n" rel="next">SOUND LEVEL METERS</a>, Previous: <a href="#PROGRAM" accesskey="p" rel="prev">PROGRAM</a>, Up: <a href="#THE-MAIN-WINDOWS" accesskey="u" rel="up">THE MAIN WINDOWS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="RESOURCES-1"></a>
 <h3 class="section">6.4 RESOURCES</h3>
 
+
 <p>Effects, transitions, clips, and assets are accessed here.  Most of the
 resources are inserted into the project by dragging them out of the
 resource window.  Management of resource allocation is also performed
 here.
-
-<div class="node">
+</p>
+<hr>
 <a name="SOUND-LEVEL-METERS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#OTHER-WINDOWS">OTHER WINDOWS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#RESOURCES">RESOURCES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>
-
+<div class="header">
+<p>
+Next: <a href="#OTHER-WINDOWS" accesskey="n" rel="next">OTHER WINDOWS</a>, Previous: <a href="#RESOURCES" accesskey="p" rel="prev">RESOURCES</a>, Up: <a href="#THE-MAIN-WINDOWS" accesskey="u" rel="up">THE MAIN WINDOWS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="SOUND-LEVEL-METERS-1"></a>
 <h3 class="section">6.5 SOUND LEVEL METERS</h3>
 
 <p>An additional window, the <b>levels window</b> can be brought up from
 the <b>Window</b> menu.  The <b>levels</b> window displays the output
 audio levels after all mixing is done.
-
-   <p>Sound level meters appear in many locations.  They can be toggled in
-the viewer and compositor windows with the <img src="show_meters.png" alt="show_meters.png"> level
+</p>
+<p>Sound level meters appear in many locations.  They can be toggled in
+the viewer and compositor windows with the <img src="show_meters.png" alt="show_meters"> level
 toggle. They appear in the patchbay when a track is expanded (See <a href="#THE-PATCHBAY">THE PATCHBAY</a>.)  They appear in the recording monitor when audio is being
-recorded.
-
-   <p>The sound levels in the <b>levels window, compositor, and viewer</b>
+recorded.  
+</p>
+<p>The sound levels in the <b>levels window, compositor, and viewer</b>
 correspond to the final output levels before they are clipped to the
 soundcard range.  In the <b>record monitor</b> they are the input values
 from the sound card.  In the <b>patchbay</b> they are the sound levels for
 each track after all effects are processed and before downmixing for
 the output.
-
-   <p>Most of the time, audio levels have numerical markings in DB but in the
-patchbay there isn't enough room.
-
-   <p>The sound level is color coded as an extra means of determining the
+</p>
+<p>Most of the time, audio levels have numerical markings in DB but in the
+patchbay there isn&rsquo;t enough room.
+</p>
+<p>The sound level is color coded as an extra means of determining the
 sound level.  Even without numerical markings, the sound level color
 can distinguish between several ranges and overload.  Look at the color
 codings in a meter with numerical markings to see what colors
 correspond to what sound level.  Then for meters in the patchbay in
-expanded audio tracks, use the color codings to see if it's overloading.
-
-   <p>Be aware that sound levels in Cinelerra can go above 0DB.  This allows
+expanded audio tracks, use the color codings to see if it&rsquo;s overloading.
+</p>
+<p>Be aware that sound levels in Cinelerra can go above 0DB.  This allows
 not only seeing if a track is overloading but how much information is
 being lost by the overloading.  Overloading by less than 3DB is usually
 acceptable.  While overloading is treated as positive numbers in
 Cinelerra, it is clipped to 0 when sent to a sound card or file.
-
-   <p>The visible range of the sound level meters is configurable in
+</p>
+<p>The visible range of the sound level meters is configurable in
 <b>settings-&gt;preferences-&gt;interface</b> (See <a href="#INTERFACE">INTERFACE</a>.)
-
-<div class="node">
+</p>
+<hr>
 <a name="OTHER-WINDOWS"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SOUND-LEVEL-METERS">SOUND LEVEL METERS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>
-
+<div class="header">
+<p>
+Previous: <a href="#SOUND-LEVEL-METERS" accesskey="p" rel="prev">SOUND LEVEL METERS</a>, Up: <a href="#THE-MAIN-WINDOWS" accesskey="u" rel="up">THE MAIN WINDOWS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="OTHER-WINDOWS-1"></a>
 <h3 class="section">6.6 OTHER WINDOWS</h3>
 
 <p>The <b>Overlays window</b> can be brought up from the <b>Window</b>
 menu.  This is a quick way to toggle what is drawn in the timeline. 
 Every option in the <b>View</b> menu is available here.
+</p>
 
-<div class="node">
-<a name="LOADING-AND-SAVING-FILES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-MAIN-WINDOWS">THE MAIN WINDOWS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
-<h2 class="chapter">7 LOADING AND SAVING FILES</h2>
 
-<ul class="menu">
-<li><a accesskey="1" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>:      What formats Cinelerra can import and export
-<li><a accesskey="2" href="#LOADING-FILES">LOADING FILES</a>:               Loading all types of files
-<li><a accesskey="3" href="#LOADING-THE-BACKUP">LOADING THE BACKUP</a>:          Recovering the session from before a crash
-<li><a accesskey="4" href="#SAVING-FILES">SAVING FILES</a>:                Saving edit decision lists
-<li><a accesskey="5" href="#RENDERING-FILES">RENDERING FILES</a>:             Saving media files
-</ul>
 
-<div class="node">
-<a name="SUPPORTED-FILE-FORMATS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LOADING-FILES">LOADING FILES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>
 
+<hr>
+<a name="LOADING-AND-SAVING-FILES"></a>
+<div class="header">
+<p>
+Next: <a href="#NAVIGATING-THE-PROJECT" accesskey="n" rel="next">NAVIGATING THE PROJECT</a>, Previous: <a href="#THE-MAIN-WINDOWS" accesskey="p" rel="prev">THE MAIN WINDOWS</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
+<a name="LOADING-AND-SAVING-FILES-1"></a>
+<h2 class="chapter">7 LOADING AND SAVING FILES</h2>
+
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#SUPPORTED-FILE-FORMATS" accesskey="1">SUPPORTED FILE FORMATS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What formats Cinelerra can import and export
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LOADING-FILES" accesskey="2">LOADING FILES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Loading all types of files
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LOADING-THE-BACKUP" accesskey="3">LOADING THE BACKUP</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Recovering the session from before a crash
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SAVING-FILES" accesskey="4">SAVING FILES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Saving edit decision lists
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RENDERING-FILES" accesskey="5">RENDERING FILES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Saving media files
+</td></tr>
+</table>
+
+
+
 
+
+
+
+
+
+
+<hr>
+<a name="SUPPORTED-FILE-FORMATS"></a>
+<div class="header">
+<p>
+Next: <a href="#LOADING-FILES" accesskey="n" rel="next">LOADING FILES</a>, Up: <a href="#LOADING-AND-SAVING-FILES" accesskey="u" rel="up">LOADING AND SAVING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SUPPORTED-FILE-FORMATS-1"></a>
 <h3 class="section">7.1 SUPPORTED FILE FORMATS</h3>
 
 <p>Here are most of the supported file formats and notes regarding their
 compression.  You may be able to load other formats not described here.
-
-   <p>The format of the file affects what Cinelerra does with it.  Edit
+</p>
+<p>The format of the file affects what Cinelerra does with it.  Edit
 decision lists replace the project settings.  Formats which contain
 media but no edit decisions just add data to the tracks.  If your
 project sample rate is 48khz and you load a sound file with 96khz,
-you'll still be playing it at 48khz.   If you load an EDL file at 96khz
-and the current project sample rate is 48khz, you'll change it to
+you&rsquo;ll still be playing it at 48khz.   If you load an EDL file at 96khz
+and the current project sample rate is 48khz, you&rsquo;ll change it to
 96khz.
-
-   <p>Some file formats are very slow to display on the timeline.  These
+</p>
+<p>Some file formats are very slow to display on the timeline.  These
 usually have video which is highly compressed.  Drawing highly
 compressed video picons can be very slow.  Disable picon drawing for
 these files with the <b>draw media</b> toggle to speed up operations.
+</p>
+
+<br>
+<img src="track_attributes.png" alt="track_attributes">
+<p><b>Track attributes</b>
+</p>
+<p>Supported file formats are currently:
+</p>
+<ul>
+<li> WAV
+</li><li> FLAC
+</li><li> PCM
+</li><li> AIFF
+</li><li> AC3 audio
+</li></ul>
 
-   <pre class="sp">
-
-</pre>
-<img src="track_attributes.png" alt="track_attributes.png">
-<b>Track attributes</b>
-
-   <p>Supported file formats are currently:
-
-     <ul>
-<li>WAV
-<li>FLAC
-<li>PCM
-<li>AIFF
-<li>AC3 audio
-</ul>
-
-<ul class="menu">
-<li><a accesskey="1" href="#QUICKTIME">QUICKTIME</a>
-<li><a accesskey="2" href="#MPEG_002d4-AUDIO">MPEG-4 AUDIO</a>
-<li><a accesskey="3" href="#IMAGE-SEQUENCES">IMAGE SEQUENCES</a>
-<li><a accesskey="4" href="#STILL-IMAGES">STILL IMAGES</a>
-<li><a accesskey="5" href="#AVI">AVI</a>
-<li><a accesskey="6" href="#MPEG-FILES-CONTAINING-VIDEO">MPEG FILES CONTAINING VIDEO</a>
-<li><a accesskey="7" href="#DVD-MOVIES">DVD MOVIES</a>
-<li><a accesskey="8" href="#MPEG-1-AUDIO">MPEG 1 AUDIO</a>
-<li><a accesskey="9" href="#OGG-THEORA_002fVORBIS">OGG THEORA/VORBIS</a>
-<li><a href="#EDIT-DECISION-LIST">EDIT DECISION LIST</a>
-</ul>
-
-<div class="node">
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#QUICKTIME" accesskey="1">QUICKTIME</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MPEG_002d4-AUDIO" accesskey="2">MPEG-4 AUDIO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#IMAGE-SEQUENCES" accesskey="3">IMAGE SEQUENCES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#STILL-IMAGES" accesskey="4">STILL IMAGES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#AVI" accesskey="5">AVI</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MPEG-FILES-CONTAINING-VIDEO" accesskey="6">MPEG FILES CONTAINING VIDEO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DVD-MOVIES" accesskey="7">DVD MOVIES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MPEG-1-AUDIO" accesskey="8">MPEG 1 AUDIO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#OGG-THEORA_002fVORBIS" accesskey="9">OGG THEORA/VORBIS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#EDIT-DECISION-LIST">EDIT DECISION LIST</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+
+<hr>
 <a name="QUICKTIME"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MPEG_002d4-AUDIO">MPEG-4 AUDIO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#MPEG_002d4-AUDIO" accesskey="n" rel="next">MPEG-4 AUDIO</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="QUICKTIME-1"></a>
 <h4 class="subsection">7.1.1 QUICKTIME</h4>
-
-<p>Quicktime is not the standard for UNIX but we use it because it's well
+<p>Quicktime is not the standard for UNIX but we use it because it&rsquo;s well
 documented.  All of the Quicktime movies on the internet are
-compressed.  Cinelerra doesn't support most compressed Quicktime movies
+compressed.  Cinelerra doesn&rsquo;t support most compressed Quicktime movies
 but does support some.  If it crashes when loading a Quicktime movie,
-that means the format probably wasn't supported.
-
-   <p><b>NOTES ON QUICKTIME ENCODING</b>
-
-   <p>Here are some notes regarding making Quicktime movies in Cinelerra:
-
-   <p>Quicktime is a wrapper for 2 codecs, a video codec and an audio codec. 
+that means the format probably wasn&rsquo;t supported.
+</p>
+<p><b>NOTES ON QUICKTIME ENCODING</b>
+</p>
+<p>Here are some notes regarding making Quicktime movies in Cinelerra:
+</p>
+<p>Quicktime is a wrapper for 2 codecs, a video codec and an audio codec. 
 The video and audio codecs are picked separately.  The preferred
 encoding for Quicktime output is MPEG-4 Video and MPEG-4 Audio.  This
 format plays in the commercial players for Windows and has good
 compression quality.  For better compression, use H-264 Video. 
-Unfortunately H-264 decoding is so slow it can't play very large frame
+Unfortunately H-264 decoding is so slow it can&rsquo;t play very large frame
 sizes.
-
-   <p>Cinelerra supports 2 nonstandard codecs: Dual MPEG-4 video and dual
-H.264 video.  These won't play in anything but Cinelerra and XMovie. 
+</p>
+<p>Cinelerra supports 2 nonstandard codecs: Dual MPEG-4 video and dual
+H.264 video.  These won&rsquo;t play in anything but Cinelerra and XMovie. 
 They are designed for movies where the frames have been divided into 2
 fields, each field displayed sequentially.  The dual codecs interleave
 2 video streams to improve efficiency without requiring major changes
 to the player.
-
-<div class="node">
-<a name="MPEG-4-AUDIO"></a>
+</p>
+<hr>
 <a name="MPEG_002d4-AUDIO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#IMAGE-SEQUENCES">IMAGE SEQUENCES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#QUICKTIME">QUICKTIME</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#IMAGE-SEQUENCES" accesskey="n" rel="next">IMAGE SEQUENCES</a>, Previous: <a href="#QUICKTIME" accesskey="p" rel="prev">QUICKTIME</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="MPEG_002d4-AUDIO-1"></a>
 <h4 class="subsection">7.1.2 MPEG-4 AUDIO</h4>
 
 <p>This is the same as Quicktime with MPEG-4 Audio as the audio codec.
-
-<div class="node">
+</p>
+<hr>
 <a name="IMAGE-SEQUENCES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#STILL-IMAGES">STILL IMAGES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MPEG_002d4-AUDIO">MPEG-4 AUDIO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#STILL-IMAGES" accesskey="n" rel="next">STILL IMAGES</a>, Previous: <a href="#MPEG_002d4-AUDIO" accesskey="p" rel="prev">MPEG-4 AUDIO</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="IMAGE-SEQUENCES-1"></a>
 <h4 class="subsection">7.1.3 IMAGE SEQUENCES</h4>
 
+
 <p>Rendering an image sequence is not the same as rendering a single
 image.  When rendering an image sequence Cinelerra generates a table of
 contents file for the image sequence and makes a different image file
@@ -2434,74 +2688,74 @@ for every timeline position.  The table of contents can be loaded
 instead of the individual images to get better performance.  To learn
 more about the different image formats supported in an image sequence,
 read about still images.
+</p>
 
-<div class="node">
+<hr>
 <a name="STILL-IMAGES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AVI">AVI</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#IMAGE-SEQUENCES">IMAGE SEQUENCES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#AVI" accesskey="n" rel="next">AVI</a>, Previous: <a href="#IMAGE-SEQUENCES" accesskey="p" rel="prev">IMAGE SEQUENCES</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="STILL-IMAGES-1"></a>
 <h4 class="subsection">7.1.4 STILL IMAGES</h4>
 
+
 <p>Rendering a single image causes the image file to be overwritten for
 every timeline position.  No table of contents is created.  When
-loaded, the image takes up one frame in length and doesn't change the
+loaded, the image takes up one frame in length and doesn&rsquo;t change the
 project attributes.
-
-   <p>Several still image formats not normally found in other programs are
+</p>
+<p>Several still image formats not normally found in other programs are
 described here.
-
-<ul class="menu">
-<li><a accesskey="1" href="#OPEN-EXR-IMAGES">OPEN EXR IMAGES</a>
-<li><a accesskey="2" href="#RAW-DIGITAL-CAMERA-IMAGES">RAW DIGITAL CAMERA IMAGES</a>
-</ul>
-
-<div class="node">
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#OPEN-EXR-IMAGES" accesskey="1">OPEN EXR IMAGES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RAW-DIGITAL-CAMERA-IMAGES" accesskey="2">RAW DIGITAL CAMERA IMAGES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
 <a name="OPEN-EXR-IMAGES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RAW-DIGITAL-CAMERA-IMAGES">RAW DIGITAL CAMERA IMAGES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#STILL-IMAGES">STILL IMAGES</a>
-
+<div class="header">
+<p>
+Next: <a href="#RAW-DIGITAL-CAMERA-IMAGES" accesskey="n" rel="next">RAW DIGITAL CAMERA IMAGES</a>, Up: <a href="#STILL-IMAGES" accesskey="u" rel="up">STILL IMAGES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
-<h5 class="subsubsection">7.1.4.1 OPEN EXR IMAGES</h5>
+<a name="OPEN-EXR-IMAGES-1"></a>
+<h4 class="subsubsection">7.1.4.1 OPEN EXR IMAGES</h4>
 
 <p>You may not know about Open EXR.  This format stores floating point RGB
 images.  It also supports a small amount of compression.  Projects
 which render to EXR should be in a floating point color model to take
 advantage of it See <a href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>.  Several compression
 options are available for EXR.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 <b>PIZ</b> Lossless wavelet compression.  This is the best compression.
 
-     <li><b>ZIP</b> Lossless gzip algorithm.
+</li><li> <b>ZIP</b> Lossless gzip algorithm.
 
-     <li><b>RLE</b> Lossless run length encoding.  This is the fastest and worst
+</li><li> <b>RLE</b> Lossless run length encoding.  This is the fastest and worst
 compression.
 
-     <li><b>PXR24</b> Lossy compression where the floating point numbers are
+</li><li> <b>PXR24</b> Lossy compression where the floating point numbers are
 converted to 24 bits and compressed with gzip.
 
-   </ul>
+</li></ul>
 
-   <p>Select <b>Use Alpha</b> if the project colormodel has an alpha channel and
+<p>Select <b>Use Alpha</b> if the project colormodel has an alpha channel and
 you want to retain it in the file.  Otherwise the primary colors are
 multiplied by the alpha channel.
-
-<div class="node">
+</p>
+<hr>
 <a name="RAW-DIGITAL-CAMERA-IMAGES"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#OPEN-EXR-IMAGES">OPEN EXR IMAGES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#STILL-IMAGES">STILL IMAGES</a>
-
+<div class="header">
+<p>
+Previous: <a href="#OPEN-EXR-IMAGES" accesskey="p" rel="prev">OPEN EXR IMAGES</a>, Up: <a href="#STILL-IMAGES" accesskey="u" rel="up">STILL IMAGES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
-<h5 class="subsubsection">7.1.4.2 RAW DIGITAL CAMERA IMAGES</h5>
+<a name="RAW-DIGITAL-CAMERA-IMAGES-1"></a>
+<h4 class="subsubsection">7.1.4.2 RAW DIGITAL CAMERA IMAGES</h4>
 
 <p>RAW digital camera images are a special kind of image file which
 Cinelerra only imports.  These must be processed in a floating point
@@ -2510,266 +2764,297 @@ cameras are the only ones tested.  They need to have the <b>Linearize</b>
 effect applied to correct gamma.  Because raw images take a long time
 to interpolate, they are usually viewed first in a proxy file and then
 touched up.
-
-   <p>First apply the Linearize effect to a track of raw images and set it to
+</p>
+<p>First apply the Linearize effect to a track of raw images and set it to
 <b>automatic</b> with <b>0.6</b> gamma.  Then render the timeline to a
 Quicktime JPEG file.  Append the Quicktime JPEG file in a new track and
 disable playback of the old track.  Now the gamma corrected copy of
 each raw image can be previewed relatively fast in the same timeline
 position as the original image.
+</p>
 
-<div class="node">
-<a name="AVI"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MPEG-FILES-CONTAINING-VIDEO">MPEG FILES CONTAINING VIDEO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#STILL-IMAGES">STILL IMAGES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
 
+<hr>
+<a name="AVI"></a>
+<div class="header">
+<p>
+Next: <a href="#MPEG-FILES-CONTAINING-VIDEO" accesskey="n" rel="next">MPEG FILES CONTAINING VIDEO</a>, Previous: <a href="#STILL-IMAGES" accesskey="p" rel="prev">STILL IMAGES</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="AVI-1"></a>
 <h4 class="subsection">7.1.5 AVI</h4>
 
 <p>AVI with assorted audio and video codecs.  Because AVI is so
 fragmented, your luck will vary.
+</p>
 
-<div class="node">
+<hr>
 <a name="MPEG-FILES-CONTAINING-VIDEO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DVD-MOVIES">DVD MOVIES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AVI">AVI</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#DVD-MOVIES" accesskey="n" rel="next">DVD MOVIES</a>, Previous: <a href="#AVI" accesskey="p" rel="prev">AVI</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="MPEG-FILES-CONTAINING-VIDEO-1"></a>
 <h4 class="subsection">7.1.6 MPEG FILES CONTAINING VIDEO</h4>
 
+
 <p>MPEG files containing video can be loaded directly into Cinelerra.  If
 the file is supported, a table of contents is built.  If the file is
 unsupported, it usually crashes or shows very short tracks. 
-Unfortunately, this method of loading MPEG files isn't good enough if
-you intend to use the files in a renderfarm.
-
-   <p>To use MPEG files in a renderfarm you need to run <b>mpeg3toc</b> to
+Unfortunately, this method of loading MPEG files isn&rsquo;t good enough if
+you intend to use the files in a renderfarm.  
+</p>
+<p>To use MPEG files in a renderfarm you need to run <b>mpeg3toc</b> to
 generate a table of contents for the file, then load the table of
 contents.  Mpeg3toc needs the absolute path of the MPEG file.  If you
-don't use an absolute path, it assumes the MPEG file is in the same
+don&rsquo;t use an absolute path, it assumes the MPEG file is in the same
 directory that Cinelerra is run from.
-
-   <p>MPEG streams are structured into multiple tracks.  Each track can be
+</p>
+<p>MPEG streams are structured into multiple tracks.  Each track can be
 video or audio.  Each audio track can have 1-6 channels.  Cinelerra
 converts each channel of audio into a track.
-
-   <p><b>NOTES ON MPEG VIDEO ENCODING</b>
-
-   <p>MPEG video encoding is done separately from MPEG audio encoding.  In
+</p>
+<p><b>NOTES ON MPEG VIDEO ENCODING</b>
+</p>
+<p>MPEG video encoding is done separately from MPEG audio encoding.  In
 MPEG video there are 2 colormodels.  The YUV 4:2:0 colormodel is
 encoded by a highly optimized version of mpeg2enc with presets for
 standard consumer electronics.  In the process of optimizing mpeg2enc,
 they got rid of YUV 4:2:2 encoding.  The YUV 4:2:2 colormodel is
 encoded by a less optimized version of mpeg2enc.
-
-   <p>YUV 4:2:2 encoding was kept around because the NTSC version of DV video
+</p>
+<p>YUV 4:2:2 encoding was kept around because the NTSC version of DV video
 loses too much quality when transferred to YUV 4:2:0.  This DV video
 must be transferred to YUV 4:2:2.
-
-   <p>When encoding YUV 4:2:0, the bitrate parameter changes meaning
+</p>
+<p>When encoding YUV 4:2:0, the bitrate parameter changes meaning
 depending on whether the bitrate or quantization is fixed.  If the
-bitrate is fixed, it's the target bitrate.  If the quantization is
-fixed, it's the maximum bitrate allowed.  This is a quirk of the
+bitrate is fixed, it&rsquo;s the target bitrate.  If the quantization is
+fixed, it&rsquo;s the maximum bitrate allowed.  This is a quirk of the
 mpeg2enc version.
-
-<div class="node">
+</p>
+<hr>
 <a name="DVD-MOVIES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MPEG-1-AUDIO">MPEG 1 AUDIO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MPEG-FILES-CONTAINING-VIDEO">MPEG FILES CONTAINING VIDEO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#MPEG-1-AUDIO" accesskey="n" rel="next">MPEG 1 AUDIO</a>, Previous: <a href="#MPEG-FILES-CONTAINING-VIDEO" accesskey="p" rel="prev">MPEG FILES CONTAINING VIDEO</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="DVD-MOVIES-1"></a>
 <h4 class="subsection">7.1.7 DVD MOVIES</h4>
 
-<p>DVD's are spit into a number of programs, each identified by a unique
+
+<p>DVD&rsquo;s are spit into a number of programs, each identified by a unique
 <b>IFO</b> file.  If you want to load a DVD, find the corresponding
 <b>IFO</b> file for the program of interest.  Load the IFO file directly
 and a table of contents will be built.  Alternatively for renderfarm
 usage, a table of contents can be created separately.
+</p>
+<p>Run
+</p>
+<div class="example">
+<pre class="example">mpeg3toc -v /cdrom/video_ts/vts_01_0.ifo dvd.toc
+</pre></div>
 
-   <p>Run
+<p>or something similar.  Then load <b>dvd.toc</b>.
+</p>
 
-<pre class="example">     mpeg3toc -v /cdrom/video_ts/vts_01_0.ifo dvd.toc
-</pre>
-   <p>or something similar.  Then load <b>dvd.toc</b>.
 
-<div class="node">
+<hr>
 <a name="MPEG-1-AUDIO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#OGG-THEORA_002fVORBIS">OGG THEORA/VORBIS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DVD-MOVIES">DVD MOVIES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#OGG-THEORA_002fVORBIS" accesskey="n" rel="next">OGG THEORA/VORBIS</a>, Previous: <a href="#DVD-MOVIES" accesskey="p" rel="prev">DVD MOVIES</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="MPEG-1-AUDIO-1"></a>
 <h4 class="subsection">7.1.8 MPEG 1 AUDIO</h4>
 
 <p>These are .mp2 and .mp3 files.  If fixed bitrate, they can be loaded
 directly with no table of contents.  Variable bitrate streams need to
 have a table of contents created with <b>mpeg3toc</b>.
-
-<div class="node">
-<a name="OGG-THEORA%2fVORBIS"></a>
+</p>
+<hr>
 <a name="OGG-THEORA_002fVORBIS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#EDIT-DECISION-LIST">EDIT DECISION LIST</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MPEG-1-AUDIO">MPEG 1 AUDIO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Next: <a href="#EDIT-DECISION-LIST" accesskey="n" rel="next">EDIT DECISION LIST</a>, Previous: <a href="#MPEG-1-AUDIO" accesskey="p" rel="prev">MPEG 1 AUDIO</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="OGG-THEORA_002fVORBIS-1"></a>
 <h4 class="subsection">7.1.9 OGG THEORA/VORBIS</h4>
 
+
 <p>The OGG format is an antiquated but supposedly unpatented way of
-compressing audio and video.  The quality isn't as good as H.264 or
+compressing audio and video.  The quality isn&rsquo;t as good as H.264 or
 MPEG-4 Audio.  In reality, anyone with enough money and desire can find
 a patent violation so the justification for OGG is questionable.
-
-<div class="node">
+</p>
+<hr>
 <a name="EDIT-DECISION-LIST"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#OGG-THEORA_002fVORBIS">OGG THEORA/VORBIS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>
-
+<div class="header">
+<p>
+Previous: <a href="#OGG-THEORA_002fVORBIS" accesskey="p" rel="prev">OGG THEORA/VORBIS</a>, Up: <a href="#SUPPORTED-FILE-FORMATS" accesskey="u" rel="up">SUPPORTED FILE FORMATS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="EDIT-DECISION-LIST-1"></a>
 <h4 class="subsection">7.1.10 EDIT DECISION LIST</h4>
 
+
 <p>Edit decision lists are generated by Cinelerra for storing projects. 
 They end in .xml.  They change project attributes when loaded.
-
-   <p>Because edit decision lists consist of text, they can be edited in a
+</p>
+<p>Because edit decision lists consist of text, they can be edited in a
 text editor.
+</p>
+
+
 
-<div class="node">
-<a name="LOADING-FILES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LOADING-THE-BACKUP">LOADING THE BACKUP</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SUPPORTED-FILE-FORMATS">SUPPORTED FILE FORMATS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>
 
-</div>
 
+
+
+
+
+
+
+
+
+
+
+
+
+<hr>
+<a name="LOADING-FILES"></a>
+<div class="header">
+<p>
+Next: <a href="#LOADING-THE-BACKUP" accesskey="n" rel="next">LOADING THE BACKUP</a>, Previous: <a href="#SUPPORTED-FILE-FORMATS" accesskey="p" rel="prev">SUPPORTED FILE FORMATS</a>, Up: <a href="#LOADING-AND-SAVING-FILES" accesskey="u" rel="up">LOADING AND SAVING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LOADING-FILES-1"></a>
 <h3 class="section">7.2 LOADING FILES</h3>
 
 <p>All data that you work with in Cinelerra is acquired either by
 <b>recording from a device</b> or by <b>loading from disk</b>.  This
 section describes loading.
-
-   <p>The loading and playing of files is just as you would expect. Just go
+</p>
+<p>The loading and playing of files is just as you would expect. Just go
 to <b>file-&gt;Load</b>, select a file for loading, and hit <b>ok</b>. Hit
 the forward play button and it should start playing, regardless of
 whether a progress bar has popped up.
-
-   <p>Another way to load files is to pass the filenames as arguments on the
+</p>
+<p>Another way to load files is to pass the filenames as arguments on the
 command line.  This creates new tracks for every file and starts the
 program with all the arguments loaded.
-
-   <p>If the file is a still image, the project's attributes are not changed
+</p>
+<p>If the file is a still image, the project&rsquo;s attributes are not changed
 and the first frame of the track becomes the image.  If the file has
 audio, Cinelerra may build an index file for it to speed up drawing. 
 You can edit and play the file while the index file is being built.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#INSERTION-STRATEGY" accesskey="1">INSERTION STRATEGY</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LOADING-MULTIPLE-FILES" accesskey="2">LOADING MULTIPLE FILES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+
+
+
 
-<ul class="menu">
-<li><a accesskey="1" href="#INSERTION-STRATEGY">INSERTION STRATEGY</a>
-<li><a accesskey="2" href="#LOADING-MULTIPLE-FILES">LOADING MULTIPLE FILES</a>
-</ul>
 
-<div class="node">
-<a name="INSERTION-STRATEGY"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LOADING-MULTIPLE-FILES">LOADING MULTIPLE FILES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#LOADING-FILES">LOADING FILES</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="INSERTION-STRATEGY"></a>
+<div class="header">
+<p>
+Next: <a href="#LOADING-MULTIPLE-FILES" accesskey="n" rel="next">LOADING MULTIPLE FILES</a>, Up: <a href="#LOADING-FILES" accesskey="u" rel="up">LOADING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="INSERTION-STRATEGY-1"></a>
 <h4 class="subsection">7.2.1 INSERTION STRATEGY</h4>
 
 <p>Usually three things happen when you load a file.  First the existing
-project is cleared from the screen, second the project's attributes are
-changed to match the file's, and finally the new file's tracks are
+project is cleared from the screen, second the project&rsquo;s attributes are
+changed to match the file&rsquo;s, and finally the new file&rsquo;s tracks are
 created in the timeline.
-
-   <p>But Cinelerra lets you change what happens when you load a file.
-
-   <p>In the file selection box there is a range of options for <b>Insertion
+</p>
+<p>But Cinelerra lets you change what happens when you load a file.
+</p>
+<p>In the file selection box there is a range of options for <b>Insertion
 strategy</b>.  Each of these options loads the file a different way.
+</p>
+<img src="insertion_strategy.png" alt="insertion_strategy">
 
-   <div class="block-image"><img src="insertion_strategy.png" alt="insertion_strategy.png"></div>
-
-     <ul>
-<li><b>Replace current project</b>
-<img src="loadmode_new.png" alt="loadmode_new.png">
+<ul>
+<li> <b>Replace current project</b>
+<img src="loadmode_new.png" alt="loadmode_new">
 
-     <p>All tracks in the current project are deleted and new tracks are
+<p>All tracks in the current project are deleted and new tracks are
 created to match the source.  Project attributes are only changed when
 loading XML.  If multiple files are selected it adds new tracks for
 every file.
+</p>
+</li><li> <b>Replace current project and concatenate tracks</b>
+<img src="loadmode_newcat.png" alt="loadmode_newcat">
 
-     <li><b>Replace current project and concatenate tracks</b>
-<img src="loadmode_newcat.png" alt="loadmode_newcat.png">
-
-     <p>Same as replace current project except if multiple files are selected
+<p>Same as replace current project except if multiple files are selected
 it concatenates the tracks of every file after the first.
+</p>
+</li><li> <b>Append in new tracks</b>
+<img src="loadmode_newtracks.png" alt="loadmode_newtracks">
 
-     <li><b>Append in new tracks</b>
-<img src="loadmode_newtracks.png" alt="loadmode_newtracks.png">
-
-     <p>The current project is not deleted and new tracks are created for the
+<p>The current project is not deleted and new tracks are created for the
 source.
+</p>
+</li><li> <b>Concatenate to existing tracks</b>
+<img src="loadmode_cat.png" alt="loadmode_cat">
 
-     <li><b>Concatenate to existing tracks</b>
-<img src="loadmode_cat.png" alt="loadmode_cat.png">
-
-     <p>The current project is not deleted and new files are concatenated to
+<p>The current project is not deleted and new files are concatenated to
 the existing tracks.
+</p>
+</li><li> <b>Paste at insertion point</b>
+<img src="loadmode_paste.png" alt="loadmode_paste">
 
-     <li><b>Paste at insertion point</b>
-<img src="loadmode_paste.png" alt="loadmode_paste.png">
+<p>The file is pasted in like a normal paste operation.
+</p>
+</li><li> <b>Create new resources only</b>
+<img src="loadmode_resource.png" alt="loadmode_resource">
 
-     <p>The file is pasted in like a normal paste operation.
-
-     <li><b>Create new resources only</b>
-<img src="loadmode_resource.png" alt="loadmode_resource.png">
-
-     <p>The timeline is unchanged and new resources are created in the Resource
+<p>The timeline is unchanged and new resources are created in the Resource
 Window.
+</p>
+</li><li> <b>Nested EDL</b>
+<img src="loadmode_nested.png" alt="loadmode_nested">
 
-     <li><b>Nested EDL</b>
-<img src="loadmode_nested.png" alt="loadmode_nested.png">
-
-     <p>If the file is an EDL, the output of the EDL is pasted in like a media
+<p>If the file is an EDL, the output of the EDL is pasted in like a media
 file.  Nested EDLs have 1 video track &amp; a number of audio tracks
 corresponding to the number of output channels.  They allow larger
 sequences composed of many smaller sequences, transitions to be applied
 to the output of another EDL, &amp; global processing on the output of an
 EDL without having to manipulate each track.
+</p>
+
+
+</li></ul>
 
-   </ul>
 
-   <p>The insertion strategy is a recurring option in many of Cinelerra's
+<p>The insertion strategy is a recurring option in many of Cinelerra&rsquo;s
 functions.  In each place the options do the same thing.  With these
 options you can almost do all your editing by loading files.
-
-   <p>If you load files by passing command line arguments to Cinelerra, the
+</p>
+<p>If you load files by passing command line arguments to Cinelerra, the
 files are loaded with <b>Replace current project</b> rules.
+</p>
+
 
-<div class="node">
-<a name="LOADING-MULTIPLE-FILES"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INSERTION-STRATEGY">INSERTION STRATEGY</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#LOADING-FILES">LOADING FILES</a>
 
-</div>
 
+<hr>
+<a name="LOADING-MULTIPLE-FILES"></a>
+<div class="header">
+<p>
+Previous: <a href="#INSERTION-STRATEGY" accesskey="p" rel="prev">INSERTION STRATEGY</a>, Up: <a href="#LOADING-FILES" accesskey="u" rel="up">LOADING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LOADING-MULTIPLE-FILES-1"></a>
 <h4 class="subsection">7.2.2 LOADING MULTIPLE FILES</h4>
 
 <p>In the file selection box go to the list of files.  Select a file.  Go
@@ -2777,20 +3062,21 @@ to another file and select it while holding down <b>CTRL</b>.  This
 selects one additional file.  Go to another file and select it while
 holding down <b>SHIFT</b>.  This selects every intervening file.  This
 behavior is available in most every list box.
-
-   <p>Select a bunch of mp3 files and <b>Replace current project and
+</p>
+<p>Select a bunch of mp3 files and <b>Replace current project and
 concatenate tracks</b> in the insertion strategy to create a song
 playlist.
+</p>
 
-<div class="node">
-<a name="LOADING-THE-BACKUP"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SAVING-FILES">SAVING FILES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LOADING-FILES">LOADING FILES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>
 
-</div>
 
+<hr>
+<a name="LOADING-THE-BACKUP"></a>
+<div class="header">
+<p>
+Next: <a href="#SAVING-FILES" accesskey="n" rel="next">SAVING FILES</a>, Previous: <a href="#LOADING-FILES" accesskey="p" rel="prev">LOADING FILES</a>, Up: <a href="#LOADING-AND-SAVING-FILES" accesskey="u" rel="up">LOADING AND SAVING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LOADING-THE-BACKUP-1"></a>
 <h3 class="section">7.3 LOADING THE BACKUP</h3>
 
 <p>There is one special XML file on disk at all times.  After every
@@ -2798,72 +3084,75 @@ editing operation Cinelerra saves the current project to a backup in
 <b>$HOME/.bcast/backup.xml</b>.  In the event of a crash go to
 <b>file-&gt;load backup</b> to load the backup.  It is important after a
 crash to reboot Cinelerra without performing any editing operations. 
-Loading the backup should be the first operation or you'll overwrite
+Loading the backup should be the first operation or you&rsquo;ll overwrite
 the backup.
+</p>
 
-<div class="node">
+<hr>
 <a name="SAVING-FILES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RENDERING-FILES">RENDERING FILES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LOADING-THE-BACKUP">LOADING THE BACKUP</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>
-
+<div class="header">
+<p>
+Next: <a href="#RENDERING-FILES" accesskey="n" rel="next">RENDERING FILES</a>, Previous: <a href="#LOADING-THE-BACKUP" accesskey="p" rel="prev">LOADING THE BACKUP</a>, Up: <a href="#LOADING-AND-SAVING-FILES" accesskey="u" rel="up">LOADING AND SAVING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="SAVING-FILES-1"></a>
 <h3 class="section">7.4 SAVING FILES</h3>
 
 <p>When Cinelerra saves a file it saves an edit decision list of the
-current project but doesn't save any media.  Go to <b>File-&gt;save
+current project but doesn&rsquo;t save any media.  Go to <b>File-&gt;save
 as...</b>.  Select a file to overwrite or enter a new file.  Cinelerra
 automatically concatenates <b>.xml</b> to the filename if no
 <b>.xml</b> extension is given.
-
-   <p>The saved file contains all the project settings and locations of every
+</p>
+<p>The saved file contains all the project settings and locations of every
 edit but instead of media it contains pointers to the original media
 files on disk.
-
-   <p>For each media file the XML file stores either an absolute path or just
+</p>
+<p>For each media file the XML file stores either an absolute path or just
 the relative path.  If the media is in the same directory as the XML
-file a relative path is saved.  If it's in a different directory an
+file a relative path is saved.  If it&rsquo;s in a different directory an
 absolute path is saved.
-
-   <p>In order to move XML files around without breaking the media linkages
+</p>
+<p>In order to move XML files around without breaking the media linkages
 you either need to keep the media in the same directory as XML file
 forever or save the XML file in a different directory than the media
 and not move the media ever again.
-
-   <p>If you want to create an audio playlist and burn it on CD-ROM, save the
+</p>
+<p>If you want to create an audio playlist and burn it on CD-ROM, save the
 XML file in the same directory as the audio files and burn the entire
 directory.  This keeps the media paths relative.
-
-   <p>XML files are useful for saving the current state before going to sleep
-and saving audio playlists but they're limited in that they're specific
-to Cinelerra.  You can't play XML files in a dedicated movie player. 
+</p>
+<p>XML files are useful for saving the current state before going to sleep
+and saving audio playlists but they&rsquo;re limited in that they&rsquo;re specific
+to Cinelerra.  You can&rsquo;t play XML files in a dedicated movie player. 
 Realtime effects in an XML file have to be resynthesized every time you
 play it back.  The XML file also requires you to maintain copies of all
 the source assets on hard drives, which can take up space and cost a
 lot of electricity to spin.  For a more persistent storage of the
-output there's rendering.
+output there&rsquo;s rendering.
+</p>
+
+
 
-<div class="node">
-<a name="RENDERING-FILES"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SAVING-FILES">SAVING FILES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>
 
-</div>
 
+<hr>
+<a name="RENDERING-FILES"></a>
+<div class="header">
+<p>
+Previous: <a href="#SAVING-FILES" accesskey="p" rel="prev">SAVING FILES</a>, Up: <a href="#LOADING-AND-SAVING-FILES" accesskey="u" rel="up">LOADING AND SAVING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="RENDERING-FILES-1"></a>
 <h3 class="section">7.5 RENDERING FILES</h3>
 
 <p>Rendering takes a section of the timeline, performs all the editing,
 effects and compositing, and stores it in a pure movie file.  You can
 then delete all the source assets, play the rendered file in a movie
-player, or bring it back into Cinelerra for more editing.  It's very
+player, or bring it back into Cinelerra for more editing.  It&rsquo;s very
 difficult to retouch any editing decisions in the pure movie file,
 however, so keep the original assets and XML file around several days
 after you render it.
-
-   <p>All rendering operations are based on a region of the timeline to be
+</p>
+<p>All rendering operations are based on a region of the timeline to be
 rendered.  You need to define this region on the timeline.  The
 navigation section describes methods of defining regions. 
 See <a href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>.  The rendering functions define the
@@ -2872,64 +3161,72 @@ points are set, the affected region is rendered.  When no region is
 highlighted, everything after the insertion point is rendered.  Merely
 by positioning the insertion point at the beginning of a track and
 unsetting all in/out points, the entire track is rendered.
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#SINGLE-FILE-RENDERING">SINGLE FILE RENDERING</a>:       Rendering a single file
-<li><a accesskey="2" href="#BATCH-RENDERING">BATCH RENDERING</a>:             Rendering several files unattended
-<li><a accesskey="3" href="#THE-RENDER-FARM">THE RENDER FARM</a>:             Rendering using many computers
-<li><a accesskey="4" href="#COMMAND-LINE-RENDERING">COMMAND LINE RENDERING</a>:      Rendering from the command line without a GUI
-</ul>
 
-<div class="node">
-<a name="SINGLE-FILE-RENDERING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#BATCH-RENDERING">BATCH RENDERING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#RENDERING-FILES">RENDERING FILES</a>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#SINGLE-FILE-RENDERING" accesskey="1">SINGLE FILE RENDERING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rendering a single file
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#BATCH-RENDERING" accesskey="2">BATCH RENDERING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rendering several files unattended
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#THE-RENDER-FARM" accesskey="3">THE RENDER FARM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rendering using many computers
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COMMAND-LINE-RENDERING" accesskey="4">COMMAND LINE RENDERING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rendering from the command line without a GUI
+</td></tr>
+</table>
 
-</div>
 
+
+<hr>
+<a name="SINGLE-FILE-RENDERING"></a>
+<div class="header">
+<p>
+Next: <a href="#BATCH-RENDERING" accesskey="n" rel="next">BATCH RENDERING</a>, Up: <a href="#RENDERING-FILES" accesskey="u" rel="up">RENDERING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SINGLE-FILE-RENDERING-1"></a>
 <h4 class="subsection">7.5.1 SINGLE FILE RENDERING</h4>
 
 <p>The fastest way to get media to disk is to use the single file
 rendering function.
-
-   <p>Go to <b>File-&gt;render</b> to bring up the render dialog.  Select the
-magnifying glass <img src="magnify.png" alt="magnify.png"> to bring up a file selection dialog.  This determines
+</p>
+<p>Go to <b>File-&gt;render</b> to bring up the render dialog.  Select the
+magnifying glass <img src="magnify.png" alt="magnify"> to bring up a file selection dialog.  This determines
 the filename to write the rendered file to and the encoding parameters.
-
-   <p>In the render dialog select a format from the <b>File Format</b> menu. 
+</p>
+<p>In the render dialog select a format from the <b>File Format</b> menu. 
 The format of the file determines whether you can render audio or video
 or both.  Select the <b>Render audio tracks</b> toggle to generate
 audio tracks and <b>Render video tracks</b> to generate video tracks.
+</p>
 
-   <p>Select the wrench <img src="wrench.png" alt="wrench.png"> next to each toggle to set compression
-parameters.  If the file format can't store audio or video the
+<p>Select the wrench <img src="wrench.png" alt="wrench"> next to each toggle to set compression
+parameters.  If the file format can&rsquo;t store audio or video the
 compression parameters will be blank.  If <b>Render audio tracks</b> or
-<b>Render video tracks</b> is selected and the file format doesn't
+<b>Render video tracks</b> is selected and the file format doesn&rsquo;t
 support it, trying to render will pop up an error.
-
-   <p>The <b>Create new file at each label</b> option causes a new file to be
+</p>
+<p>The <b>Create new file at each label</b> option causes a new file to be
 created when every label in the timeline is encountered.  This is
 useful for dividing long audio recordings into individual tracks.  When
 using the renderfarm, <b>Create new file at each label</b> causes one
 renderfarm job to be created at every label instead of using the
 internal load balancing algorithm to space jobs.
-
-   <p>When <b>Create new file at each label</b> is selected, a new filename
+</p>
+<p>When <b>Create new file at each label</b> is selected, a new filename
 is created for every output file.  If the filename given in the render
 dialog has a 2 digit number in it, the 2 digit number is overwritten
 with a different incremental number for every output file.  If no 2
 digit number is given, Cinelerra automatically concatenates a number to
 the end of the given filename for every output file.
-
-   <p>In the filename <b>/hmov/track01.wav</b> the <b>01</b> would be
+</p>
+<p>In the filename <b>/hmov/track01.wav</b> the <b>01</b> would be
 overwritten for every output file.  The filename
 <b>/hmov/track.wav</b>; however, would become <b>/hmov/track.wav001</b>
 and so on and so forth.  Filename regeneration is only used when either
 renderfarm mode is active or creating new files for every label is
 active.
-
-   <p>Finally the render dialog lets you select an insertion mode.  The
+</p>
+<p>Finally the render dialog lets you select an insertion mode.  The
 insertion modes are the same as with loading files.  In this case if
 you select <b>insert nothing</b> the file will be written out to disk
 without changing the current project.  For other insertion strategies
@@ -2937,25 +3234,27 @@ be sure to prepare the timeline to have the output inserted at the
 right position before the rendering operation is finished. 
 See <a href="#EDITING">EDITING</a>.  Editing describes how to cause output to be inserted
 at the right position.
-
-   <p>It should be noted that even if you only have audio or only have video
+</p>
+<p>It should be noted that even if you only have audio or only have video
 rendered, a <b>paste</b> insertion strategy will behave like a normal
 paste operation, erasing any selected region of the timeline and
 pasting just the data that was rendered.  If you render only audio and
 have some video tracks armed, the video tracks will get truncated while
 the audio output is pasted into the audio tracks.
+</p>
 
-<div class="node">
-<a name="BATCH-RENDERING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#THE-RENDER-FARM">THE RENDER FARM</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SINGLE-FILE-RENDERING">SINGLE FILE RENDERING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#RENDERING-FILES">RENDERING FILES</a>
 
+<hr>
+<a name="BATCH-RENDERING"></a>
+<div class="header">
+<p>
+Next: <a href="#THE-RENDER-FARM" accesskey="n" rel="next">THE RENDER FARM</a>, Previous: <a href="#SINGLE-FILE-RENDERING" accesskey="p" rel="prev">SINGLE FILE RENDERING</a>, Up: <a href="#RENDERING-FILES" accesskey="u" rel="up">RENDERING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="BATCH-RENDERING-1"></a>
 <h4 class="subsection">7.5.2 BATCH RENDERING</h4>
 
+
+
 <p>If you want to render many projects to media files without having to
 repeatedly attend to the <b>Render</b> dialog, <b>batch rendering</b> is the
 function to use.  In this function, you specify many EDL files to
@@ -2964,83 +3263,89 @@ EDL file and renders it automatically, without any user intervention.
 Each EDL file and its output to be rendered is called a <b>batch</b>. 
 This allows a huge amount of media to be processed and greatly
 increases the value of an expensive computer.
-
-   <p>The first thing to do when preparing to do batch rendering is define
+</p>
+<p>The first thing to do when preparing to do batch rendering is define
 projects to be rendered.  The batch renderer requires a separate EDL
 file for every batch to be rendered.  Set up a project and define the
 region to be rendered either by highlighting it, setting in/out points
 around it, or positioning the insertion point before it.  Then save the
 project as an EDL.  Define as many projects as needed this way.  The
 batch renderer takes the active region from the EDL file for rendering.
-
-   <p>With all the EDL files prepared with active regions, go to
+</p>
+<p>With all the EDL files prepared with active regions, go to
 <b>File-&gt;batch render</b>.  This brings up the batch rendering dialog. 
 The interface for batch rendering is a bit more complex than for single
 file rendering.
+</p>
 
-   <p>A list of batches must be defined before starting a batch rendering
+<p>A list of batches must be defined before starting a batch rendering
 operation.  The table of batches appears on the bottom of the batch
 render dialog and is called <b>batches to render</b>.  Above this are
 the configuration parameters for a single batch.
-
-   <p>Set the <b>output path</b>, <b>file format</b>, <b>Audio</b>, <b>Video</b>, and
+</p>
+<p>Set the <b>output path</b>, <b>file format</b>, <b>Audio</b>, <b>Video</b>, and
 <b>Create new file at each label</b> parameters as if it was a single
 file.  These parameters apply to only one batch.  In addition to the
 standard rendering parameters, you must select the source EDL to use in
 the batch.  Do this by setting the <b>EDL path</b>.
-
-   <p>If the <b>batches to render</b> list is empty or nothing is highlighted,
+</p>
+<p>If the <b>batches to render</b> list is empty or nothing is highlighted,
 click <b>New</b> to create a new batch.  The new batch will contain all
 the parameters you just set.
-
-   <p>Repeatedly press the <b>New</b> button to create more batches with the
+</p>
+<p>Repeatedly press the <b>New</b> button to create more batches with the
 same parameters.  Highlight any batch and edit the configuration on the
 top of the batch render window.  The highlighted batch is always
 synchronized to the information displayed.
-
-   <p>Click and drag batches to change the order in which they're rendered. 
+</p>
+<p>Click and drag batches to change the order in which they&rsquo;re rendered. 
 Hit <b>delete</b> to permanently remove the highlighted batch.
-
-   <p>In the list box is a column which enables or disables the batch.  This
+</p>
+<p>In the list box is a column which enables or disables the batch.  This
 way batches can be skipped without being deleted.  Click on the
 <b>Enabled</b> column in the list box to enable or disable a batch.  If it
 is checked, the batch is rendered.  If it is blank, the batch is
 skipped.
+</p>
+<p>The other columns in the batch list are informative.
+</p>
+<ul>
+<li> <b>Output</b> The output path of the batch.
+</li><li> <b>EDL</b> The source EDL of the batch.
+</li><li> <b>Elapsed</b> The amount of time taken to render the batch if it is finished.
 
-   <p>The other columns in the batch list are informative.
-
-     <ul>
-<li><b>Output</b> The output path of the batch. 
-<li><b>EDL</b> The source EDL of the batch. 
-<li><b>Elapsed</b> The amount of time taken to render the batch if it is finished.
-
-   </ul>
-
-   <p>To start rendering from the first enabled batch, hit <b>Start</b>.
+</li></ul>
 
-   <p>Once rendering, the main window shows the progress of the batch.  Once
+<p>To start rendering from the first enabled batch, hit <b>Start</b>.
+</p>
+<p>Once rendering, the main window shows the progress of the batch.  Once
 the batch finishes, the elapsed column in the batch list is updated and
-the next batch is rendered until all the enabled batches are finished. 
+the next batch is rendered until all the enabled batches are finished.
 The currently rendering batch is always highlighted red.
+</p>
 
-   <p>To stop rendering before the batches are finished without closing the
+<p>To stop rendering before the batches are finished without closing the
 batch render dialog, hit <b>Stop</b>.
-
-   <p>To stop rendering before the batches are finished and close the batch
+</p>
+<p>To stop rendering before the batches are finished and close the batch
 render dialog, hit <b>Cancel</b>.
-
-   <p>To exit the batch render dialog whether or not anything is being
+</p>
+<p>To exit the batch render dialog whether or not anything is being
 rendered, hit <b>Cancel</b>.
+</p>
+
+
+
 
-<div class="node">
-<a name="THE-RENDER-FARM"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COMMAND-LINE-RENDERING">COMMAND LINE RENDERING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#BATCH-RENDERING">BATCH RENDERING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#RENDERING-FILES">RENDERING FILES</a>
 
-</div>
 
+<hr>
+<a name="THE-RENDER-FARM"></a>
+<div class="header">
+<p>
+Next: <a href="#COMMAND-LINE-RENDERING" accesskey="n" rel="next">COMMAND LINE RENDERING</a>, Previous: <a href="#BATCH-RENDERING" accesskey="p" rel="prev">BATCH RENDERING</a>, Up: <a href="#RENDERING-FILES" accesskey="u" rel="up">RENDERING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THE-RENDER-FARM-1"></a>
 <h4 class="subsection">7.5.3 THE RENDER FARM</h4>
 
 <p>When bicubic interpolation and HDTV was first done on Cinelerra, the
@@ -3048,135 +3353,149 @@ time needed to produce the simplest output became unbearable even on
 the fastest dual 1.7Ghz Xeon of the time.  Renderfarm support even in
 the simplest form brings HDTV times back in line with SD while making
 SD faster than realtime.
-
-   <p>While the renderfarm interface isn't spectacular, it's simple enough to
+</p>
+<p>While the renderfarm interface isn&rsquo;t spectacular, it&rsquo;s simple enough to
 use inside an editing suite with less than a dozen nodes without going
 through the same amount of hassle you would with a several hundred node
 farm.  Renderfarm is invoked transparently for all file-&gt;render
 operations when it is enabled in the preferences.
-
-   <p>Cinelerra divides the selected region of the timeline into a certain
+</p>
+<p>Cinelerra divides the selected region of the timeline into a certain
 number of jobs which are then dispatched to the different nodes
 depending on the load balance.  The nodes process the jobs and write
 their output to individual files on the filesystem.  The output files
-are not concatenated.  It's important for all the nodes to have access
+are not concatenated.  It&rsquo;s important for all the nodes to have access
 to the same filesystem on the same mount point for assets.
-
-   <p>If a node can't access an input asset it'll display error messages to
-its console but probably not die.  If it can't access an output asset
-it'll cause the rendering to abort.
-
-   <p>It should be noted that in the render dialog, the <b>Create new file at
+</p>
+<p>If a node can&rsquo;t access an input asset it&rsquo;ll display error messages to
+its console but probably not die.  If it can&rsquo;t access an output asset
+it&rsquo;ll cause the rendering to abort.
+</p>
+<p>It should be noted that in the render dialog, the <b>Create new file at
 each label</b> option causes a new renderfarm job to be created at each
 label instead of by the load balancer.  If this option is selected when
 no labels exist, only one job will be created.
-
-   <p>A Cinelerra renderfarm is organized into a master node and any number
+</p>
+<p>A Cinelerra renderfarm is organized into a master node and any number
 of slave nodes.  The master node is the computer which is running the
 GUI.  The slave nodes are anywhere else on the network and are run from
-the command line.  Run a slave node from the command line with
-
-   <p><b>cinelerra -d</b>
-
-   <p>That is the simplest configuration.  Type <b>cinelerra -h</b> to see more
+the command line.  Run a slave node from the command line with 
+</p>
+<p><b>cinelerra -d</b>
+</p>
+<p>That is the simplest configuration.  Type <b>cinelerra -h</b> to see more
 options.  The default port number may be overridden by passing a port
 number after the -d.
+</p>
 
-   <p>Most of the time you'll want to bring in the rendered output and fine
+<p>Most of the time you&rsquo;ll want to bring in the rendered output and fine
 tune the timing on the timeline.  Also some file formats like MPEG
-can't be direct copied.  Because of this, the jobs are left in
+can&rsquo;t be direct copied.  Because of this, the jobs are left in
 individual files.
-
-   <p>You can load these by creating a new track and specifying
+</p>
+<p>You can load these by creating a new track and specifying
 <b>concatenate to existing tracks</b> in the load dialog.  Files which
 support direct copy can be concatenated into a single file by rendering
 to the same file format with renderfarm disabled.  Also to get direct
 copy, the track dimensions, output dimensions, and asset dimensions
 must be equal.
-
-   <p>MPEG files or files which don't support direct copy have to be
+</p>
+<p>MPEG files or files which don&rsquo;t support direct copy have to be
 concatenated with a command line utility.  MPEG files can be
 concatenated with <b>cat</b>.
-
-   <p>Configuration of the renderfarm is described in the configuration
+</p>
+<p>Configuration of the renderfarm is described in the configuration
 chapter See <a href="#RENDERFARM">RENDERFARM</a>.  The slave nodes traditionally read and
-write data to a common filesystem over a network, thus they don't need
+write data to a common filesystem over a network, thus they don&rsquo;t need
 hard drives.
-
-   <p>Ideally all the nodes on the renderfarm have similar CPU performance. 
+</p>
+<p>Ideally all the nodes on the renderfarm have similar CPU performance. 
 Cinelerra load balances on a first come first serve basis.  If the last
 segment is dispatched to the slowest node, all the fastest nodes may
 end up waiting for the slowest node to finish while they themselves
 could have rendered it faster.
+</p>
+
 
-<div class="node">
-<a name="COMMAND-LINE-RENDERING"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-RENDER-FARM">THE RENDER FARM</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#RENDERING-FILES">RENDERING FILES</a>
 
-</div>
 
+<hr>
+<a name="COMMAND-LINE-RENDERING"></a>
+<div class="header">
+<p>
+Previous: <a href="#THE-RENDER-FARM" accesskey="p" rel="prev">THE RENDER FARM</a>, Up: <a href="#RENDERING-FILES" accesskey="u" rel="up">RENDERING FILES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="COMMAND-LINE-RENDERING-1"></a>
 <h4 class="subsection">7.5.4 COMMAND LINE RENDERING</h4>
 
 <p>The command line rendering facility consists of a way to load the
 current set of batch rendering jobs and process them without a GUI. 
-This is useful if you're planning on crashing X repeatedly or want to
+This is useful if you&rsquo;re planning on crashing X repeatedly or want to
 do rendering on the other side of a low bandwidth network.  You might
 have access to a supercomputer in India but still be stuck in America,
 exhiled you might say.  A command line interface is ideal for this.
-
-   <p>To perform rendering from the command line, first run Cinelerra in
+</p>
+<p>To perform rendering from the command line, first run Cinelerra in
 graphical mode.  Go to <b>file-&gt;batch render</b>.  Create the batches you
 intend to render in the batch window and close the window.  This saves
 the batches in a file.  Set up the desired renderfarm attributes in
 <b>settings-&gt;preferences</b> and exit Cinelerra.  These settings are used
 the next time command line rendering is used.
+</p>
+<p>On the command line run 
+</p>
+<p><b>cinelerra -r</b>
+</p>
+<p>to processes the current batch jobs without a GUI.  Setting up all the
+parameters for this operation is hard.  That&rsquo;s why the command line
+aborts if any output files already exist.
+</p>
+<p>Other parameters exist for specifying alternative files for the
+preferences and the batches.  Attempting to use anything but the
+defaults is very involved so it hasn&rsquo;t been tested.
+</p>
 
-   <p>On the command line run
-
-   <p><b>cinelerra -r</b>
 
-   <p>to processes the current batch jobs without a GUI.  Setting up all the
-parameters for this operation is hard.  That's why the command line
-aborts if any output files already exist.
 
-   <p>Other parameters exist for specifying alternative files for the
-preferences and the batches.  Attempting to use anything but the
-defaults is very involved so it hasn't been tested.
 
-<div class="node">
+<hr>
 <a name="NAVIGATING-THE-PROJECT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#EDITING">EDITING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LOADING-AND-SAVING-FILES">LOADING AND SAVING FILES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
+<div class="header">
+<p>
+Next: <a href="#EDITING" accesskey="n" rel="next">EDITING</a>, Previous: <a href="#LOADING-AND-SAVING-FILES" accesskey="p" rel="prev">LOADING AND SAVING FILES</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="NAVIGATING-THE-PROJECT-1"></a>
 <h2 class="chapter">8 NAVIGATING THE PROJECT</h2>
 
 <p>The thing you want to do most of the time is get to a certain time and
 place in the media.  Internally the media is organized into tracks. 
 Each track extends across time.  Navigation involves both getting to a
 track and getting to a certain time in the track.
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#NAVIGATING-THE-PROGRAM-WINDOW">NAVIGATING THE PROGRAM WINDOW</a>
-<li><a accesskey="2" href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>
-<li><a accesskey="3" href="#NAVIGATING-THE-RESOURCES">NAVIGATING THE RESOURCES</a>
-<li><a accesskey="4" href="#USING-THE-TRANSPORT-CONTROLS">USING THE TRANSPORT CONTROLS</a>
-<li><a accesskey="5" href="#USING-BACKGROUND-RENDERING">USING BACKGROUND RENDERING</a>
-</ul>
 
-<div class="node">
-<a name="NAVIGATING-THE-PROGRAM-WINDOW"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#NAVIGATING-THE-PROGRAM-WINDOW" accesskey="1">NAVIGATING THE PROGRAM WINDOW</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR" accesskey="2">NAVIGATING THE VIEWER AND COMPOSITOR</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#NAVIGATING-THE-RESOURCES" accesskey="3">NAVIGATING THE RESOURCES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-THE-TRANSPORT-CONTROLS" accesskey="4">USING THE TRANSPORT CONTROLS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-BACKGROUND-RENDERING" accesskey="5">USING BACKGROUND RENDERING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
 
-</div>
 
+<hr>
+<a name="NAVIGATING-THE-PROGRAM-WINDOW"></a>
+<div class="header">
+<p>
+Next: <a href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR" accesskey="n" rel="next">NAVIGATING THE VIEWER AND COMPOSITOR</a>, Up: <a href="#NAVIGATING-THE-PROJECT" accesskey="u" rel="up">NAVIGATING THE PROJECT</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="NAVIGATING-THE-PROGRAM-WINDOW-1"></a>
 <h3 class="section">8.1 NAVIGATING THE PROGRAM WINDOW</h3>
 
 <p>The program window contains many features for navigation and displays
@@ -3184,148 +3503,168 @@ the timeline as it is structured in memory: tracks stacked vertically
 and extending across time horizontall.  The horizontal scroll bar
 allows you to scan across time.  The vertical scroll bar allows you to
 scan across tracks.
-
-   <p>Below the timeline you'll find the zoom panel.  The zoom panel contains
+</p>
+<p>Below the timeline you&rsquo;ll find the zoom panel.  The zoom panel contains
 values for <b>sample zoom</b>, <b>amplitude</b>, <b>track zoom</b>, and
 <b>curve zoom</b>.  These values in addition to the scrollbars are the
 main tools for positioning the timeline.
+</p>
+
+
+
 
-   <pre class="sp">
 
-</pre>
 
-<img src="zoompanel.png" alt="zoompanel.png">
 
-   <p>Changing the <b>sample zoom</b> causes the amount of time visible to
+<br>
+
+<img src="zoompanel.png" alt="zoompanel">
+
+
+<p>Changing the <b>sample zoom</b> causes the amount of time visible to
 change.  <b>If your mouse has a wheel and it works in X11 go over
 the tumblers and use the wheel to zoom in and out.</b>
-
-   <p>The <b>amplitude</b> only affects audio.  It determines how big the
+</p>
+<p>The <b>amplitude</b> only affects audio.  It determines how big the
 waveform is if the waveform is drawn.
-
-   <p>The <b>track zoom</b> affects all tracks.  It determines the height of
+</p>
+<p>The <b>track zoom</b> affects all tracks.  It determines the height of
 each track.  If you change the track zoom the amplitude zoom
 compensates so  audio waveforms look proportional.
-
-   <p>The <b>curve zoom</b> affects the curves in all the tracks.  It
+</p>
+<p>The <b>curve zoom</b> affects the curves in all the tracks.  It
 determines the amplitude and offset of the curves.  The tumbler affects
 curve amplitude but the only way to change curve offset is to use the
-<b>fit curves</b> button.  <img src="fit_curves.png" alt="fit_curves.png">
+<b>fit curves</b> button.  <img src="fit_curves.png" alt="fit_curves">
+</p>
 
-   <p>In addition to the graphical tools, you'll probably more often use the
+<p>In addition to the graphical tools, you&rsquo;ll probably more often use the
 keyboard to navigate.  Use <b>PAGE UP</b> and <b>PAGE DOWN</b> to
 scroll up and down the tracks.
-
-   <p>Use the <b>LEFT</b> and <b>RIGHT</b> arrows to move across time in
-small increments.  You'll often need to scroll beyond the end of the
-timeline but scrollbars won't let you do it.  Instead use the
+</p>
+<p>Use the <b>LEFT</b> and <b>RIGHT</b> arrows to move across time in
+small increments.  You&rsquo;ll often need to scroll beyond the end of the
+timeline but scrollbars won&rsquo;t let you do it.  Instead use the
 <b>RIGHT</b> arrow to scroll past the end of timeline.
-
-   <p>Use the <b>HOME</b> and <b>END</b> keys to instantly go to the
+</p>
+<p>Use the <b>HOME</b> and <b>END</b> keys to instantly go to the
 beginning or end of the timeline.  In <b>I-beam</b> mode, hold down
 shift while pressing <b>HOME</b> or <b>END</b> to select the region of
 the timeline between the insertion point and the key pressed.
-
-   <p>Use the <b>UP</b> and <b>DOWN</b> arrows to change the sample zoom by a
+</p>
+<p>Use the <b>UP</b> and <b>DOWN</b> arrows to change the sample zoom by a
 power of 2.
+</p>
+<p><b>CTRL-UP</b> and <b>CTRL-DOWN</b> cause the amplitude zoom to change.
+</p>
+<p><b>CTRL-PGUP</b> and <b>CTRL-PGDOWN</b> cause the track zoom to change.
+</p>
+<p><b>ALT-UP</b> and <b>ALT-DOWN</b> cause the curve amplitude to change.
+</p>
 
-   <p><b>CTRL-UP</b> and <b>CTRL-DOWN</b> cause the amplitude zoom to change.
 
-   <p><b>CTRL-PGUP</b> and <b>CTRL-PGDOWN</b> cause the track zoom to change.
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#THE-INSERTION-POINT" accesskey="1">THE INSERTION POINT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#THE-IN_002fOUT-POINTS" accesskey="2">THE IN/OUT POINTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-LABELS-IN-THE-PROGRAM-WINDOW" accesskey="3">USING LABELS IN THE PROGRAM WINDOW</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-   <p><b>ALT-UP</b> and <b>ALT-DOWN</b> cause the curve amplitude to change.
 
-<ul class="menu">
-<li><a accesskey="1" href="#THE-INSERTION-POINT">THE INSERTION POINT</a>
-<li><a accesskey="2" href="#THE-IN_002fOUT-POINTS">THE IN/OUT POINTS</a>
-<li><a accesskey="3" href="#USING-LABELS-IN-THE-PROGRAM-WINDOW">USING LABELS IN THE PROGRAM WINDOW</a>
-</ul>
 
-<div class="node">
-<a name="THE-INSERTION-POINT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#THE-IN_002fOUT-POINTS">THE IN/OUT POINTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROGRAM-WINDOW">NAVIGATING THE PROGRAM WINDOW</a>
 
-</div>
 
-<h4 class="subsection">8.1.1 THE INSERTION POINT</h4>
 
-<p>By default you'll see a flashing insertion point in the program window
-the first time you boot it up.  This is where new media is pasted onto
-the timeline.  It's also the starting point of all playback
-operations.  When rendering, it defines the region of the timeline to
-be rendered.
 
-   <p>The insertion point is normally moved by clicking inside the timebar. 
-Any region of the timebar not obscured by labels and in/out points is a
-hotspot for repositioning the insertion point.
 
-   <pre class="sp">
 
-</pre>
-<img src="main_timebar.png" alt="main_timebar.png">
-<b>The main timebar</b>
 
-   <p>The insertion point also can be moved by clicking in the timeline
-itself, but not always.  The insertion point has two modes of
-operation:
 
-     <ul>
-<li>drag and drop mode
 
-     <li>cut and paste mode
 
-   </ul>
+<hr>
+<a name="THE-INSERTION-POINT"></a>
+<div class="header">
+<p>
+Next: <a href="#THE-IN_002fOUT-POINTS" accesskey="n" rel="next">THE IN/OUT POINTS</a>, Up: <a href="#NAVIGATING-THE-PROGRAM-WINDOW" accesskey="u" rel="up">NAVIGATING THE PROGRAM WINDOW</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THE-INSERTION-POINT-1"></a>
+<h4 class="subsection">8.1.1 THE INSERTION POINT</h4>
 
-   <p>The mode of operation is determined by selecting the arrow or the
-i-beam in the buttonbar.
+<p>By default you&rsquo;ll see a flashing insertion point in the program window
+the first time you boot it up.  This is where new media is pasted onto
+the timeline.  It&rsquo;s also the starting point of all playback
+operations.  When rendering, it defines the region of the timeline to
+be rendered.
+</p>
+<p>The insertion point is normally moved by clicking inside the timebar. 
+Any region of the timebar not obscured by labels and in/out points is a
+hotspot for repositioning the insertion point.
+</p>
+<br>
+<img src="main_timebar.png" alt="main_timebar">
+<p><b>The main timebar</b>
+</p>
+<p>The insertion point also can be moved by clicking in the timeline
+itself, but not always.  The insertion point has two modes of
+operation: 
+</p>
+<ul>
+<li> drag and drop mode 
 
-   <pre class="sp">
+</li><li> cut and paste mode
 
-</pre>
-<img src="editing_mode.png" alt="editing_mode.png">
-<b>The editing mode buttons</b>
+</li></ul>
 
-   <p>If the arrow is highlighted it enables <b>drag and drop</b> mode.  In
-drag and drop mode, clicking in the timeline doesn't reposition the
+<p>The mode of operation is determined by selecting the arrow or the
+i-beam in the buttonbar.
+</p>
+<br>
+<img src="editing_mode.png" alt="editing_mode">
+<p><b>The editing mode buttons</b>
+</p>
+<p>If the arrow is highlighted it enables <b>drag and drop</b> mode.  In
+drag and drop mode, clicking in the timeline doesn&rsquo;t reposition the
 insertion point.  Instead it selects an entire edit.  Dragging in the
 timeline repositions the edit, snapping it to other edit boundaries. 
 This is normally useful for reordering audio playlists and moving
 effects around.
-
-   <p>If the i-beam is highlighted it enables <b>cut and paste mode</b>.  In
+</p>
+<p>If the i-beam is highlighted it enables <b>cut and paste mode</b>.  In
 cut and paste mode clicking in the timeline repositions the insertion
 point.  Dragging in the timeline highlights a region.  The highlighted
 region becomes the playback range during the next playback operation,
 the rendered range during the next render operation, and the region
 affected by cut and paste operations.
-
-   <p><b>Shift-clicking</b> in the timeline extends the highlighted region.
-
-   <p><b>Double-clicking</b> in the timeline selects the entire edit the
+</p>
+<p><b>Shift-clicking</b> in the timeline extends the highlighted region.
+</p>
+<p><b>Double-clicking</b> in the timeline selects the entire edit the
 cursor is over.
-
-   <p>It should be noted that when moving the insertion point and selecting
+</p>
+<p>It should be noted that when moving the insertion point and selecting
 regions, the positions are either aligned to frames or aligned to
-samples.  When editing video you'll want to align to frames.  When
-editing audio you'll want to align to samples.  This is set in
+samples.  When editing video you&rsquo;ll want to align to frames.  When
+editing audio you&rsquo;ll want to align to samples.  This is set in
 <b>settings-&gt;align cursor on frames</b>.
-
-   <p>If the highlighted region is the region affected by cut and paste
+</p>
+<p>If the highlighted region is the region affected by cut and paste
 operations, how do I cut and paste in <b>drag and drop</b> mode?  In
 this case you need to set <b>in/out points</b> to define an affected region.
+</p>
+
 
-<div class="node">
-<a name="THE-IN%2fOUT-POINTS"></a>
-<a name="THE-IN_002fOUT-POINTS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-LABELS-IN-THE-PROGRAM-WINDOW">USING LABELS IN THE PROGRAM WINDOW</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-INSERTION-POINT">THE INSERTION POINT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROGRAM-WINDOW">NAVIGATING THE PROGRAM WINDOW</a>
 
-</div>
 
+<hr>
+<a name="THE-IN_002fOUT-POINTS"></a>
+<div class="header">
+<p>
+Next: <a href="#USING-LABELS-IN-THE-PROGRAM-WINDOW" accesskey="n" rel="next">USING LABELS IN THE PROGRAM WINDOW</a>, Previous: <a href="#THE-INSERTION-POINT" accesskey="p" rel="prev">THE INSERTION POINT</a>, Up: <a href="#NAVIGATING-THE-PROGRAM-WINDOW" accesskey="u" rel="up">NAVIGATING THE PROGRAM WINDOW</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THE-IN_002fOUT-POINTS-1"></a>
 <h4 class="subsection">8.1.2 THE IN/OUT POINTS</h4>
 
 <p>In both editing modes you can set in/out points.  The in/out points
@@ -3335,183 +3674,184 @@ and drop mode the highlighted area overrides the in/out points.  If a
 highlighted area and in/out points are set, the highlighted area is
 affected by editing operations and the in/out points are ignored.  If
 no region is highlighted, the in/out points are used.
-
-   <p>Normally, in/out points do not affect the playback region.  Only if you
+</p>
+<p>Normally, in/out points do not affect the playback region.  Only if you
 hold down CTRL while issuing a playback command do the in/out points
 determine the playback region.
-
-   <p>To set in/out points go to the timebar and position the insertion point
-somewhere.  Hit the <img src="in_point_button.png" alt="in_point_button.png"> <b>in point button</b>.  Go
-to a position after the in point and hit the <img src="out_point_button.png" alt="out_point_button.png">
+</p>
+<p>To set in/out points go to the timebar and position the insertion point
+somewhere.  Hit the <img src="in_point_button.png" alt="in_point_button"> <b>in point button</b>.  Go
+to a position after the in point and hit the <img src="out_point_button.png" alt="out_point_button">
 <b>out point button</b>.
-
-   <pre class="sp">
-
-</pre>
-<img src="inout_points.png" alt="inout_points.png"> <b>Timebar with in/out points set</b>.
-
-   <p>Select either the in point or the out point and the insertion point
+</p>
+<br>
+<img src="inout_points.png" alt="inout_points"> <p><b>Timebar with in/out points set</b>.
+</p>
+<p>Select either the in point or the out point and the insertion point
 jumps to that location.  After selecting an in point, if you hit the
 <b>in point button</b> the in point will be deleted.  After selecting
 an out point, if you hit the <b>out point button</b> the out point will
 be deleted.
-
-   <p>If you select a region somewhere else while in/out points already
+</p>
+<p>If you select a region somewhere else while in/out points already
 exist, the existing points will be repositioned when you hit the in/out
 buttons.
-
-   <p><b>Shift-clicking</b> on an in/out point extends the highlighted region
+</p>
+<p><b>Shift-clicking</b> on an in/out point extends the highlighted region
 to that point.
-
-   <p>Instead of using the button bar you can use the <b>[</b> and <b>]</b>
+</p>
+<p>Instead of using the button bar you can use the <b>[</b> and <b>]</b>
 keys to toggle in/out points.
-
-   <p>The insertion point and the in/out points allow you to define an
-affected region but they don't let you jump to exact points on the
+</p>
+<p>The insertion point and the in/out points allow you to define an
+affected region but they don&rsquo;t let you jump to exact points on the
 timeline very easily.  For this purpose there are labels.
+</p>
+
 
-<div class="node">
-<a name="USING-LABELS-IN-THE-PROGRAM-WINDOW"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-IN_002fOUT-POINTS">THE IN/OUT POINTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROGRAM-WINDOW">NAVIGATING THE PROGRAM WINDOW</a>
 
-</div>
 
+<hr>
+<a name="USING-LABELS-IN-THE-PROGRAM-WINDOW"></a>
+<div class="header">
+<p>
+Previous: <a href="#THE-IN_002fOUT-POINTS" accesskey="p" rel="prev">THE IN/OUT POINTS</a>, Up: <a href="#NAVIGATING-THE-PROGRAM-WINDOW" accesskey="u" rel="up">NAVIGATING THE PROGRAM WINDOW</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="USING-LABELS-IN-THE-PROGRAM-WINDOW-1"></a>
 <h4 class="subsection">8.1.3 USING LABELS IN THE PROGRAM WINDOW</h4>
 
 <p>Labels are an easy way to set exact locations on the timeline you want
 to jump to.  When you position the insertion point somewhere and hit
-the <img src="label_button.png" alt="label_button.png"> <b>label button</b> a new label appears on the
-timeline.
-
-   <pre class="sp">
-
-</pre>
-<img src="timebar_label.png" alt="timebar_label.png"> <b>Timebar with a label on it</b>
-
-   <p>No matter what the zoom settings are, clicking on the label positions
+the <img src="label_button.png" alt="label_button"> <b>label button</b> a new label appears on the
+timeline.  
+</p>
+<br>
+<img src="timebar_label.png" alt="timebar_label"> <p><b>Timebar with a label on it</b>
+</p>
+<p>No matter what the zoom settings are, clicking on the label positions
 the insertion point exactly where you set it.  Hitting the label button
 again when a label is selected deletes it.
-
-   <p><b>Shift-clicking</b> on a label extends the highlighted region.
-
-   <p><b>Double-clicking</b> between two labels highlights the region between
+</p>
+<p><b>Shift-clicking</b> on a label extends the highlighted region.
+</p>
+<p><b>Double-clicking</b> between two labels highlights the region between
 the labels.
-
-   <p>Hitting the <b>l</b> key has the same effect as the label button.
-
-   <p>If you hit the label button when a region is highlighted, two labels
+</p>
+<p>Hitting the <b>l</b> key has the same effect as the label button.
+</p>
+<p>If you hit the label button when a region is highlighted, two labels
 are toggled at each end of the highlighted region.  If one end already
 has a label, then the existing label is deleted and a label is created
 at the opposite end.
-
-   <p>Labels can reposition the insertion point when they are selected but
-they can also be traversed with the <img src="label_traversal.png" alt="label_traversal.png"> <b>label
+</p>
+<p>Labels can reposition the insertion point when they are selected but
+they can also be traversed with the <img src="label_traversal.png" alt="label_traversal"> <b>label
 traversal</b> buttons.  When a label is out of view, the label traversal
 buttons reposition the timeline so the label is visible.  There are
 keyboard shortcuts for label traversal, too.
-
-   <p><b>CTRL-LEFT</b> repositions the insertion point on the previous label.
-
-   <p><b>CTRL-RIGHT</b> repositions the insertion point on the next label.
-
-   <p>With label traversal you can quickly seek back and forth on the
+</p>
+<p><b>CTRL-LEFT</b> repositions the insertion point on the previous label.
+</p>
+<p><b>CTRL-RIGHT</b> repositions the insertion point on the next label.
+</p>
+<p>With label traversal you can quickly seek back and forth on the
 timeline but you can also select regions.
-
-   <p><b>SHIFT-CTRL-LEFT</b> extends the highlighted region to the previous
+</p>
+<p><b>SHIFT-CTRL-LEFT</b> extends the highlighted region to the previous
 label.
-
-   <p><b>SHIFT-CTRL-RIGHT</b> extends the highlighted region to the next label.
-
-   <p>Manually hitting the label button or <b>l</b> key over and over again
+</p>
+<p><b>SHIFT-CTRL-RIGHT</b> extends the highlighted region to the next label.
+</p>
+<p>Manually hitting the label button or <b>l</b> key over and over again
 to delete a series of labels can get tedious.  For deleting a set of
 labels, first highlight a region and second use the <b>Edit-&gt;Clear
 labels</b> function.  If in/out points exist, the labels between the
 in/out points are cleared and the highlighted region ignored.
+</p>
+
+
+
+
 
-<div class="node">
-<a name="NAVIGATING-THE-VIEWER-AND-COMPOSITOR"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#NAVIGATING-THE-RESOURCES">NAVIGATING THE RESOURCES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#NAVIGATING-THE-PROGRAM-WINDOW">NAVIGATING THE PROGRAM WINDOW</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>
 
-</div>
 
+<hr>
+<a name="NAVIGATING-THE-VIEWER-AND-COMPOSITOR"></a>
+<div class="header">
+<p>
+Next: <a href="#NAVIGATING-THE-RESOURCES" accesskey="n" rel="next">NAVIGATING THE RESOURCES</a>, Previous: <a href="#NAVIGATING-THE-PROGRAM-WINDOW" accesskey="p" rel="prev">NAVIGATING THE PROGRAM WINDOW</a>, Up: <a href="#NAVIGATING-THE-PROJECT" accesskey="u" rel="up">NAVIGATING THE PROJECT</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="NAVIGATING-THE-VIEWER-AND-COMPOSITOR-1"></a>
 <h3 class="section">8.2 NAVIGATING THE VIEWER AND COMPOSITOR</h3>
 
 <p>The navigation features of the Viewer and Compositor behave very
 similarly.  Each has a timebar and slider below the video output.  The
 timebar and slider are critical for navigation.
+</p>
+<br>
 
-   <pre class="sp">
-
-</pre>
-
-<img src="timebarslider.png" alt="timebarslider.png">
+<img src="timebarslider.png" alt="timebarslider">
 
-   <p>The timebar represents the entire time covered by the program.  When
+<p>The timebar represents the entire time covered by the program.  When
 you define labels and in/out points it defines those, too.  Finally the
 timebar defines a region known as the <b>preview region</b>.
-
-   <p>The <b>preview region</b> is the region of the timeline which the
+</p>
+<p>The <b>preview region</b> is the region of the timeline which the
 slider effects.  The slider only covers the time covered by the preview
 region.  By using a preview region inside the entire program and using
 the slider inside the preview region you can quickly and precisely seek
 in the compositor and viewer.
-
-   <p>When you replace the current project with a file the preview region
+</p>
+<p>When you replace the current project with a file the preview region
 automatically resizes to cover the entire file.  When you append data
 or change the size of the current project, the preview region stays the
 same size and shrinks.  Therefore, you need to resize the preview
 region.
-
-   <p>Load a file and then slide around it using the compositor slider.  The
+</p>
+<p>Load a file and then slide around it using the compositor slider.  The
 insertion point in the main window follows the compositor.  Move the
-pointer over the compositor's timebar until it turns into a left resize
+pointer over the compositor&rsquo;s timebar until it turns into a left resize
 pointer.  The click and drag right.  The preview region should have
 changed and the slider resized proportionally.
-
-   <p>Go to the right of the timebar until a right resize pointer appears. 
+</p>
+<p>Go to the right of the timebar until a right resize pointer appears. 
 Drag left so the preview region shrinks.
-
-   <p>Go to the center of the preview region in the timebar and drag it
+</p>
+<p>Go to the center of the preview region in the timebar and drag it
 around to convince yourself if can be moved.
+</p>
 
-   <pre class="sp">
-
-</pre>
+<br>
 
-<img src="previewregion.png" alt="previewregion.png">
+<img src="previewregion.png" alt="previewregion">
 
-   <p><b>Preview region in compositor</b>
-
-   <p>If you go to the slider and slide it around with the preview region
-shrunk, you'll see the slider only affects the preview region.  The
+<p><b>Preview region in compositor</b>
+</p>
+<p>If you go to the slider and slide it around with the preview region
+shrunk, you&rsquo;ll see the slider only affects the preview region.  The
 timebar and slider in the viewer window work exactly the same.
-
-   <p>Labels and in/out points are fully supported in the viewer and
+</p>
+<p>Labels and in/out points are fully supported in the viewer and
 compositor.  The only difference between the viewer and compositor is
 the compositor reflects the state of the program while the viewer
 reflects the state of a clip but not the program.
-
-   <p>When you hit the <b>label button</b> in the compositor, the label
+</p>
+<p>When you hit the <b>label button</b> in the compositor, the label
 appears both in the compositor timebar and the program timebar.
-
-   <p>When you select a label or in/out point in the compositor, the program
+</p>
+<p>When you select a label or in/out point in the compositor, the program
 window jumps to that position.
-
-   <pre class="sp">
-
-</pre>
-<img src="viewer_labels.png" alt="viewer_labels.png"> <b>Labels and in/out points in the viewer</b>.
-
-   <p>In the viewer and compositor, labels and in/out points are displayed in
+</p>
+<br>
+<img src="viewer_labels.png" alt="viewer_labels"> <p><b>Labels and in/out points in the viewer</b>.
+</p>
+<p>In the viewer and compositor, labels and in/out points are displayed in
 the timebar.  Instead of displaying just a region of the program, the
 timebar displays the entire program here.
+</p>
+
 
-   <p>Like the Program window, the Compositor has a zoom capability.  First,
+<p>Like the Program window, the Compositor has a zoom capability.  First,
 the pulldown menu on the bottom of the compositor window has a number
 of zoom options.  When set to <b>Auto</b> the video is zoomed to match
 the compositor window size as closely as possible.  When set to any
@@ -3520,442 +3860,466 @@ be used to scroll around the output.  When the video is zoomed bigger
 than the window size, not only do scrollbars scan around it but
 <b>middle mouse button</b> dragging in the video output scans around
 it.  This is exactly when The Gimp does.
+</p>
+<p>Furthermore, the zoom <img src="magnify.png" alt="magnify"> toggle causes the Compositor
+window to enter zoom mode.  In zoom mode, clicking in the video output
+zooms in while <b>ctrl-clicking</b> in the video output zooms out.  If
+you have a wheel mouse, rotating the wheel zooms in or out too.
+</p>
+<p>Zooming in or out with the zoom tool does not change the rendered
+output, mind you.  It&rsquo;s merely for scrutinizing video or fitting it in
+the desktop.
+</p>
+
+
 
-   <p>Furthermore, the zoom <img src="magnify.png" alt="magnify.png"> toggle causes the Compositor
-window to enter zoom mode.  In zoom mode, clicking in the video output
-zooms in while <b>ctrl-clicking</b> in the video output zooms out.  If
-you have a wheel mouse, rotating the wheel zooms in or out too.
 
-   <p>Zooming in or out with the zoom tool does not change the rendered
-output, mind you.  It's merely for scrutinizing video or fitting it in
-the desktop.
 
-<div class="node">
+<hr>
 <a name="NAVIGATING-THE-RESOURCES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-THE-TRANSPORT-CONTROLS">USING THE TRANSPORT CONTROLS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>
-
+<div class="header">
+<p>
+Next: <a href="#USING-THE-TRANSPORT-CONTROLS" accesskey="n" rel="next">USING THE TRANSPORT CONTROLS</a>, Previous: <a href="#NAVIGATING-THE-VIEWER-AND-COMPOSITOR" accesskey="p" rel="prev">NAVIGATING THE VIEWER AND COMPOSITOR</a>, Up: <a href="#NAVIGATING-THE-PROJECT" accesskey="u" rel="up">NAVIGATING THE PROJECT</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="NAVIGATING-THE-RESOURCES-1"></a>
 <h3 class="section">8.3 NAVIGATING THE RESOURCES</h3>
 
 <p>The resource window is divided into two areas.  One area lists folders
 and another area lists folder contents.  Going into the folder list and
 clicking on a folder updates the contents area with the contents of
 that folder.
-
-   <p>The folder and contents can be displayed as icons or text.
-
-   <p><b>Right clicking</b> in the folder or contents area brings up a menu
+</p>
+<p>The folder and contents can be displayed as icons or text.
+</p>
+<p><b>Right clicking</b> in the folder or contents area brings up a menu
 containing formatting options.  Select <b>Display text</b> to display a
 text listing.  Select <b>Sort items</b> to sort the contents of the
 folder alphabetically.
+</p>
+
+
 
-<div class="node">
-<a name="USING-THE-TRANSPORT-CONTROLS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-BACKGROUND-RENDERING">USING BACKGROUND RENDERING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#NAVIGATING-THE-RESOURCES">NAVIGATING THE RESOURCES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>
 
-</div>
 
+
+
+<hr>
+<a name="USING-THE-TRANSPORT-CONTROLS"></a>
+<div class="header">
+<p>
+Next: <a href="#USING-BACKGROUND-RENDERING" accesskey="n" rel="next">USING BACKGROUND RENDERING</a>, Previous: <a href="#NAVIGATING-THE-RESOURCES" accesskey="p" rel="prev">NAVIGATING THE RESOURCES</a>, Up: <a href="#NAVIGATING-THE-PROJECT" accesskey="u" rel="up">NAVIGATING THE PROJECT</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="USING-THE-TRANSPORT-CONTROLS-1"></a>
 <h3 class="section">8.4 USING THE TRANSPORT CONTROLS</h3>
 
 <p>Transport controls are just as useful in navigation as they are in
 playing back footage, hence they are described here in the navigation
 section.  Each of the Viewer, Compositor, and Program windows has a
 transport panel.
-
-   <pre class="sp">
-
-</pre>
-<img src="transport_panel.png" alt="transport_panel.png"> <b>The transport panel</b>.
-
-   <p>The transport panel is controlled by the keyboard as well as the
+</p>
+<br>
+<img src="transport_panel.png" alt="transport_panel"> <p><b>The transport panel</b>.
+</p>
+<p>The transport panel is controlled by the keyboard as well as the
 graphical interface.  For each of the operations it performs, the
 starting position is the position of the insertion point in the Program
 window and the slider in the Compositor window.  The ending position is
 either the end or start of the timeline or the end or start of the
 selected region if there is one.
-
-   <p>The orientation of the end or start depends on the direction of
-playback.  If it's forward the end position is the end of the selected
-region.  If it's backward the end position is the start of the selected
+</p>
+<p>The orientation of the end or start depends on the direction of
+playback.  If it&rsquo;s forward the end position is the end of the selected
+region.  If it&rsquo;s backward the end position is the start of the selected
 region.
-
-   <p>The insertion point moves to track playback.  When playback stops, the
+</p>
+<p>The insertion point moves to track playback.  When playback stops, the
 insertion point stays where playback stopped.  Thus, by playing back
 you change the position of the insertion point.
-
-   <p>The keyboard interface is usually the fastest and has more speeds.  The
+</p>
+<p>The keyboard interface is usually the fastest and has more speeds.  The
 transport keys are arranged in a sideways <b>T</b> on the number pad.
+</p>
+<ul>
+<li> <b>+</b> Fast reverse
+</li><li> <b>6</b> Normal reverse
+</li><li> <b>5</b> Slow reverse
+</li><li> <b>4</b> Frame reverse
+</li><li> <b>1</b> Frame forward
+</li><li> <b>2</b> Slow forward
+</li><li> <b>3</b> Normal forward
+</li><li> <b>Enter</b> Fast forward
+</li><li> <b>0</b> Stop
+</li><li> <b>Spacebar</b> Normal forward
+</li></ul>
 
-     <ul>
-<li><b>+</b> Fast reverse
-<li><b>6</b> Normal reverse
-<li><b>5</b> Slow reverse
-<li><b>4</b> Frame reverse
-<li><b>1</b> Frame forward
-<li><b>2</b> Slow forward
-<li><b>3</b> Normal forward
-<li><b>Enter</b> Fast forward
-<li><b>0</b> Stop
-<li><b>Spacebar</b> Normal forward
-</ul>
-
-   <p>Hitting any key on the keyboard twice pauses it.
-
-   <p>When using frame advance functions the behavior may seem odd.  If you
+<p>Hitting any key on the keyboard twice pauses it.
+</p>
+<p>When using frame advance functions the behavior may seem odd.  If you
 frame advance forward and then frame advance backward, the displayed
-frame doesn't change.  This is because the playback position isn't the
+frame doesn&rsquo;t change.  This is because the playback position isn&rsquo;t the
 frame but the time between two frames.  The rendered frame is the area
 that the playback position crosses.  When you increment the time
 between two frames by one and decrement it by one, you cross the same
 frame both times and so the same frame is displayed.
-
-   <p>The transport behavior changes if you hold down CTRL when issuing any
+</p>
+<p>The transport behavior changes if you hold down CTRL when issuing any
 of the transport commands.  This causes the starting point to be the in
 point if playing forward and the out point if playing backward.  If
 playing forward, the out point becomes the ending point and if playing
 backward, the in point becomes the ending point.  If no in/out points
 are specified, the behavior falls back to using the insertion point and
 track boundaries as the starting and ending points.
+</p>
 
-<div class="node">
-<a name="USING-BACKGROUND-RENDERING"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#USING-THE-TRANSPORT-CONTROLS">USING THE TRANSPORT CONTROLS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>
 
+<hr>
+<a name="USING-BACKGROUND-RENDERING"></a>
+<div class="header">
+<p>
+Previous: <a href="#USING-THE-TRANSPORT-CONTROLS" accesskey="p" rel="prev">USING THE TRANSPORT CONTROLS</a>, Up: <a href="#NAVIGATING-THE-PROJECT" accesskey="u" rel="up">NAVIGATING THE PROJECT</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="USING-BACKGROUND-RENDERING-1"></a>
 <h3 class="section">8.5 USING BACKGROUND RENDERING</h3>
 
+
+
 <p>Background rendering allows impossibly slow effects to play back in
 realtime shortly after the effect is pasted in the timeline.  It
 continuously renders temporary output.  When renderfarm is enabled,
 background rendering uses the renderfarm continuously.  This way, any
 size video can be seen in realtime merely by creating a fast enough
 network with enough nodes.
-
-   <p>Background rendering is enabled in settings-&gt;preferences-&gt;performance. 
+</p>
+<p>Background rendering is enabled in settings-&gt;preferences-&gt;performance. 
 It has one interactive function: <b>settings-&gt;set background render</b>.  This
 sets the point where background rendering begins to where the in point
 is.  If any video exists, a red bar appears in the time bar showing
 what has been background rendered.
-
-   <p>It's often useful to insert an effect or a transition and then select
+</p>
+<p>It&rsquo;s often useful to insert an effect or a transition and then select
 settings-&gt;set background render right before the effect to preview it
 in full framerates.
+</p>
 
-<div class="node">
-<a name="EDITING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-EFFECTS">USING EFFECTS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#NAVIGATING-THE-PROJECT">NAVIGATING THE PROJECT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
+<hr>
+<a name="EDITING"></a>
+<div class="header">
+<p>
+Next: <a href="#USING-EFFECTS" accesskey="n" rel="next">USING EFFECTS</a>, Previous: <a href="#NAVIGATING-THE-PROJECT" accesskey="p" rel="prev">NAVIGATING THE PROJECT</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="EDITING-1"></a>
 <h2 class="chapter">9 EDITING</h2>
 
+
 <p>Editing comprises both the time domain and the track domain.  Since the
 timeline consists of a stack of tracks, you need to worry about how to
 sort and create tracks in addition to what time certain media appears
 on a track.
-
-   <p>In the time domain, Cinelerra offers many ways to approach the editing
+</p>
+<p>In the time domain, Cinelerra offers many ways to approach the editing
 process.  The three main methods are two screen editing, drag and drop
 editing, and cut and paste editing.
-
-   <p>There are several concepts Cinelerra uses when editing which apply to
+</p>
+<p>There are several concepts Cinelerra uses when editing which apply to
 all the methods.  The <b>timeline</b> is where all editing decisions are
 represented.  This is a stack of tracks in the center of the main
 window.  It can be scrolled up, down, left and right with the
 scrollbars on the right and bottom of it.  It can also be scrolled up
 and down with a mouse wheel.
-
-   <p>The <b>active region</b> is the range of time which is affected by editing
+</p>
+<p>The <b>active region</b> is the range of time which is affected by editing
 commands on the timeline.  The active region is determined first by the
-presence of in/out points in the timeline.  If those don't exist the
+presence of in/out points in the timeline.  If those don&rsquo;t exist the
 highlighted region is used.  If no highlighted region exists the
 insertion point is used as the start of the active region.  Some
 commands treat all the space to the right of the insertion point as
 active, like <b>Render</b>, while others treat the active length as 0 if no
 end point for the active region is defined.
-
-   <p>Finally, editing decisions never affect source material.  This is
+</p>
+<p>Finally, editing decisions never affect source material.  This is
 <b>non destructive editing</b> and it became popular with audio because it
 was much faster than if you had to copy all the media affected by an
 edit.  Editing only affects pointers to source material, so if you want
 to have a media file at the end of your editing session which
-represents the editing decisions, you need to <b>render</b> it. 
+represents the editing decisions, you need to <b>render</b> it.
 See <a href="#RENDERING-FILES">RENDERING FILES</a>.
-
-   <p>Every track on the timeline has a set of attributes on
+</p>
+<p>Every track on the timeline has a set of attributes on
 the left, the most important of which is the <b>arm track</b>
 attribute.
-
-<ul class="menu">
-<li><a accesskey="1" href="#THE-PATCHBAY">THE PATCHBAY</a>:            Enabling different features on different tracks
-<li><a accesskey="2" href="#NUDGING-TRACKS">NUDGING TRACKS</a>:          Move entire tracks horizontally
-<li><a accesskey="3" href="#PANNING-TRACKS">PANNING TRACKS</a>:          Changing the audio output channels
-<li><a accesskey="4" href="#AUTOMATIC-TRACK-PANNING">AUTOMATIC TRACK PANNING</a>:   Panning tracks to common speaker arrangements
-<li><a accesskey="5" href="#STANDARD-AUDIO-MAPPINGS">STANDARD AUDIO MAPPINGS</a>:   Making audio panning that works on other players. 
-<li><a accesskey="6" href="#MANIPULATING-TRACKS">MANIPULATING TRACKS</a>:     Moving whole tracks around
-<li><a accesskey="7" href="#TWO-SCREEN-EDITING">TWO SCREEN EDITING</a>:      Using two video windows to edit
-<li><a accesskey="8" href="#DRAG-AND-DROP-EDITING">DRAG AND DROP EDITING</a>:   Dragging objects to edit
-<li><a accesskey="9" href="#CUT-AND-PASTE-EDITING">CUT AND PASTE EDITING</a>:   Editing media like text
-<li><a href="#TRIMMING">TRIMMING</a>:                Changing in and out points
-</ul>
-
-<div class="node">
+</p>
+
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#THE-PATCHBAY" accesskey="1">THE PATCHBAY</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Enabling different features on different tracks
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#NUDGING-TRACKS" accesskey="2">NUDGING TRACKS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Move entire tracks horizontally
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PANNING-TRACKS" accesskey="3">PANNING TRACKS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Changing the audio output channels
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#AUTOMATIC-TRACK-PANNING" accesskey="4">AUTOMATIC TRACK PANNING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Panning tracks to common speaker arrangements
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#STANDARD-AUDIO-MAPPINGS" accesskey="5">STANDARD AUDIO MAPPINGS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Making audio panning that works on other players.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MANIPULATING-TRACKS" accesskey="6">MANIPULATING TRACKS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving whole tracks around
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TWO-SCREEN-EDITING" accesskey="7">TWO SCREEN EDITING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using two video windows to edit
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DRAG-AND-DROP-EDITING" accesskey="8">DRAG AND DROP EDITING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Dragging objects to edit
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CUT-AND-PASTE-EDITING" accesskey="9">CUT AND PASTE EDITING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Editing media like text
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TRIMMING">TRIMMING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Changing in and out points
+</td></tr>
+</table>
+
+
+<hr>
 <a name="THE-PATCHBAY"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#NUDGING-TRACKS">NUDGING TRACKS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
-
+<div class="header">
+<p>
+Next: <a href="#NUDGING-TRACKS" accesskey="n" rel="next">NUDGING TRACKS</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="THE-PATCHBAY-1"></a>
 <h3 class="section">9.1 THE PATCHBAY</h3>
 
+
 <p>On the left of the timeline is a region affectionately known as the
 patchbay.  The patchbay enables features specific to each track.  All
 tracks have a text area for naming the track.
-
-   <p>All tracks have an <b>expander</b> <img src="expandpatch_checked.png" alt="expandpatch_checked.png"> for viewing
+</p>
+<p>All tracks have an <b>expander</b> <img src="expandpatch_checked.png" alt="expandpatch_checked"> for viewing
 more options and for viewing the effects on the track.  Click on the
-expander to expand or collapse the track.  If it's pointing sideways,
-the track is collapsed.  If it's pointing down, the track is expanded. 
+expander to expand or collapse the track.  If it&rsquo;s pointing sideways,
+the track is collapsed.  If it&rsquo;s pointing down, the track is expanded. 
 The effects appear below the media for the track if they exist.
-
-   <p>All tracks have the following row of toggles for several features.
-
-   <pre class="sp">
-
-</pre>
-<img src="track_attributes.png" alt="track_attributes.png">
-<b>Track attributes</b>
-
-   <p>If the toggle is colored, it is enabled.  If the toggle is the
+</p>
+<p>All tracks have the following row of toggles for several features.
+</p>
+<br>
+<img src="track_attributes.png" alt="track_attributes">
+<p><b>Track attributes</b>
+</p>
+
+<p>If the toggle is colored, it is enabled.  If the toggle is the
 background color of most of the windows, it is disabled.  Click on the
 toggle to enable or disable the feature.  Several mouse operations
 speed up the configuration of several tracks at a time.
-
-   <p>Click on an attribute and drag across adjacent tracks to copy the same
+</p>
+<p>Click on an attribute and drag across adjacent tracks to copy the same
 attribute to those tracks.
-
-   <p>Hold down <b>shift</b> while clicking a track's attribute to enable the
+</p>
+<p>Hold down <b>shift</b> while clicking a track&rsquo;s attribute to enable the
 attribute in the current track and toggle the attribute in all the
 other tracks.
-
-   <p>Hold down <b>shift</b> while clicking an attribute.  Click until all the
+</p>
+<p>Hold down <b>shift</b> while clicking an attribute.  Click until all the
 tracks except the selected one are disabled.  Then drag the cursor over
 the adjacent track to enable the attribute in the adjacent track.
+</p>
 
-   <p>The other attributes affect the output of the track.
-
-     <ul>
-<li>
+<p>The other attributes affect the output of the track.
+</p>
+<ul>
+<li> 
 <b>Play track</b> determines whether the track is rendered or not.  If
-it's off, the track is not rendered.  However, if the track is chained
+it&rsquo;s off, the track is not rendered.  However, if the track is chained
 to any other tracks, the other tracks perform all the effects in the
 chained track, regardless of play status.
-     <pre class="sp">
-     
-     </pre>
-     
-<li>
+<br>
+
+</li><li> 
 <b>Arm track</b> determines whether the track is armed or not.   Only the
 <b>armed tracks</b> are affected by editing operations.  Make sure you
 have enough armed destination tracks when you paste or splice material
 or some tracks in the material will get left out.
 
-     <p>In addition to restricting editing operations, the armed tracks in
+<p>In addition to restricting editing operations, the armed tracks in
 combination with the active region determine where material is inserted
 when loading files.  If the files are loaded with one of the insertion
-strategies which doesn't delete the existing project, the armed tracks
+strategies which doesn&rsquo;t delete the existing project, the armed tracks
 will be used as destination tracks.
-
-     <p>Press <b>Tab</b> while the cursor is anywhere over a track to toggle the
+</p>
+<p>Press <b>Tab</b> while the cursor is anywhere over a track to toggle the
 track arming status.
-
-     <p>Press <b>Shift-Tab</b> while the cursor is over a track to toggle the
+</p>
+<p>Press <b>Shift-Tab</b> while the cursor is over a track to toggle the
 arming status of every other track.
-
-     <li>
+</p>
+</li><li> 
 <b>Gang fader</b> causes the fader to track the movement of whatever other
-fader you're adjusting.  A fader is only ganged if the <b>arm track</b> is
+fader you&rsquo;re adjusting.  A fader is only ganged if the <b>arm track</b> is
 also on.  This is normally used to adjust audio levels on all the
 tracks simultaneously.  Gang also causes <b>Nudge</b> parameters to
 synchronise across all the ganged tracks.
 
-     <pre class="sp">
-     
-     </pre>
-     
-<li>
+
+<br>
+
+</li><li> 
 <b>Draw media</b> determines if picons or waveforms are drawn on the
 track.  By default, some file formats load with this off while other
 file formats load with it on.  This depends on whether the file format
 takes a long time to draw on the timeline.  Merely set it to on if you
 want to see picons for any file format.
-     <pre class="sp">
-     
-     </pre>
-     
-<li>
+<br>
+
+</li><li> 
 <b>Mute track</b> causes the output to be thrown away once the track is
 completely rendered.  This happens whether or not <b>play track</b> is
 on.  If the track is part of an effect chain, the output of the effect
-chain track is overlayed on the final output even though it's routed
+chain track is overlayed on the final output even though it&rsquo;s routed
 back to another track.  Mute track is used to keep the effect chain
 track from overlapping the output of the source track.
-     <pre class="sp">
-     
-     </pre>
-     
-<li>
+<br>
+
+</li><li> 
 <b>Fader</b> All tracks have a fader, but the units of each fader depend
-on whether it's audio or video.  Click and drag the fader to fade the
+on whether it&rsquo;s audio or video.  Click and drag the fader to fade the
 track in and out.  If it is ganged to other tracks of the same media
 type, with the <b>arm</b> option enabled, the other faders should follow.
 
-     <p>Hold down <b>shift</b> and drag a fader to center it on 0.
+<p>Hold down <b>shift</b> and drag a fader to center it on 0.
+</p>
+</li></ul>
 
-   </ul>
 
-<div class="node">
-<a name="NUDGING-TRACKS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PANNING-TRACKS">PANNING TRACKS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-PATCHBAY">THE PATCHBAY</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
+<hr>
+<a name="NUDGING-TRACKS"></a>
+<div class="header">
+<p>
+Next: <a href="#PANNING-TRACKS" accesskey="n" rel="next">PANNING TRACKS</a>, Previous: <a href="#THE-PATCHBAY" accesskey="p" rel="prev">THE PATCHBAY</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="NUDGING-TRACKS-1"></a>
 <h3 class="section">9.2 NUDGING TRACKS</h3>
 
 <p>Each track has a nudge textbox in its patchbay.  You may have to expand
 the track to see it.  These are views of the patchbays when expanded.
+</p>
+<img src="apatches.png" alt="apatches">
 
-   <div class="block-image"><img src="apatches.png" alt="apatches.png"></div>
+<p>Pan and nudge for an audio track.
+</p>
+<img src="vpatches.png" alt="vpatches">
 
-   <p>Pan and nudge for an audio track.
+<p>Overlay mode and nudge for a video track.
+</p>
 
-   <div class="block-image"><img src="vpatches.png" alt="vpatches.png"></div>
-
-   <p>Overlay mode and nudge for a video track.
-
-   <p>The nudge is the amount the track is shifted left or right during
+<p>The nudge is the amount the track is shifted left or right during
 playback.  The track is not displayed shifted on the timeline, but it
-is shifted when it's played back.  This is useful for synchronizing
+is shifted when it&rsquo;s played back.  This is useful for synchronizing
 audio with video, creating fake stereo, or compensating for an effect
 which shifts time, all without tampering with any edits.
-
-   <p>Merely enter in the amount of time to shift by to instantly shift the
+</p>
+<p>Merely enter in the amount of time to shift by to instantly shift the
 track.  Negative numbers make the track play later.  Positive numbers
 make the track play sooner.  The nudge units are either <b>seconds</b> or
 the native units for the track.  Select the units by <b>right clicking</b>
 on the nudge textbox and using the context sensitive menu.
-
-   <p>Nudge settings are ganged with the <b>Gang faders</b> toggle and the
+</p>
+<p>Nudge settings are ganged with the <b>Gang faders</b> toggle and the
 <b>Arm track</b> toggle.
-
-   <p>Use the mouse wheel over the nudge textbox to increment and decriment
+</p>
+<p>Use the mouse wheel over the nudge textbox to increment and decriment
 it.
+</p>
+
 
-<div class="node">
-<a name="PANNING-TRACKS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AUTOMATIC-TRACK-PANNING">AUTOMATIC TRACK PANNING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#NUDGING-TRACKS">NUDGING TRACKS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
-</div>
 
+<hr>
+<a name="PANNING-TRACKS"></a>
+<div class="header">
+<p>
+Next: <a href="#AUTOMATIC-TRACK-PANNING" accesskey="n" rel="next">AUTOMATIC TRACK PANNING</a>, Previous: <a href="#NUDGING-TRACKS" accesskey="p" rel="prev">NUDGING TRACKS</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="PANNING-TRACKS-1"></a>
 <h3 class="section">9.3 PANNING TRACKS</h3>
 
 <p>Audio tracks have a panning box in their patchbay.  It may have to be
 expanded to see it.  The panning box is shown here.
+</p>
+<img src="apatches.png" alt="apatches">
 
-   <div class="block-image"><img src="apatches.png" alt="apatches.png"></div>
-
-   <p>Pan and nudge for an audio track.
-
-   <p>Position the pointer in the panning box and click/drag to reposition
+<p>Pan and nudge for an audio track.
+</p>
+<p>Position the pointer in the panning box and click/drag to reposition
 the audio output among the speaker arrangement.  The loudness of each
 speaker is printed during the dragging operation.  The panning box uses
 a special algorithm to try to allow audio to be focused through one
 speaker or branched between the nearest speakers when more than 2
 speakers are used.
+</p>
 
-<div class="node">
-<a name="AUTOMATIC-TRACK-PANNING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#STANDARD-AUDIO-MAPPINGS">STANDARD AUDIO MAPPINGS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PANNING-TRACKS">PANNING TRACKS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
+<hr>
+<a name="AUTOMATIC-TRACK-PANNING"></a>
+<div class="header">
+<p>
+Next: <a href="#STANDARD-AUDIO-MAPPINGS" accesskey="n" rel="next">STANDARD AUDIO MAPPINGS</a>, Previous: <a href="#PANNING-TRACKS" accesskey="p" rel="prev">PANNING TRACKS</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="AUTOMATIC-TRACK-PANNING-1"></a>
 <h3 class="section">9.4 AUTOMATIC TRACK PANNING</h3>
 
+
 <p>Several convenience functions are provided for automatically setting
 the panning to several common standards.  They are listed in the
 <b>Audio</b> menu.  These functions only affect audio tracks with
 <b>recording</b> enabled.
-
-   <p><b>Audio-&gt;Map 1:1</b> - This maps every track to its own channel and wraps
-around when all the channels are allocated.  It's most useful for
+</p>
+<p><b>Audio-&gt;Map 1:1</b> - This maps every track to its own channel and wraps
+around when all the channels are allocated.  It&rsquo;s most useful for
 making 2 tracks with 2 channels map to stereo and for making 6 tracks
 with 6 channels map to a 6 channel soundcard.
-
-   <p><b>Audio-&gt;Map 5.1:2</b> - This maps 6 tracks to 2 channels.  The project
+</p>
+<p><b>Audio-&gt;Map 5.1:2</b> - This maps 6 tracks to 2 channels.  The project
 should have 2 channels when using this function.  Go to
 <b>Settings-&gt;format</b> to set the output channels to 2.  This is most
 useful for downmixing 5.1 audio to stereo.
+</p>
 
-<div class="node">
-<a name="STANDARD-AUDIO-MAPPINGS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MANIPULATING-TRACKS">MANIPULATING TRACKS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AUTOMATIC-TRACK-PANNING">AUTOMATIC TRACK PANNING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
-</div>
 
+
+<hr>
+<a name="STANDARD-AUDIO-MAPPINGS"></a>
+<div class="header">
+<p>
+Next: <a href="#MANIPULATING-TRACKS" accesskey="n" rel="next">MANIPULATING TRACKS</a>, Previous: <a href="#AUTOMATIC-TRACK-PANNING" accesskey="p" rel="prev">AUTOMATIC TRACK PANNING</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="STANDARD-AUDIO-MAPPINGS-1"></a>
 <h3 class="section">9.5 STANDARD AUDIO MAPPINGS</h3>
 
 <p>Although Cinelerra lets you map any audio track to any speaker, there
 are standard mappings you should use to ensure the media can be played
 back elsewhere.  Also, most audio encoders require the audio tracks to
-be mapped to standard speaker numbers or they won't work.
-
-   <p>In the <b>channel position</b> widget See <a href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>,
+be mapped to standard speaker numbers or they won&rsquo;t work.
+</p>
+<p>In the <b>channel position</b> widget See <a href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>,
 the channels are numbered to correspond to the output tracks they are
 rendered to.  For stereo, the source of channel 1 needs to be the left
 track and the source of channel 2 needs to be the right track.
-
-   <p>For 5.1 surround sound, the sources of the 6 channels need to be in the
+</p>
+<p>For 5.1 surround sound, the sources of the 6 channels need to be in the
 order of center, front left, front right, back left, back right, low
-frequency effects.  If the right tracks aren't mapped to the right
-speakers, most audio encoders won't encode the right information if
+frequency effects.  If the right tracks aren&rsquo;t mapped to the right
+speakers, most audio encoders won&rsquo;t encode the right information if
 they encode anything at all.  The low frequency effects track
-specifically can't store high frequencies in most cases.
+specifically can&rsquo;t store high frequencies in most cases.
+</p>
+
 
-<div class="node">
-<a name="MANIPULATING-TRACKS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TWO-SCREEN-EDITING">TWO SCREEN EDITING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#STANDARD-AUDIO-MAPPINGS">STANDARD AUDIO MAPPINGS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
-</div>
 
+<hr>
+<a name="MANIPULATING-TRACKS"></a>
+<div class="header">
+<p>
+Next: <a href="#TWO-SCREEN-EDITING" accesskey="n" rel="next">TWO SCREEN EDITING</a>, Previous: <a href="#STANDARD-AUDIO-MAPPINGS" accesskey="p" rel="prev">STANDARD AUDIO MAPPINGS</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="MANIPULATING-TRACKS-1"></a>
 <h3 class="section">9.6 MANIPULATING TRACKS</h3>
 
 <p>Tracks in Cinelerra either contain audio or video.  There is no special
@@ -3965,25 +4329,25 @@ tracks.  You can still add or delete tracks from a number of menus.
 The <b>Tracks</b> menu contains a number of options for dealing with
 multiple tracks simultaneously.  Each track itself has a popup menu
 which affects one track.
-
-   <p>Bring up the popup menu by moving over a track and right clicking.  The
-popup menu affects the track whether it's armed or not.
-
-   <p><b>Move up</b> and <b>move down</b> moves the one track up or down in
+</p>
+<p>Bring up the popup menu by moving over a track and right clicking.  The
+popup menu affects the track whether it&rsquo;s armed or not.
+</p>
+<p><b>Move up</b> and <b>move down</b> moves the one track up or down in
 the stack.  <b>Delete track</b> deletes the track.
-
-   <p>Operations in the <b>Tracks</b> menu affect only tracks which are
+</p>
+<p>Operations in the <b>Tracks</b> menu affect only tracks which are
 armed.
-
-   <p><b>Move tracks up</b> and <b>Move tracks down</b> shift all the armed
+</p>
+<p><b>Move tracks up</b> and <b>Move tracks down</b> shift all the armed
 tracks up or down the stack.
-
-   <p><b>Delete tracks</b> deletes the armed tracks.
-
-   <p><b>Delete last track</b> deletes the last track, whether it's armed or
+</p>
+<p><b>Delete tracks</b> deletes the armed tracks.
+</p>
+<p><b>Delete last track</b> deletes the last track, whether it&rsquo;s armed or
 not.  Holding down the <b>d</b> key quickly deletes all the tracks.
-
-   <p><b>Concatenate tracks</b> is more complicated.  It takes every
+</p>
+<p><b>Concatenate tracks</b> is more complicated.  It takes every
 <b>playable</b> track and concatenates it to the end of the first
 <b>armed tracks</b>.  If there are two armed tracks followed by two
 playable tracks, the concatenate operation puts the two playable tracks
@@ -3991,24 +4355,30 @@ after the two armed tracks.  If there are three playable tracks
 instead, two tracks are put after the armed tracks and a third track is
 put on the end of the first armed track.  The destination track wraps
 around until all the playable tracks are concatenated.
-
-   <p>Finally, you'll want to create new tracks.  The <b>Audio</b> and
+</p>
+<p>Finally, you&rsquo;ll want to create new tracks.  The <b>Audio</b> and
 <b>Video</b> menus each contain an option to add a track of their
 specific type.  In the case of audio, the new track is put on the
 bottom of the timeline and the output channel of the audio track is
 incremented by one.  In the case of video, the new track is put on the
 top of the timeline.  This way, video has a natural compositing order. 
 New video tracks are overlayed on top of old tracks.
+</p>
 
-<div class="node">
-<a name="TWO-SCREEN-EDITING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DRAG-AND-DROP-EDITING">DRAG AND DROP EDITING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MANIPULATING-TRACKS">MANIPULATING TRACKS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
-</div>
 
+
+
+
+
+
+<hr>
+<a name="TWO-SCREEN-EDITING"></a>
+<div class="header">
+<p>
+Next: <a href="#DRAG-AND-DROP-EDITING" accesskey="n" rel="next">DRAG AND DROP EDITING</a>, Previous: <a href="#MANIPULATING-TRACKS" accesskey="p" rel="prev">MANIPULATING TRACKS</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TWO-SCREEN-EDITING-1"></a>
 <h3 class="section">9.7 TWO SCREEN EDITING</h3>
 
 <p>This is the fastest way to construct a program out of movie files.  The
@@ -4016,178 +4386,198 @@ idea consists of viewing a movie file in one window and viewing the
 program in another window.  Sections of the movie file are defined in
 one window and transferred to the end of the program in the other
 window.
-
-   <p>The way to begin a two screen editing session is to load some
+</p>
+<p>The way to begin a two screen editing session is to load some
 resources.  In <b>file-&gt;load</b> load some movies with the insertion
 mode <b>create new resources</b>.  You want the timeline to stay
 unchanged while new resources are brought in.  Go to the Resource
 Window and select the <b>media</b> folder.  The newly loaded resources
 should appear.  Drag a resource from the media side of the window over
 the Viewer window.
-
-   <p>There should be enough armed tracks on the timeline to put the sections
-of source material that you want.  If there aren't, create new tracks
+</p>
+<p>There should be enough armed tracks on the timeline to put the sections
+of source material that you want.  If there aren&rsquo;t, create new tracks
 or arm more tracks.
-
-   <p>In the viewer window seek to the starting point of a clip you want to
+</p>
+<p>In the viewer window seek to the starting point of a clip you want to
 use.  Use either the <b>slider</b> or the <b>transport controls</b>. 
 Use the <b>preview region</b> to narrow down the search.  Set the
-starting point with the <img src="in_point_button.png" alt="in_point_button.png"> <b>in point button</b>.
-
-   <p>Seek to the ending point of the clip you want to use.  Set the ending
-point with the <img src="out_point_button.png" alt="out_point_button.png"> <b>out point button</b>.  The
+starting point with the <img src="in_point_button.png" alt="in_point_button"> <b>in point button</b>.
+</p>
+<p>Seek to the ending point of the clip you want to use.  Set the ending
+point with the <img src="out_point_button.png" alt="out_point_button"> <b>out point button</b>.  The
 two points should now appear on the timebar and define a clip.
-
-   <p>There are several things you can do with the clip now.
-
-     <ul>
-<li>
-Splice <img src="splice_button.png" alt="splice_button.png"> inserts the clip in the timeline, pushing
+</p>
+<p>There are several things you can do with the clip now.
+</p>
+<ul>
+<li> 
+Splice <img src="splice_button.png" alt="splice_button"> inserts the clip in the timeline, pushing
 everything back.  If an <b>in point</b> or <b>out point</b> exists on
-the timeline it's inserted there, otherwise it's inserted after the
+the timeline it&rsquo;s inserted there, otherwise it&rsquo;s inserted after the
 insertion point.  After that, the insertion point moves to the end of
 the clip.  If there is no in/out point, the insertion point will be
 used as the next splice location.  This way you can continuously build
 up the program by splicing.
 
-     <li>
-Overwrite <img src="overwrite_button.png" alt="overwrite_button.png"> overwrites the region of the
+</li><li> 
+Overwrite <img src="overwrite_button.png" alt="overwrite_button"> overwrites the region of the
 timeline with the clip.  If an <b>in point</b> or <b>out point</b>
-exists on the timeline it's overwritten there, otherwise it's
+exists on the timeline it&rsquo;s overwritten there, otherwise it&rsquo;s
 overwritten after the insertion point.  If a region is highlighted or
 both in and out points exist the difference between the active region
 and the clip length is deleted.
 
-     <li>
-Create a clip <img src="toclip_button.png" alt="toclip_button.png"> generates a new clip for the
-resource window containing the affected region but doesn't change the
+
+
+</li><li> 
+Create a clip <img src="toclip_button.png" alt="toclip_button"> generates a new clip for the
+resource window containing the affected region but doesn&rsquo;t change the
 timeline.  Every clip has a title and a description.  These are
 optional.
 
-     <li>
+</li><li> 
 Copy behaves the same as in cut and paste editing.
 
-   </ul>
+</li></ul>
 
-   <p>Two screen editing can be done purely by keybard shortcuts.  When you
+<p>Two screen editing can be done purely by keybard shortcuts.  When you
 move the pointer over any button a tooltip should appear, showing what
 key is bound to that button.  In the Viewer window, the number pad keys
 control the transport and the <b>[ ] v</b> keys perform in/out points
 and splicing.
+</p>
+
+
+
+
+
 
-<div class="node">
-<a name="DRAG-AND-DROP-EDITING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CUT-AND-PASTE-EDITING">CUT AND PASTE EDITING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TWO-SCREEN-EDITING">TWO SCREEN EDITING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
-</div>
 
+
+
+<hr>
+<a name="DRAG-AND-DROP-EDITING"></a>
+<div class="header">
+<p>
+Next: <a href="#CUT-AND-PASTE-EDITING" accesskey="n" rel="next">CUT AND PASTE EDITING</a>, Previous: <a href="#TWO-SCREEN-EDITING" accesskey="p" rel="prev">TWO SCREEN EDITING</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="DRAG-AND-DROP-EDITING-1"></a>
 <h3 class="section">9.8 DRAG AND DROP EDITING</h3>
 
 <p>The answer is yes, you can you create a bunch of clips and drag them on
 the timeline.  You can also drag edits around the timeline.
-
-   <p>Load some files using <b>file-&gt;load</b>.  Set the insertion mode to
+</p>
+<p>Load some files using <b>file-&gt;load</b>.  Set the insertion mode to
 <b>Create new resources</b>.  This loads the files into the Resource
 Window.  Create some audio and video tracks on the timeline using the
 video and audio menus.
-
-   <p>Open the <b>Media</b> folder in the resource window.  Drag a media file
+</p>
+<p>Open the <b>Media</b> folder in the resource window.  Drag a media file
 from the resource window to the timeline.  If the media has video, drag
 it onto a video track.  If the media is pure audio, drag it onto an
 audio track.
-
-   <p>Cinelerra fills out the audio and video tracks below the dragging
+</p>
+<p>Cinelerra fills out the audio and video tracks below the dragging
 cursor with data from the file.  This affects what tracks you should
 create initially and which track to drag the media onto.  If the media
-has one video track and two audio tracks, you'll need one video track
+has one video track and two audio tracks, you&rsquo;ll need one video track
 and two audio tracks on the timeline and the media should be dragged
-over the first video track.  If the media has audio only you'll need
+over the first video track.  If the media has audio only you&rsquo;ll need
 one audio track on the timeline for every audio track in the media and
 the media should be dragged over the first audio track.
-
-   <p>When dragging, the media snaps to the start of track if the track is
+</p>
+<p>When dragging, the media snaps to the start of track if the track is
 empty.  If there are edits on the track, the media snaps to the nearest
 edit boundary.
-
-   <p>You can also drag multiple files from the resource window.  Either draw
+</p>
+<p>You can also drag multiple files from the resource window.  Either draw
 a box around the files, use SHIFT, or use CTRL when selecting files. 
 When you drop the files in the timeline, they are concatenated.  The
 behavior of SHIFT and CTRL changes depending on if the resources are in
 text or icons.
-
-   <p>To display the resources as text or icons, right click inside the media
+</p>
+<p>To display the resources as text or icons, right click inside the media
 list.  Select either <b>display icons</b> or <b>display text</b> to
 change the list format.
-
-   <p>When displaying text in the resource window <b>SHIFT-clicking</b> on
+</p>
+<p>When displaying text in the resource window <b>SHIFT-clicking</b> on
 media files extends the number of highlighted selections. 
 <b>CTRL-clicking</b> on media files in text mode selects additional
 files one at a time.
-
-   <p>When displaying icons in the resource window <b>SHIFT-clicking</b> or
+</p>
+<p>When displaying icons in the resource window <b>SHIFT-clicking</b> or
 <b>CTRL-clicking</b> selects media files one at a time.
-
-   <p>In addition to dragging media files, if you create clips and open the
+</p>
+<p>In addition to dragging media files, if you create clips and open the
 <b>clip</b> folder you can drag clips on the timeline.
-
-   <p>In the timeline there is further dragging functionality.  To enable the
+</p>
+<p>In the timeline there is further dragging functionality.  To enable the
 dragging functionality of the timeline, select the arrow toggle
-<img src="arrow.png" alt="arrow.png">.  Move over an edit and drag it.  If more than one
+<img src="arrow.png" alt="arrow">.  Move over an edit and drag it.  If more than one
 track is armed, Cinelerra will drag any edits which start on the same
 position as the edit the cursur is currently over.  During a dragging
 operation the edit snaps to the nearest boundary.
-
-   <p>Dragging edits around the timeline allows you to sort music playlists,
+</p>
+<p>Dragging edits around the timeline allows you to sort music playlists,
 sort movie scenes, and give better NAB demos but not much else.
+</p>
+
+
+
+
+
+
+
 
-<div class="node">
-<a name="CUT-AND-PASTE-EDITING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TRIMMING">TRIMMING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DRAG-AND-DROP-EDITING">DRAG AND DROP EDITING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
-</div>
 
+<hr>
+<a name="CUT-AND-PASTE-EDITING"></a>
+<div class="header">
+<p>
+Next: <a href="#TRIMMING" accesskey="n" rel="next">TRIMMING</a>, Previous: <a href="#DRAG-AND-DROP-EDITING" accesskey="p" rel="prev">DRAG AND DROP EDITING</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CUT-AND-PASTE-EDITING-1"></a>
 <h3 class="section">9.9 CUT AND PASTE EDITING</h3>
 
 <p>This is the traditional method of editing in audio editors.  In the
 case of Cinelerra, you either need to start a second copy of Cinelerra
 and copy from one copy to the other, copy from different tracks in the
 same copy, or load a media file into the Viewer and copy from there.
-
-   <p>Load some files onto the timeline.  To perform cut and paste editing
-select the <img src="ibeam.png" alt="ibeam.png"> i-beam toggle.  Select a region of the
-timeline and select the <img src="cut.png" alt="cut.png"> cut button to cut it.  Move the
+</p>
+<p>Load some files onto the timeline.  To perform cut and paste editing
+select the <img src="ibeam.png" alt="ibeam"> i-beam toggle.  Select a region of the
+timeline and select the <img src="cut.png" alt="cut"> cut button to cut it.  Move the
 insertion point to another point in the timeline and select the
-<img src="paste.png" alt="paste.png"> paste button.  Assuming no in/out points are defined on
+<img src="paste.png" alt="paste"> paste button.  Assuming no in/out points are defined on
 the timeline this performs a cut and paste operation.
-
-   <p>If in/out points are defined, the insertion point and highlighted
+</p>
+<p>If in/out points are defined, the insertion point and highlighted
 region are overridden by the in/out points for clipboard operations. 
 Thus, with in/out points you can perform cut and paste in drag and drop
 mode as well as cut and paste mode.
-
-   <p>When editing audio, it is customary to cut from one part of a waveform
+</p>
+<p>When editing audio, it is customary to cut from one part of a waveform
 into the same part of another waveform.  The start and stop points of
 the cut are identical in each waveform and might be offset slightly,
 while the wave data is different.  It would be very hard to highlight
 one waveform to cut it and highlight the second waveform to paste it
 without changing the relative start and stop positions.
-
-   <p>One option for simplifying this is to open a second copy of Cinelerra,
+</p>
+<p>One option for simplifying this is to open a second copy of Cinelerra,
 cutting and pasting to transport media between the two copies.  This
 way two highlighed regions can exist simultanously.
-
-   <p>Another option is to set in/out points for the source region of the
+</p>
+<p>Another option is to set in/out points for the source region of the
 source waveform and set labels for the destination region of the
 destination waveform.  Perform a cut, clear the in/out points, select
 the region between the labels, and perform a paste.
+</p>
+
 
-   <p>A final operation in cut and paste editing is the <b>edit-&gt;clear</b>
+<p>A final operation in cut and paste editing is the <b>edit-&gt;clear</b>
 operation.  If a region is highlighted or in/out points exist, the
 affected region is cleared by <b>edit-&gt;clear</b>.  But if the insertion
 point is over an edit boundary and the edits on each side of the edit
@@ -4195,444 +4585,486 @@ boundary are the same resource, the edits are combined into one edit
 comprised by the resource.  The start of this one edit is the start of
 the first edit and the end of this one edit is the end of the second
 edit.  This either results in the edit expanding or shrinking.
+</p>
 
-<div class="node">
-<a name="TRIMMING"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CUT-AND-PASTE-EDITING">CUT AND PASTE EDITING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#EDITING">EDITING</a>
 
-</div>
 
+
+<hr>
+<a name="TRIMMING"></a>
+<div class="header">
+<p>
+Previous: <a href="#CUT-AND-PASTE-EDITING" accesskey="p" rel="prev">CUT AND PASTE EDITING</a>, Up: <a href="#EDITING" accesskey="u" rel="up">EDITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TRIMMING-1"></a>
 <h3 class="section">9.10 TRIMMING</h3>
 
-<p>With some edits on the timeline it's possible to do trimming.  By
+<p>With some edits on the timeline it&rsquo;s possible to do trimming.  By
 trimming you shrink or grow the edit boundaries by dragging them.  In
 either drag and drop mode or cut and paste mode, move the cursor over
 an edit boundary until it changes shape.  The cursor will either be an
 expand left or an expand right.  If the cursor is an expand left, the
 dragging operation affects the beginning of the edit.  If the cursor is
 an expand right, the dragging operation affects the end of the edit.
-
-   <p>When you click on an edit boundary to start dragging, the mouse button
+</p>
+<p>When you click on an edit boundary to start dragging, the mouse button
 number determines which dragging behavior is going to be followed.  3
 possible behaviors are bound to mouse buttons in the interface
 preferences. See <a href="#INTERFACE">INTERFACE</a>.
-
-   <p>The effect of each drag operation not only depends on the behavior
-button but whether the beginning or end of the edit is being dragged. 
+</p>
+<p>The effect of each drag operation not only depends on the behavior
+button but whether the beginning or end of the edit is being dragged.
 When you release the mouse button, the trimming operation is performed.
-
-   <p>In a <b>Drag all following edits</b> operation, the beginning of the
+</p>
+<p>In a <b>Drag all following edits</b> operation, the beginning of the
 edit either cuts data from the edit if you move it forward or pastes
 new data from before the edit if you move it backward.  The end of the
 edit pastes data into the edit if you move it forward or cuts data from
 the end of the edit if you move it backward.  All the edits thereafter
 shift.  Finally, if you drag the end of the edit past the start of the
 edit, the edit is deleted.
-
-   <p>In a <b>Drag only one edit</b> operation, the behavior is the same when
+</p>
+<p>In a <b>Drag only one edit</b> operation, the behavior is the same when
 you drag the beginning or end of an edit.  The only difference is none
 of the other edits in the track shift.  Instead, anything adjacent to
 the current edit expands or shrinks to fill gaps left by the drag
 operation.
-
-   <p>In a <b>Drag source only</b> operation, nothing is cut or pasted.  If
+</p>
+<p>In a <b>Drag source only</b> operation, nothing is cut or pasted.  If
 you move the beginning or end of the edit forward, the source reference
 in the edit shifts forward.  If you move the beginning or end of the
 edit backward, the source reference shifts backward.  Where the edit
 appears in the timeline remains the same but the source shifts.
-
-   <p>For all file formats besides still images, the extent of the trimming
+</p>
+<p>For all file formats besides still images, the extent of the trimming
 operation is clamped to the source file length.  Attempting to drag the
 start of the edit beyond the start of the source clamps it to the
 source start.
-
-   <p>In all trimming operations, all edits which start on the same position
+</p>
+<p>In all trimming operations, all edits which start on the same position
 as the cursor when the drag operation begins are affected.  Unarm
 tracks to prevent edits from getting affected.
+</p>
+
+
 
-<div class="node">
-<a name="USING-EFFECTS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#EDITING">EDITING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+
+<hr>
+<a name="USING-EFFECTS"></a>
+<div class="header">
+<p>
+Next: <a href="#SETTING-PROJECT-ATTRIBUTES" accesskey="n" rel="next">SETTING PROJECT ATTRIBUTES</a>, Previous: <a href="#EDITING" accesskey="p" rel="prev">EDITING</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="USING-EFFECTS-1"></a>
 <h2 class="chapter">10 USING EFFECTS</h2>
 
 <p>It would be sufficient to perform all changes to the timeline using
-editing operations, but this isn't very extensible.  Certain timeline
+editing operations, but this isn&rsquo;t very extensible.  Certain timeline
 changes should produce a different effect in the output without
 involving a unique procedure to apply each change.  This is why we have
 effects.
-
-   <p>Effects fall into three categories, and each effect in a category is
+</p>
+<p>Effects fall into three categories, and each effect in a category is
 applied using the same procedure.
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#REALTIME-EFFECTS">REALTIME EFFECTS</a>
-<li><a accesskey="2" href="#RENDERED-EFFECTS">RENDERED EFFECTS</a>
-<li><a accesskey="3" href="#TRANSITIONS">TRANSITIONS</a>
-<li><a accesskey="4" href="#LADSPA-EFFECTS">LADSPA EFFECTS</a>
-<li><a accesskey="5" href="#EFFECT-PRESETS">EFFECT PRESETS</a>
-</ul>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#REALTIME-EFFECTS" accesskey="1">REALTIME EFFECTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RENDERED-EFFECTS" accesskey="2">RENDERED EFFECTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TRANSITIONS" accesskey="3">TRANSITIONS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LADSPA-EFFECTS" accesskey="4">LADSPA EFFECTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#EFFECT-PRESETS" accesskey="5">EFFECT PRESETS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-<div class="node">
-<a name="REALTIME-EFFECTS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RENDERED-EFFECTS">RENDERED EFFECTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-EFFECTS">USING EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="REALTIME-EFFECTS"></a>
+<div class="header">
+<p>
+Next: <a href="#RENDERED-EFFECTS" accesskey="n" rel="next">RENDERED EFFECTS</a>, Up: <a href="#USING-EFFECTS" accesskey="u" rel="up">USING EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="REALTIME-EFFECTS-1"></a>
 <h3 class="section">10.1 REALTIME EFFECTS</h3>
 
 <p>These are layered under the track they apply to.  They process the
 track when the track is played back, with no permanent storage of the
 output except when the project is rendered.
-
-   <p><b>APPLYING REALTIME EFFECTS</b>
-
-   <p>All the realtime effects are listed in the resource window, divided
+</p>
+<p><b>APPLYING REALTIME EFFECTS</b>
+</p>
+<p>All the realtime effects are listed in the resource window, divided
 into two groups: audio effects and video effects.  Audio effects should
 be dragged from the resource window onto audio tracks.  Video effects
 should be dragged onto video tracks.
-
-   <p>If there is data on the destination track, the effect is applied to the
+</p>
+<p>If there is data on the destination track, the effect is applied to the
 entire track.  If there is no data on the track the effect is deleted. 
 Finally, if a region of the track is selected the effect is pasted into
 the region, regardless of whether there is data.
-
-   <p>Some of the effects don't process data but synthesize data.  In the
-case of a synthesis effect, you'll want to select a region of the
+</p>
+<p>Some of the effects don&rsquo;t process data but synthesize data.  In the
+case of a synthesis effect, you&rsquo;ll want to select a region of the
 track so the dragging operation pastes it without deleting it.
-
-   <p>When dragging more than one effect onto a track, you'll see the effects
+</p>
+<p>When dragging more than one effect onto a track, you&rsquo;ll see the effects
 layering from top to bottom, on the bottom of the track.   When the
 track is played back, effects are processed from top to bottom.  The
 output of the top effect becomes the input of the bottom effect and so
 on and so forth.
-
-   <p>In addition to dragging from the resource window, there are 2 other
+</p>
+<p>In addition to dragging from the resource window, there are 2 other
 methods of applying them:
+</p>
+<ul>
+<li> <b>APPLYING FROM THE TRACK POPUP MENU:</b>
 
-     <ul>
-<li><b>APPLYING FROM THE TRACK POPUP MENU:</b>
-
-     <p>Right click on a track and select <b>Attach effect</b> from the popup.  The attach effect
+<p>Right click on a track and select <b>Attach effect</b> from the popup.  The attach effect
 dialog gives you more control than pure dragging and dropping.  For one
 thing, the attach effect dialog lets you attach two more types of
 effects: shared effects and shared tracks.  Select a plugin from the
 <b>Plugins</b> column and hit <b>Attach</b> under the plugins column to attach
 it.  The effect is the same as if the effect was dragged from the
 resource window.
+</p>
+</li><li> <b>APPLYING FROM THE AUDIO AND VIDEO MENUS:</b>
 
-     <li><b>APPLYING FROM THE AUDIO AND VIDEO MENUS:</b>
-
-     <p>Select <b>Audio-&gt;Attach effect...</b> or <b>Video-&gt;Attach effect</b> to attach
+<p>Select <b>Audio-&gt;Attach effect...</b> or <b>Video-&gt;Attach effect</b> to attach
 a realtime effect to all the recordable tracks simultaneously.  The
 advantage with this is most of the time you want to attach the same
 effect to all the audio tracks and the other two methods require
 repeating the same work for every track.
-
-     <p>The menu interface has an option called  <b>Attach single standalone and
+</p>
+<p>The menu interface has an option called  <b>Attach single standalone and
 share others</b>.  Enable this to make the first track get a standalone
 effect and to have the other tracks share the standalone effect.  Most
 of the time, you want this to be on.
+</p>
+</li></ul>
 
-   </ul>
 
-   <p>When an effect exists under a track, it most often needs to be
+<p>When an effect exists under a track, it most often needs to be
 configured.  Go to the effect and right click on it to bring up the
 effect popup.  In the effect popup is a <b>show</b> option.  The show
 option causes the GUI for the effect to appear under the cursor.  Most
-effects have GUI's but some don't.  If the effect doesn't have a GUI,
+effects have GUI&rsquo;s but some don&rsquo;t.  If the effect doesn&rsquo;t have a GUI,
 nothing pops up when the <b>show</b> option is selected.  When you
 tweek parameters in the effect GUI, the parameters normally effect the
 entire duration of the effect.
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#REALTIME-EFFECT-TYPES">REALTIME EFFECT TYPES</a>
-<li><a accesskey="2" href="#EDITING-REALTIME-EFFECTS">EDITING REALTIME EFFECTS</a>
-</ul>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#REALTIME-EFFECT-TYPES" accesskey="1">REALTIME EFFECT TYPES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#EDITING-REALTIME-EFFECTS" accesskey="2">EDITING REALTIME EFFECTS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-<div class="node">
-<a name="REALTIME-EFFECT-TYPES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#EDITING-REALTIME-EFFECTS">EDITING REALTIME EFFECTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#REALTIME-EFFECTS">REALTIME EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="REALTIME-EFFECT-TYPES"></a>
+<div class="header">
+<p>
+Next: <a href="#EDITING-REALTIME-EFFECTS" accesskey="n" rel="next">EDITING REALTIME EFFECTS</a>, Up: <a href="#REALTIME-EFFECTS" accesskey="u" rel="up">REALTIME EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="REALTIME-EFFECT-TYPES-1"></a>
 <h4 class="subsection">10.1.1 REALTIME EFFECT TYPES</h4>
 
 <p>The two other effect types supported by the Attach Effect dialog are
 recycled effects.  In order to use a recycled effect, three requiremenets
 must be met:
+</p>
+<ul>
+<li> There must be other effects in the timeline.
 
-     <ul>
-<li>There must be other effects in the timeline.
-
-     <li>
-The other effects must be of the same type as the track you're
+</li><li> 
+The other effects must be of the same type as the track you&rsquo;re
 attaching an effect to.  If the track is an audio track, the effects
 must be audio effects.  If the track is a video track, the effects must
 be video effects.
 
-     <li>
+</li><li> 
 The insertion point or selected region must start inside the other effects.
 
-   </ul>
+</li></ul>
 
-   <p>In the case of a shared effect, these conditions must be true.  In the
+<p>In the case of a shared effect, these conditions must be true.  In the
 case of a shared track, there merely must be another track on the
-timeline of the same type as the track you're applying an effect to. 
-If you right clicked on a video track to attach an effect, there won't
+timeline of the same type as the track you&rsquo;re applying an effect to. 
+If you right clicked on a video track to attach an effect, there won&rsquo;t
 be anything in the <b>shared tracks</b> column if no other video track
-exists.  If you right clicked on an audio track there won't be anything
+exists.  If you right clicked on an audio track there won&rsquo;t be anything
 in the shared track column if no other audio track exists.
-
-   <p>If shared effects or shared tracks are available, they appear in the
+</p>
+<p>If shared effects or shared tracks are available, they appear in the
 <b>shared effects</b> and <b>shared tracks</b> columns.  The
 <b>attach</b> button under each column causes anything highlighted in
 the column to be attached under the current track.
-
-   <p>Shared effects and shared tracks allow very unique things to be done. 
+</p>
+<p>Shared effects and shared tracks allow very unique things to be done. 
 In the case of a shared effect, the shared effect is treated like a
-copy of the original effect except in the shared effect the GUI can't
+copy of the original effect except in the shared effect the GUI can&rsquo;t
 be brought up.  All configuration of the shared effect is determined by
 the GUI of the original effect and only the GUI of the original effect
 can be brought up.
-
-   <p>When a shared effect is played back, it's processed just like a normal
+</p>
+<p>When a shared effect is played back, it&rsquo;s processed just like a normal
 effect except the configuration is copied from the original effect. 
 Some effects detect when they are being shared, like the reverb effects
 and the compressor.  These effects determine what tracks are sharing
 them and either mix the two tracks together or use one track to stage
 some value.  The reverb mixes tracks together to simulate ambience. 
 The compressor uses one of the sharing tracks as the trigger.
-
-   <p>When an original track has a <b>shared track</b> as one of its effects,
+</p>
+<p>When an original track has a <b>shared track</b> as one of its effects,
 the shared track itself is used as a realtime effect.  This is more
 commonly known as <b>bouncing tracks</b> but Cinelerra achieves the
 same operation by attaching shared tracks.  The fade and any effects in
 the shared track are applied to the original track.  Once the shared
 track has processed the data, the original track performs any effects
 which come below the shared track and then composites it on the output.
-
-   <p>In addition, once the shared track has processed the output of the
+</p>
+<p>In addition, once the shared track has processed the output of the
 original track like a realtime effect, the shared track mixes itself
-into the output with it's settings for pan, mode, and projector.  Thus,
+into the output with it&rsquo;s settings for pan, mode, and projector.  Thus,
 two tracks are mixing the same data on the output.  Most of the time
-you don't want the shared track to mix the same data as the original
+you don&rsquo;t want the shared track to mix the same data as the original
 track on the output.  You want it to stop right before the mixing stage
 and give the data back to the original track.  Do this by enabling the
-<img src="mutepatch_up.png" alt="mutepatch_up.png"> mute toggle next to each track for whom you don't
+<img src="mutepatch_up.png" alt="mutepatch_up"> mute toggle next to each track for whom you don&rsquo;t
 want to mix on the output.
-
-   <p>Suppose you were making video and you did want the shared track to
-composite the original track's data on the output a second time.  In
+</p>
+<p>Suppose you were making video and you did want the shared track to
+composite the original track&rsquo;s data on the output a second time.  In
 the case of video, the video from the shared track would always appear
 under the video from the original track, regardless of whether it was
 on top of the original track.  This is because shared tracks are
-composited in order of their attachment.  Since it's part of the original
+composited in order of their attachment.  Since it&rsquo;s part of the original
 track it has to be composited before the original track is composited.
+</p>
+
+
+
 
-<div class="node">
-<a name="EDITING-REALTIME-EFFECTS"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#REALTIME-EFFECT-TYPES">REALTIME EFFECT TYPES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#REALTIME-EFFECTS">REALTIME EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="EDITING-REALTIME-EFFECTS"></a>
+<div class="header">
+<p>
+Previous: <a href="#REALTIME-EFFECT-TYPES" accesskey="p" rel="prev">REALTIME EFFECT TYPES</a>, Up: <a href="#REALTIME-EFFECTS" accesskey="u" rel="up">REALTIME EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="EDITING-REALTIME-EFFECTS-1"></a>
 <h4 class="subsection">10.1.2 EDITING REALTIME EFFECTS</h4>
 
 <p>Many operations exist for manipulating effects once they are in the
 timeline.  Because mixing effects and media is such complex business,
-the methods used in editing effects aren't as concise as cutting and
+the methods used in editing effects aren&rsquo;t as concise as cutting and
 pasting.  Some of the editing happens by dragging in/out points, some
 of the editing happens through popup menus, and some of it happens by
 dragging effects.
-
-   <p>Normally when you edit tracks, the effects follow the editing
+</p>
+<p>Normally when you edit tracks, the effects follow the editing
 decisions.  If you cut from a track, the effect shrinks.  If you drag
 edit in/out points, the effect changes length.  This behavior can be
 disabled by selecting <b>Settings-&gt;edit effects</b> in the project
 window.  This decouples effects from editing operations, but what if
 you just want to edit the effects?
-
-   <p>Move the timeline cursor over the effect borders until it changes to a
+</p>
+<p>Move the timeline cursor over the effect borders until it changes to a
 resize left or resize right icon.  In this state, if you drag the end
 of the effect, it performs an edit just like dragging the end of a
-track does.
-
-   <p>The three editing behaviors of track trimming apply to effect trimming
+track does.  
+</p>
+<p>The three editing behaviors of track trimming apply to effect trimming
 and they are bound to the mouse buttons that you set in <b>interface
 preferences</b>. See <a href="#INTERFACE">INTERFACE</a>.  When you perform a trim edit on an
 effect, the effect boundary is moved by dragging on it.  Unlike track
 editing, the effect has no source length.  You can extend the end of an
 effect as much as desired without being limited.
-
-   <p>Also unlike track editing, the starting position of the drag operation
-doesn't bind the edit decision to media.  The media the effect is bound
-to doesn't follow effect edits.  Other effects; however, do follow
+</p>
+<p>Also unlike track editing, the starting position of the drag operation
+doesn&rsquo;t bind the edit decision to media.  The media the effect is bound
+to doesn&rsquo;t follow effect edits.  Other effects; however, do follow
 editing decisions made on an effect.  If you drag the end of an effect
 which is lined up to effects on other tracks, the effects on the other
 tracks will be edited while the media stays the same.
-
-   <p>What happens if you trim the end of an effect in, leaving a lot of
+</p>
+<p>What happens if you trim the end of an effect in, leaving a lot of
 unaffected time near the end of the track?  When you drag an effect in
 from the Resource Window you can insert the effect in the portion of
 the row unoccupied by the trimming operation.  Realtime effects are
 organized into rows under the track.  Each row can have multiple
 effects.
-
-   <p>In some cases you'll want a trimming operation to change only one row
+</p>
+<p>In some cases you&rsquo;ll want a trimming operation to change only one row
 of effects.  This can be achieved by first positioning the insertion
 point on the start or end of the effect.  Then press <b>shift</b> while
 beginning the trimming operation.  This causes the operation to change
 only one row of effects.
-
-   <p>In addition to trimming, you can move effects up or down.  Every track
+</p>
+<p>In addition to trimming, you can move effects up or down.  Every track
 can have a stack of effects under it.  By moving an effect up or down
 you change the order in which effects are processed in the stack.  Go
 to an effect and right click to bring up the effect menu.  The
 <b>Move up</b> and <b>Move down</b> options move the effect up or down.
-
-   <p>When you're moving effects up or down, be aware that if they're shared
+</p>
+<p>When you&rsquo;re moving effects up or down, be aware that if they&rsquo;re shared
 as <b>shared effects</b>, any references will be pointing to a
 different effect after the move operation.
-
-   <p>Finally, there's dragging of effects.  Dragging effects works just like
-dragging edits.  You must select the <img src="arrow.png" alt="arrow.png"> arrow to enter drag and
+</p>
+<p>Finally, there&rsquo;s dragging of effects.  Dragging effects works just like
+dragging edits.  You must select the <img src="arrow.png" alt="arrow"> arrow to enter drag and
 drop mode before dragging effects.  The effects snap to media
 boundaries, effect boundaries, and tracks.  Be aware if you drag a
 reference to a shared effect, the reference will usually point to the
 wrong effect afterwards.
-
-   <p>Right click on an effect to bring up a menu for the effect.  Select
+</p>
+<p>Right click on an effect to bring up a menu for the effect.  Select
 <b>attach...</b> to change the effect or change the reference if it is
 a shared effect.
+</p>
+
+
 
-<div class="node">
-<a name="RENDERED-EFFECTS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TRANSITIONS">TRANSITIONS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#REALTIME-EFFECTS">REALTIME EFFECTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-EFFECTS">USING EFFECTS</a>
 
-</div>
 
+
+
+<hr>
+<a name="RENDERED-EFFECTS"></a>
+<div class="header">
+<p>
+Next: <a href="#TRANSITIONS" accesskey="n" rel="next">TRANSITIONS</a>, Previous: <a href="#REALTIME-EFFECTS" accesskey="p" rel="prev">REALTIME EFFECTS</a>, Up: <a href="#USING-EFFECTS" accesskey="u" rel="up">USING EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="RENDERED-EFFECTS-1"></a>
 <h3 class="section">10.2 RENDERED EFFECTS</h3>
 
+
 <p>Another type of effect is performed on a section of the track and the
 result stored somewhere before it is played back.  The result is
 usually pasted into the track to replace the original data.
-
-   <p>In 15 years, the only effect we actually ever rendered with this feature
-was <b>normalize</b>.  We've never rendered an effect which could be
+</p>
+<p>In 15 years, the only effect we actually ever rendered with this feature
+was <b>normalize</b>.  We&rsquo;ve never rendered an effect which could be
 applied on the timeline, even though this feature supports rendering
 realtime effects.
-
-   <p>This feature was implemented back when computers were too slow to play
+</p>
+<p>This feature was implemented back when computers were too slow to play
 back anything in realtime.  Decent sounding reverb took a long time &amp;
 was considered major number crunching.
-
-   <p>The rendered effects are not listed in the resource window but instead
+</p>
+<p>The rendered effects are not listed in the resource window but instead
 are accessed through the <b>Audio-&gt;Render effect</b> and
 <b>Video-&gt;Render effect</b> menu options.  Each of these menu options
 brings up a dialog for the rendered effect.  Rendered effects apply to
 only one type of track, either audio or video.  If no tracks of the
 type exist, an error pops up.
-
-   <p>A region of the timeline to apply the effect to must be defined before
+</p>
+<p>A region of the timeline to apply the effect to must be defined before
 selecting <b>Render effect...</b>.  If no in/out points and no
 highlighted region exists, the entire region after the insertion point
 is treated as the affected region.  Otherwise, the region between the
 in/out points or the highlighted region is the affected region.
-
-   <p>Secondly, the tracks to apply the rendered affect to need to be
+</p>
+<p>Secondly, the tracks to apply the rendered affect to need to be
 <b>armed</b>.  All other tracks are ignored.
-
-   <p>Finally, the rendered affect processes certain track attributes when it
+</p>
+<p>Finally, the rendered affect processes certain track attributes when it
 reads its input data but not others.  Transitions in the affected track
 are applied.  Nudge is not and effects are not.  This allows the new
 data to be pasted into the existing position without changing the nudge
 value.
-
-   <p>In the render effect dialog is a list of all the realtime and all the
+</p>
+<p>In the render effect dialog is a list of all the realtime and all the
 rendered effects.  The difference here is that the realtime effects are
 rendered to disk and not applied under the track.  Highlight an effect
 in the list to designate it as the one being performed.
-
-   <p>Define a file to render the effect to in the <b>Select a file to
-render to</b> box.  The <img src="magnify.png" alt="magnify.png"> magnifying glass allows file
-selection from a list.
-
-   <p>Select a file format which can handle the track type.  The
-<img src="wrench.png" alt="wrench.png"> wrench allows configuration specific to the file format.
-
-   <p>There is also an option for creating a new file at each label.  If you
+</p>
+<p>Define a file to render the effect to in the <b>Select a file to
+render to</b> box.  The <img src="magnify.png" alt="magnify"> magnifying glass allows file
+selection from a list.
+</p>
+<p>Select a file format which can handle the track type.  The
+<img src="wrench.png" alt="wrench"> wrench allows configuration specific to the file format.
+</p>
+<p>There is also an option for creating a new file at each label.  If you
 have a CD rip on the timeline which you want to divide into different
 files, the labels would become dividing points between the files if
 this option were selected.  When the timeline is divided by labels, the
 effect is re-initialized at every label.  Normalize operations take the
 peak in the current file and not in the entire timeline.
-
-   <p>Finally there is an insertion strategy just like in the render dialog. 
+</p>
+<p>Finally there is an insertion strategy just like in the render dialog. 
 It should be noted that even though the effect applies only to audio or
 video, the insertion strategy applies to all tracks just like a
 clipboard operation.
-
-   <p>When you click <b>OK</b> in the effect dialog, it calls the GUI of the
+</p>
+<p>When you click <b>OK</b> in the effect dialog, it calls the GUI of the
 effect.  If the effect is also a realtime effect, a second GUI appears
 to prompt for acceptance or rejection of the current settings.  After
 accepting the settings, the effect is processed.
+</p>
+
+
+
 
-<div class="node">
-<a name="TRANSITIONS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LADSPA-EFFECTS">LADSPA EFFECTS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#RENDERED-EFFECTS">RENDERED EFFECTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-EFFECTS">USING EFFECTS</a>
 
-</div>
 
+
+
+
+
+
+
+
+<hr>
+<a name="TRANSITIONS"></a>
+<div class="header">
+<p>
+Next: <a href="#LADSPA-EFFECTS" accesskey="n" rel="next">LADSPA EFFECTS</a>, Previous: <a href="#RENDERED-EFFECTS" accesskey="p" rel="prev">RENDERED EFFECTS</a>, Up: <a href="#USING-EFFECTS" accesskey="u" rel="up">USING EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TRANSITIONS-1"></a>
 <h3 class="section">10.3 TRANSITIONS</h3>
 
 <p>When one edit ends and another edit begins, the default behaviour is to
-have the first edit's output immediately become the output of the
+have the first edit&rsquo;s output immediately become the output of the
 second edit when played back.  Transitions are a way for the first
-edit's output to become the second edit's output with different
+edit&rsquo;s output to become the second edit&rsquo;s output with different
 variations.
-
-   <p>Cinelerra supports audio and video transitions, all of which are listed
+</p>
+<p>Cinelerra supports audio and video transitions, all of which are listed
 in the resource window.  Transitions may only apply to the matching
 track type.  Transitions under <b>audio transitions</b> can only apply
 to audio tracks.  Transitions under <b>video transitions</b> can only
 apply to video tracks.
-
-   <p>Load a video file and cut a section from the center so the edit point
+</p>
+<p>Load a video file and cut a section from the center so the edit point
 is visible on the timeline.  Go the resource window and click on the
 <b>Video transitions</b> folder.  Drag a transition from the transition
 list onto the second video edit on the timeline.  A box highlights over
 where the transition will appear.  Releasing it over the second edit
 applies the transition between the first and second edit.
-
-   <p>You can now scrub over the transition with the transport controls and
+</p>
+<p>You can now scrub over the transition with the transport controls and
 watch the output in the <b>Compositor window</b>.  Scrubbing with the
-insertion point doesn't normally show transitions because the
+insertion point doesn&rsquo;t normally show transitions because the
 transition durations are usually too short.  The exact point in time
-when the transition takes effect isn't straightforward.  It starts when
+when the transition takes effect isn&rsquo;t straightforward.  It starts when
 the second edit begins and lasts a certain amount of time into the
 second edit.  Therefore, the first asset needs to have enough data
 after the edit point to fill the transition into the second edit.
-
-   <p>Once the transition is in place, it can be edited similarly to an
+</p>
+<p>Once the transition is in place, it can be edited similarly to an
 effect.  Move the pointer over the transition and right click to bring
 up the transition menu.  The <b>show</b> option brings up specific
 parameters for the transition in question if there are any.  The
@@ -4640,55 +5072,61 @@ parameters for the transition in question if there are any.  The
 Once these two parameters are set, they are applied to future
 transitions until they are changed again.  Finally, the <b>detach</b>
 option removes the transition from the timeline.
-
-   <p>Dragging and dropping transitions from the Resource window to the
+</p>
+<p>Dragging and dropping transitions from the Resource window to the
 Program window can be really slow and tiring.  Fortunately, once you
 drag a transition from the Resource window, the <b>U</b> and <b>u</b>
 keys will paste the same transition.  The <b>U</b> key pastes the last
 video transition and the <b>u</b> key pastes the last audio transition
 on all the recordable tracks.  If the insertion point or in point is
-over an edit, the beginning of the edit is covered by the transition.
-
-   <p>It should be noted that when playing transitions from the timeline to a
+over an edit, the beginning of the edit is covered by the transition.  
+</p>
+<p>It should be noted that when playing transitions from the timeline to a
 hardware accelerated video device, the hardware acceleration will
 usually be turned off momentarily during the transition and on after
 the transition in order to render the transition.  Using an
 unaccelerated video device for the entire timeline normally removes the
 disturbance.
+</p>
+
 
-<div class="node">
-<a name="LADSPA-EFFECTS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#EFFECT-PRESETS">EFFECT PRESETS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TRANSITIONS">TRANSITIONS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-EFFECTS">USING EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="LADSPA-EFFECTS"></a>
+<div class="header">
+<p>
+Next: <a href="#EFFECT-PRESETS" accesskey="n" rel="next">EFFECT PRESETS</a>, Previous: <a href="#TRANSITIONS" accesskey="p" rel="prev">TRANSITIONS</a>, Up: <a href="#USING-EFFECTS" accesskey="u" rel="up">USING EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LADSPA-EFFECTS-1"></a>
 <h3 class="section">10.4 LADSPA EFFECTS</h3>
 
+
 <p>LADSPA effects are supported in realtime and rendered mode for audio. 
 The LADSPA plugins you get from the internet vary in quality.  Most
-can't be tweeked in realtime very easily and work better when
+can&rsquo;t be tweeked in realtime very easily and work better when
 rendered.  Some crash and some can only be applied to one track due to
 a lack of reentrancy.  Although Cinelerra implements the LADSPA
 interface as accurately as possible, multiple tracks of realtime,
 simultaneous processing go beyond the majority of LADSPA users.  LADSPA
 effects appear in the audio folder as the hammer and screwdriver, to
 signify that they are Plugins for Linux Audio Developers.
-
-   <p>LADSPA Effects are enabled merely by setting the <b>LADSPA_PATH</b>
+</p>
+<p>LADSPA Effects are enabled merely by setting the <b>LADSPA_PATH</b>
 environment variable to the location of your LADSPA plugins or putting
 them in the <b>/usr/lib/cinelerra</b> directory.
+</p>
 
-<div class="node">
-<a name="EFFECT-PRESETS"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LADSPA-EFFECTS">LADSPA EFFECTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-EFFECTS">USING EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="EFFECT-PRESETS"></a>
+<div class="header">
+<p>
+Previous: <a href="#LADSPA-EFFECTS" accesskey="p" rel="prev">LADSPA EFFECTS</a>, Up: <a href="#USING-EFFECTS" accesskey="u" rel="up">USING EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="EFFECT-PRESETS-1"></a>
 <h3 class="section">10.5 EFFECT PRESETS</h3>
 
 <p>Save and recall all the settings for an effect by using the <b>presets</b>
@@ -4698,638 +5136,691 @@ Save all the settings to a preset by entering a title in <b>Preset
 title</b> and clicking <b>save</b>.  Recall the settings in a preset by
 highlighting it and clicking <b>Apply</b>.  Delete a preset by highlighting
 it and clicking <b>Delete</b>.
+</p>
+
+
+
 
-<div class="node">
-<a name="SETTING-PROJECT-ATTRIBUTES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COMPOSITING">COMPOSITING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#USING-EFFECTS">USING EFFECTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+<hr>
+<a name="SETTING-PROJECT-ATTRIBUTES"></a>
+<div class="header">
+<p>
+Next: <a href="#COMPOSITING" accesskey="n" rel="next">COMPOSITING</a>, Previous: <a href="#USING-EFFECTS" accesskey="p" rel="prev">USING EFFECTS</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SETTING-PROJECT-ATTRIBUTES-1"></a>
 <h2 class="chapter">11 SETTING PROJECT ATTRIBUTES</h2>
 
 <p>When you play media files in Cinelerra, the media files have a certain
 number of tracks, a certain frame size, a certain sample size, and so
 on and so forth.  No matter what the media file has; however, it is
 still played back according to the project attributes.  If an audio
-file's samplerate is different than the project attributes, it is
-resampled.  If a video file's frame size is different than the project
+file&rsquo;s samplerate is different than the project attributes, it is
+resampled.  If a video file&rsquo;s frame size is different than the project
 attributes, it is composited on a black frame, either cropped or
 bordered with black.
-
-   <p>The project attributes are adjusted in <b>Settings-&gt;Set Format</b> and in
+</p>
+<p>The project attributes are adjusted in <b>Settings-&gt;Set Format</b> and in
 to a more limited extent in <b>File-&gt;New</b>.  When you adjust project
 settings in <b>file-&gt;new</b> a new timeline is created with no data. 
 Every timeline created from this point uses the same settings.  When
 you adjust settings in <b>settings-&gt;format</b>, the timeline is not
 recreated with no data but every timeline created from this point uses
 the same settings.
-
-   <p>In addition to the traditional settings for sample rate, frame rate,
+</p>
+<p>In addition to the traditional settings for sample rate, frame rate,
 frame size, Cinelerra uses some unusual settings like <b>channel
 positions, color model, and aspect ratio.</b>
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#AUDIO-CHANNEL-POSITIONS">AUDIO CHANNEL POSITIONS</a>
-<li><a accesskey="2" href="#COLOR-MODEL">COLOR MODEL</a>
-<li><a accesskey="3" href="#ASPECT-RATIO">ASPECT RATIO</a>
-</ul>
-
-<div class="node">
-<a name="AUDIO-CHANNEL-POSITIONS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COLOR-MODEL">COLOR MODEL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>
 
-</div>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#AUDIO-CHANNEL-POSITIONS" accesskey="1">AUDIO CHANNEL POSITIONS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COLOR-MODEL" accesskey="2">COLOR MODEL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#ASPECT-RATIO" accesskey="3">ASPECT RATIO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-<h3 class="section">11.1 AUDIO CHANNEL POSITIONS</h3>
 
-<p>The currently enabled audio channels and their positions in the user
-interface boxes are displayed in the channel position widget.
 
-   <pre class="sp">
 
 
-</pre>
-<img src="channelpositions.png" alt="channelpositions.png">
-   <pre class="sp">
+<hr>
+<a name="AUDIO-CHANNEL-POSITIONS"></a>
+<div class="header">
+<p>
+Next: <a href="#COLOR-MODEL" accesskey="n" rel="next">COLOR MODEL</a>, Up: <a href="#SETTING-PROJECT-ATTRIBUTES" accesskey="u" rel="up">SETTING PROJECT ATTRIBUTES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="AUDIO-CHANNEL-POSITIONS-1"></a>
+<h3 class="section">11.1 AUDIO CHANNEL POSITIONS</h3>
 
+<p>The currently enabled audio channels and their positions in the user
+interface boxes are displayed in the channel position widget.
+</p>
+<br>
+<br>
+<img src="channelpositions.png" alt="channelpositions">
+<br>
+<br>
 
-</pre>
 
-   <p>The channels are numbered.  When rendered, the output from channel 1 is
+<p>The channels are numbered.  When rendered, the output from channel 1 is
 rendered to the first output track in the file or the first soundcard
 channel of the soundcard.  Later channels are rendered to their
 successively numbered output tracks.
-
-   <p>The audio channel locations correspond to where in the panning widgets
+</p>
+<p>The audio channel locations correspond to where in the panning widgets
 each of the audio outputs is.  The closer the panning position is to
 one of the audio outputs, the more signal that speaker gets.  Click on
 a speaker icon and drag to change the audio channel location.
-
-   <p>The speakers can be in any orientation.  A different speaker
+</p>
+<p>The speakers can be in any orientation.  A different speaker
 arrangement is stored for every number of audio channels since normally
-you don't want the same speaker arrangement for different numbers of
+you don&rsquo;t want the same speaker arrangement for different numbers of
 channels.
-
-   <p>Channel positions is the only setting which doesn't affect the output
+</p>
+<p>Channel positions is the only setting which doesn&rsquo;t affect the output
 necessarily.  Click on a speaker icon and drag to change the position
 of a channel.  It is merely a convenience so when more than 2 channels
 are used, the pan controls on the timeline can distinguish between
 them.  It has nothing to do with the actual arrangement of speakers.
+</p>
 
-   <p>But different channels can be positioned very close together to make
+<p>But different channels can be positioned very close together to make
 them have the same output.
+</p>
 
-<div class="node">
-<a name="COLOR-MODEL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ASPECT-RATIO">ASPECT RATIO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AUDIO-CHANNEL-POSITIONS">AUDIO CHANNEL POSITIONS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>
 
-</div>
 
+<hr>
+<a name="COLOR-MODEL"></a>
+<div class="header">
+<p>
+Next: <a href="#ASPECT-RATIO" accesskey="n" rel="next">ASPECT RATIO</a>, Previous: <a href="#AUDIO-CHANNEL-POSITIONS" accesskey="p" rel="prev">AUDIO CHANNEL POSITIONS</a>, Up: <a href="#SETTING-PROJECT-ATTRIBUTES" accesskey="u" rel="up">SETTING PROJECT ATTRIBUTES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="COLOR-MODEL-1"></a>
 <h3 class="section">11.2 COLOR MODEL</h3>
 
 <p>Color model is very important for video playback because video has the
-disadvantage of being very slow.  Although it isn't noticable, audio
+disadvantage of being very slow.  Although it isn&rsquo;t noticable, audio
 intermediates contain much more information than the audio on disk and
 the audio which is played.  Audio always uses the highest bandwidth
-intermediate because it's fast.
-
-   <p>Video intermediates must use the least amount of data for the required
-quality because it's slow, but video intermediates still use a higher
+intermediate because it&rsquo;s fast.
+</p>
+<p>Video intermediates must use the least amount of data for the required
+quality because it&rsquo;s slow, but video intermediates still use a higher
 bandwidth color model than video which is stored and video which is
 played.  This allows more processing to be done with less destruction
-of the original data.
-
-   <p>The video is stored on disk in one colormodel, normally compressed
+of the original data.   
+</p>
+<p>The video is stored on disk in one colormodel, normally compressed
 using a YUV derivative.  When played back, Cinelerra decompresses it
 from the file format directly into the format of the output device.  If
 effects are processed, the decompression is into an intermediate
 colormodel first and the intermediate colormodel is then converted to
 the format of the output device.  The selection of intermediate
 colormodel determines how accurate and fast the effects are.
-
-   <p>Cinelerra colormodels are described using a certain packing order of
+</p>
+<p>Cinelerra colormodels are described using a certain packing order of
 components and a certain number of bits for each component.  The
 packing order is printed on the left and the bit allocation is printed
 on the right.
+</p>
+<ul>
+<li> 
+<b>RGB-888</b> 
 
-     <ul>
-<li>
-<b>RGB-888</b>
-
-     <p>This allocates 8 bits for the R, G, and B channels and no alpha. This
+<p>This allocates 8 bits for the R, G, and B channels and no alpha. This
 is normally used for uncompressed media with low dynamic range.
+</p>
+</li><li> 
+<b>RGBA-8888</b> 
 
-     <li>
-<b>RGBA-8888</b>
-
-     <p>This allocates an alpha channel to the 8 bit RGB colormodel.  It's used
+<p>This allocates an alpha channel to the 8 bit RGB colormodel.  It&rsquo;s used
 for overlaying multiple tracks.
+</p>
+</li><li> 
+<b>YUV-888</b> 
 
-     <li>
-<b>YUV-888</b>
-
-     <p>This allocates 8 bits for Y, U, and V.  This is used for low dynamic
+<p>This allocates 8 bits for Y, U, and V.  This is used for low dynamic
 range operations in which the media is compressed in the YUV color
 space.  Most compressed media is in YUV and this allows it to be
-processed fast with the least color degradation.
+processed fast with the least color degradation. 
+</p>
+</li><li> 
+<b>YUVA-8888</b> 
 
-     <li>
-<b>YUVA-8888</b>
-
-     <p>This allocates an alpha channel to the 8 bit YUV colormodel for
+<p>This allocates an alpha channel to the 8 bit YUV colormodel for
 transparency.
+</p>
+</li><li> 
+<b>RGB-Float</b> 
 
-     <li>
-<b>RGB-Float</b>
-
-     <p>This allocates a 32 bit float for the R, G, and B channels and no
+<p>This allocates a 32 bit float for the R, G, and B channels and no
 alpha.  This is used for high dynamic range processing with no
 transparency.
-
-     <li>
+</p>
+</li><li> 
 <b>RGBA-Float</b> This adds a 32 bit float for alpha to RGB-Float.  This
 is used for high dynamic range processing with transparency.
 
-   </ul>
+</li></ul>
+
+
 
-   <p>In order to do effects which involve alpha channels, a colormodel with
+<p>In order to do effects which involve alpha channels, a colormodel with
 an alpha channel must be selected.  These are RGBA8888, YUVA8888, and
 RGBA Float.  The 4 channel colormodels are notoriously slower than 3
 channel colormodels, with the slowest being RGBA Float.  Some effects,
 like fade, work around the need for alpha channels while other effects,
-like chromakey, require an alpha channel to do anything, so it's a good
+like chromakey, require an alpha channel to do anything, so it&rsquo;s a good
 idea to try the effect without alpha channels to see if it works before
 settling on an alpha channel and slowing it down.
-
-   <p>The YUV colormodels are usually faster than RGB colormodels when using
+</p>
+<p>The YUV colormodels are usually faster than RGB colormodels when using
 compressed footage.  They also destroy fewer colors than RGB
 colormodels.  If footage stored as JPEG or MPEG is processed many times
-in RGB, the colors will fade while they won't if processed in YUV.
-
-   <p>Years of working with high dynamic range footage have shown floating
+in RGB, the colors will fade while they won&rsquo;t if processed in YUV.
+</p>
+<p>Years of working with high dynamic range footage have shown floating
 point RGB to be the best format for high dynamic range.  While 16 bit
 integers were used in the past, these were too lossy and slow for the
 amount of improvement.
-
-   <p>RGB float doesn't destroy information when used with YUV source
+</p>
+<p>RGB float doesn&rsquo;t destroy information when used with YUV source
 footage.  It also supports brightness above 100%.  Be aware that some
 effects, like Histogram, still clip above 100% when in floating point.
-
-<div class="node">
+</p>
+<hr>
 <a name="ASPECT-RATIO"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COLOR-MODEL">COLOR MODEL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>
-
+<div class="header">
+<p>
+Previous: <a href="#COLOR-MODEL" accesskey="p" rel="prev">COLOR MODEL</a>, Up: <a href="#SETTING-PROJECT-ATTRIBUTES" accesskey="u" rel="up">SETTING PROJECT ATTRIBUTES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="ASPECT-RATIO-1"></a>
 <h3 class="section">11.3 ASPECT RATIO</h3>
 
 <p>Aspect ratio determines the shape of the video output when using the
 X11 video output.  The numbers in each direction can be any floating
 point number.  When drawn on the screen, video pixels are stretched to
 match the aspect ratio.
-
-   <p>Some file formats, like MPEG video, write the project aspect ratio to
+</p>
+<p>Some file formats, like MPEG video, write the project aspect ratio to
 the file.
+</p>
+
+
+
 
-<div class="node">
-<a name="COMPOSITING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#KEYFRAMES">KEYFRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SETTING-PROJECT-ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="COMPOSITING"></a>
+<div class="header">
+<p>
+Next: <a href="#KEYFRAMES" accesskey="n" rel="next">KEYFRAMES</a>, Previous: <a href="#SETTING-PROJECT-ATTRIBUTES" accesskey="p" rel="prev">SETTING PROJECT ATTRIBUTES</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="COMPOSITING-1"></a>
 <h2 class="chapter">12 COMPOSITING</h2>
 
-<p>A large amount of Cinelerra's binary size is directed towards
+
+<p>A large amount of Cinelerra&rsquo;s binary size is directed towards
 compositing.  When you remove the letterboxing from a widescreen show,
-you're compositing.  Changing the resolution of a show, making a split
+you&rsquo;re compositing.  Changing the resolution of a show, making a split
 screen, and fading in and out among other things are all compositing
-operations in Cinelerra.  Cinelerra detects when it's in a compositing
+operations in Cinelerra.  Cinelerra detects when it&rsquo;s in a compositing
 operation and plays back through the compositing engine only then. 
 Otherwise, it uses the fastest decoder available in the hardware.
-
-   <p>Compositing operations are done on the timeline and in the Compositor
+</p>
+<p>Compositing operations are done on the timeline and in the Compositor
 window.  Shortcuts exist in the Resource window for changing some
 compositing attributes.  Once some video files are on the timeline, the
 compositor window is a good place to try compositing.
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#THE-CAMERA-AND-PROJECTOR">THE CAMERA AND PROJECTOR</a>
-<li><a accesskey="2" href="#MASKS">MASKS</a>
-<li><a accesskey="3" href="#CROPPING">CROPPING</a>
-<li><a accesskey="4" href="#SAFE-REGIONS">SAFE REGIONS</a>
-<li><a accesskey="5" href="#OVERLAY-MODES">OVERLAY MODES</a>
-<li><a accesskey="6" href="#TRACK-AND-OUTPUT-SIZES">TRACK AND OUTPUT SIZES</a>
-</ul>
 
-<div class="node">
-<a name="THE-CAMERA-AND-PROJECTOR"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MASKS">MASKS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#THE-CAMERA-AND-PROJECTOR" accesskey="1">THE CAMERA AND PROJECTOR</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MASKS" accesskey="2">MASKS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CROPPING" accesskey="3">CROPPING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SAFE-REGIONS" accesskey="4">SAFE REGIONS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#OVERLAY-MODES" accesskey="5">OVERLAY MODES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TRACK-AND-OUTPUT-SIZES" accesskey="6">TRACK AND OUTPUT SIZES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-</div>
 
+
+<hr>
+<a name="THE-CAMERA-AND-PROJECTOR"></a>
+<div class="header">
+<p>
+Next: <a href="#MASKS" accesskey="n" rel="next">MASKS</a>, Up: <a href="#COMPOSITING" accesskey="u" rel="up">COMPOSITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THE-CAMERA-AND-PROJECTOR-1"></a>
 <h3 class="section">12.1 THE CAMERA AND PROJECTOR</h3>
 
 <p>In the compositor window, the most important functions are the
-<img src="camera.png" alt="camera.png"> camera button and the <img src="projector.png" alt="projector.png"> projector
+<img src="camera.png" alt="camera"> camera button and the <img src="projector.png" alt="projector"> projector
 button.  These control operation of the camera and projector.  Inside
-Cinelerra's compositing pipeline, the camera determines where in the
+Cinelerra&rsquo;s compositing pipeline, the camera determines where in the
 source video the temporary is copied from.  The projector determines
 where in the output the temporary is copied to.  The temporary is a
-frame of video in Cinelerra's memory where all graphics processing is
+frame of video in Cinelerra&rsquo;s memory where all graphics processing is
 done.  Each track has a different temporary which is defined by the
 track size.  By resizing the tracks you can create splitscreens, pans,
 and zooms.
-
-   <pre class="sp">
-
-
-</pre>
-<img src="compositing_pipeline.png" alt="compositing_pipeline.png">
-   <pre class="sp">
-
-
-</pre>
-<b>Visual representation of the compositing pipeline</b>.
-
-   <p>When editing the camera and projector in the compositing window, the
+</p>
+<br>
+<br>
+<img src="compositing_pipeline.png" alt="compositing_pipeline">
+<br>
+<br>
+<p><b>Visual representation of the compositing pipeline</b>.
+</p>
+<p>When editing the camera and projector in the compositing window, the
 first track with <b>record</b> enabled is the track affected.  Even if
-the track is completely transparent, it's still the affected track.  If
+the track is completely transparent, it&rsquo;s still the affected track.  If
 multiple video tracks exist, the easiest way to select one track for
 editing is to <b>shift-click</b> on the record icon of the track.  This
 solos the track.
-
-   <p>When the <b>projector</b> button is enabled in the compositor window,
-you're in projector editing mode.  A guide box appears in the video
+</p>
+<p>When the <b>projector</b> button is enabled in the compositor window,
+you&rsquo;re in projector editing mode.  A guide box appears in the video
 window.  Dragging anywhere in the video window causes the guide box to
 move, hopefully along with the video.  <b>shift-dragging</b> anywhere
 in the video window causes the guide box to shrink and grow along with
-the video.  Once you've positioned the video with the projector, you're
+the video.  Once you&rsquo;ve positioned the video with the projector, you&rsquo;re
 ready to master the camera.
-
-   <p>Select the <img src="camera.png" alt="camera.png"> camera button to enable camera editing mode. 
+</p>
+<p>Select the <img src="camera.png" alt="camera"> camera button to enable camera editing mode. 
 In this mode, the guide box shows where the camera position is in
 relation to past and future camera positions but not where it is in
 relation to the source video.  Dragging the camera box in the
-compositor window doesn't move the box but instead moves the location
+compositor window doesn&rsquo;t move the box but instead moves the location
 of the video inside the box.
-
-   <p>For example, when you drag the camera left, the video moves right. 
+</p>
+<p>For example, when you drag the camera left, the video moves right. 
 When you drag the camera up, the video moves down.  When you shift-drag
 the camera, the effect is the same as if you zoomed in or out of the
 source.  The intention of the camera is to produce still photo panning,
 while the intention of the projector is to composite several sources in
 the same scene.
-
-   <p>In the compositing window, there is a popup menu of options for the
+</p>
+<p>In the compositing window, there is a popup menu of options for the
 camera and projector.  Right click over the video portion of the
 compositing window to bring up the menu.
+</p>
+<ul>
+<li> Reset Camera causes the camera to return to the center position.
 
-     <ul>
-<li>Reset Camera causes the camera to return to the center position.
+</li><li> Reset Projector causes the projector to return to the center.
 
-     <li>Reset Projector causes the projector to return to the center.
+</li></ul>
 
-   </ul>
 
-   <p>The camera and projector have shortcut operations neither in the popup
+<p>The camera and projector have shortcut operations neither in the popup
 menu or represented in video overlays.  These are accessed in the
 <b>Tool window</b>.  Most operations in the Compositor window have a
-tool window which is enabled by activating the <img src="toolwindow.png" alt="toolwindow.png">
+tool window which is enabled by activating the <img src="toolwindow.png" alt="toolwindow">
 question mark.
-
-   <p>In the case of the camera and projector, the tool window shows x, y,
+</p>
+<p>In the case of the camera and projector, the tool window shows x, y,
 and z coordinates.  By either tumbling or entering text directly, the
 camera and projector can be precisely positioned.  9 justification
 types are also defined for easy access.  A popular justification
 operation is upper left projection after image reduction.  This is used
 when reducing the size of video with aspect ratio adjustment.
-
-   <p>The translation effect allows simultaneous aspect ratio conversion and
+</p>
+<p>The translation effect allows simultaneous aspect ratio conversion and
 reduction but is easier to use if the reduced video is put in the upper
 left of the temporary instead of in the center.  The track size is set
 to the original size of the video and the camera is centered.  The
 output size is set to the reduced size of the video.  Without any
 effects, this produces just the cropped center portion of the video in
 the output.
-
-   <p>The translation effect is dropped onto the video track.  The input
+</p>
+<p>The translation effect is dropped onto the video track.  The input
 dimensions of the translation effect are set to the original size and
 the output dimensions are set to the reduced size.  To put the reduced
 video in the center section that the projector shows would require
 offsetting <b>out x and out y</b> by a complicated calculation. 
-Instead, we leave <b>out x and out y</b> at 0 and use the projector's
+Instead, we leave <b>out x and out y</b> at 0 and use the projector&rsquo;s
 tool window.
-
-   <p>Merely by selecting <img src="left_justify.png" alt="left_justify.png"> left justify and
-<img src="top_justify.png" alt="top_justify.png"> top justify, the projector displays the reduced
+</p>
+<p>Merely by selecting <img src="left_justify.png" alt="left_justify"> left justify and
+<img src="top_justify.png" alt="top_justify"> top justify, the projector displays the reduced
 image from the top left corner of the temporary in the center of the
 output.
+</p>
+
 
-<div class="node">
-<a name="MASKS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CROPPING">CROPPING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-CAMERA-AND-PROJECTOR">THE CAMERA AND PROJECTOR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a>
 
-</div>
 
+
+<hr>
+<a name="MASKS"></a>
+<div class="header">
+<p>
+Next: <a href="#CROPPING" accesskey="n" rel="next">CROPPING</a>, Previous: <a href="#THE-CAMERA-AND-PROJECTOR" accesskey="p" rel="prev">THE CAMERA AND PROJECTOR</a>, Up: <a href="#COMPOSITING" accesskey="u" rel="up">COMPOSITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="MASKS-1"></a>
 <h3 class="section">12.2 MASKS</h3>
 
 <p>Masks select a region of the video for either displaying or hiding. 
 Masks are also used in conjunction with another effect to isolate the
 effect to a certain region of the frame.  A copy of one video track may
 be delayed slightly and unmasked in locations where the one copy has
-interference but the other copy doesn't.  Color correction may be
+interference but the other copy doesn&rsquo;t.  Color correction may be
 needed in one section of a frame but not another.  A mask can be
 applied to just a section of the color corrected track while the
 vanilla track shows through.  Removal of boom microphones, airplanes,
 and housewives are other mask uses.
-
-   <p>The order of the compositing pipeline affects what can be done with
+</p>
+<p>The order of the compositing pipeline affects what can be done with
 masks.  Mainly, masks are performed on the temporary after effects and
 before the projector.  This means multiple tracks can be bounced to a
 masked track and projected with the same mask.
-
-   <p>Our compositing pipeline graph now has a masking stage.  There are 8
+</p>
+<p>Our compositing pipeline graph now has a masking stage.  There are 8
 possible masks per track.  Each mask is defined separately, although
-they each perform the same operation, whether it's addition or
+they each perform the same operation, whether it&rsquo;s addition or
 subtraction.
-
-   <pre class="sp">
-
-
-</pre>
-<img src="compositing_pipeline2.png" alt="compositing_pipeline2.png">
-   <pre class="sp">
-
-
-</pre>
-<b>Compositing pipeline with masks</b>
-
-   <p>To define a mask, go into the Compositor window and enable the
-<img src="mask.png" alt="mask.png"> <b>mask</b> toggle.  Now go over the video and
+</p>
+<br>
+<br>
+<img src="compositing_pipeline2.png" alt="compositing_pipeline2">
+<br>
+<br>
+<p><b>Compositing pipeline with masks</b>
+</p>
+<p>To define a mask, go into the Compositor window and enable the
+<img src="mask.png" alt="mask"> <b>mask</b> toggle.  Now go over the video and
 click-drag.  Click-drag again in another part of the image to create
-each new point of the mask.  While it isn't the conventional bezier
+each new point of the mask.  While it isn&rsquo;t the conventional bezier
 curve behavior, this masking interface performs in realtime what the
 effect of the mask is going to be.  Creating each point of the mask
-expands a rubber band curve.
-
-   <p>Once points are defined, they can be moved by <b>ctrl-dragging</b> in
-the vicinity of the corner.  This; however, doesn't smooth out the
+expands a rubber band curve.  
+</p>
+<p>Once points are defined, they can be moved by <b>ctrl-dragging</b> in
+the vicinity of the corner.  This; however, doesn&rsquo;t smooth out the
 curve.  The in-out points of the bezier curve are accessed by
 <b>shift-dragging</b> in the vicinity of the corner.  Then
 <b>shift-dragging</b> near the in or out point causes the point to
 move.
-
-   <p>Finally, once you have a mask, the mask can be translated in one piece
+</p>
+<p>Finally, once you have a mask, the mask can be translated in one piece
 by <b>alt-dragging</b> the mask.  Mask editing in Cinelerra is
 identical to how The Gimp edits masks except in this case the effect of
 the mask is always on.
-
-   <p>The masks have many more parameters which couldn't be represented with
+</p>
+<p>The masks have many more parameters which couldn&rsquo;t be represented with
 video overlays.  These are represented in the tool window for masks. 
-Selecting the <img src="toolwindow.png" alt="toolwindow.png"> question mark when the <img src="mask.png" alt="mask.png">
+Selecting the <img src="toolwindow.png" alt="toolwindow"> question mark when the <img src="mask.png" alt="mask">
 mask toggle is highlighted brings up the mask options.
-
-   <p>The <b>mode</b> of the mask determines if the mask removes data or
+</p>
+<p>The <b>mode</b> of the mask determines if the mask removes data or
 makes data visible.  If the mode is subtractive, the mask causes video
 to disappear.  If the mode is additive, the mask causes video to appear
 and everything outside the mask to disappear.
-
-   <p>The <b>value</b> of the mask determines how extreme the addition or
+</p>
+<p>The <b>value</b> of the mask determines how extreme the addition or
 subtraction is.  In the subtractive mode, higher values subtract more
 alpha.  In the additive mode, higher values make the region in the mask
 brighter while the region outside the mask is always hidden.
-
-   <p>The mask number determines which one of the 8 possible masks we're
+</p>
+<p>The mask number determines which one of the 8 possible masks we&rsquo;re
 editing.  Each track has 8 possible masks.  When you click-drag in the
-compositor window, you're only editing one of the masks.  Change the
+compositor window, you&rsquo;re only editing one of the masks.  Change the
 value of <b>mask number</b> to cause another mask to be edited.  The
 previous mask is still active but only the curve overlay for the
 currently selected mask is visible.
-
-   <p>When multiple masks are used, their effects are ORed together.  Every
+</p>
+<p>When multiple masks are used, their effects are ORed together.  Every
 mask in a single track uses the same value and mode.
-
-   <p>The edges of a mask are hard by default but this rarely is desired. 
+</p>
+<p>The edges of a mask are hard by default but this rarely is desired. 
 The <b>feather</b> parameter determines how many pixels to feather the
 mask.  This creates softer edges but takes longer to render.
-
-   <p>Finally, there are parameters which affect one point on the current
+</p>
+<p>Finally, there are parameters which affect one point on the current
 mask instead of the whole mask.  These are <b>Delete, x, y</b>.  The
 active point is defined as the last point dragged in the compositor
 window.  Any point can be activated merely by <b>ctrl-clicking</b> near
 it without moving the pointer.  Once a point is activated,
 <b>Delete</b> deletes it and <b>x, y</b> allow repositioning by numeric
 entry.
+</p>
 
-<div class="node">
-<a name="CROPPING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SAFE-REGIONS">SAFE REGIONS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MASKS">MASKS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a>
 
-</div>
 
+<hr>
+<a name="CROPPING"></a>
+<div class="header">
+<p>
+Next: <a href="#SAFE-REGIONS" accesskey="n" rel="next">SAFE REGIONS</a>, Previous: <a href="#MASKS" accesskey="p" rel="prev">MASKS</a>, Up: <a href="#COMPOSITING" accesskey="u" rel="up">COMPOSITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CROPPING-1"></a>
 <h3 class="section">12.3 CROPPING</h3>
 
+
+
 <p>Cropping changes the value of the output dimensions and the projector
-to reduce the visible picture area.  Enable the <img src="crop.png" alt="crop.png"> crop
-toggle and the <img src="toolwindow.png" alt="toolwindow.png"> tool window in the <b>compositing
+to reduce the visible picture area.  Enable the <img src="crop.png" alt="crop"> crop
+toggle and the <img src="toolwindow.png" alt="toolwindow"> tool window in the <b>compositing
 window</b> to perform cropping.
-
-   <p>This draws a rectangle over the video.  Click-drag anywhere in the
+</p>
+<p>This draws a rectangle over the video.  Click-drag anywhere in the
 video to start a new rectangle.  Click-drag over any corner of the
 rectangle to reposition the corner.
-
-   <p>Alt-click in the cropping rectangle to translate the rectangle to any
+</p>
+<p>Alt-click in the cropping rectangle to translate the rectangle to any
 position without resizing it.
-
-   <p>The tool window allows text entry of the coordinates and executes the
+</p>
+<p>The tool window allows text entry of the coordinates and executes the
 cropping operation.  When the rectangle is positioned, hit the <b>do
 it</b> button in the tool window to execute the cropping operation.
+</p>
+
 
-<div class="node">
-<a name="SAFE-REGIONS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#OVERLAY-MODES">OVERLAY MODES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CROPPING">CROPPING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a>
 
-</div>
 
+
+<hr>
+<a name="SAFE-REGIONS"></a>
+<div class="header">
+<p>
+Next: <a href="#OVERLAY-MODES" accesskey="n" rel="next">OVERLAY MODES</a>, Previous: <a href="#CROPPING" accesskey="p" rel="prev">CROPPING</a>, Up: <a href="#COMPOSITING" accesskey="u" rel="up">COMPOSITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SAFE-REGIONS-1"></a>
 <h3 class="section">12.4 SAFE REGIONS</h3>
 
 <p>On consumer displays the borders of the image are cut off and within
-the cutoff point is a region which isn't always square like it is in
+the cutoff point is a region which isn&rsquo;t always square like it is in
 the compositor window.  The borders are intended for scratch room and
 vertical blanking data.  You can show where these borders are by
-enabling the <img src="titlesafe.png" alt="titlesafe.png"> safe regions toggle.  Keep titles inside
+enabling the <img src="titlesafe.png" alt="titlesafe"> safe regions toggle.  Keep titles inside
 the inner rectangle and keep action inside the outer rectangle.
+</p>
+
+
+
 
-<div class="node">
-<a name="OVERLAY-MODES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TRACK-AND-OUTPUT-SIZES">TRACK AND OUTPUT SIZES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SAFE-REGIONS">SAFE REGIONS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a>
 
-</div>
 
+
+<hr>
+<a name="OVERLAY-MODES"></a>
+<div class="header">
+<p>
+Next: <a href="#TRACK-AND-OUTPUT-SIZES" accesskey="n" rel="next">TRACK AND OUTPUT SIZES</a>, Previous: <a href="#SAFE-REGIONS" accesskey="p" rel="prev">SAFE REGIONS</a>, Up: <a href="#COMPOSITING" accesskey="u" rel="up">COMPOSITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="OVERLAY-MODES-1"></a>
 <h3 class="section">12.5 OVERLAY MODES</h3>
 
 <p>Every video track has an overlay mode, accessible by expanding the
 track.  The overlay mode is a pulldown menu on the left under the
 fader.  When collapsed, it displays an icon representing the current
 overlay mode.
-
-   <p>Select the <img src="expandpatch_checked.png" alt="expandpatch_checked.png"> expand track toggle to view all
-the options for a video track if you can't see the overlay mode.  The
+</p>
+<p>Select the <img src="expandpatch_checked.png" alt="expandpatch_checked"> expand track toggle to view all
+the options for a video track if you can&rsquo;t see the overlay mode.  The
 overlay mode of video tracks is <b>normal</b> by default.  Select other
 modes by clicking the overlay button and selecting an item from the
 popup menu.
-
-   <p>Overlay modes are processed inside the projector stage of compositing. 
+</p>
+<p>Overlay modes are processed inside the projector stage of compositing. 
 The different modes are summarized below.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 <b>Normal</b> uses a traditional Porter-Diff equation to blend tracks with
 alpha.  When no alpha exists in the project color model, the new track
 always replaces the output.
 
-     <li>
+</li><li> 
 <b>Addition</b>  In this mode, whatever is in the output is added to the
-current track.  The result is blended based on the current track's
+current track.  The result is blended based on the current track&rsquo;s
 alpha onto the output.
 
-     <li>
+</li><li> 
 <b>Subtraction</b> In this mode, the current track is subtracted from the
 output and the result is alpha blended onto the output.
 
-     <li>
+</li><li> 
 <b>Multiply</b> is the most useful operation.  The current track is multiplied
 by the output and the result blended onto the output.  Usually a black
 and white image with no alpha channel or a white title on a black image
 is used as the current track.  With the multiply operation, only the
 output portions under the white area show.
 
-     <li>
+</li><li> 
 <b>Divide</b> divides the current track by the output and the result is
 blended into the output.  It usually results in overloaded levels.
 
-     <li>
+</li><li> 
 <b>Replace</b> does no blending and overwrites the output with the current
 track.
 
-   </ul>
+</li></ul>
+
+
 
-<div class="node">
-<a name="TRACK-AND-OUTPUT-SIZES"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#OVERLAY-MODES">OVERLAY MODES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a>
 
-</div>
 
+<hr>
+<a name="TRACK-AND-OUTPUT-SIZES"></a>
+<div class="header">
+<p>
+Previous: <a href="#OVERLAY-MODES" accesskey="p" rel="prev">OVERLAY MODES</a>, Up: <a href="#COMPOSITING" accesskey="u" rel="up">COMPOSITING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TRACK-AND-OUTPUT-SIZES-1"></a>
 <h3 class="section">12.6 TRACK AND OUTPUT SIZES</h3>
 
 <p>The size of the temporary and the size of the output in our compositing
 pipeline are independant and variable.  This fits into everything
-covered so far.  The camera's viewport is the temporary size.  Effects
+covered so far.  The camera&rsquo;s viewport is the temporary size.  Effects
 are processed in the temporary and are affected by the temporary size. 
 Projectors are rendered to the output and are affected by the output
 size.  If the temporary is smaller than the output, the temporary is
 bordered by blank regions in the output.  If the temporary is bigger
 than the output, the temporary is cropped.
-
-   <p>The temporary size is defined as the track size.  Each track has a
-different size.  Right click on a track to bring up the track's menu. 
+</p>
+<p>The temporary size is defined as the track size.  Each track has a
+different size.  Right click on a track to bring up the track&rsquo;s menu. 
 Select <b>Resize Track</b> to resize the track to any arbitrary size. 
 Alternatively you can select <b>Match output size</b> to make the track
 the same size as the output.
-
-   <p>The output size is set in either <b>New</b> when creating a new project
+</p>
+<p>The output size is set in either <b>New</b> when creating a new project
 or <b>Settings-&gt;Format</b>.  In the Resource window there is another
 way to change the output size.  Right click on a video asset and select
 <b>Match project size</b> to conform the output to the asset.  When new
 tracks are created, the track size always conforms to the output size
 specified by these methods.
+</p>
+
+
 
-<div class="node">
-<a name="KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CAPTURING-MEDIA">CAPTURING MEDIA</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMPOSITING">COMPOSITING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+<hr>
+<a name="KEYFRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#CAPTURING-MEDIA" accesskey="n" rel="next">CAPTURING MEDIA</a>, Previous: <a href="#COMPOSITING" accesskey="p" rel="prev">COMPOSITING</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="KEYFRAMES-1"></a>
 <h2 class="chapter">13 KEYFRAMES</h2>
 
+
 <p>When you change the fade, camera, projector, or other parameters for a
 track, they stay by default the same for the entire durection of the
-timeline.   Setting static parameters isn't very useful sometimes. 
+timeline.   Setting static parameters isn&rsquo;t very useful sometimes. 
 Normally you need to move the camera around over time or change mask
 positions.  Masks need to follow objects.  We create dymanic changes by
 defining keyframes.  A keyframe is a certain point in time when the
 settings for one operation change.  In Cinelerra, there are keyframes
 for almost every compositing parameter and effect parameter.
-
-   <p>Whenever you adjust any parameter, the value is stored in a keyframe. 
-If the value is stored in a keyframe, why doesn't it always change? 
+</p>
+<p>Whenever you adjust any parameter, the value is stored in a keyframe. 
+If the value is stored in a keyframe, why doesn&rsquo;t it always change? 
 The keyframe it is stored in by default is known as the <b>default
 keyframe</b>.  The default keyframe applies to the entire duration if no
 other keyframes are present.  The default keyframe is not drawn
 anywhere because it always exists.  The only way change occurs over
 time is if non-default keyframes are created.
-
-   <p>Display keyframes for any parameter by using the <b>view</b> menu.  A
+</p>
+<p>Display keyframes for any parameter by using the <b>view</b> menu.  A
 faster way to toggle multiple keyframe types is to bring up
 <b>window-&gt;overlays</b>.  This window allows toggling of every parameter
 in the view menu.  When keyframes are selected, they are drawn on the
 timeline over the tracks they apply to.
-
-   <p>Keyframes come in many forms: curves, toggles, modes, and so on. 
+</p>
+<p>Keyframes come in many forms: curves, toggles, modes, and so on. 
 How to handle the different types of keyframes is described here.
-
-<ul class="menu">
-<li><a accesskey="1" href="#CURVE-KEYFRAMES">CURVE KEYFRAMES</a>:   Using rubber band curves
-<li><a accesskey="2" href="#CHANGING-BEZIER-_0026-LINEAR-MODE">CHANGING BEZIER &amp; LINEAR MODE</a>:   Change curves from linear to curved
-<li><a accesskey="3" href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES">SNAPPING TO NEIGHBOR KEYFRAMES</a>
-<li><a accesskey="4" href="#NAVIGATING-CURVE-KEYFRAMES">NAVIGATING CURVE KEYFRAMES</a>
-<li><a accesskey="5" href="#TOGGLE-KEYFRAMES">TOGGLE KEYFRAMES</a>
-<li><a accesskey="6" href="#AUTOMATIC-KEYFRAMES">AUTOMATIC KEYFRAMES</a>
-<li><a accesskey="7" href="#COMPOSITOR-KEYFRAMES">COMPOSITOR KEYFRAMES</a>
-<li><a accesskey="8" href="#EDITING-KEYFRAMES">EDITING KEYFRAMES</a>:    Moving keyframes around
-<li><a accesskey="9" href="#KEYFRAME-SPANNING">KEYFRAME SPANNING</a>:    How to change 1 parameter in many keyframes simultaneously
-</ul>
-
-<div class="node">
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#CURVE-KEYFRAMES" accesskey="1">CURVE KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using rubber band curves
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CHANGING-BEZIER-_0026-LINEAR-MODE" accesskey="2">CHANGING BEZIER &amp; LINEAR MODE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Change curves from linear to curved
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES" accesskey="3">SNAPPING TO NEIGHBOR KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#NAVIGATING-CURVE-KEYFRAMES" accesskey="4">NAVIGATING CURVE KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TOGGLE-KEYFRAMES" accesskey="5">TOGGLE KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#AUTOMATIC-KEYFRAMES" accesskey="6">AUTOMATIC KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COMPOSITOR-KEYFRAMES" accesskey="7">COMPOSITOR KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#EDITING-KEYFRAMES" accesskey="8">EDITING KEYFRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving keyframes around
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#KEYFRAME-SPANNING" accesskey="9">KEYFRAME SPANNING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to change 1 parameter in many keyframes simultaneously
+</td></tr>
+</table>
+
+
+
+<hr>
 <a name="CURVE-KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CHANGING-BEZIER-_0026-LINEAR-MODE">CHANGING BEZIER &amp; LINEAR MODE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
-
+<div class="header">
+<p>
+Next: <a href="#CHANGING-BEZIER-_0026-LINEAR-MODE" accesskey="n" rel="next">CHANGING BEZIER &amp; LINEAR MODE</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="CURVE-KEYFRAMES-1"></a>
 <h3 class="section">13.1 CURVE KEYFRAMES</h3>
 
 <p>Many parameters are stored in rubber band curves.  Go to <b>view-&gt;fade</b> or
@@ -5338,107 +5829,103 @@ In either arrow editing mode or i-beam editing mode, move the cursor
 over the curves in the timeline until it changes shape.  Then merely by
 clicking and dragging on the curve you can create a keyframe at the
 position.
-
-   <p>After the keyframe is created, click drag on it again to reposition
+</p>
+<p>After the keyframe is created, click drag on it again to reposition
 it.  When you click-drag a second keyframe on the curve, it creates a
 smooth ramp.
-
-<div class="node">
-<a name="CHANGING-BEZIER-%26-LINEAR-MODE"></a>
+</p>
+<hr>
 <a name="CHANGING-BEZIER-_0026-LINEAR-MODE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES">SNAPPING TO NEIGHBOR KEYFRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CURVE-KEYFRAMES">CURVE KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
-
+<div class="header">
+<p>
+Next: <a href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES" accesskey="n" rel="next">SNAPPING TO NEIGHBOR KEYFRAMES</a>, Previous: <a href="#CURVE-KEYFRAMES" accesskey="p" rel="prev">CURVE KEYFRAMES</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="CHANGING-BEZIER-_0026-LINEAR-MODE-1"></a>
 <h3 class="section">13.2 CHANGING BEZIER &amp; LINEAR MODE</h3>
 
 <p>The curve keyframes have bezier and linear modes.  In linear mode, the
 keyframe looks like a square and the lines emanating from it are
 straight.  In bezier mode, the keyframe is rounded and has 2 control
 lines in addition to the rubber band curve lines.
+</p>
+<p>These are keyframes in linear mode.
+</p>
+<img src="linear.png" alt="linear">
 
-   <p>These are keyframes in linear mode.
-
-   <div class="block-image"><img src="linear.png" alt="linear.png"></div>
+<p>These are keyframes in bezier mode.
+</p>
+<img src="bezier.png" alt="bezier">
 
-   <p>These are keyframes in bezier mode.
-
-   <div class="block-image"><img src="bezier.png" alt="bezier.png"></div>
-
-   <p>Change the mode of an existing keyframe by right clicking on it to bring
+<p>Change the mode of an existing keyframe by right clicking on it to bring
 up the context menu and selecting <b>make linear</b> or <b>make bezier</b>.
+</p>
 
-   <p>Change the mode of several keyframes by highlighting the entire region of the
+<p>Change the mode of several keyframes by highlighting the entire region of the
 timeline and selecting <b>Keyframes-&gt;change to linear</b> or
 <b>Keyframes-&gt;change to bezier</b>.
-
-   <p>When keyframes are created, they can be linear or bezier by default. 
+</p>
+<p>When keyframes are created, they can be linear or bezier by default. 
 Change the default mode by checking or unchecking <b>Keyframes-&gt;create
 bezier</b>.
+</p>
 
-   <p>For bezier keyframes, <b>ctrl-dragging</b> on the control lines of a
+<p>For bezier keyframes, <b>ctrl-dragging</b> on the control lines of a
 keyframe changes the value of either the input control or the output
 control.  Without <b>ctrl</b> the cursor only affects the central
 keyframe.  This affects the sharpness of the curve.  The input and
 output controls can only be moved vertically.
-
-   <p>If the control lines aren't visible, <b>ctrl-drag</b> on the left or right
+</p>
+<p>If the control lines aren&rsquo;t visible, <b>ctrl-drag</b> on the left or right
 of the keyframe.
-
-<div class="node">
+</p>
+<hr>
 <a name="SNAPPING-TO-NEIGHBOR-KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#NAVIGATING-CURVE-KEYFRAMES">NAVIGATING CURVE KEYFRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CHANGING-BEZIER-_0026-LINEAR-MODE">CHANGING BEZIER &amp; LINEAR MODE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
-
+<div class="header">
+<p>
+Next: <a href="#NAVIGATING-CURVE-KEYFRAMES" accesskey="n" rel="next">NAVIGATING CURVE KEYFRAMES</a>, Previous: <a href="#CHANGING-BEZIER-_0026-LINEAR-MODE" accesskey="p" rel="prev">CHANGING BEZIER &amp; LINEAR MODE</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="SNAPPING-TO-NEIGHBOR-KEYFRAMES-1"></a>
 <h3 class="section">13.3 SNAPPING TO NEIGHBOR KEYFRAMES</h3>
 
 <p><b>shift-drag</b> on a curve keyframe to make the keyframe snap to the
 value of either the next or previous keyframe, depending on which
 exists.  This lets you set a constant curve value without having to copy
 the next or previous keyframe.
+</p>
 
-<div class="node">
-<a name="NAVIGATING-CURVE-KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TOGGLE-KEYFRAMES">TOGGLE KEYFRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES">SNAPPING TO NEIGHBOR KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
 
+<hr>
+<a name="NAVIGATING-CURVE-KEYFRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#TOGGLE-KEYFRAMES" accesskey="n" rel="next">TOGGLE KEYFRAMES</a>, Previous: <a href="#SNAPPING-TO-NEIGHBOR-KEYFRAMES" accesskey="p" rel="prev">SNAPPING TO NEIGHBOR KEYFRAMES</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="NAVIGATING-CURVE-KEYFRAMES-1"></a>
 <h3 class="section">13.4 NAVIGATING CURVE KEYFRAMES</h3>
 
-<p>There isn't much room on the timeline for a wide range of curve
+<p>There isn&rsquo;t much room on the timeline for a wide range of curve
 values.  You need to zoom the curves in and out vertically to have any
 variability.  This is done by 2 tools: the automation fit button
-<img src="fitautos.png" alt="fitautos.png"> and automation zoom menu <img src="autozoom.png" alt="autozoom.png">.
-
-   <p>The automation fit button scales and offsets the vertical range so the
+<img src="fitautos.png" alt="fitautos"> and automation zoom menu <img src="autozoom.png" alt="autozoom">.
+</p>
+<p>The automation fit button scales and offsets the vertical range so the
 selected curve area appears in the timeline.  If a region of the
 timeline is highlighted by the cursor, only that region is scaled. 
-In/out points don't affect the zoomed region.  <b>Alt-f</b> also performs
+In/out points don&rsquo;t affect the zoomed region.  <b>Alt-f</b> also performs
 automation fitting.
-
-   <p>The automation zoom menu manually changes the vertical scaling of the
+</p>
+<p>The automation zoom menu manually changes the vertical scaling of the
 curves in multiples of 2.  Click on its tumbler to change the zoom. 
 <b>Alt-Up and Alt-Dn</b> change the automation zoom from the keyboard.
+</p>
 
-<div class="node">
+<hr>
 <a name="TOGGLE-KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AUTOMATIC-KEYFRAMES">AUTOMATIC KEYFRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#NAVIGATING-CURVE-KEYFRAMES">NAVIGATING CURVE KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
-
+<div class="header">
+<p>
+Next: <a href="#AUTOMATIC-KEYFRAMES" accesskey="n" rel="next">AUTOMATIC KEYFRAMES</a>, Previous: <a href="#NAVIGATING-CURVE-KEYFRAMES" accesskey="p" rel="prev">NAVIGATING CURVE KEYFRAMES</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="TOGGLE-KEYFRAMES-1"></a>
 <h3 class="section">13.5 TOGGLE KEYFRAMES</h3>
 
 <p>Mute is the only toggle keyframe.  Mute keyframes determine where the
@@ -5446,66 +5933,69 @@ track is processed but not rendered to the output.  Click-drag on these
 curves to create a keyframe.  Unlike curves, the toggle keyframe has
 only two values: on or off.  Ctrl and shift do nothing on toggle
 keyframes.
+</p>
 
-<div class="node">
-<a name="AUTOMATIC-KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COMPOSITOR-KEYFRAMES">COMPOSITOR KEYFRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TOGGLE-KEYFRAMES">TOGGLE KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
 
-</div>
 
+
+
+<hr>
+<a name="AUTOMATIC-KEYFRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#COMPOSITOR-KEYFRAMES" accesskey="n" rel="next">COMPOSITOR KEYFRAMES</a>, Previous: <a href="#TOGGLE-KEYFRAMES" accesskey="p" rel="prev">TOGGLE KEYFRAMES</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="AUTOMATIC-KEYFRAMES-1"></a>
 <h3 class="section">13.6 AUTOMATIC KEYFRAMES</h3>
 
 <p>You may have noticed when a few fade curves are set up, moving the
 insertion point around the curves causes the faders to reflect the
-curve value under the insertion point.  This isn't just to look cool. 
+curve value under the insertion point.  This isn&rsquo;t just to look cool. 
 The faders themselves can set keyframes in automatic keyframe mode. 
 Automatic keyframe mode is usually more useful than dragging curves.
-
-   <p>Enable automatic keyframe mode by enabling the automatic keyframe
-toggle <img src="autokeyframe.png" alt="autokeyframe.png">.  In automatic keyframe mode, every time
+</p>
+<p>Enable automatic keyframe mode by enabling the automatic keyframe
+toggle <img src="autokeyframe.png" alt="autokeyframe">.  In automatic keyframe mode, every time
 you tweek a keyframeable parameter it creates a keyframe on the
-timeline.  Since automatic keyframes affect many parameters, it's best
+timeline.  Since automatic keyframes affect many parameters, it&rsquo;s best
 enabled just before you need a keyframe and disabled immediately
 thereafter.
-
-   <p>It's useful to go into the <b>View</b> menu and make the desired
+</p>
+<p>It&rsquo;s useful to go into the <b>View</b> menu and make the desired
 parameter visible before performing a change.  The location where the
 automatic keyframe is generated is under the insertion point.  If the
 timeline is playing back during a tweek, several automatic keyframes
 will be generated as you change the parameter.
-
-   <p>When automatic keyframe mode is disabled, a similarly strange thing
+</p>
+<p>When automatic keyframe mode is disabled, a similarly strange thing
 happens.  Adjusting a parameter adjusts the keyframe immediately
 preceeding the insertion point.  If two fade keyframes exist and the
 insertion point is between them, changing the fader changes the first
 keyframe.
-
-   <p>There are many parameters which can only be keyframed in automatic
+</p>
+<p>There are many parameters which can only be keyframed in automatic
 keyframe mode.  These are parameters for which curves would take up too
-much space on the track or which can't be represented easily by a
+much space on the track or which can&rsquo;t be represented easily by a
 curve.
-
-   <p>Effects are only keyframable in automatic mode because of the number of
-parameters in each individual effect.
-
-   <p>Camera and projector translation can only be keyframed in automatic
+</p>
+<p>Effects are only keyframable in automatic mode because of the number of
+parameters in each individual effect.  
+</p>
+<p>Camera and projector translation can only be keyframed in automatic
 keyframe mode while camera and projector zoom can be keyframed with
 curves.  It is here that we conclude the discussion of compositing,
 since compositing is highly dependant on the ability to change over
 time.
+</p>
 
-<div class="node">
-<a name="COMPOSITOR-KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#EDITING-KEYFRAMES">EDITING KEYFRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AUTOMATIC-KEYFRAMES">AUTOMATIC KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
 
+<hr>
+<a name="COMPOSITOR-KEYFRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#EDITING-KEYFRAMES" accesskey="n" rel="next">EDITING KEYFRAMES</a>, Previous: <a href="#AUTOMATIC-KEYFRAMES" accesskey="p" rel="prev">AUTOMATIC KEYFRAMES</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="COMPOSITOR-KEYFRAMES-1"></a>
 <h3 class="section">13.7 COMPOSITOR KEYFRAMES</h3>
 
 <p>Camera and projector translation is represented by two parameters: x
@@ -5513,31 +6003,31 @@ and y.  Therefore it is cumbersome to adjust with curves.  Cinelerra
 solves this problem by relying on automatic keyframes.  With a video
 track loaded, move the insertion point to the beginning of the track
 and enable automatic keyframe mode.
-
-   <p>Move the projector slightly in the compositor window to create a
+</p>
+<p>Move the projector slightly in the compositor window to create a
 keyframe.  Then go forward several seconds.  Move the projector a long
 distance to create another keyframe and emphasize motion.  This creates
 a second projector box in the compositor, with a line joining the two
 boxes.  The joining line is the motion path.  If you create more
 keyframes, more boxes are created.  Once all the desired keyframes are
 created, disable automatic keyframe mode.
-
-   <p>Now when scrubbing around with the compositor window's slider, the
+</p>
+<p>Now when scrubbing around with the compositor window&rsquo;s slider, the
 video projection moves over time.  At any point between two keyframes,
 the motion path is read for all time before the insertion point and
-green for all time after the insertion point.  It's debatable if this
+green for all time after the insertion point.  It&rsquo;s debatable if this
 is a very useful feature but it makes you feel good to know what
 keyframe is going to be affected by the next projector tweek.
-
-   <p>Click-drag when automatic keyframes are off to adjust the preceeding
-keyframe.  If you're halfway between two keyframes, the first projector
+</p>
+<p>Click-drag when automatic keyframes are off to adjust the preceeding
+keyframe.  If you&rsquo;re halfway between two keyframes, the first projector
 box is adjusted while the second one stays the same.  Furthermore, the
-video doesn't appear to move in step with the first keyframe.  This is
+video doesn&rsquo;t appear to move in step with the first keyframe.  This is
 because, halfway between two keyframes the projector translation is
-interpolated.  In order to set the second keyframe you'll need to scrub
+interpolated.  In order to set the second keyframe you&rsquo;ll need to scrub
 after the second keyframe.
-
-   <p>By default the motion path is a straight line, but it can be curved
+</p>
+<p>By default the motion path is a straight line, but it can be curved
 with control points.  <b>Ctrl-drag</b> to set either the in or out
 control point of the preceeding keyframe.  Once again, we depart from
 The Gimp because <b>shift</b> is already used for zoom.  After the in
@@ -5545,101 +6035,115 @@ or out control points are extrapolated from the keyframe,
 <b>Ctrl-dragging</b> anywhere in the video adjusts the nearest control
 point.  A control point can be out of view entirely yet still
 controllable.
-
-   <p>When editing the camera translation, the behavior of the camera boxes
+</p>
+<p>When editing the camera translation, the behavior of the camera boxes
 is slightly different.  Camera automation is normally used for still
-photo panning.  The current camera box doesn't move during a drag, but
+photo panning.  The current camera box doesn&rsquo;t move during a drag, but
 if multiple keyframes are set, every camera box except the current
 keyframe appears to move.  This is because the camera display shows
 every other camera position relative to the current one.
-
-   <p>The situation becomes more intuitive if you bend the motion path
+</p>
+<p>The situation becomes more intuitive if you bend the motion path
 between two keyframes and scrub between the two keyframes.  The
 division between red and green, the current position between the
 keyframes, is always centered while the camera boxes move.
+</p>
+
 
-<div class="node">
-<a name="EDITING-KEYFRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#KEYFRAME-SPANNING">KEYFRAME SPANNING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMPOSITOR-KEYFRAMES">COMPOSITOR KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
 
-</div>
 
+
+<hr>
+<a name="EDITING-KEYFRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#KEYFRAME-SPANNING" accesskey="n" rel="next">KEYFRAME SPANNING</a>, Previous: <a href="#COMPOSITOR-KEYFRAMES" accesskey="p" rel="prev">COMPOSITOR KEYFRAMES</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="EDITING-KEYFRAMES-1"></a>
 <h3 class="section">13.8 EDITING KEYFRAMES</h3>
 
 <p>Keyframes can be shifted around and moved between tracks on the
 timeline using similar cut and paste operations to editing media.  Only
 the keyframes selected in the <b>view</b> menu are affected by keyframe
 editing operations, however.
-
-   <p>The most popular keyframe editing operation is replication of some
+</p>
+<p>The most popular keyframe editing operation is replication of some
 curve from one track to the other, to make a stereo pair.  The first
-step is to solo the source track's record <img src="recordpatch.png" alt="recordpatch.png"> patch
+step is to solo the source track&rsquo;s record <img src="recordpatch.png" alt="recordpatch"> patch
 by <b>shift-clicking</b> on it.  Then either set in/out points or
 highlight the desired region of keyframes.  Go to <b>keyframes-&gt;copy
-keyframes</b> to copy them to the clipboard.  Solo the destination track's
-record <img src="recordpatch.png" alt="recordpatch.png"> patch by <b>shift-clicking</b> on it and
+keyframes</b> to copy them to the clipboard.  Solo the destination track&rsquo;s
+record <img src="recordpatch.png" alt="recordpatch"> patch by <b>shift-clicking</b> on it and
 go to <b>keyframes-&gt;paste keyframes</b> to paste the clipboard.
-
-   <p>The media editing commands are mapped to the keyframe editing commands
-by using the <b>shift</b> key instead of just the keyboard shortcut.
-
-   <p>This leads to the most complicated part of keyframe editing, the
+</p>
+<p>The media editing commands are mapped to the keyframe editing commands
+by using the <b>shift</b> key instead of just the keyboard shortcut.  
+</p>
+<p>This leads to the most complicated part of keyframe editing, the
 default keyframe.  Remember that when no keyframes are set at all,
 there is still a default keyframe which stores a global parameter for
-the entire duration.  The default keyframe isn't drawn because it
+the entire duration.  The default keyframe isn&rsquo;t drawn because it
 always exists.  What if the default keyframe is a good value which you
 want to transpose between other non-default keyframes?  The
 <b>keyframes-&gt;copy default keyframe</b> and <b>keyframes-&gt;paste
 default keyframe</b> allow conversion of the default keyframe to a
 non-default keyframe.
-
-   <p><b>Keyframes-&gt;copy default keyframe</b> copies the default keyframe to
+</p>
+<p><b>Keyframes-&gt;copy default keyframe</b> copies the default keyframe to
 the clipboard, no matter what region of the timeline is selected.  The
 <b>keyframes-&gt;paste keyframes</b> function may then be used to paste
 the clipboard as a non-default keyframe.
-
-   <p>If you've copied a non-default keyframe, it can be stored as the
+</p>
+<p>If you&rsquo;ve copied a non-default keyframe, it can be stored as the
 default keyframe by calling <b>keyframes-&gt;paste default keyframe</b>. 
 After using paste default keyframe to convert a non-default keyframe
-into a default keyframe, you won't see the value of the default
+into a default keyframe, you won&rsquo;t see the value of the default
 keyframe reflected until all the non-default keyframes are removed.
-
-   <p>Finally, there is a convenient way to delete keyframes besides
+</p>
+<p>Finally, there is a convenient way to delete keyframes besides
 selecting a region and calling <b>keyframes-&gt;clear keyframes</b>. 
 Merely click-drag a keyframe before its preceeding keyframe or after
 its following keyframe on the track.
+</p>
 
-<div class="node">
-<a name="KEYFRAME-SPANNING"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#EDITING-KEYFRAMES">EDITING KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a>
 
+<hr>
+<a name="KEYFRAME-SPANNING"></a>
+<div class="header">
+<p>
+Previous: <a href="#EDITING-KEYFRAMES" accesskey="p" rel="prev">EDITING KEYFRAMES</a>, Up: <a href="#KEYFRAMES" accesskey="u" rel="up">KEYFRAMES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="KEYFRAME-SPANNING-1"></a>
 <h3 class="section">13.9 KEYFRAME SPANNING</h3>
 
+
+
 <p>To change a single parameter in multiple keyframes without changing the
 other parameters, highlight a region on the timeline and adjust the
 parameter.  Instead of a new keyframe being created, the existing
 keyframes are modified and only the changed parameter is modified.
+</p>
+<p>It doesn&rsquo;t matter if <img src="autokeyframe.png" alt="autokeyframe"> auto keyframe is enabled.  It
+only works when the keyframe stores multiple parameters.  Only mask and
+effect keyframes do this.  Other types of keyframes are generated as usual.
+</p>
+
+
+
+
+
+
 
-   <p>It doesn't matter if <img src="autokeyframe.png" alt="autokeyframe.png"> auto keyframe is enabled.  It
-only works when the keyframe stores multiple parameters.  Only mask and
-effect keyframes do this.  Other types of keyframes are generated as usual.
 
-<div class="node">
-<a name="CAPTURING-MEDIA"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#KEYFRAMES">KEYFRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+<hr>
+<a name="CAPTURING-MEDIA"></a>
+<div class="header">
+<p>
+Next: <a href="#IMPROVING-PERFORMANCE" accesskey="n" rel="next">IMPROVING PERFORMANCE</a>, Previous: <a href="#KEYFRAMES" accesskey="p" rel="prev">KEYFRAMES</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CAPTURING-MEDIA-1"></a>
 <h2 class="chapter">14 CAPTURING MEDIA</h2>
 
 <p>Ideally, all media would be stored on hard drives, CD-ROM, flash, or
@@ -5648,77 +6152,84 @@ In reality, very few sources of media can be accessed like a filesystem
 but instead rely on tape transport mechanisms and dumb I/O mechanisms
 to transfer the data to computers.  These media types are imported into
 Cinelerra through the Record dialog.
-
-   <p>The first step in recording is to configure the input device.  In
+</p>
+<p>The first step in recording is to configure the input device.  In
 <b>Settings-&gt;preferences</b> are a number of recording parameters
 described in configuration See <a href="#RECORDING">RECORDING</a>.  These parameters apply to
 recording no matter what the project settings are, because the
 recording parameters are usually the maximum capability of the
 recording hardware while project settings come and go.
-
-   <p>Go to <b>File-&gt;record</b> to record a dumb I/O source.  This prompts
-for an output format much like rendering does.  Once that's done, the
+</p>
+<p>Go to <b>File-&gt;record</b> to record a dumb I/O source.  This prompts
+for an output format much like rendering does.  Once that&rsquo;s done, the
 record window and the record monitor pop up.
-
-   <p>The record window has discrete sections.  While many parameters change
+</p>
+<p>The record window has discrete sections.  While many parameters change
 depending on if the file has audio or video, the discrete sections are
 always the same.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 The output format area describes the format of the output file and the
 current position within it.
 
-     <li>
+
+</li><li> 
 The edit batch area lets you change parameters in the current batch.
 
-     <li>
+</li><li> 
 The transport controls start and stop recording different ways.
 
-     <li>
+</li><li> 
 The batch list displays all the defined batches.
 
-     <li>
+</li><li> 
 The confirmation area lets you determine how the output files are
 imported into the timeline and quit.
 
-   </ul>
-
-   <div class="block-image"><img src="recording.png" alt="recording.png"></div>
-   <pre class="sp">
-
+</li></ul>
 
-</pre>
-<b>Recording window areas</b>
+<img src="recording.png" alt="recording">
+<br>
+<br>
+<p><b>Recording window areas</b>
+</p>
 
-   <p>Recording in Cinelerra is organized around batches.  A batch
+<p>Recording in Cinelerra is organized around batches.  A batch
 essentially defines a distinct output file for the recording.  For now
 you can ignore the batch concept entirely and record merely by hitting
-the record button <img src="record.png" alt="record.png">.
-
-   <p>The record button opens the current output file if it isn't opened and
+the record button <img src="record.png" alt="record">.
+</p>
+<p>The record button opens the current output file if it isn&rsquo;t opened and
 writes captured data to it.  Use the stop button to stop the
 recording.  Recording can be resumed with the record button without
 erasing the file at this point.  In the case of a video file, there is
-a single frame record button <img src="singleframe.png" alt="singleframe.png"> which records a single
+a single frame record button <img src="singleframe.png" alt="singleframe"> which records a single
 frame.
-
-   <p>When enough media is recorded, choose an insertion method from the
+</p>
+<p>When enough media is recorded, choose an insertion method from the
 <b>Insertion Strategy</b> menu and hit <b>close</b>.
+</p>
 
-<ul class="menu">
-<li><a accesskey="1" href="#BATCHES">BATCHES</a>
-<li><a accesskey="2" href="#EDITING-TUNER-INFORMATION">EDITING TUNER INFORMATION</a>
-</ul>
 
-<div class="node">
-<a name="BATCHES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#EDITING-TUNER-INFORMATION">EDITING TUNER INFORMATION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CAPTURING-MEDIA">CAPTURING MEDIA</a>
 
-</div>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#BATCHES" accesskey="1">BATCHES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#EDITING-TUNER-INFORMATION" accesskey="2">EDITING TUNER INFORMATION</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
+
+
+
+<hr>
+<a name="BATCHES"></a>
+<div class="header">
+<p>
+Next: <a href="#EDITING-TUNER-INFORMATION" accesskey="n" rel="next">EDITING TUNER INFORMATION</a>, Up: <a href="#CAPTURING-MEDIA" accesskey="u" rel="up">CAPTURING MEDIA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="BATCHES-1"></a>
 <h3 class="section">14.1 BATCHES</h3>
 
 <p>Now we come to the concept of batches.  Batches try to make the dumb
@@ -5728,644 +6239,761 @@ different files instead of recording straight through an entire tape.
 Because of the high cost of developing frame-accurate deck control
 mechanisms, the only use of batches now is recording different programs
 during different times of day.  This is still useful for recording TV
-shows or time lapse movies as anyone who can't afford proper appliances
+shows or time lapse movies as anyone who can&rsquo;t afford proper appliances
 knows.
-
-   <p>The record window supports a list of batches and two recording modes:
+</p>
+<p>The record window supports a list of batches and two recording modes:
 interactive and batch recording.  Interactive recording happens when
 the record button is pressed.  Interactive recording starts immediately
 and uses the current batch to determine everything except start time. 
 By default, the current batch is configured to behave like tape.
-
-   <p>Batch recording happens when the <b>start</b> button is pressed.  In
+</p>
+<p>Batch recording happens when the <b>start</b> button is pressed.  In
 batch recording, the <b>start time</b> is the time the batch starts
 recording.
+</p>
+<p>First, you&rsquo;ll want to create some batches.  Each batch has certain
+parameters and methods of adjustment.  
+</p>
+
 
-   <p>First, you'll want to create some batches.  Each batch has certain
-parameters and methods of adjustment.
 
-     <ul>
-<li>
+<ul>
+<li> 
 <b>On</b> determines whether the batch is included in batch recording
 operations.  Click the list row under <b>On</b> to enable or disable
 batches.
 
-     <li>
+
+</li><li> 
 <b>Path</b> is the file the batch is going to be recorded to.  The
 filename specified in the record dialog is the name of the first batch,
 to simplify interactive recording, but the filename may be changed in
 the record window for any batch in the <b>edit batch</b> area.
 
-     <li>
+
+</li><li> 
 <b>News</b> shows whether the file exists or not.  This is a very
 important attribute since there is no confirmation dialog if the file
 exists.  The first time you hit record, the file is opened.  If the
-file exists at this point it's erased.  News says <b>File exists</b> if
-it exists and <b>OK</b> if it doesn't.  Every time you resume recording
+file exists at this point it&rsquo;s erased.  News says <b>File exists</b> if
+it exists and <b>OK</b> if it doesn&rsquo;t.  Every time you resume recording
 in the same batch, the news should say <b>Open</b>, indicating the file
-is already opened and won't be erased in the next record button press.
+is already opened and won&rsquo;t be erased in the next record button press.
 
-     <p>If you change out of the current batch after recording, the file is
+<p>If you change out of the current batch after recording, the file is
 closed.  Next time you change into the batch, the file will be erased.
-
-     <li>
+</p>
+</li><li> 
 <b>Start time</b> is the 24 hour time of day the batch will start
 recording if in batch mode.  The start time may become a time of tape
-and reel number if deck control is implemented but for now it's a time
+and reel number if deck control is implemented but for now it&rsquo;s a time
 of day.
 
-     <li>
+</li><li> 
 <b>Duration</b> is the length of the batch.  It only has meaning if the
 <b>Mode</b> of the batch is <b>Timed</b>.  Once the recording length
 reaches <b>duration</b> the recording stops, whether in interactive or
 batch mode.
 
-     <li>
+</li><li> 
 <b>Source</b> has meaning only when the capturing hardware has multiple
 sources.  Usually the source is a tuner channel or input.  When the
 current batch finishes and the next batch begins recording, the source
 is changed to what the next batch is set to.  This way multiple TV
 stations can be recorded at different times.
 
-   </ul>
 
-   <p>The record window has a notion of the <b>current batch</b>.  The
+</li></ul>
+
+<p>The record window has a notion of the <b>current batch</b>.  The
 current batch is not the same as the batch which is highlighted in the
 batch list.  The current batch text is colored red in the batch list. 
 The highlighted batch is merely displayed in the edit batch section for
 editing.
-
-   <p>By coloring the current batch red, any batch can be edited by
+</p>
+<p>By coloring the current batch red, any batch can be edited by
 highlighting it, without changing the batch to be recorded.
-
-   <p>All recording operations take place in the current batch.   If there
+</p>
+<p>All recording operations take place in the current batch.   If there
 are multiple batches, highlight the desired batch and hit
 <b>activate</b> to make it the current batch.  If the <b>start</b>
-button is pressed, the current batch flashes to indicate it's waiting
+button is pressed, the current batch flashes to indicate it&rsquo;s waiting
 for the start time in batch mode.  If the <b>record</b> button is
 pressed, the current batch is recorded immediately in interactive mode.
-
-   <p>In batch and interactive recording modes, when the current batch
+</p>
+<p>In batch and interactive recording modes, when the current batch
 finishes recording the next batch is activated and performed.  All
 future recording is done in batch mode.  When the first batch finishes,
 the next batch flashes until its start time is reached.
-
-   <p>Interrupt either the batch or the interactive operation by hitting the
+</p>
+<p>Interrupt either the batch or the interactive operation by hitting the
 stop button.
-
-   <p>Finally there is the <img src="rewind.png" alt="rewind.png"> rewind button.  In either
+</p>
+<p>Finally there is the <img src="rewind.png" alt="rewind"> rewind button.  In either
 interactive or batch recording, the rewind button causes the current
 batch to close its file.  The next recording operation in the current
 batch deletes the file.
+</p>
+
 
-<div class="node">
-<a name="EDITING-TUNER-INFORMATION"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#BATCHES">BATCHES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CAPTURING-MEDIA">CAPTURING MEDIA</a>
 
-</div>
 
+
+<hr>
+<a name="EDITING-TUNER-INFORMATION"></a>
+<div class="header">
+<p>
+Previous: <a href="#BATCHES" accesskey="p" rel="prev">BATCHES</a>, Up: <a href="#CAPTURING-MEDIA" accesskey="u" rel="up">CAPTURING MEDIA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="EDITING-TUNER-INFORMATION-1"></a>
 <h3 class="section">14.2 EDITING TUNER INFORMATION</h3>
 
+
 <p>Sometimes in the recording process and the configuration process,
-you'll need to define and select tuner channels to either record or
+you&rsquo;ll need to define and select tuner channels to either record or
 play back to.  In the case of the Video4Linux and Buz recording
 drivers, tuner channels define the source.  When the Buz driver is also
-used for playback, tuner channels define the destination.
-
-   <p>Defining tuner channels is accomplished by pushing the <img src="channel.png" alt="channel.png">
+used for playback, tuner channels define the destination.  
+</p>
+<p>Defining tuner channels is accomplished by pushing the <img src="channel.png" alt="channel">
 channel button.  This brings up the channel editing window.  In this
 window you add, edit, and sort channels.  Also, for certain video
 drivers, you can adjust the picture quality.
-
-   <p>The <b>add</b> operation brings up a channel editing box.  The title of
+</p>
+<p>The <b>add</b> operation brings up a channel editing box.  The title of
 the channel appears in the channel list.  The source of the channel is
-the entry in the physical tuner's frequency table corresponding to the
-title.
-
-   <p>Fine tuning in the channel edit dialog adjusts the physical frequency
+the entry in the physical tuner&rsquo;s frequency table corresponding to the
+title.  
+</p>
+<p>Fine tuning in the channel edit dialog adjusts the physical frequency
 slightly if the driver supports it.  The norm and frequency table
 together define which frequency table is selected for defining
 sources.  If the device supports multiple inputs, the input menu
 selects these.
-
-   <p>To sort channels, highlight the channel in the list and push <b>move
+</p>
+<p>To sort channels, highlight the channel in the list and push <b>move
 up</b> or <b>move down</b> to move it.
-
-   <p>Once channels are defined, the <b>source</b> item in the record window
+</p>
+<p>Once channels are defined, the <b>source</b> item in the record window
 can be used to select channels for recording.  The same channel
 selecting ability also exists in the record monitor window.  Be aware
 channel selections in the record monitor window and the record window
 are stored in the current batch.
-
-   <p>For some drivers an option to <b>swap fields</b> may be visible.  These
-drivers don't get the field order right every time without human
+</p>
+<p>For some drivers an option to <b>swap fields</b> may be visible.  These
+drivers don&rsquo;t get the field order right every time without human
 intervention.  Toggle this to get the odd and even lines to record in
 the right order.
+</p>
 
-<div class="node">
-<a name="IMPROVING-PERFORMANCE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TROUBLESHOOTING">TROUBLESHOOTING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CAPTURING-MEDIA">CAPTURING MEDIA</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+<hr>
+<a name="IMPROVING-PERFORMANCE"></a>
+<div class="header">
+<p>
+Next: <a href="#TROUBLESHOOTING" accesskey="n" rel="next">TROUBLESHOOTING</a>, Previous: <a href="#CAPTURING-MEDIA" accesskey="p" rel="prev">CAPTURING MEDIA</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="IMPROVING-PERFORMANCE-1"></a>
 <h2 class="chapter">15 IMPROVING PERFORMANCE</h2>
 
-<p>Let's get one thing perfectly clear.  Linux is not a very good
-desktop.  It's a server.  Most of what you'll find on modern Linux
+
+<p>Let&rsquo;s get one thing perfectly clear.  Linux is not a very good
+desktop.  It&rsquo;s a server.  Most of what you&rsquo;ll find on modern Linux
 distributions are faceless, network-only programs strategicly designed
 to counteract one Microsoft server feature or another and not to
 perform very well at user interaction.  There are a number of
 parameters on Linux, which ordinary people can adjust to make it behave
 more like a thoroughbred in desktop usage.
-
-<ul class="menu">
-<li><a accesskey="1" href="#DISABLING-SWAP-SPACE">DISABLING SWAP SPACE</a>
-<li><a accesskey="2" href="#ENLARGING-SOUND-BUFFERS">ENLARGING SOUND BUFFERS</a>
-<li><a accesskey="3" href="#FREEING-MORE-SHARED-MEMORY">FREEING MORE SHARED MEMORY</a>
-<li><a accesskey="4" href="#SPEEDING-UP-THE-HARD-DRIVE">SPEEDING UP THE HARD DRIVE</a>
-<li><a accesskey="5" href="#DISABLING-CRON">DISABLING CRON</a>
-<li><a accesskey="6" href="#REDUCING-USB-MOUSE-SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>
-<li><a accesskey="7" href="#ASSORTED-X-TWEEKS">ASSORTED X TWEEKS</a>
-<li><a accesskey="8" href="#SPEEDING-UP-THE-FILE-SYSTEM">SPEEDING UP THE FILE SYSTEM</a>
-<li><a accesskey="9" href="#IMPROVING-ZORAN-VIDEO">IMPROVING ZORAN VIDEO</a>
-</ul>
-
-<div class="node">
+</p>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#DISABLING-SWAP-SPACE" accesskey="1">DISABLING SWAP SPACE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#ENLARGING-SOUND-BUFFERS" accesskey="2">ENLARGING SOUND BUFFERS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#FREEING-MORE-SHARED-MEMORY" accesskey="3">FREEING MORE SHARED MEMORY</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SPEEDING-UP-THE-HARD-DRIVE" accesskey="4">SPEEDING UP THE HARD DRIVE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DISABLING-CRON" accesskey="5">DISABLING CRON</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#REDUCING-USB-MOUSE-SENSITIVITY" accesskey="6">REDUCING USB MOUSE SENSITIVITY</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#ASSORTED-X-TWEEKS" accesskey="7">ASSORTED X TWEEKS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SPEEDING-UP-THE-FILE-SYSTEM" accesskey="8">SPEEDING UP THE FILE SYSTEM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#IMPROVING-ZORAN-VIDEO" accesskey="9">IMPROVING ZORAN VIDEO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
 <a name="DISABLING-SWAP-SPACE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ENLARGING-SOUND-BUFFERS">ENLARGING SOUND BUFFERS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
-
+<div class="header">
+<p>
+Next: <a href="#ENLARGING-SOUND-BUFFERS" accesskey="n" rel="next">ENLARGING SOUND BUFFERS</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="DISABLING-SWAP-SPACE-1"></a>
 <h3 class="section">15.1 DISABLING SWAP SPACE</h3>
 
 <p>On systems with lots of memory, Cinelerra sometimes runs better without
-a swap space.  If you have 4 GB of RAM, you're probably better off
+a swap space.  If you have 4 GB of RAM, you&rsquo;re probably better off
 without a swap space.  If you have 512MB of RAM, you should keep the
 swap.  If you want to do recording, you should probably disable swap
-space in any case.  There's a reason for this.  Linux only allows half
+space in any case.  There&rsquo;s a reason for this.  Linux only allows half
 the available memory to be used.  Beyond that, it starts searching for
 free pages to swap, in order to cache more disk access.  In a 4 GB
-system, you start waiting for page swaps after using only 2 GB.
-
-   <p>The question then is how to make Linux run without a swap space. 
+system, you start waiting for page swaps after using only 2 GB.  
+</p>
+<p>The question then is how to make Linux run without a swap space. 
 Theoretically it should be a matter of running
+</p>
+<div class="example">
+<pre class="example">swapoff -a
+</pre></div>
 
-<pre class="example">     swapoff -a
-</pre>
-   <p>Unfortunately, without a swap space the <b>kswapd</b> tasklet normally
-spins at 100%.  To eliminate this problem, edit <b>linux/mm/vmscan.c</b>. 
-In this file, put a line saying <b>return 0;</b> before it says
+<p>Unfortunately, without a swap space the <b>kswapd</b> tasklet normally
+spins at 100%.  To eliminate this problem, edit <b>linux/mm/vmscan.c</b>.
+In this file, put a line saying <b>return 0;</b> before it says 
+</p>
+<div class="example">
+<pre class="example">  /*
+        * Kswapd main loop.
+        */
+</pre></div>
 
-<pre class="example">          /*
-        * Kswapd main loop.
-        */
-</pre>
-   <p>Then recompile the kernel.
+<p>Then recompile the kernel.
+</p>
 
-<div class="node">
-<a name="ENLARGING-SOUND-BUFFERS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#FREEING-MORE-SHARED-MEMORY">FREEING MORE SHARED MEMORY</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DISABLING-SWAP-SPACE">DISABLING SWAP SPACE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
 
-</div>
 
+<hr>
+<a name="ENLARGING-SOUND-BUFFERS"></a>
+<div class="header">
+<p>
+Next: <a href="#FREEING-MORE-SHARED-MEMORY" accesskey="n" rel="next">FREEING MORE SHARED MEMORY</a>, Previous: <a href="#DISABLING-SWAP-SPACE" accesskey="p" rel="prev">DISABLING SWAP SPACE</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="ENLARGING-SOUND-BUFFERS-1"></a>
 <h3 class="section">15.2 ENLARGING SOUND BUFFERS</h3>
 
 <p>In order to improve realtime performance, the audio buffers for all the
 Linux sound drivers were limited from 128k to 64k.  For recording audio
 and video simultaneously and for most audio recording this causes
 dropouts.  Application of low latency and preemtible kernel patches
-make it possible to record more audio recordings but it doesn't improve
+make it possible to record more audio recordings but it doesn&rsquo;t improve
 recording video with audio.  This is where you need to hack the kernel.
-
-   <p>To see if your sound buffers are suitable, run the included
+</p>
+<p>To see if your sound buffers are suitable, run the included
 <b>soundtest</b> program with nothing playing or recording.  This
 allocates the largest possible buffers and displays them.  If the
 <b>TOTAL BYTES AVAILABLE</b> is under 131072, you need to see about
 getting the buffers enlarged in the driver.  While many drivers differ,
 we have a hack for at least one driver.
-
-   <p>This only applies to the OSS version of the Soundblaster Live driver. 
+</p>
+<p>This only applies to the OSS version of the Soundblaster Live driver. 
 Since every sound card and every sound driver derivative has a
-different implementation you'll need to do some searching for other
+different implementation you&rsquo;ll need to do some searching for other
 sound cards.  Edit <b>linux/drivers/sound/emu10k1/audio.c</b>
-
-   <p>Where is says
-
-<pre class="example">     if (bufsize &gt;= 0x10000)
-</pre>
-   <p>change it to say
-
-<pre class="example">     if (bufsize &gt; 0x40000)
-</pre>
-   <p>Where is says
-
-<pre class="example">                  for (i = 0; i &lt; 8; i++)
-                       for (j = 0; j &lt; 4; j++)
-</pre>
-   <p>change it to say
-
-<pre class="example">                  for (i = 0; i &lt; 16; i++)
-                       for (j = 0; j &lt; 4; j++)
-</pre>
-   <p>In <b>linux/drivers/sound/emu10k1/hwaccess.h</b>
-
-   <p>Change
-
-   <p><b>#define MAXBUFSIZE    65536</b>
-
-   <p>to
-
-   <p><b>#define MAXBUFSIZE    262144</b>
-
-   <p>Finally, in <b>linux/drivers/sound/emu10k1/cardwi.h</b>
-
-   <p><b>#define WAVEIN_MAXBUFSIZE         65536</b>
-
-   <p>to
-
-   <p><b>#define WAVEIN_MAXBUFSIZE         262144</b>
-
-   <p>Then recompile the kernel modules.
-
-<div class="node">
+</p>
+<p>Where is says
+</p>
+<div class="example">
+<pre class="example">if (bufsize &gt;= 0x10000)
+</pre></div>
+
+<p>change it to say
+</p>
+<div class="example">
+<pre class="example">if (bufsize &gt; 0x40000)
+</pre></div>
+
+
+
+<p>Where is says
+</p>
+<div class="example">
+<pre class="example">          for (i = 0; i &lt; 8; i++)
+                       for (j = 0; j &lt; 4; j++)
+</pre></div>
+
+<p>change it to say
+</p>
+<div class="example">
+<pre class="example">          for (i = 0; i &lt; 16; i++)
+                       for (j = 0; j &lt; 4; j++)
+</pre></div>
+
+
+
+<p>In <b>linux/drivers/sound/emu10k1/hwaccess.h</b>
+</p>
+<p>Change
+</p>
+<p><b>#define MAXBUFSIZE       65536</b> 
+</p>
+<p>to 
+</p>
+<p><b>#define MAXBUFSIZE       262144</b> 
+</p>
+<p>Finally, in <b>linux/drivers/sound/emu10k1/cardwi.h</b>
+</p>
+<p><b>#define WAVEIN_MAXBUFSIZE         65536</b>
+</p>
+<p>to
+</p>
+<p><b>#define WAVEIN_MAXBUFSIZE         262144</b>
+</p>
+<p>Then recompile the kernel modules.
+</p>
+
+
+
+
+
+<hr>
 <a name="FREEING-MORE-SHARED-MEMORY"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SPEEDING-UP-THE-HARD-DRIVE">SPEEDING UP THE HARD DRIVE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ENLARGING-SOUND-BUFFERS">ENLARGING SOUND BUFFERS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
-
+<div class="header">
+<p>
+Next: <a href="#SPEEDING-UP-THE-HARD-DRIVE" accesskey="n" rel="next">SPEEDING UP THE HARD DRIVE</a>, Previous: <a href="#ENLARGING-SOUND-BUFFERS" accesskey="p" rel="prev">ENLARGING SOUND BUFFERS</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="FREEING-MORE-SHARED-MEMORY-1"></a>
 <h3 class="section">15.3 FREEING MORE SHARED MEMORY</h3>
 
 <p>The Linux kernel only allows 32MB of shared memory to be allocated by
 default.  This needs to be increased to do anything useful.  Run the
 following command:
+</p>
+<p><b>echo &quot;0x7fffffff&quot; &gt; /proc/sys/kernel/shmmax</b>
+</p>
 
-   <p><b>echo "0x7fffffff" &gt; /proc/sys/kernel/shmmax</b>
 
-<div class="node">
-<a name="SPEEDING-UP-THE-HARD-DRIVE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DISABLING-CRON">DISABLING CRON</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#FREEING-MORE-SHARED-MEMORY">FREEING MORE SHARED MEMORY</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
 
-</div>
 
+<hr>
+<a name="SPEEDING-UP-THE-HARD-DRIVE"></a>
+<div class="header">
+<p>
+Next: <a href="#DISABLING-CRON" accesskey="n" rel="next">DISABLING CRON</a>, Previous: <a href="#FREEING-MORE-SHARED-MEMORY" accesskey="p" rel="prev">FREEING MORE SHARED MEMORY</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SPEEDING-UP-THE-HARD-DRIVE-1"></a>
 <h3 class="section">15.4 SPEEDING UP THE HARD DRIVE</h3>
 
 <p>This is a very popular command sequence among Linux gurus, which is not
 done by default on Linux distributions.
-
-   <p><b>hdparm -c3 -d1 -u1 -k1 /dev/hda</b>
-
-   <p><b>-c3</b> puts the hard drive into 32 bit I/O with sync.  This normally
-doesn't work due to inept kernel support for most IDE controllers.  If
+</p>
+<p><b>hdparm -c3 -d1 -u1 -k1 /dev/hda</b>
+</p>
+<p><b>-c3</b> puts the hard drive into 32 bit I/O with sync.  This normally
+doesn&rsquo;t work due to inept kernel support for most IDE controllers.  If
 you get lost interrupt or SeekComplete errors, quickly use <b>-c0</b>
 instead of <b>-c3</b> in your command.
-
-   <p><b>-d1</b> enables DMA of course.  This frees up the CPU partially during
+</p>
+<p><b>-d1</b> enables DMA of course.  This frees up the CPU partially during
 data transfers.
-
-   <p><b>-u1</b> allows multiple interrupts to be handled during hard drive
+</p>
+<p><b>-u1</b> allows multiple interrupts to be handled during hard drive
 transactions.  This frees up even more CPU time.
-
-   <p><b>-k1</b> prevents Linux from resetting your settings in case of a
+</p>
+<p><b>-k1</b> prevents Linux from resetting your settings in case of a
 glitch.
+</p>
+
 
-<div class="node">
-<a name="DISABLING-CRON"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#REDUCING-USB-MOUSE-SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SPEEDING-UP-THE-HARD-DRIVE">SPEEDING UP THE HARD DRIVE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
 
-</div>
 
+<hr>
+<a name="DISABLING-CRON"></a>
+<div class="header">
+<p>
+Next: <a href="#REDUCING-USB-MOUSE-SENSITIVITY" accesskey="n" rel="next">REDUCING USB MOUSE SENSITIVITY</a>, Previous: <a href="#SPEEDING-UP-THE-HARD-DRIVE" accesskey="p" rel="prev">SPEEDING UP THE HARD DRIVE</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="DISABLING-CRON-1"></a>
 <h3 class="section">15.5 DISABLING CRON</h3>
 
 <p>Linux runs some daily operations like compressing man pages.  These may
 be acceptable background tasks while compiling or word processing but
 not while playing video.  Disable these operations by editing
 <b>/etc/rc.d/init.d/anacron</b>.
+</p>
+<p>Put <b>exit</b> before the first line not beginning in <b>#</b>.
+</p>
+<p>In <b>/etc/rc.d/init.d/crond</b> put <b>exit</b> before the first line not
+beginning in <b>#</b>.  Then make like Win 2000 and reboot.
+</p>
+<p>You can&rsquo;t use the <b>at</b> command anymore, but who uses that command
+anyways?
+</p>
+
+
 
-   <p>Put <b>exit</b> before the first line not beginning in <b>#</b>.
 
-   <p>In <b>/etc/rc.d/init.d/crond</b> put <b>exit</b> before the first line not
-beginning in <b>#</b>.  Then make like Win 2000 and reboot.
 
-   <p>You can't use the <b>at</b> command anymore, but who uses that command
-anyways?
 
-<div class="node">
-<a name="REDUCING-USB-MOUSE-SENSITIVITY"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ASSORTED-X-TWEEKS">ASSORTED X TWEEKS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DISABLING-CRON">DISABLING CRON</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
 
-</div>
 
+<hr>
+<a name="REDUCING-USB-MOUSE-SENSITIVITY"></a>
+<div class="header">
+<p>
+Next: <a href="#ASSORTED-X-TWEEKS" accesskey="n" rel="next">ASSORTED X TWEEKS</a>, Previous: <a href="#DISABLING-CRON" accesskey="p" rel="prev">DISABLING CRON</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="REDUCING-USB-MOUSE-SENSITIVITY-1"></a>
 <h3 class="section">15.6 REDUCING USB MOUSE SENSITIVITY</h3>
 
 <p>Gamers like high resolution mice, but this can be painful for precisely
 positioning the mouse on a timeline or video screen.  XFree86 once
 allowed you to reduce PS/2 mouse sensitivity using commands like
-<b>xset m 1 1</b> but you're out of luck with USB mice or KVM's.
-
-   <p>We have a way to reduce USB mouse sensitivity but it requires editing
+<b>xset m 1 1</b> but you&rsquo;re out of luck with USB mice or KVM&rsquo;s.
+</p>
+<p>We have a way to reduce USB mouse sensitivity but it requires editing
 the kernel source code.  Even though USB mice have been supported for
 years, the kernel source code for USB mice is constantly being
 rewritten.  These instructions were relevant for 2.6.12.3.  Edit
-<b>/usr/src/linux/drivers/input/mousedev.c</b>.
-
-   <p>After the line saying
-
-<pre class="example">     struct mousedev_hw_data {
-</pre>
-   <p>put
-
-<pre class="example">     #define DOWNSAMPLE_N 100
-     #define DOWNSAMPLE_D 350
-     int x_accum, y_accum;
-</pre>
-   <p>Next, the section which says something like:
-
-<pre class="example">     switch (code) {
-       case REL_X:     mousedev-&gt;packet.dx += value; break;
-       case REL_Y:     mousedev-&gt;packet.dy -= value; break;
-       case REL_WHEEL: mousedev-&gt;packet.dz -= value; break;
-     }
-</pre>
-   <p>must be replaced by
-
-<pre class="example">     
-       switch (code) {
-                       case REL_X:
-                               mousedev-&gt;packet.x_accum += value * DOWNSAMPLE_N;
-                               mousedev-&gt;packet.dx += (int)mousedev-&gt;packet.x_accum / (int)DOWNSAMPLE_D;
-                               mousedev-&gt;packet.x_accum -= ((int)mousedev-&gt;packet.x_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
-                               break;
-                       case REL_Y:
-                               mousedev-&gt;packet.y_accum += value * DOWNSAMPLE_N;
-                               mousedev-&gt;packet.dy -= (int)mousedev-&gt;packet.y_accum / (int)DOWNSAMPLE_D;
-                               mousedev-&gt;packet.y_accum -= ((int)mousedev-&gt;packet.y_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
-                               break;
-                       case REL_WHEEL: mousedev-&gt;packet.dz -= value; break;
-       }
-     
-     
-     
-</pre>
-   <p>Change the value of <b>DOWNSAMPLE_N</b> to change the mouse sensitivity.
-
-<div class="node">
-<a name="ASSORTED-X-TWEEKS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SPEEDING-UP-THE-FILE-SYSTEM">SPEEDING UP THE FILE SYSTEM</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#REDUCING-USB-MOUSE-SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
+<b>/usr/src/linux/drivers/input/mousedev.c</b>.  
+</p>
+<p>After the line saying 
+</p>
+<div class="example">
+<pre class="example">struct mousedev_hw_data {
+</pre></div>
 
-</div>
 
-<h3 class="section">15.7 ASSORTED X TWEEKS</h3>
+<p>put
+</p>
+<div class="example">
+<pre class="example">#define DOWNSAMPLE_N 100
+#define DOWNSAMPLE_D 350
+int x_accum, y_accum;
+</pre></div>
 
-<p>XFree86 by default can't display Cinelerra's advanced pixmap rendering
-very fast.  The X server stalls during list box drawing.  Fix this by
-adding a line to your XF86Config* files.
+<p>Next, the section which says something like:
+</p>
+<div class="example">
+<pre class="example">switch (code) {
+       case REL_X:     mousedev-&gt;packet.dx += value; break;
+       case REL_Y:     mousedev-&gt;packet.dy -= value; break;
+       case REL_WHEEL: mousedev-&gt;packet.dz -= value; break;
+}
+</pre></div>
 
-   <p>In the <b>Section "Device"</b> area, add a line saying:
+<p>must be replaced by
+</p>
+<div class="example">
+<pre class="example">
+       switch (code) {
+               case REL_X:
+                       mousedev-&gt;packet.x_accum += value * DOWNSAMPLE_N;
+                       mousedev-&gt;packet.dx += (int)mousedev-&gt;packet.x_accum / (int)DOWNSAMPLE_D;
+                       mousedev-&gt;packet.x_accum -= ((int)mousedev-&gt;packet.x_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
+                       break;
+               case REL_Y:
+                       mousedev-&gt;packet.y_accum += value * DOWNSAMPLE_N;
+                       mousedev-&gt;packet.dy -= (int)mousedev-&gt;packet.y_accum / (int)DOWNSAMPLE_D;
+                       mousedev-&gt;packet.y_accum -= ((int)mousedev-&gt;packet.y_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
+                       break;
+               case REL_WHEEL: mousedev-&gt;packet.dz -= value; break;
+       }
 
-   <p><b>Option "XaaNoOffscreenPixmaps"</b>
 
-   <p>and restart the X server.
 
-   <p>Screen blanking is really annoying, unless you're fabulously rich and
-can afford to leave your monitor on 24 hours a day without power saving
-mode.  In <b>/etc/X11/xinit/xinitrc</b> put
+</pre></div>
+
+<p>Change the value of <b>DOWNSAMPLE_N</b> to change the mouse sensitivity.
+</p>
+
+
+
+
+
+
+
+<hr>
+<a name="ASSORTED-X-TWEEKS"></a>
+<div class="header">
+<p>
+Next: <a href="#SPEEDING-UP-THE-FILE-SYSTEM" accesskey="n" rel="next">SPEEDING UP THE FILE SYSTEM</a>, Previous: <a href="#REDUCING-USB-MOUSE-SENSITIVITY" accesskey="p" rel="prev">REDUCING USB MOUSE SENSITIVITY</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="ASSORTED-X-TWEEKS-1"></a>
+<h3 class="section">15.7 ASSORTED X TWEEKS</h3>
 
-<pre class="example">     xset s off
-     xset s noblank
-</pre>
-   <p>before the first <b>if</b> statement.
 
-   <p>How about those windows keys which no Linux distribution even thinks to
+<p>XFree86 by default can&rsquo;t display Cinelerra&rsquo;s advanced pixmap rendering
+very fast.  The X server stalls during list box drawing.  Fix this by
+adding a line to your XF86Config* files.
+</p>
+<p>In the <b>Section &quot;Device&quot;</b> area, add a line saying:
+</p>
+<p><b>Option &quot;XaaNoOffscreenPixmaps&quot;</b>
+</p>
+<p>and restart the X server.
+</p>
+
+
+<p>Screen blanking is really annoying, unless you&rsquo;re fabulously rich and
+can afford to leave your monitor on 24 hours a day without power saving
+mode.  In <b>/etc/X11/xinit/xinitrc</b> put 
+</p>
+<div class="example">
+<pre class="example">xset s off
+xset s noblank
+</pre></div>
+
+<p>before the first <b>if</b> statement.
+</p>
+<p>How about those windows keys which no Linux distribution even thinks to
 use.  You can make the window keys provide ALT functionality by editing
 <b>/etc/X11/Xmodmap</b>.  Append the following to it.
-
-<pre class="example">     keycode 115 = Hyper_L
-     keycode 116 = Hyper_R
-     add mod4 = Hyper_L
-     add mod5 = Hyper_R
-</pre>
-   <p>The actual changes to a window manager to make it recognize window keys
+</p>
+<div class="example">
+<pre class="example">keycode 115 = Hyper_L
+keycode 116 = Hyper_R
+add mod4 = Hyper_L
+add mod5 = Hyper_R
+</pre></div>
+
+<p>The actual changes to a window manager to make it recognize window keys
 for ALT are complex.  In <b>FVWM</b> at least, you can edit
 <b>/etc/X11/fvwm/system.fvwm2rc</b> and put
-
-<pre class="example">     Mouse 0 T A move-and-raise-or-raiselower
-     #Mouse 0 W M move
-     Mouse 0 W 4 move
-     Mouse 0 W 5 move
-     Mouse 0 F A resize-or-raiselower
-     Mouse 0 S A resize-or-raiselower
-</pre>
-   <p>in place of the default section for moving and resizing.  Your best
+</p>
+<div class="example">
+<pre class="example">Mouse 0 T A move-and-raise-or-raiselower
+#Mouse 0 W M move
+Mouse 0 W 4 move
+Mouse 0 W 5 move
+Mouse 0 F A resize-or-raiselower
+Mouse 0 S A resize-or-raiselower
+</pre></div>
+
+<p>in place of the default section for moving and resizing.  Your best
 performance is going to be on FVWM.  Other window managers seem to slow
-down video with extra event trapping and aren't as efficient in layout.
+down video with extra event trapping and aren&rsquo;t as efficient in layout.
+</p>
+
+
+
+
+
+
+
 
-<div class="node">
-<a name="SPEEDING-UP-THE-FILE-SYSTEM"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#IMPROVING-ZORAN-VIDEO">IMPROVING ZORAN VIDEO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ASSORTED-X-TWEEKS">ASSORTED X TWEEKS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
 
-</div>
 
+<hr>
+<a name="SPEEDING-UP-THE-FILE-SYSTEM"></a>
+<div class="header">
+<p>
+Next: <a href="#IMPROVING-ZORAN-VIDEO" accesskey="n" rel="next">IMPROVING ZORAN VIDEO</a>, Previous: <a href="#ASSORTED-X-TWEEKS" accesskey="p" rel="prev">ASSORTED X TWEEKS</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SPEEDING-UP-THE-FILE-SYSTEM-1"></a>
 <h3 class="section">15.8 SPEEDING UP THE FILE SYSTEM</h3>
 
-<p>You'll often store video on an expensive, gigantic disk array separate
-from your boot disk.  You'll thus have to manually install an EXT
+<p>You&rsquo;ll often store video on an expensive, gigantic disk array separate
+from your boot disk.  You&rsquo;ll thus have to manually install an EXT
 filesystem on this disk array, using the <b>mke2fs</b> command.  By far
-the fastest file system is
-
-<pre class="example">     
-     mke2fs -i 65536 -b 4096 my_device
-     tune2fs -r0 -c10000 my_device
-     
-</pre>
-   <p>This has no journaling, reserves as few blocks as possible for
-filenames, and accesses the largest amount of data per block possible. 
+the fastest file system is 
+</p>
+<div class="example">
+<pre class="example">
+mke2fs -i 65536 -b 4096 my_device
+tune2fs -r0 -c10000 my_device
+
+</pre></div>
+
+<p>This has no journaling, reserves as few blocks as possible for
+filenames, and accesses the largest amount of data per block possible.
 A slightly slower file system, which is easier to recover after power
 failures is
+</p>
+<div class="example">
+<pre class="example">
+mke2fs -j -i 65536 -b 4096 my_device
+tune2fs -r0 -c10000 my_device
 
-<pre class="example">     
-     mke2fs -j -i 65536 -b 4096 my_device
-     tune2fs -r0 -c10000 my_device
-     
-</pre>
-   <p>This adds a journal which slows down the writes but makes us immune to
+</pre></div>
+
+<p>This adds a journal which slows down the writes but makes us immune to
 power failures.
+</p>
+
 
-<div class="node">
-<a name="IMPROVING-ZORAN-VIDEO"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SPEEDING-UP-THE-FILE-SYSTEM">SPEEDING UP THE FILE SYSTEM</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>
 
-</div>
 
+
+
+<hr>
+<a name="IMPROVING-ZORAN-VIDEO"></a>
+<div class="header">
+<p>
+Previous: <a href="#SPEEDING-UP-THE-FILE-SYSTEM" accesskey="p" rel="prev">SPEEDING UP THE FILE SYSTEM</a>, Up: <a href="#IMPROVING-PERFORMANCE" accesskey="u" rel="up">IMPROVING PERFORMANCE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="IMPROVING-ZORAN-VIDEO-1"></a>
 <h3 class="section">15.9 IMPROVING ZORAN VIDEO</h3>
 
 <p>Video recorded from the ZORAN inputs is normally unaligned or not
 completely encoded on the right.  This can be slightly compensated by
 adjusting parameters in the driver sourcecode.
-
-   <p>In <b>/usr/src/linux/drivers/media/video/zr36067.c</b> the structures
+</p>
+<p>In <b>/usr/src/linux/drivers/media/video/zr36067.c</b> the structures
 defined near line 623 affect alignment.  At least for NTSC, the 2.4.20
-version of the driver could be improved by changing
-
-<pre class="example">     static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 16 };
-</pre>
-   <p>to
+version of the driver could be improved by changing 
+</p>
+<div class="example">
+<pre class="example">static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 16 };
+</pre></div>
 
-<pre class="example">     static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 17 };
-</pre>
-   <p>In <b>/usr/src/linux/drivers/media/video/bt819.c</b> more structures near
-line 76 affect alignment and encoding.
+<p>to
+</p>
+<div class="example">
+<pre class="example">static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 17 };
+</pre></div>
 
-   <p>For NTSC
 
-<pre class="example">     {858 - 24, 2, 523, 1, 0x00f8, 0x0000},
-</pre>
-   <p>could be changed to
-<pre class="example">     {868 - 24, 2, 523, 1, 0x00f8, 0x0000},
-</pre>
-   <p>Adjusting these parameters may or may not move your picture closer to
-the center.  More of the time, they'll cause the driver to lock up
+<p>In <b>/usr/src/linux/drivers/media/video/bt819.c</b> more structures near
+line 76 affect alignment and encoding.
+</p>
+<p>For NTSC 
+</p>
+<div class="example">
+<pre class="example">{858 - 24, 2, 523, 1, 0x00f8, 0x0000},
+</pre></div>
+
+<p>could be changed to 
+</p><div class="example">
+<pre class="example">{868 - 24, 2, 523, 1, 0x00f8, 0x0000},
+</pre></div>
+
+<p>Adjusting these parameters may or may not move your picture closer to
+the center.  More of the time, they&rsquo;ll cause the driver to lock up
 before capturing the first frame.
+</p>
 
+<a name="NEW-IN-2_002e6_002e5"></a>
 <h4 class="subsection">15.9.1 NEW IN 2.6.5</h4>
 
 <p>In the 2.6 kernels, the video subsystem was rewritten again from
 scratch.  To adjust the Zoran parameters go to
 <b>drivers/media/video/zoran_card.c</b> and look for a group of lines like
-
-<pre class="example">     static struct tvnorm f50sqpixel = { 944, 768, 83, 880, 625, 576, 16 };
-     static struct tvnorm f60sqpixel = { 780, 640, 51, 716, 525, 480, 12 };
-     static struct tvnorm f50ccir601 = { 864, 720, 75, 804, 625, 576, 18 };
-     static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 16 };
-     
-     static struct tvnorm f50ccir601_lml33 = { 864, 720, 75+34, 804, 625, 576, 18 };
-     static struct tvnorm f60ccir601_lml33 = { 858, 720, 57+34, 788, 525, 480, 16 };
-     
-     /* The DC10 (57/16/50) uses VActive as HSync, so HStart must be 0 */
-     static struct tvnorm f50sqpixel_dc10 = { 944, 768, 0, 880, 625, 576, 0 };
-     static struct tvnorm f60sqpixel_dc10 = { 780, 640, 0, 716, 525, 480, 12 };
-     
-     /* FIXME: I cannot swap U and V in saa7114, so i do one
-      * pixel left shift in zoran (75 -&gt; 74)
-      * (Maxim Yevtyushkin &lt;max@linuxmedialabs.com&gt;) */
-     static struct tvnorm f50ccir601_lm33r10 = { 864, 720, 74+54, 804, 625, 576, 18 };
-     static struct tvnorm f60ccir601_lm33r10 = { 858, 720, 56+54, 788, 525, 480, 16 };
-</pre>
-   <p>These seem to control the image position.  At least for the LML33 the
+</p>
+<div class="example">
+<pre class="example">static struct tvnorm f50sqpixel = { 944, 768, 83, 880, 625, 576, 16 };
+static struct tvnorm f60sqpixel = { 780, 640, 51, 716, 525, 480, 12 };
+static struct tvnorm f50ccir601 = { 864, 720, 75, 804, 625, 576, 18 };
+static struct tvnorm f60ccir601 = { 858, 720, 57, 788, 525, 480, 16 };
+
+static struct tvnorm f50ccir601_lml33 = { 864, 720, 75+34, 804, 625, 576, 18 };
+static struct tvnorm f60ccir601_lml33 = { 858, 720, 57+34, 788, 525, 480, 16 };
+
+/* The DC10 (57/16/50) uses VActive as HSync, so HStart must be 0 */
+static struct tvnorm f50sqpixel_dc10 = { 944, 768, 0, 880, 625, 576, 0 };
+static struct tvnorm f60sqpixel_dc10 = { 780, 640, 0, 716, 525, 480, 12 };
+
+/* FIXME: I cannot swap U and V in saa7114, so i do one
+ * pixel left shift in zoran (75 -&gt; 74)
+ * (Maxim Yevtyushkin &lt;max@linuxmedialabs.com&gt;) */
+static struct tvnorm f50ccir601_lm33r10 = { 864, 720, 74+54, 804, 625, 576, 18 };
+static struct tvnorm f60ccir601_lm33r10 = { 858, 720, 56+54, 788, 525, 480, 16 };
+</pre></div>
+
+<p>These seem to control the image position.  At least for the LML33 the
 following definition for <b>f60ccir601_lml33</b> does the trick.
+</p>
+<div class="example">
+<pre class="example">static struct tvnorm f60ccir601_lml33 = { 858, 720, 67+34, 788, 525, 480, 13 };
+</pre></div>
 
-<pre class="example">     static struct tvnorm f60ccir601_lml33 = { 858, 720, 67+34, 788, 525, 480, 13 };
-</pre>
-   <div class="node">
-<a name="TROUBLESHOOTING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
-<h2 class="chapter">16 TROUBLESHOOTING</h2>
 
-<ul class="menu">
-<li><a accesskey="1" href="#BUZ-DRIVER-CRASHES">BUZ DRIVER CRASHES</a>
-<li><a accesskey="2" href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK">DRAGGING IN AND OUT POINTS DOESN'T WORK</a>
-<li><a accesskey="3" href="#LOCKING-UP-WHEN-LOADING-FILES">LOCKING UP WHEN LOADING FILES</a>
-<li><a accesskey="4" href="#SYNCHRONIZATION-LOST-WHILE-RECORDING">SYNCHRONIZATION LOST WHILE RECORDING</a>
-<li><a accesskey="5" href="#APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK">APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK</a>
-</ul>
 
-<div class="node">
-<a name="BUZ-DRIVER-CRASHES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK">DRAGGING IN AND OUT POINTS DOESN'T WORK</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TROUBLESHOOTING">TROUBLESHOOTING</a>
 
+<hr>
+<a name="TROUBLESHOOTING"></a>
+<div class="header">
+<p>
+Next: <a href="#SECRETS-OF-CINELERRA" accesskey="n" rel="next">SECRETS OF CINELERRA</a>, Previous: <a href="#IMPROVING-PERFORMANCE" accesskey="p" rel="prev">IMPROVING PERFORMANCE</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
+<a name="TROUBLESHOOTING-1"></a>
+<h2 class="chapter">16 TROUBLESHOOTING</h2>
 
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#BUZ-DRIVER-CRASHES" accesskey="1">BUZ DRIVER CRASHES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK" accesskey="2">DRAGGING IN AND OUT POINTS DOESN'T WORK</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LOCKING-UP-WHEN-LOADING-FILES" accesskey="3">LOCKING UP WHEN LOADING FILES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SYNCHRONIZATION-LOST-WHILE-RECORDING" accesskey="4">SYNCHRONIZATION LOST WHILE RECORDING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK" accesskey="5">APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
+<a name="BUZ-DRIVER-CRASHES"></a>
+<div class="header">
+<p>
+Next: <a href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK" accesskey="n" rel="next">DRAGGING IN AND OUT POINTS DOESN'T WORK</a>, Up: <a href="#TROUBLESHOOTING" accesskey="u" rel="up">TROUBLESHOOTING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="BUZ-DRIVER-CRASHES-1"></a>
 <h3 class="section">16.1 BUZ DRIVER CRASHES</h3>
 
 <p>First, Zoran capture boards must be accessed using the <b>Buz</b> video
 driver in <b>Preferences-&gt;Recording</b> and <b>Preferences-&gt;Playback</b>. 
 Some performance tweeks are available in another section. 
 See <a href="#IMPROVING-PERFORMANCE">IMPROVING PERFORMANCE</a>.
-
-   <p>Once tweeked, the Buz driver seems to crash if the number of recording
+</p>
+<p>Once tweeked, the Buz driver seems to crash if the number of recording
 buffers is too high.  Make sure <b>Preferences-&gt;Recording-&gt;Frames to
 buffer in device</b> is below 10.
+</p>
 
-<div class="node">
-<a name="DRAGGING-IN-AND-OUT-POINTS-DOESN'T-WORK"></a>
+<hr>
 <a name="DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LOCKING-UP-WHEN-LOADING-FILES">LOCKING UP WHEN LOADING FILES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#BUZ-DRIVER-CRASHES">BUZ DRIVER CRASHES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TROUBLESHOOTING">TROUBLESHOOTING</a>
-
+<div class="header">
+<p>
+Next: <a href="#LOCKING-UP-WHEN-LOADING-FILES" accesskey="n" rel="next">LOCKING UP WHEN LOADING FILES</a>, Previous: <a href="#BUZ-DRIVER-CRASHES" accesskey="p" rel="prev">BUZ DRIVER CRASHES</a>, Up: <a href="#TROUBLESHOOTING" accesskey="u" rel="up">TROUBLESHOOTING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
+<a name="DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK-1"></a>
+<h3 class="section">16.2 DRAGGING IN AND OUT POINTS DOESN&rsquo;T WORK</h3>
 
-<h3 class="section">16.2 DRAGGING IN AND OUT POINTS DOESN'T WORK</h3>
 
 <p>Sometimes there will be two edits really close together.  The point
 selected for dragging may be next to the indended edit on an edit too
 small to see at the current zoom level.  Zoom in horizontally.
+</p>
 
-<div class="node">
-<a name="LOCKING-UP-WHEN-LOADING-FILES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SYNCHRONIZATION-LOST-WHILE-RECORDING">SYNCHRONIZATION LOST WHILE RECORDING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK">DRAGGING IN AND OUT POINTS DOESN'T WORK</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TROUBLESHOOTING">TROUBLESHOOTING</a>
 
+<hr>
+<a name="LOCKING-UP-WHEN-LOADING-FILES"></a>
+<div class="header">
+<p>
+Next: <a href="#SYNCHRONIZATION-LOST-WHILE-RECORDING" accesskey="n" rel="next">SYNCHRONIZATION LOST WHILE RECORDING</a>, Previous: <a href="#DRAGGING-IN-AND-OUT-POINTS-DOESN_0027T-WORK" accesskey="p" rel="prev">DRAGGING IN AND OUT POINTS DOESN'T WORK</a>, Up: <a href="#TROUBLESHOOTING" accesskey="u" rel="up">TROUBLESHOOTING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="LOCKING-UP-WHEN-LOADING-FILES-1"></a>
 <h3 class="section">16.3 LOCKING UP WHEN LOADING FILES</h3>
 
+
 <p>The most common reason loading files locks up is because the codec
-isn't supported.  Another reason is because Cinelerra is building
+isn&rsquo;t supported.  Another reason is because Cinelerra is building
 picons for the Resources window.  If you load a large number of images,
 it needs to decompress every single image to build a picon.  Go into
 settings-&gt;preferences-&gt;interface and disable <b>Use thumbnails in
 resource window</b> to skip this process.
+</p>
+
 
-<div class="node">
-<a name="SYNCHRONIZATION-LOST-WHILE-RECORDING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK">APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LOCKING-UP-WHEN-LOADING-FILES">LOCKING UP WHEN LOADING FILES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TROUBLESHOOTING">TROUBLESHOOTING</a>
 
-</div>
 
+<hr>
+<a name="SYNCHRONIZATION-LOST-WHILE-RECORDING"></a>
+<div class="header">
+<p>
+Next: <a href="#APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK" accesskey="n" rel="next">APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK</a>, Previous: <a href="#LOCKING-UP-WHEN-LOADING-FILES" accesskey="p" rel="prev">LOCKING UP WHEN LOADING FILES</a>, Up: <a href="#TROUBLESHOOTING" accesskey="u" rel="up">TROUBLESHOOTING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SYNCHRONIZATION-LOST-WHILE-RECORDING-1"></a>
 <h3 class="section">16.4 SYNCHRONIZATION LOST WHILE RECORDING</h3>
 
 <p>If the framerate of the recording is much lower than the framerate of
@@ -6374,449 +7002,506 @@ time while the audio and video are well out of sync.  Decrease the
 <b>number of frames to buffer in the device</b> in
 <b>preferences-&gt;recording</b> so the excess frames are dropped instead of
 buffered.
-
-<div class="node">
-<a name="APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN'T-WORK"></a>
+</p>
+<hr>
 <a name="APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SYNCHRONIZATION-LOST-WHILE-RECORDING">SYNCHRONIZATION LOST WHILE RECORDING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TROUBLESHOOTING">TROUBLESHOOTING</a>
-
+<div class="header">
+<p>
+Previous: <a href="#SYNCHRONIZATION-LOST-WHILE-RECORDING" accesskey="p" rel="prev">SYNCHRONIZATION LOST WHILE RECORDING</a>, Up: <a href="#TROUBLESHOOTING" accesskey="u" rel="up">TROUBLESHOOTING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
-<h3 class="section">16.5 APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK</h3>
+<a name="APPLYING-LINEARIZE-FOLLOWED-BY-BLUR-DOESN_0027T-WORK-1"></a>
+<h3 class="section">16.5 APPLYING LINEARIZE FOLLOWED BY BLUR DOESN&rsquo;T WORK</h3>
 
 <p>The linearize effect uses the pow function while the blur effect uses a
 number of exp functions in the math library.  For some reason, using
 the pow function breaks later calls to the exp functions in the math
 library.  You need to apply linearize after blur to get it to work.
+</p>
+
+
+
+
+
 
-<div class="node">
-<a name="SECRETS-OF-CINELERRA"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TROUBLESHOOTING">TROUBLESHOOTING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+<hr>
+<a name="SECRETS-OF-CINELERRA"></a>
+<div class="header">
+<p>
+Next: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="n" rel="next">SECRETS OF CINELERRA EFFECTS</a>, Previous: <a href="#TROUBLESHOOTING" accesskey="p" rel="prev">TROUBLESHOOTING</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SECRETS-OF-CINELERRA-1"></a>
 <h2 class="chapter">17 SECRETS OF CINELERRA</h2>
 
-<p>In this section, you'll find ways to apply Cinelerra to common
+<p>In this section, you&rsquo;ll find ways to apply Cinelerra to common
 problems.  Other sections are arranged in order of the tools and what
 the tools are used for.  This section is arranged in order of the
 problems and what tools are used to solve the problems.
-
-<ul class="menu">
-<li><a accesskey="1" href="#DOLBY-PRO-LOGIC-ENCODING">DOLBY PRO LOGIC ENCODING</a>
-<li><a accesskey="2" href="#ANALOG-TV-CLEANING">ANALOG TV CLEANING</a>
-<li><a accesskey="3" href="#DEFEATING-INTERLACING">DEFEATING INTERLACING</a>
-<li><a accesskey="4" href="#MAKING-VIDEO-LOOK-LIKE-FILM">MAKING VIDEO LOOK LIKE FILM</a>
-<li><a accesskey="5" href="#CLEARING-OUT-HAZE">CLEARING OUT HAZE</a>
-<li><a accesskey="6" href="#MAKING-A-DVD">MAKING A DVD</a>
-<li><a accesskey="7" href="#MAKING-A-RINGTONE">MAKING A RINGTONE</a>
-<li><a accesskey="8" href="#TIME-STRETCHING-AUDIO">TIME STRETCHING AUDIO</a>
-<li><a accesskey="9" href="#PITCH-SHIFTING-AUDIO">PITCH SHIFTING AUDIO</a>
-<li><a href="#TEXT-TO-MOVIE">TEXT TO MOVIE</a>
-</ul>
-
-<div class="node">
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#DOLBY-PRO-LOGIC-ENCODING" accesskey="1">DOLBY PRO LOGIC ENCODING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#ANALOG-TV-CLEANING" accesskey="2">ANALOG TV CLEANING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DEFEATING-INTERLACING" accesskey="3">DEFEATING INTERLACING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MAKING-VIDEO-LOOK-LIKE-FILM" accesskey="4">MAKING VIDEO LOOK LIKE FILM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CLEARING-OUT-HAZE" accesskey="5">CLEARING OUT HAZE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MAKING-A-DVD" accesskey="6">MAKING A DVD</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MAKING-A-RINGTONE" accesskey="7">MAKING A RINGTONE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TIME-STRETCHING-AUDIO" accesskey="8">TIME STRETCHING AUDIO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PITCH-SHIFTING-AUDIO" accesskey="9">PITCH SHIFTING AUDIO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TEXT-TO-MOVIE">TEXT TO MOVIE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+
+<hr>
 <a name="DOLBY-PRO-LOGIC-ENCODING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ANALOG-TV-CLEANING">ANALOG TV CLEANING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
-
+<div class="header">
+<p>
+Next: <a href="#ANALOG-TV-CLEANING" accesskey="n" rel="next">ANALOG TV CLEANING</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="DOLBY-PRO-LOGIC-ENCODING-1"></a>
 <h3 class="section">17.1 DOLBY PRO LOGIC ENCODING</h3>
 
 <p>Dolby pro logic is an easy way to output 6 channel audio from a 2
 channel soundcard with degraded but useful results.  Rudimentary Dolby
 pro logic encoding can be achieved with clever usage of the effects.
-
-   <p>Create 2 audio tracks with the same audio.  Apply <b>invert audio</b> to
+</p>
+<p>Create 2 audio tracks with the same audio.  Apply <b>invert audio</b> to
 one track.  The signal comes out of the back speakers.
-
-   <p>Create a single audio track with monaural audio of a different source. 
+</p>
+<p>Create a single audio track with monaural audio of a different source. 
 Center it in the <b>pan</b> control.  The signal comes out of the center
 speaker.
-
-   <p>Create other tracks with different signals and pan them left or right
+</p>
+<p>Create other tracks with different signals and pan them left or right
 to put signals in the front left or right speaker.
-
-   <p>Finally, if a copy of the signal in the back speakers is desired in any
+</p>
+<p>Finally, if a copy of the signal in the back speakers is desired in any
 single front speaker, the signal in the back speakers must be delayed
 by at least 0.05 seconds and a single new track should be created.  Pan
 the new track to orient the signal in the front speakers.
-
-   <p>If the same signal is desired in all the speakers except the center
+</p>
+<p>If the same signal is desired in all the speakers except the center
 speaker, delay the back speakers by 0.5 seconds and delay either the
 front left or front right by 0.2 seconds.
-
-   <p>If you want to hear something from the subwoofer, create a new track,
+</p>
+<p>If you want to hear something from the subwoofer, create a new track,
 select a range, drop a synthesizer effect, and set the frequency below
 60 Hz.  The subwoofer merely plays anything below around 60Hz.
-
-   <p>Other tricks you can perform to separate the speakers are parametric
+</p>
+<p>Other tricks you can perform to separate the speakers are parametric
 equalization to play only selected ranges of frequencies through
 different speakers and lowpass filtering to play signals through the
 subwoofer.
+</p>
 
-<div class="node">
-<a name="ANALOG-TV-CLEANING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DEFEATING-INTERLACING">DEFEATING INTERLACING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DOLBY-PRO-LOGIC-ENCODING">DOLBY PRO LOGIC ENCODING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
 
-</div>
 
+<hr>
+<a name="ANALOG-TV-CLEANING"></a>
+<div class="header">
+<p>
+Next: <a href="#DEFEATING-INTERLACING" accesskey="n" rel="next">DEFEATING INTERLACING</a>, Previous: <a href="#DOLBY-PRO-LOGIC-ENCODING" accesskey="p" rel="prev">DOLBY PRO LOGIC ENCODING</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="ANALOG-TV-CLEANING-1"></a>
 <h3 class="section">17.2 ANALOG TV CLEANING</h3>
 
+
 <p>Unless you live in a rich nation like China or are a terrorist, you
 probably record analog TV more than you record digital TV.  The picture
 quality on analog TV is horrible but you can do things in Cinelerra to
 make it look more like it did in the studio.
-
-   <p>First, when capturing the video, capture it in the highest resolution
-possible.  For Europeans it's 720x576 and for Americans it's 720x480. 
-Don't bother adjusting the brightness or contrast in the recording
+</p>
+<p>First, when capturing the video, capture it in the highest resolution
+possible.  For Europeans it&rsquo;s 720x576 and for Americans it&rsquo;s 720x480. 
+Don&rsquo;t bother adjusting the brightness or contrast in the recording
 monitor, although maxing out the color is useful.  Capture it using
 MJPEG or uncompressed Component Video if possible.  If those are too
 demanding, then capture it using JPEG.  RGB should be a last resort.
-
-   <p>Now on the timeline use <b>Settings-&gt;Format</b> to set a YUV colorspace. 
-Drop a <b>Downsample</b> effect on the footage.  Set it for
-
-<pre class="example">     Horizontal:        2
-     Horizontal offset: 0
-     Vertical:          2
-     Vertical offset:   0
-     
-           red
-       x   green
-       x   blue
-           alpha
-</pre>
-   <p>Use the camera tool to shift the picture up or down a line to remove
+</p>
+<p>Now on the timeline use <b>Settings-&gt;Format</b> to set a YUV colorspace. 
+Drop a <b>Downsample</b> effect on the footage.  Set it for 
+</p>
+<div class="example">
+<pre class="example">Horizontal:        2
+Horizontal offset: 0
+Vertical:          2
+Vertical offset:   0
+
+      red
+  x   green
+  x   blue
+      alpha
+</pre></div>
+
+<p>Use the camera tool to shift the picture up or down a line to remove
 the most color interference from the image.  This is the difference
-we're looking for:
-
-   <pre class="sp">
-
-</pre>
+we&rsquo;re looking for:
+</p>
+<br>
 
-<img src="cleaning1.png" alt="cleaning1.png">
+<img src="cleaning1.png" alt="cleaning1">
 
-   <p>If you have vertical blanking information or crawls which constantly
+<p>If you have vertical blanking information or crawls which constantly
 change in each frame, block them out with the <b>Mask</b> tool.  This
 improves compression ratios.
-
-   <p>This is about all you can do without destroying more data than you
+</p>
+<p>This is about all you can do without destroying more data than you
 would naturally lose in compression.  The more invasive cleaning
 techniques involve deinterlacing.
+</p>
+
 
-<div class="node">
-<a name="DEFEATING-INTERLACING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MAKING-VIDEO-LOOK-LIKE-FILM">MAKING VIDEO LOOK LIKE FILM</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ANALOG-TV-CLEANING">ANALOG TV CLEANING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
 
-</div>
 
+<hr>
+<a name="DEFEATING-INTERLACING"></a>
+<div class="header">
+<p>
+Next: <a href="#MAKING-VIDEO-LOOK-LIKE-FILM" accesskey="n" rel="next">MAKING VIDEO LOOK LIKE FILM</a>, Previous: <a href="#ANALOG-TV-CLEANING" accesskey="p" rel="prev">ANALOG TV CLEANING</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="DEFEATING-INTERLACING-1"></a>
 <h3 class="section">17.3 DEFEATING INTERLACING</h3>
 
+
 <p>Interlacing is done on most video sources because it costs too much to
-build progressive scanning cameras and progressive scanning CRT's. 
+build progressive scanning cameras and progressive scanning CRT&rsquo;s. 
 Many a consumer has been dissapointed to spend 5 paychecks on a
 camcorder and discover what horrible jagged images it produces on a
 computer monitor.
-
-   <p>As for progressive scanning camcorders, forget it.  Cost factors are
+</p>
+<p>As for progressive scanning camcorders, forget it.  Cost factors are
 probably going to keep progressive scanning cameras from ever equalling
 the spatial resolution of interlaced cameras.  Interlacing is here to
-stay.  That's why they made deinterlacing effects in Cinelerra.
-
-   <p>We don't believe there has ever been a perfect deinterlacing effect. 
-They're either irreversible or don't work.  Cinelerra cuts down the
+stay.  That&rsquo;s why they made deinterlacing effects in Cinelerra.
+</p>
+<p>We don&rsquo;t believe there has ever been a perfect deinterlacing effect. 
+They&rsquo;re either irreversible or don&rsquo;t work.  Cinelerra cuts down the
 middle by providing deinterlacing tools that are irreversible sometimes
-and don't work sometimes but are neither one or the other.
-
-   <p><b>Line Doubling</b>
-
-   <p>This one is done by the <b>Deinterlace</b> effect when set to <b>Odd
+and don&rsquo;t work sometimes but are neither one or the other.
+</p>
+<p><b>Line Doubling</b>
+</p>
+<p>This one is done by the <b>Deinterlace</b> effect when set to <b>Odd
 lines</b> or <b>Even lines</b>.  When applied to a track it reduces the
 vertical resolution by 1/2 and gives you progressive frames with
 stairstepping.  This is only useful when followed by a scale effect
 which reduces the image to half its size.
-
-   <p><b>Line averaging</b>
-
-   <p>The <b>Deinterlace</b> effect when set to <b>Average even lines</b> or
+</p>
+<p><b>Line averaging</b>
+</p>
+<p>The <b>Deinterlace</b> effect when set to <b>Average even lines</b> or
 <b>Average odd lines</b> does exactly what line doubling does except
 instead of making straight copies of the lines it makes averages of the
 lines.  This is actually useful for all scaling.
-
-   <p>There's an option for adaptive line averaging which selects which lines
+</p>
+<p>There&rsquo;s an option for adaptive line averaging which selects which lines
 to line average and which lines to leave interlaced based on the
-difference between the lines.  It doesn't work.
-
-   <p><b>Inverse Telecine</b>
-
-   <p>This is the most effective deinterlacing tool when the footage is an
+difference between the lines.  It doesn&rsquo;t work.
+</p>
+<p><b>Inverse Telecine</b>
+</p>
+<p>This is the most effective deinterlacing tool when the footage is an
 NTSC TV broadcast of a film.  See <a href="#INVERSE-TELECINE">INVERSE TELECINE</a>.
-
-   <p><b>Time base correction</b>
-
-   <p>The first three tools either destroy footage irreversibly or don't work
-sometimes.  <b>Time base correction</b> is last because it's the perfect
-deinterlacing tool.  It leaves the footage intact.  It doesn't reduce
-resolution, perceptually at least.  It doesn't cause jittery timing.
-
-   <p>The <b>Frames to Fields</b> effect converts each frame to two frames, so
+</p>
+
+<p><b>Time base correction</b>
+</p>
+<p>The first three tools either destroy footage irreversibly or don&rsquo;t work
+sometimes.  <b>Time base correction</b> is last because it&rsquo;s the perfect
+deinterlacing tool.  It leaves the footage intact.  It doesn&rsquo;t reduce
+resolution, perceptually at least.  It doesn&rsquo;t cause jittery timing.
+</p>
+<p>The <b>Frames to Fields</b> effect converts each frame to two frames, so
 it must be used on a timeline whose project frame rate is twice the
-footage's frame rate.  In the first frame it puts a line averaged copy
+footage&rsquo;s frame rate.  In the first frame it puts a line averaged copy
 of the even lines.  In the second frame it puts a line averaged copy of
 the odd lines.  When played back at full framerates it gives the
 illusion of progressive video with no loss of detail.
-
-   <p>Best of all, this effect can be reversed with the <b>Fields to frames</b>
+</p>
+<p>Best of all, this effect can be reversed with the <b>Fields to frames</b>
 effect.  That one combines two frames of footage back into the one
 original interlaced frame of half the framerate.
-
-   <p>Be aware that frames to fields inputs frames at half the framerate as
+</p>
+<p>Be aware that frames to fields inputs frames at half the framerate as
 the project.  Effects before frames to fields process at the reduced
 framerate.
-
-   <p>Unfortunately, the output of <b>Frames to Fields</b> can't be compressed
+</p>
+<p>Unfortunately, the output of <b>Frames to Fields</b> can&rsquo;t be compressed
 as efficiently as the original because it introduces vertical twitter
 and a super high framerate.
-
-   <p>Interlaced 29.97fps footage can be made to look like film by applying
+</p>
+<p>Interlaced 29.97fps footage can be made to look like film by applying
 <b>Frames to Fields</b> and then reducing the project frame rate of the
 resulting 59.94fps footage to 23.97fps.  This produces no timing jitter
 and the occasional odd field gives the illusion of more detail than
 there would be if you just line averaged the original.
+</p>
 
-   <p><b>HDTV exceptions</b>
-
-   <p>1920x1080 HDTV is encoded a special way.  If it's a broadcast of
-original HDTV film, an inverse telecine works fine.  If it's a
+<p><b>HDTV exceptions</b>
+</p>
+<p>1920x1080 HDTV is encoded a special way.  If it&rsquo;s a broadcast of
+original HDTV film, an inverse telecine works fine.  If it&rsquo;s a
 rebroadcast of a 720x480 source, you need to use a time base and line
 doubling algorithm to deinterlace it, See <a href="#g_t1080-TO-480">1080 TO 480</a>.
+</p>
 
-<div class="node">
-<a name="MAKING-VIDEO-LOOK-LIKE-FILM"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CLEARING-OUT-HAZE">CLEARING OUT HAZE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DEFEATING-INTERLACING">DEFEATING INTERLACING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
 
-</div>
 
+<hr>
+<a name="MAKING-VIDEO-LOOK-LIKE-FILM"></a>
+<div class="header">
+<p>
+Next: <a href="#CLEARING-OUT-HAZE" accesskey="n" rel="next">CLEARING OUT HAZE</a>, Previous: <a href="#DEFEATING-INTERLACING" accesskey="p" rel="prev">DEFEATING INTERLACING</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="MAKING-VIDEO-LOOK-LIKE-FILM-1"></a>
 <h3 class="section">17.4 MAKING VIDEO LOOK LIKE FILM</h3>
 
+
+
+
 <p>Video sweetening is constantly getting better.  Lately the best thing
 you can do for dirt cheap consumer camcorder video is to turn it into
-progressive 24fps output.  While you can't really do that, you can get
+progressive 24fps output.  While you can&rsquo;t really do that, you can get
 pretty close for the money.  Mind you, this procedure can degrade high
 quality video just as easily as it improves low quality video.  It
 should only be used for low quality video.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 Step 1 - Set project framerate to twice the video framerate.
 
-     <li>
+</li><li> 
 Step 2 - Apply a <b>Sharpen</b> effect.  Set it to sharpness: 25, no
 interlacing, and horizontal only.
 
-     <li>
+</li><li> 
 Step 3 - Drop a <b>Frame to Fields</b> effect on the same track.  Set
 Average Empty Rows on and play through the video a few times to figure
 out which field is first.  If the wrong field is first, the motion is
 shaky.  Secondly, any editing in the doubled frame rate may now screw
-up the field order.  We're still figuring out the easiest way to
+up the field order.  We&rsquo;re still figuring out the easiest way to
 support warnings for field glitches but for now you need to go back to
 the normal framerate to do editing or play test to make sure the fields
 are right.
 
-     <li>
+
+</li><li> 
 Step 4 - Render just the video to the highest quality file possible.
 
-     <li>
+</li><li> 
 Step 5 - Import the video back to a new track.  Set the project
 framerate to 24.  The new track should now display more filmish and
 sharper images than the original footage.
 
-   </ul>
+</li></ul>
 
-   <p>This entire procedure could be implemented in one nonrealtime effect,
-but the biggest problem with that is you'll most often want to keep the
+<p>This entire procedure could be implemented in one nonrealtime effect,
+but the biggest problem with that is you&rsquo;ll most often want to keep the
 field based output and the 24fps output for posterity.  A nonrealtime
 effect would require all that processing just for the 24fps copy. 
 Still debating that one.
+</p>
+
+
+
+
+
 
-<div class="node">
-<a name="CLEARING-OUT-HAZE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MAKING-A-DVD">MAKING A DVD</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MAKING-VIDEO-LOOK-LIKE-FILM">MAKING VIDEO LOOK LIKE FILM</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
 
-</div>
 
+<hr>
+<a name="CLEARING-OUT-HAZE"></a>
+<div class="header">
+<p>
+Next: <a href="#MAKING-A-DVD" accesskey="n" rel="next">MAKING A DVD</a>, Previous: <a href="#MAKING-VIDEO-LOOK-LIKE-FILM" accesskey="p" rel="prev">MAKING VIDEO LOOK LIKE FILM</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CLEARING-OUT-HAZE-1"></a>
 <h3 class="section">17.5 CLEARING OUT HAZE</h3>
 
-<p>Let's face it, if you're employed you live in Silicon Valley.  As such
+<p>Let&rsquo;s face it, if you&rsquo;re employed you live in Silicon Valley.  As such
 you probably photograph a lot of haze and never see blue sky ever. 
 Even if you can afford to briefly go somewhere where there is blue sky,
 horizon shots usually can stand for more depth.  This is what the
 <b>gradient effect</b> is for.
-
-   <p>Drop the gradient effect on hazy tracks.  Set the following parameters:
-
-<pre class="example">     Angle: 0
-     Inner radius: 0
-     Outer radius: 40
-     Inner color: blue 100% alpha
-     Outer color: blue 0% alpha
-</pre>
-   <p>It's important to set the 0% alpha color to blue even though it's 0%
+</p>
+<p>Drop the gradient effect on hazy tracks.  Set the following parameters:
+</p>
+<div class="example">
+<pre class="example">Angle: 0
+Inner radius: 0
+Outer radius: 40
+Inner color: blue 100% alpha
+Outer color: blue 0% alpha
+</pre></div>
+
+<p>It&rsquo;s important to set the 0% alpha color to blue even though it&rsquo;s 0%
 alpha.  The color of the outer alpha is still interpolated with the
 inner color.  This is a generally applicable setting for the gradient. 
 Some scenes may work better with orange or brown for an evening feel.
+</p>
 
-<div class="node">
-<a name="MAKING-A-DVD"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MAKING-A-RINGTONE">MAKING A RINGTONE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CLEARING-OUT-HAZE">CLEARING OUT HAZE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="MAKING-A-DVD"></a>
+<div class="header">
+<p>
+Next: <a href="#MAKING-A-RINGTONE" accesskey="n" rel="next">MAKING A RINGTONE</a>, Previous: <a href="#CLEARING-OUT-HAZE" accesskey="p" rel="prev">CLEARING OUT HAZE</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="MAKING-A-DVD-1"></a>
 <h3 class="section">17.6 MAKING A DVD</h3>
 
 <p><b>A single chapter DVD</b>
-
-   <p>Make a single chapter DVD by rendering video to an MPEG video file. 
+</p>
+<p>Make a single chapter DVD by rendering video to an MPEG video file. 
 The video should be 720x480, 29.97fps.  The aspect ratio should be 16x9
 or 4x3.
-
-   <p>Use the YUV 4:2:0 color model and DVD preset.  Set the bitrate to the
-desired bitrate.  It's not clear exactly what other parameters the MPEG
-encoder uses in the DVD preset but we've enabled the following:
-
-<pre class="example">     Derivative: MPEG-2
-     Fixed bitrate
-     I frame distance: 15
-     P frame distance: 0
-     Sequence start codes in every GOP
-</pre>
-   <p>Render the audio to an AC3 audio file.  Any bitrate can be used.
-
-   <p><b>Dvdrtools</b> must be downloaded to generate the actual DVD
+</p>
+<p>Use the YUV 4:2:0 color model and DVD preset.  Set the bitrate to the
+desired bitrate.  It&rsquo;s not clear exactly what other parameters the MPEG
+encoder uses in the DVD preset but we&rsquo;ve enabled the following:
+</p>
+<div class="example">
+<pre class="example">Derivative: MPEG-2
+Fixed bitrate
+I frame distance: 15
+P frame distance: 0
+Sequence start codes in every GOP
+</pre></div>
+
+<p>Render the audio to an AC3 audio file.  Any bitrate can be used.
+</p>
+<p><b>Dvdrtools</b> must be downloaded to generate the actual DVD
 filesystem.  The actual usage of dvdrtools changes frequently but
 currently it involves the mkisofs and ifogen programs.  Mkisofs is
 built automatically in dvdrtools but ifogen may have to be built
 manually by entering the <b>video</b> directory and running <b>make
 ifogen</b>.  Mkisofs and ifogen must be put into /usr/bin manually.
-
-   <p>Also, the <b>mplex</b> program from <b>mjpegtools</b> must be installed.  The
+</p>
+<p>Also, the <b>mplex</b> program from <b>mjpegtools</b> must be installed.  The
 mjpegtools package is built in the hvirtual distribution and the mplex
 utility may be extracted from there.
-
-   <p>Given the files audio.ac3 and video.m2v, rendered by Cinelerra, the
+</p>
+<p>Given the files audio.ac3 and video.m2v, rendered by Cinelerra, the
 following commands pack them into a dvd readable by commercial
 appliances.
-
-<pre class="example">     mplex -M -f 8 -o final.mpg audio.ac3 video.m2v
-     mkdir -p dvd/VIDEO_TS
-     ifogen final.mpg -o dvd
-     ifogen -T -o dvd
-     mkisofs -dvd-video -udf -o dvd.iso dvd/
-</pre>
-   <p>Chapters may be set with the following.  The units are seconds.  Version
+</p>
+<div class="example">
+<pre class="example">mplex -M -f 8 -o final.mpg audio.ac3 video.m2v
+mkdir -p dvd/VIDEO_TS
+ifogen final.mpg -o dvd
+ifogen -T -o dvd
+mkisofs -dvd-video -udf -o dvd.iso dvd/
+</pre></div>
+
+<p>Chapters may be set with the following.  The units are seconds.  Version
 0.3.1 ignores the 1st chapter, so it has to be specified as 0.
+</p>
+<div class="example">
+<pre class="example">ifogen -o dvd --chapters=0,0021.788,0047.447,0077.043 final.mpg
+</pre></div>
+
+<p>Replace the chapter times.
+</p>
+<p>dvd.iso can be burned directly to a DVD with the following:
+</p>
+<div class="example">
+<pre class="example">dvdrecord -ignsize -dao -v dev=/dev/hdc fs=67108864 dvd.iso
+</pre></div>
+
+<p>The argument to dev= is the IDE device of the DVD drive.  Burning DVD&rsquo;s
+through SCSI is currently not supported.
+</p>
 
-<pre class="example">     ifogen -o dvd --chapters=0,0021.788,0047.447,0077.043 final.mpg
-</pre>
-   <p>Replace the chapter times.
 
-   <p>dvd.iso can be burned directly to a DVD with the following:
 
-<pre class="example">     dvdrecord -ignsize -dao -v dev=/dev/hdc fs=67108864 dvd.iso
-</pre>
-   <p>The argument to dev= is the IDE device of the DVD drive.  Burning DVD's
-through SCSI is currently not supported.
 
-<div class="node">
-<a name="MAKING-A-RINGTONE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TIME-STRETCHING-AUDIO">TIME STRETCHING AUDIO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MAKING-A-DVD">MAKING A DVD</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
 
-</div>
 
+
+<hr>
+<a name="MAKING-A-RINGTONE"></a>
+<div class="header">
+<p>
+Next: <a href="#TIME-STRETCHING-AUDIO" accesskey="n" rel="next">TIME STRETCHING AUDIO</a>, Previous: <a href="#MAKING-A-DVD" accesskey="p" rel="prev">MAKING A DVD</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="MAKING-A-RINGTONE-1"></a>
 <h3 class="section">17.7 MAKING A RINGTONE</h3>
 
-<p>This is how we made ringtones for the low end Motorola V180's and it'll
+<p>This is how we made ringtones for the low end Motorola V180&rsquo;s and it&rsquo;ll
 probably work with any new phone.  Go to <b>File-&gt;Load files...</b> and
 load a sound file with Insertion strategy: <b>Replace current
 project</b>.  Go to <b>Settings-&gt;Format</b> change <b>Channels</b> to 1 and
 <b>Samplerate</b> to 16000 or 22050.
-
-   <p>Either highlight a region of the timeline or set in/out points to use
+</p>
+<p>Either highlight a region of the timeline or set in/out points to use
 for the ringtone.  To improve sound quality on the cell phone, you need
 the maximum amplitude in as many parts of the sound as possible.  Right
 click on track Audio 1 and select <b>Attach effect..</b>.  Highlight the
 <b>Compressor</b> effect and hit <b>Attach</b> in the attachment popup.
-
-   <p>Make sure the insertion point or highlighted area is in the region with
+</p>
+<p>Make sure the insertion point or highlighted area is in the region with
 the Compressor effect. Right click on track Audio 2 and select
 <b>Attach effect..</b>.  Highlight <b>Audio 1: Compressor</b> and hit
-<b>Attach</b>.  Click the Audio1 Compressor's magnifying glass
-<img src="magnify.png" alt="magnify.png"> to bring up the compressor GUI.
-
-   <p>Set the following parameters:
-
-<pre class="example">     Reaction secs: <b>-0.1</b>
-     Decay secs: <b>0.1</b>
-     Trigger Type: <b>Total</b>
-     Trigger: <b>0</b>
-     Smooth only: <b>No</b>
-</pre>
-   <p>Click <b>Clear</b> to clear the graph.  Click anywhere in the
+<b>Attach</b>.  Click the Audio1 Compressor&rsquo;s magnifying glass
+<img src="magnify.png" alt="magnify"> to bring up the compressor GUI.
+</p>
+<p>Set the following parameters:
+</p>
+<div class="example">
+<pre class="example">Reaction secs: <b>-0.1</b>
+Decay secs: <b>0.1</b>
+Trigger Type: <b>Total</b>
+Trigger: <b>0</b>
+Smooth only: <b>No</b>
+</pre></div>
+
+
+<p>Click <b>Clear</b> to clear the graph.  Click anywhere in the
 grid area and drag a new point to 0 Output and -50 Input.  The graph
 should look like this.
+</p>
+<br>
+<img src="compress.png" alt="compress">
 
-   <pre class="sp">
-
-</pre>
-<img src="compress.png" alt="compress.png">
-
-   <p>Go to <b>File-&gt;Render</b>.  Specify the name of an mp3 file to output to. 
-Set the file format to <b>MPEG Audio</b>.  Click the wrench <img src="wrench.png" alt="wrench.png">
+<p>Go to <b>File-&gt;Render</b>.  Specify the name of an mp3 file to output to. 
+Set the file format to <b>MPEG Audio</b>.  Click the wrench <img src="wrench.png" alt="wrench">
 for Audio and set <b>Layer</b> to <b>III</b> and <b>Kbits per second</b> to
 <b>24</b> or <b>32</b>.  Check <b>Render audio tracks</b> and uncheck <b>Render
 video tracks</b>.  Hit OK to render the file.
-
-   <p>The resulting .mp3 file must be uploaded to a web server.  Then, the
-phone's web browser must download the .mp3 file directly from the URL. 
+</p>
+<p>The resulting .mp3 file must be uploaded to a web server.  Then, the
+phone&rsquo;s web browser must download the .mp3 file directly from the URL.
 There also may be a size limit on the file.
+</p>
+
+
 
-<div class="node">
-<a name="TIME-STRETCHING-AUDIO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PITCH-SHIFTING-AUDIO">PITCH SHIFTING AUDIO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MAKING-A-RINGTONE">MAKING A RINGTONE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
 
-</div>
 
+
+<hr>
+<a name="TIME-STRETCHING-AUDIO"></a>
+<div class="header">
+<p>
+Next: <a href="#PITCH-SHIFTING-AUDIO" accesskey="n" rel="next">PITCH SHIFTING AUDIO</a>, Previous: <a href="#MAKING-A-RINGTONE" accesskey="p" rel="prev">MAKING A RINGTONE</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TIME-STRETCHING-AUDIO-1"></a>
 <h3 class="section">17.8 TIME STRETCHING AUDIO</h3>
 
 <p>It may appear that time stretching audio is a matter of selecting a
@@ -6824,35 +7509,34 @@ region of the audio tracks, enabling recording for the desired tracks,
 going to <b>Audio-&gt;Render Effect</b>, and applying <b>Time Stretch</b>.  In
 actuality there are 3 audio effects for time stretching: <b>Time
 Stretch</b>, <b>Resample</b>, and <b>Asset info dialog</b>.
-
-   <p>Time Stretch applies a fast fourier transform to try to change the
+</p>
+<p>Time Stretch applies a fast fourier transform to try to change the
 duration without changing the pitch, but this introduces windowing
-artifacts to the audio.  It's only useful for large changes in time
+artifacts to the audio.  It&rsquo;s only useful for large changes in time
 because obvious changes in duration make windowing artifacts less
 obtrusive.
-
-   <p>For smaller changes in duration, in the range of 5%, <b>Resample</b>
+</p>
+<p>For smaller changes in duration, in the range of 5%, <b>Resample</b>
 should be used.  This changes the pitch of the audio but small enough
-changes aren't noticable.  Resample doesn't introduce any windowing
+changes aren&rsquo;t noticable.  Resample doesn&rsquo;t introduce any windowing
 artifacts, so this is most useful for slight duration changes where the
-listener isn't supposed to know what's going on.
-
-   <p>Another way to change duration slightly is to go to the <b>Resources</b>
+listener isn&rsquo;t supposed to know what&rsquo;s going on.
+</p>
+<p>Another way to change duration slightly is to go to the <b>Resources</b>
 window, highlight the <b>media</b> folder, right click on an audio file,
 click on <b>Info</b>.  Adjust the sample rate in the <b>Info</b> dialog to
 adjust the duration.  This method also requires left clicking on the
 right boundary of the audio tracks and dragging left or right to
 correspond to the length changes.
+</p>
 
-<div class="node">
+<hr>
 <a name="PITCH-SHIFTING-AUDIO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TEXT-TO-MOVIE">TEXT TO MOVIE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TIME-STRETCHING-AUDIO">TIME STRETCHING AUDIO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
-
+<div class="header">
+<p>
+Next: <a href="#TEXT-TO-MOVIE" accesskey="n" rel="next">TEXT TO MOVIE</a>, Previous: <a href="#TIME-STRETCHING-AUDIO" accesskey="p" rel="prev">TIME STRETCHING AUDIO</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="PITCH-SHIFTING-AUDIO-1"></a>
 <h3 class="section">17.9 PITCH SHIFTING AUDIO</h3>
 
 <p>Like the time stretching methods, there are three pitch shifting
@@ -6861,223 +7545,271 @@ Pitch shift is a realtime effect which can be dragged and dropped onto
 recordable audio tracks.  Pitch shift uses a fast fourier transform to
 try to change the pitch without changing the duration, but this
 introduces windowing artifacts.
-
-   <p>Because the windowing artifacts are less obtrusive in audio which is
+</p>
+<p>Because the windowing artifacts are less obtrusive in audio which is
 obvously pitch shifted, Pitch shift is mainly useful for extreme pitch
 changes.  For mild pitch changes, use <b>Resample</b> from the
 <b>Audio-&gt;Render Effect</b> interface.  Resample can change the pitch
 within 5% without a noticable change in duration.
-
-   <p>Another way to change pitch slightly is to go to the <b>Resources</b>
+</p>
+<p>Another way to change pitch slightly is to go to the <b>Resources</b>
 window, highlight the <b>media</b> folder, right click on an audio file,
 click on <b>Info</b>.  Adjust the sample rate in the <b>Info</b> dialog to
 adjust the pitch.  This method also requires left clicking on the right
 boundary of the audio tracks and dragging left or right to correspond
 to the length changes.
+</p>
 
-<div class="node">
+<hr>
 <a name="TEXT-TO-MOVIE"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PITCH-SHIFTING-AUDIO">PITCH SHIFTING AUDIO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>
-
+<div class="header">
+<p>
+Previous: <a href="#PITCH-SHIFTING-AUDIO" accesskey="p" rel="prev">PITCH SHIFTING AUDIO</a>, Up: <a href="#SECRETS-OF-CINELERRA" accesskey="u" rel="up">SECRETS OF CINELERRA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="TEXT-TO-MOVIE-1"></a>
 <h3 class="section">17.10 TEXT TO MOVIE</h3>
 
+
+
 <p>Text to movie was added when another one of those startups whose name
 was an unmemorable combination of farting noises that the venture
 capitalist heard, started charging money for a ridulously simple program
 that converted scripts directly to movies.  It was such a simple
 program, we decided to add most of the functionality to Cinelerra.
-
-   <p>The easiest way to make a movie is to copy <b>tests/text2movie</b> and
+</p>
+<p>The easiest way to make a movie is to copy <b>tests/text2movie</b> and
 <b>tests/text2movie.xml</b> as a starting point.  Load the
 <b>text2movie.xml</b> file to see the movie.
-
-   <p>The <b>text2movie</b> file acts like a normal asset, except changes to it
+</p>
+<p>The <b>text2movie</b> file acts like a normal asset, except changes to it
 are immediately reflected on the timeline, without reloading.  Also, the
 length is infiinite.  Edit the <b>text2movie</b> file to change the
 script.  If the length of the movie increases, drag the right edit
 handle to extend the edit or use <b>edit-&gt;edit length</b>.
-
-   <p>1 audio channel is created for every character.  The frame rate, sample
+</p>
+<p>1 audio channel is created for every character.  The frame rate, sample
 rate, and frame size are fixed.  Get it from the <b>asset window</b>. 
 Right click on the asset and go to <b>Asset info...</b>  Camera angles are
 fixed.
-
-   <p>Since its only use was to show dialog between 2 people, that's the
+</p>
+<p>Since its only use was to show dialog between 2 people, that&rsquo;s the
 functionality we focused on.  The character model and voice is selected
 separately in the script, because that was how it was done with the fee
 service.  The models are defined in model files, in the Cinelerra
 executable directory.  Usually <b>/opt/cinelerra/models</b>.
-
-   <p>There is a search path for models, starting with the directory the
+</p>
+<p>There is a search path for models, starting with the directory the
 script is in.  You can define new models for the script, without
 affecting the entire system.  The model files are the exact name that
 appears in the script.  They define the total size of the model and the
 images used in the model.
-
-   <p>The models are 2D png images, because all the animations are baked.  No
+</p>
+<p>The models are 2D png images, because all the animations are baked.  No
 custom movement is currently supported, that would require a 3D
-renderer.
-
-   <p>Some actions are implemented.  Character2 can cut off character1 if
-character1's dialog ends in <b>...</b>
-
-   <p>Inserting <b>[pause]</b> anywhere causes the character to pause.  Useful
+renderer.  
+</p>
+<p>Some actions are implemented.  Character2 can cut off character1 if
+character1&rsquo;s dialog ends in <b>...</b>
+</p>
+<p>Inserting <b>[pause]</b> anywhere causes the character to pause.  Useful
 for adjusting the timing of dialog.
-
-   <p>Speech synthesis is pretty lousy.  Punctuation and spelling needs to be
+</p>
+<p>Speech synthesis is pretty lousy.  Punctuation and spelling needs to be
 adjusted based on the sound.  The dialog is rendered on-demand, so there
 is a delay when each character starts to speak.  Split dialog into
 shorter blocks to reduce the delay.
+</p>
+
 
-<div class="node">
-<a name="SECRETS-OF-CINELERRA-EFFECTS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SECRETS-OF-CINELERRA">SECRETS OF CINELERRA</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+<hr>
+<a name="SECRETS-OF-CINELERRA-EFFECTS"></a>
+<div class="header">
+<p>
+Next: <a href="#PLUGIN-AUTHORING" accesskey="n" rel="next">PLUGIN AUTHORING</a>, Previous: <a href="#SECRETS-OF-CINELERRA" accesskey="p" rel="prev">SECRETS OF CINELERRA</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SECRETS-OF-CINELERRA-EFFECTS-1"></a>
 <h2 class="chapter">18 SECRETS OF CINELERRA EFFECTS</h2>
 
 <p>Most effects in Cinelerra can be figured out just by using them and
 tweeking.  Here are brief descriptions of effects which you might not
 utilize fully by mere experimentation.
-
-<ul class="menu">
-<li><a accesskey="1" href="#g_t1080-TO-480">1080 TO 480</a>:        How to convert HDTV into SD
-<li><a accesskey="2" href="#CHROMA-KEY">CHROMA KEY</a>:         Create transparency based on color similarities. 
-<li><a accesskey="3" href="#COMPRESSOR">COMPRESSOR</a>:         How to reduce the dynamic range of audio. 
-<li><a accesskey="4" href="#DECIMATE">DECIMATE</a>:           How to reduce frame rates by eliminating similar frames. 
-<li><a accesskey="5" href="#DEINTERLACE">DEINTERLACE</a>:        How to convert interlaced video to progressive video. 
-<li><a accesskey="6" href="#DIFFERENCE-KEY">DIFFERENCE KEY</a>:     Create transparency based on color differences. 
-<li><a accesskey="7" href="#FIELDS-TO-FRAMES">FIELDS TO FRAMES</a>:   How to recover interlaced video from bobbed video
-<li><a accesskey="8" href="#FREEZE-FRAME">FREEZE FRAME</a>:       How to stop action in the timeline. 
-<li><a accesskey="9" href="#HISTOGRAM">HISTOGRAM</a>:          How to change the mapping of different brightness values. 
-<li><a href="#INVERSE-TELECINE">INVERSE TELECINE</a>:   How to convert pulled down frames to progressive frames. 
-<li><a href="#INTERPOLATE-VIDEO">INTERPOLATE VIDEO</a>:  How to create the illusion of higher framerates. 
-<li><a href="#LENS">LENS</a>:               Correcting spherical aberration
-<li><a href="#LINEARIZE">LINEARIZE</a>:          Fix gamma in raw camera images
-<li><a href="#LIVE-AUDIO">LIVE AUDIO</a>:         Pass audio from the soundcard directly to the timeline. 
-<li><a href="#LIVE-VIDEO">LIVE VIDEO</a>:         Pass video from the capture card directly to the timeline. 
-<li><a href="#LOOP">LOOP</a>:               How to loop regions of the timeline. 
-<li><a href="#MOTION">MOTION</a>:             Motion tracking with rotation. 
-<li><a href="#MOTION-2-POINT">MOTION 2 POINT</a>:     Motion and rotation tracking from translation only. 
-<li><a href="#REFRAMERT">REFRAMERT</a>:          Changing the number of frames in a sequence. 
-<li><a href="#REFRAME">REFRAME</a>:            Changing the number of frames in a sequence with rendering. 
-<li><a href="#RESAMPLE">RESAMPLE</a>:           Change the number of samples in a sequence with rendering. 
-<li><a href="#REVERSE-VIDEO_002fAUDIO">REVERSE VIDEO/AUDIO</a>:  How to play regions in reverse. 
-<li><a href="#SWAP-FRAMES">SWAP FRAMES</a>:        Fixing temporal field order
-<li><a href="#THRESHOLD">THRESHOLD</a>:          How to get monochrome out of a region of the image. 
-<li><a href="#TIME-AVERAGE">TIME AVERAGE</a>:       How to stack images. 
-<li><a href="#TITLER">TITLER</a>:             How to add text to a track from inside Cinelerra. 
-<li><a href="#VIDEO-SCOPE">VIDEO SCOPE</a>:        How to view the dynamic range of intensity and hue. 
-</ul>
-
-<div class="node">
+</p>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#g_t1080-TO-480" accesskey="1">1080 TO 480</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to convert HDTV into SD
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#CHROMA-KEY" accesskey="2">CHROMA KEY</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Create transparency based on color similarities.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COMPRESSOR" accesskey="3">COMPRESSOR</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to reduce the dynamic range of audio.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DECIMATE" accesskey="4">DECIMATE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to reduce frame rates by eliminating similar frames.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DEINTERLACE" accesskey="5">DEINTERLACE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to convert interlaced video to progressive video.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DIFFERENCE-KEY" accesskey="6">DIFFERENCE KEY</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Create transparency based on color differences.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#FIELDS-TO-FRAMES" accesskey="7">FIELDS TO FRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to recover interlaced video from bobbed video
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#FREEZE-FRAME" accesskey="8">FREEZE FRAME</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to stop action in the timeline.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#HISTOGRAM" accesskey="9">HISTOGRAM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to change the mapping of different brightness values.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#INVERSE-TELECINE">INVERSE TELECINE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to convert pulled down frames to progressive frames.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#INTERPOLATE-VIDEO">INTERPOLATE VIDEO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to create the illusion of higher framerates.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LENS">LENS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Correcting spherical aberration
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LINEARIZE">LINEARIZE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Fix gamma in raw camera images
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LIVE-AUDIO">LIVE AUDIO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Pass audio from the soundcard directly to the timeline.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LIVE-VIDEO">LIVE VIDEO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Pass video from the capture card directly to the timeline.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#LOOP">LOOP</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to loop regions of the timeline.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MOTION">MOTION</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Motion tracking with rotation.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MOTION-2-POINT">MOTION 2 POINT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Motion and rotation tracking from translation only.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#REFRAMERT">REFRAMERT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Changing the number of frames in a sequence.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#REFRAME">REFRAME</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Changing the number of frames in a sequence with rendering.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#RESAMPLE">RESAMPLE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Change the number of samples in a sequence with rendering.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#REVERSE-VIDEO_002fAUDIO">REVERSE VIDEO/AUDIO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to play regions in reverse.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#SWAP-FRAMES">SWAP FRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Fixing temporal field order
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#THRESHOLD">THRESHOLD</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to get monochrome out of a region of the image.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TIME-AVERAGE">TIME AVERAGE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to stack images.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TITLER">TITLER</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to add text to a track from inside Cinelerra.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#VIDEO-SCOPE">VIDEO SCOPE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to view the dynamic range of intensity and hue.
+</td></tr>
+</table>
+
+
+
+
+<hr>
 <a name="g_t1080-TO-480"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CHROMA-KEY">CHROMA KEY</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
-
+<div class="header">
+<p>
+Next: <a href="#CHROMA-KEY" accesskey="n" rel="next">CHROMA KEY</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="g_t1080-TO-480-1"></a>
 <h3 class="section">18.1 1080 TO 480</h3>
 
+
 <p>Most TV broadcasts are recieved with a 1920x1080 resolution but
-originate from a 720x480 source at the studio.  It's a waste of space
+originate from a 720x480 source at the studio.  It&rsquo;s a waste of space
 to compress the entire 1920x1080 if the only resolvable details are
-720x480.  Unfortunately resizing 1920x1080 video to 720x480 isn't as
+720x480.  Unfortunately resizing 1920x1080 video to 720x480 isn&rsquo;t as
 simple as shrinking it.
-
-   <p>At the TV station the original 720x480 footage was first converted to
+</p>
+<p>At the TV station the original 720x480 footage was first converted to
 fields of 720x240.  Each field was then scaled up to 1920x540.  The two
 1920x540 fields were finally combined with interlacing to form the
 1920x1080 image.  This technique allows a consumer TV to display the
 resampled image without extra circuitry to handle 720x480 interlacing
 in a 1920x1080 image.
-
-   <p>If you merely deinterlaced the 1920x1080 images, you would end up with
+</p>
+<p>If you merely deinterlaced the 1920x1080 images, you would end up with
 resolution of 720x240.  The <b>1080 to 480</b> effect properly extracts
 two 1920x540 size fields from the image, resizes them separately, and
 combines them again to restore a 1920x480 interlaced image.  The
 <b>scale</b> effect must then be applied to reduce the horizontal size to
 960 or 720 depending on the original aspect ratio.
-
-   <p>The tracks to which <b>1080 to 480</b> is applied need to be at 1920x1080
+</p>
+<p>The tracks to which <b>1080 to 480</b> is applied need to be at 1920x1080
 resolution.  The project settings in <b>settings-&gt;format</b> should be at
 least 720x480 resolution.
-
-   <p>The effect doesn't know if the first row in the 1920x1080 image belongs
+</p>
+<p>The effect doesn&rsquo;t know if the first row in the 1920x1080 image belongs
 to the first row of the 720x480 original.  You have to specify what the
 first row is in the effect configuration.
-
-   <p>The output of this effect is a small image in the middle of the
+</p>
+<p>The output of this effect is a small image in the middle of the
 original 1920x1080 frame.  Use the projector to center the output image
 in the playback.
-
-   <p>Finally, once you have 720x480 interlaced video you can either apply
+</p>
+<p>Finally, once you have 720x480 interlaced video you can either apply
 <b>frames to fields</b> of <b>inverse telecine</b> to further recover original
 progressive frames.
+</p>
+
 
-<div class="node">
-<a name="CHROMA-KEY"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COMPRESSOR">COMPRESSOR</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#g_t1080-TO-480">1080 TO 480</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+<hr>
+<a name="CHROMA-KEY"></a>
+<div class="header">
+<p>
+Next: <a href="#COMPRESSOR" accesskey="n" rel="next">COMPRESSOR</a>, Previous: <a href="#g_t1080-TO-480" accesskey="p" rel="prev">1080 TO 480</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="CHROMA-KEY-1"></a>
 <h3 class="section">18.2 CHROMA KEY</h3>
 
+
 <p>This effect erases pixels which match the selected color.  They are
 replaced with black if there is no alpha channel and transparency if
 there is an alpha channel.  The selection of color model is important
 to determine the behavior.
-
-   <p>Chroma key uses either the lightness or the hue to determine what is
+</p>
+<p>Chroma key uses either the lightness or the hue to determine what is
 erased.  <b>Use value</b> singles out only the lightness to determine
 transparency.  Select a center color to erase using the <b>Color</b>
 button.  Alternatively a color can be picked directly from the output
 frame by first using the <b>color picker</b> in the compositor window and
 then selecting the <b>Use color picker</b> button.  This sets the chroma
 key color to the current color picker color.
-
-   <p>Be aware that the output of the chroma key is fed back to the
+</p>
+<p>Be aware that the output of the chroma key is fed back to the
 compositor, so selecting a color again from the compositor will use the
 output of the chroma key effect.  The chroma key should be disabled
 when selecting colors with the color picker.
+</p>
 
-   <p>If the lightness or hue is within a certain threshold it's erased. 
+<p>If the lightness or hue is within a certain threshold it&rsquo;s erased. 
 Increasing the threshold determines the range of colors to be erased. 
-It's not a simple on/off switch, however.  As the color approaches the
+It&rsquo;s not a simple on/off switch, however.  As the color approaches the
 edge of the threshold, it gradually gets erased if the slope is high or
 is rapidly erased if the slope is low.  The slope as defined here is
 the number of extra values flanking the threshold required to go from
 opaque to transparent.
-
-   <p>Normally threshold is very low when using a high slope.  The two
+</p>
+<p>Normally threshold is very low when using a high slope.  The two
 parameters tend to be exclusive because slope fills in extra threshold.
-
-   <p>The slope tries to soften the edges of the chroma key but it doesn't
+</p>
+<p>The slope tries to soften the edges of the chroma key but it doesn&rsquo;t
 work well for compressed sources.  A popular softening technique is to
 use a maximum slope and chain a blur effect below the chroma key effect
 to blur just the alpha.
+</p>
+
+
+
+
+
 
-<div class="node">
-<a name="COMPRESSOR"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DECIMATE">DECIMATE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CHROMA-KEY">CHROMA KEY</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="COMPRESSOR"></a>
+<div class="header">
+<p>
+Next: <a href="#DECIMATE" accesskey="n" rel="next">DECIMATE</a>, Previous: <a href="#CHROMA-KEY" accesskey="p" rel="prev">CHROMA KEY</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="COMPRESSOR-1"></a>
 <h3 class="section">18.3 COMPRESSOR</h3>
 
 <p>Contrary to computer science experience, the audio compressor does not
@@ -7085,23 +7817,23 @@ reduce the amount of data required to store the audio.  The audio
 compressor reduces the dynamic range of the audio.  In Cinelerra the
 compressor actually performs the function of an expander and
 compressor.
-
-   <p>The compressor works by calculating the maximum sound level within a
+</p>
+<p>The compressor works by calculating the maximum sound level within a
 certain time period of the current position.  The maximum sound level
 is taken as the input sound level.  For every input sound level there
 is an output sound level specified by the user.  The gain at the
 current position is adjusted so the maximum sound level in the time
 range is the user specified value.
-
-   <p>The compressor has a graph which correlates every input sound level to
+</p>
+<p>The compressor has a graph which correlates every input sound level to
 an output level.  The horizontal direction is the input sound level in
 dB.  The vertical direction is the ouptut sound level in dB.  The user
 specifies output sound levels by creating points on the graph.  Click
 in the graph to create a point.  If 2 points exist, drag one point
 across another point to delete it.  The most recent point selected has
 its vales displayed in textboxes for more precise adjustment.
-
-   <p>To make the compressor reduce the dynamic range of the audio, make all
+</p>
+<p>To make the compressor reduce the dynamic range of the audio, make all
 the output values greater than the input values except 0 db.  To make
 the compressor expand the dynamic range of the audio, make all the
 output values except 0 db less than the input values.  The algorithm
@@ -7109,91 +7841,102 @@ currently limits all sound levels above 0 db to 0 db so to get an
 overloaded effect put a gain effect before the compressor to reduce all
 the levels and follow it with another gain effect to amplify all the
 levels back over 0 db.
-
-   <p><b>Reaction secs:</b> This determines where in relation to the current
+</p>
+<p><b>Reaction secs:</b> This determines where in relation to the current
 position the maximum sound level is taken and how fast the gain is
-adjusted to reach that peak.  It's notated in seconds.  If it's
+adjusted to reach that peak.  It&rsquo;s notated in seconds.  If it&rsquo;s
 negative the compressor reads ahead of the current position to get the
 future peak.  The gain is ramped to that peak over one reaction time. 
 This allows it to hit the desired output level exactly when the input
 peak occurs at the current position.
-
-   <p>If the reaction time is positive the compressor scans only the current
+</p>
+<p>If the reaction time is positive the compressor scans only the current
 position for the gain and ramps gain over one reaction time to hit the
 desired output level.  It hits the output level exactly one reaction
 time after detecting the input peak.
-
-   <p><b>Decay secs:</b> If the peak is higher than the current level, the
+</p>
+<p><b>Decay secs:</b> If the peak is higher than the current level, the
 compressor ramps the gain up to the peak value.  Then if a future peak
 is less than the current peak it ramps the gain down.  The time taken
 to ramp the gain down can be greater than the time taken to ramp the
 gain up.  This ramping down time is the decay seconds.
-
-   <p><b>Trigger type:</b>  The compressor is a multichannel effect.  Several
+</p>
+<p><b>Trigger type:</b>  The compressor is a multichannel effect.  Several
 tracks can share one compressor.  How the signal from many tracks is
 interpreted is determined by the trigger type.
-
-   <p>The <b>Trigger</b> trigger type uses the value supplied in the <b>Trigger</b>
+</p>
+<p>The <b>Trigger</b> trigger type uses the value supplied in the <b>Trigger</b>
 textbox as the number of the track to use as input for the compressor. 
-This allows a track which isn't even heard to determine the loudness of
+This allows a track which isn&rsquo;t even heard to determine the loudness of
 the other tracks.
-
-   <p>The <b>Maximum</b> trigger takes the loudest track and uses it as the
+</p>
+<p>The <b>Maximum</b> trigger takes the loudest track and uses it as the
 input for the compressor.
-
-   <p>The <b>Total</b> trigger type adds the signals from all the tracks and
+</p>
+<p>The <b>Total</b> trigger type adds the signals from all the tracks and
 uses the total as the input for the compressor.  This is the most
 natural sounding compression and is ideal when multiple tracks are
 averaged into single speakers.
+</p>
 
-   <p><b>Trigger:</b> The compressor is a multichannel effect.  Several tracks
+
+<p><b>Trigger:</b> The compressor is a multichannel effect.  Several tracks
 can share one compressor.  Normally only one track is scanned for the
 input peak.  This track is specified by the <b>Trigger</b>.  By sharing
 several tracks and playing with the trigger value, you can make a sine
 wave on one track follow the amplitude of a drum on another track for
 example.
-
-   <p><b>Smooth only:</b> For visualizing what the compressor is doing to the
+</p>
+<p><b>Smooth only:</b> For visualizing what the compressor is doing to the
 soundlevel, this option causes it to replace the soundwave with just
 the current peak value.  It makes it very easy to see how <b>reaction
 secs</b> affects the detected peak values.
+</p>
 
-<div class="node">
-<a name="DECIMATE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DEINTERLACE">DEINTERLACE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMPRESSOR">COMPRESSOR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="DECIMATE"></a>
+<div class="header">
+<p>
+Next: <a href="#DEINTERLACE" accesskey="n" rel="next">DEINTERLACE</a>, Previous: <a href="#COMPRESSOR" accesskey="p" rel="prev">COMPRESSOR</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="DECIMATE-1"></a>
 <h3 class="section">18.4 DECIMATE</h3>
 
 <p>This effect drops frames from a track which are most similar in order
 to reduce the frame rate.  This is usually applied to a DVD to convert
 the 29.97 fps video to the 23.97 fps film rate but this decimate effect
 can take any input rate and convert it to any lower output rate.
-
-   <p>The output rate of <b>decimate</b> is the project frame rate.  The input
+</p>
+<p>The output rate of <b>decimate</b> is the project frame rate.  The input
 rate is set in the <b>decimate</b> user interface.  To convert 29.97fps
 progressive video to 23.97fps film, apply a decimate effect to the
 track.  Set the decimate input rate to 29.97 and the project rate to
 23.97.
-
-   <p>Be aware every effect layered before decimate processes video at the
+</p>
+<p>Be aware every effect layered before decimate processes video at the
 decimate input rate and every effect layered after decimate processes
 video at the project frame rate.  Computationally intensive effects
 should come below decimate.
+</p>
+
+
+
 
-<div class="node">
-<a name="DEINTERLACE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DIFFERENCE-KEY">DIFFERENCE KEY</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DECIMATE">DECIMATE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="DEINTERLACE"></a>
+<div class="header">
+<p>
+Next: <a href="#DIFFERENCE-KEY" accesskey="n" rel="next">DIFFERENCE KEY</a>, Previous: <a href="#DECIMATE" accesskey="p" rel="prev">DECIMATE</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="DEINTERLACE-1"></a>
 <h3 class="section">18.5 DEINTERLACE</h3>
 
 <p>The deinterlace effect has evolved over the years to deinterlacing and
@@ -7203,16 +7946,21 @@ deinterlace effect offers several variations of line replication to
 eliminate comb artifacts in interlaced video.  It also has some line
 swapping tools to fix improperly captured video or make the result of a
 reverse effect display fields in the right order.
+</p>
+
+
+
 
-<div class="node">
-<a name="DIFFERENCE-KEY"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#FIELDS-TO-FRAMES">FIELDS TO FRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DEINTERLACE">DEINTERLACE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="DIFFERENCE-KEY"></a>
+<div class="header">
+<p>
+Next: <a href="#FIELDS-TO-FRAMES" accesskey="n" rel="next">FIELDS TO FRAMES</a>, Previous: <a href="#DEINTERLACE" accesskey="p" rel="prev">DEINTERLACE</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="DIFFERENCE-KEY-1"></a>
 <h3 class="section">18.6 DIFFERENCE KEY</h3>
 
 <p>The differency key creates transparency in areas which are similar
@@ -7223,103 +7971,113 @@ front of it.  Apply the difference key to the track with the action and
 apply a shared copy of it to the track with the background.  The track
 with the background should be muted and underneath the track with the
 action and the colormodel should have an alpha channel.
-
-   <p>Pixels which are different between the background and action track are
+</p>
+<p>Pixels which are different between the background and action track are
 treated as opaque.  Pixels which are similar are treated as
 transparent.  Change <b>threshold</b> in the differency key window to make
-more pixels which aren't the same color transparent. Change <b>slope</b>
+more pixels which aren&rsquo;t the same color transparent. Change <b>slope</b>
 to change the rate at which the transparency tapers off as pixels get
 more different.
-
-   <p>The slope as defined here is the number of extra values flanking the
+</p>
+<p>The slope as defined here is the number of extra values flanking the
 threshold required to go from opaque to transparent.  A high slope is
 more useful with a low threshold because slope fills in extra
 threshold.
-
-   <p><b>Use value</b> causes the intensity of pixels to be compared instead of
+</p>
+<p><b>Use value</b> causes the intensity of pixels to be compared instead of
 the color.
-
-   <p>Applying a blur to the top track with just the alpha channel blurred
+</p>
+<p>Applying a blur to the top track with just the alpha channel blurred
 can soften the transparency border.
+</p>
+
 
-<div class="node">
-<a name="FIELDS-TO-FRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#FREEZE-FRAME">FREEZE FRAME</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DIFFERENCE-KEY">DIFFERENCE KEY</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="FIELDS-TO-FRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#FREEZE-FRAME" accesskey="n" rel="next">FREEZE FRAME</a>, Previous: <a href="#DIFFERENCE-KEY" accesskey="p" rel="prev">DIFFERENCE KEY</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="FIELDS-TO-FRAMES-1"></a>
 <h3 class="section">18.7 FIELDS TO FRAMES</h3>
 
 <p>This effects reads frames at twice the project framerate, combining 2
 input frames into a single interlaced output frame.  Effects preceeding
 <b>fields to frames</b> process frames at twice the project frame rate. 
 Each input frame is called a field.
-
-   <p><b>Fields to frames</b> needs to know what field corresponds to what lines
+</p>
+<p><b>Fields to frames</b> needs to know what field corresponds to what lines
 in the output frame.  The easiest way to figure it out is to try both
 options in the window.  If the input fields are the result of a line
 doubling process like <b>frames to fields</b>, the wrong setting results
 in blurrier output.  If the input fields are the result of a standards
-conversion process like <b>1080 to 480</b>, the wrong setting won't make
+conversion process like <b>1080 to 480</b>, the wrong setting won&rsquo;t make
 any difference.
-
-   <p>The debobber which converts 720x480 interlaced into 1920x1080
+</p>
+<p>The debobber which converts 720x480 interlaced into 1920x1080
 interlaced or 1280x720 progressive seems to degrade the vertical
-resolution to the point that it can't be recovered.
+resolution to the point that it can&rsquo;t be recovered.
+</p>
 
-<div class="node">
-<a name="FREEZE-FRAME"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#HISTOGRAM">HISTOGRAM</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#FIELDS-TO-FRAMES">FIELDS TO FRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="FREEZE-FRAME"></a>
+<div class="header">
+<p>
+Next: <a href="#HISTOGRAM" accesskey="n" rel="next">HISTOGRAM</a>, Previous: <a href="#FIELDS-TO-FRAMES" accesskey="p" rel="prev">FIELDS TO FRAMES</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="FREEZE-FRAME-1"></a>
 <h3 class="section">18.8 FREEZE FRAME</h3>
 
 <p>In its simplest form, highlight a region of the track to freeze, drop
 the freeze frame effect on the highlighted region, and the lowest
 numbered frame in the affected area will play throughout the entire
-region.
-
-   <p>Freezeframe has an <b>enabled</b> option which can be keyframed.  Regions
+region.  
+</p>
+<p>Freezeframe has an <b>enabled</b> option which can be keyframed.  Regions
 of a freeze frame effect which are enabled repeat the lowest numbered
 frame since the last keyframe.  This has unique possibilities.
-
-   <p>If a freeze frame effect has a keyframe in the middle of it set to
+</p>
+<p>If a freeze frame effect has a keyframe in the middle of it set to
 <b>enabled</b>, the frame in the middle is repeated in the entire effect.
-
-   <p>If a freeze frame effect has several keyframes, each set to
+</p>
+<p>If a freeze frame effect has several keyframes, each set to
 <b>enabled</b>, every time a keyframe is encountered the frame under it
 becomes the frozen one.
-
-   <p>If a freeze frame effect alternates between <b>enabled</b> and
+</p>
+<p>If a freeze frame effect alternates between <b>enabled</b> and
 <b>disabled</b>, each time an <b>enabled</b> keyframe is encountered the
 frame under it is replicated until the next <b>disabled</b> keyframe.  The
 disabled regions play through.
+</p>
 
-<div class="node">
-<a name="HISTOGRAM"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#INVERSE-TELECINE">INVERSE TELECINE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#FREEZE-FRAME">FREEZE FRAME</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+<hr>
+<a name="HISTOGRAM"></a>
+<div class="header">
+<p>
+Next: <a href="#INVERSE-TELECINE" accesskey="n" rel="next">INVERSE TELECINE</a>, Previous: <a href="#FREEZE-FRAME" accesskey="p" rel="prev">FREEZE FRAME</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="HISTOGRAM-1"></a>
 <h3 class="section">18.9 HISTOGRAM</h3>
 
-<p>This shows the number of occurances of each color on a histogram plot.
 
-   <p>It is always performed in floating point RGB regardless of
+<p>This shows the number of occurances of each color on a histogram plot.
+</p>
+<p>It is always performed in floating point RGB regardless of
 the project colorspace.  The histogram has two sets of transfer
 parameters: the input transfer and the output transfer.
-
-   <p>4 histograms are possible in the histogram viewer.  The red, green,
+</p>
+<p>4 histograms are possible in the histogram viewer.  The red, green,
 blue histograms show the input histograms for red, green, blue and
 multiply them by an input transfer to get the output red, green, blue. 
 Then the output red, green, blue is scaled by an output transfer.  The
@@ -7327,64 +8085,73 @@ scaled red, green, blue is converted into a value and plotted on the
 value histogram.  The value histogram thus changes depending on the
 settings for red, green, blue.  The value transfers are applied
 uniformly to R, G, B after their color transfers are applied.
-
-   <p>Select which transfer to view by selecting one of the channels on the
+</p>
+<p>Select which transfer to view by selecting one of the channels on the
 top of the histogram.
+</p>
 
-   <p>The input transfer is defined by a graph overlaid on the histogram. 
+<p>The input transfer is defined by a graph overlaid on the histogram. 
 The horizontal direction corresponds to every possible input color. 
 The vertical direction corresponds to the output color for every input
 color.  Video entering the histogram is first plotted on the histogram
 plot, then it is translated so output values now equal the output
 values for each input value on the input graph.
-
-   <p>The input graph is edited by adding and removing any number of points. 
+</p>
+<p>The input graph is edited by adding and removing any number of points. 
 Click and drag anywhere in the input graph to create a point and move
 it.  Click on an existing point to make it active and move it.  The
 active point is always indicated by being filled in.  The active
-point's input and output color are given in text boxes on top of the
+point&rsquo;s input and output color are given in text boxes on top of the
 window.  The input and output color of the point can be changed through
 these text boxes.
-
-   <p>Points can be deleted by first selecting a point and then dragging it
+</p>
+<p>Points can be deleted by first selecting a point and then dragging it
 to the other side of an adjacent point.  They can also be deleted by
 selecting them and hitting <b>delete</b>.
+</p>
 
-   <p>After the input transfer, the image is processed by the output
+<p>After the input transfer, the image is processed by the output
 transfer.  The output transfer is simply a minimum and maximum to scale
 the input colors to.  Input values of 100% are scaled down to the
-output's maximum.  Input values of 0% are scaled up to the output
+output&rsquo;s maximum.  Input values of 0% are scaled up to the output
 minimum.
+</p>
 
-   <p>Input values below 0 are always clamped to 0 and input values above
+<p>Input values below 0 are always clamped to 0 and input values above
 100% are always clamped to 100%.  Click and drag on the output
-gradient's triangles to change it.  It also has textboxes to enter
+gradient&rsquo;s triangles to change it.  It also has textboxes to enter
 values into.
-
-   <p>Enable the <b>automatic</b> toggle to have the histogram calculate an
+</p>
+<p>Enable the <b>automatic</b> toggle to have the histogram calculate an
 automatic input transfer for the red, green, blue but not the value. 
 It does this by scaling the middle 99% of the pixels to take 100% of
 the histogram width.  The number of pixels permitted to pass through is
 set by the <b>Threshold</b> textbox.  A threshold of 0.99 scales the input
 so 99% of the pixels pass through.  Smaller thresholds permit fewer
 pixels to pass through and make the output look more contrasty.
-
-   <p>Automatic input transfer is calculated for the R, G, and B channels but
+</p>
+<p>Automatic input transfer is calculated for the R, G, and B channels but
 not the value.
+</p>
+
+<p><b>PLOT HISTOGRAM</b>
+</p>
+<p><b>SPLIT OUTPUT</b>
+</p>
+
 
-   <p><b>PLOT HISTOGRAM</b>
 
-   <p><b>SPLIT OUTPUT</b>
 
-<div class="node">
-<a name="INVERSE-TELECINE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#INTERPOLATE-VIDEO">INTERPOLATE VIDEO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#HISTOGRAM">HISTOGRAM</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="INVERSE-TELECINE"></a>
+<div class="header">
+<p>
+Next: <a href="#INTERPOLATE-VIDEO" accesskey="n" rel="next">INTERPOLATE VIDEO</a>, Previous: <a href="#HISTOGRAM" accesskey="p" rel="prev">HISTOGRAM</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="INVERSE-TELECINE-1"></a>
 <h3 class="section">18.10 INVERSE TELECINE</h3>
 
 <p>This is the most effective deinterlacing tool when the footage is a
@@ -7393,32 +8160,37 @@ video transfer of a film.  Here the film was converted from 24fps to
 even lines and interlacing the lines.  The IVTC effect is primarily a
 way to convert interlaced video to progressive video.  It undoes three
 patterns of interlacing.
-
-<pre class="example">       A AB BC CD D
-       AB CD CD DE EF
-       Automatic
-</pre>
-   <p>The first two options are fixed patterns and affected by the <b>pattern
+</p>
+<div class="example">
+<pre class="example">  A AB BC CD D
+  AB CD CD DE EF
+  Automatic
+</pre></div>
+
+<p>The first two options are fixed patterns and affected by the <b>pattern
 offset</b> and <b>odd field first</b> parameters.  The last option creates
 several combinations of lines for each frame and picks the most
-progressive combination.  It's a brute force algorithm.
-
-   <p>This technique doesn't rely on a pattern like other techniques and is
+progressive combination.  It&rsquo;s a brute force algorithm.
+</p>
+<p>This technique doesn&rsquo;t rely on a pattern like other techniques and is
 less destructive but the timing is going to be jittery because of the
 lack of a frame rate reduction.  In order to smooth out the timing, you
 need to follow inverse telecine with a decimate effect.
+</p>
+
 
-<div class="node">
-<a name="INTERPOLATE-VIDEO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LENS">LENS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INVERSE-TELECINE">INVERSE TELECINE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="INTERPOLATE-VIDEO"></a>
+<div class="header">
+<p>
+Next: <a href="#LENS" accesskey="n" rel="next">LENS</a>, Previous: <a href="#INVERSE-TELECINE" accesskey="p" rel="prev">INVERSE TELECINE</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="INTERPOLATE-VIDEO-1"></a>
 <h3 class="section">18.11 INTERPOLATE VIDEO</h3>
 
+
 <p>The interpolate video effect tries to create the illusion of a higher
 frame rate from source footage of very low framerates by averaging
 frames over time.  It averages two input frames for each output frame. 
@@ -7427,203 +8199,225 @@ all output frames between the input frames.  There are two ways of
 specifying the input frames.  You can specify an input frame rate which
 is lower than the project frame rate.  This causes input frames to be
 taken at even intervals,
-
-   <p>You can also specify keyframe locations as the positions of the input
+</p>
+<p>You can also specify keyframe locations as the positions of the input
 frames.  In this mode the output frame rate is used as the input frame
 rate and you just create keyframes wherever you want to specify an
 input frame.
+</p>
 
-<div class="node">
+<hr>
 <a name="LENS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LINEARIZE">LINEARIZE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INTERPOLATE-VIDEO">INTERPOLATE VIDEO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
-
+<div class="header">
+<p>
+Next: <a href="#LINEARIZE" accesskey="n" rel="next">LINEARIZE</a>, Previous: <a href="#INTERPOLATE-VIDEO" accesskey="p" rel="prev">INTERPOLATE VIDEO</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="LENS-1"></a>
 <h3 class="section">18.12 LENS</h3>
 
 <p>The lens affect stretches or shrinks to convert lens distorted images to
 rectilinear images.  The most common use is converting fish eye lenses
 to rectilinear lenses.  It is also useful for star tracking.
-
-   <p><b>R, G, B, A Field of view:</b> These determine how much the image is
+</p>
+<p><b>R, G, B, A Field of view:</b> These determine how much the image is
 stretched in each channel.
-
-   <p><b>Lock:</b> This causes changes to 1 channel to affect all the channels. 
+</p>
+<p><b>Lock:</b> This causes changes to 1 channel to affect all the channels. 
 This is normally the desired behavior.
-
-   <p><b>Aspect Ratio:</b> This changes the amount of stretching done in the X
+</p>
+<p><b>Aspect Ratio:</b> This changes the amount of stretching done in the X
 axis vs the Y axis.  To crop less data from stretched images, this
 allows more stretching to be done on 1 axis without creating black
 borders in the other axis.
-
-   <p><b>Radius:</b> This determines the size of the stretched region.  While
+</p>
+<p><b>Radius:</b> This determines the size of the stretched region.  While
 adjusting the <b>field of view</b>, black borders may appear.  Adjust the
 <b>radius</b> to shrink or expand the output so black borders are out of
 frame.
-
-   <p><b>Center X, Y:</b> The center of the stretched region.  This is only
+</p>
+<p><b>Center X, Y:</b> The center of the stretched region.  This is only
 useful if the image was previously translated by the software so the
 center of the lens is now off center.
+</p>
+<p><b>Draw center:</b> This is a visual aid when adjusting the <b>Center X, Y</b>
+but doesn&rsquo;t affect the results.
+</p>
+<p><b>Mode:</b> The type of stretching algorithm.
+</p>
+<ul>
+<li> <b>Sphere shrink:</b> This is for making an image look like it&rsquo;s mapped to a sphere.
+
+</li><li> <b>Sphere expand:</b> This is for unmapping an image mapped to a sphere and
+flattening it.
+
+</li><li> <b>Rectilinear Stretch:</b> This is for flattening a fish eye lens.
+
+</li><li> <b>Rectilinear Shrink:</b> This is for making something flat look like it
+was taken by a fish eye lens.
+
+
+</li></ul>
 
-   <p><b>Draw center:</b> This is a visual aid when adjusting the <b>Center X, Y</b>
-but doesn't affect the results.
 
-   <p><b>Mode:</b> The type of stretching algorithm.
 
-     <ul>
-<li><b>Sphere shrink:</b> This is for making an image look like it's mapped to a sphere.
 
-     <li><b>Sphere expand:</b> This is for unmapping an image mapped to a sphere and
-flattening it.
 
-     <li><b>Rectilinear Stretch:</b> This is for flattening a fish eye lens.
 
-     <li><b>Rectilinear Shrink:</b> This is for making something flat look like it
-was taken by a fish eye lens.
 
-   </ul>
 
-<div class="node">
-<a name="LINEARIZE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LIVE-AUDIO">LIVE AUDIO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LENS">LENS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="LINEARIZE"></a>
+<div class="header">
+<p>
+Next: <a href="#LIVE-AUDIO" accesskey="n" rel="next">LIVE AUDIO</a>, Previous: <a href="#LENS" accesskey="p" rel="prev">LENS</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LINEARIZE-1"></a>
 <h3 class="section">18.13 LINEARIZE</h3>
 
+
 <p>Raw camera images store colors in a logarithmic scale.  The blacks in
 these images are nearly 0 and the whites are supposed to be infinity. 
 The graphics card and most video codecs store colors in a linear scale
 but Cinelerra keeps raw camera images in their original logarithmic
 scale when it renders them.  This is necessary because the raw image
-parser can't always decode the proper gamma values for the images.  It
+parser can&rsquo;t always decode the proper gamma values for the images.  It
 also does its processing in 16 bit integers, which takes away a lot of
 information.
-
-   <p>The linearize effect converts the logarithmic colors to linear colors
+</p>
+<p>The linearize effect converts the logarithmic colors to linear colors
 through a gamma value and a maximum value.  The gamma value determines
 how steep the output curve is and the maximum value is where 1.0 in the
 output corresponds to maximum brightness in the input.
-
-   <p>The linearize effect has 2 more parameters to simplify gamma
+</p>
+<p>The linearize effect has 2 more parameters to simplify gamma
 correction.  The <b>automatic</b> option causes it to calculate <b>max</b>
 from the histogram of the image.  Use this when making a preview of a
 long list of images since it changes for every image.
-
-   <p>The <b>use color picker</b> option uses the value currently in the color
+</p>
+<p>The <b>use color picker</b> option uses the value currently in the color
 picker to set the <b>max</b> value.  Note that every time you pick a color
 from the compositor window, you need to hit <b>use color picker</b> to
 apply the new value.
+</p>
+
+
+
 
-<div class="node">
-<a name="LIVE-AUDIO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LIVE-VIDEO">LIVE VIDEO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LINEARIZE">LINEARIZE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="LIVE-AUDIO"></a>
+<div class="header">
+<p>
+Next: <a href="#LIVE-VIDEO" accesskey="n" rel="next">LIVE VIDEO</a>, Previous: <a href="#LINEARIZE" accesskey="p" rel="prev">LINEARIZE</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LIVE-AUDIO-1"></a>
 <h3 class="section">18.14 LIVE AUDIO</h3>
 
 <p>This effect reads audio directly from the soundcard input.  It replaces
-any audio on the track so it's normally applied to an empty track.
+any audio on the track so it&rsquo;s normally applied to an empty track. 
+</p>
 
-   <p>To use Live Audio, highlight a horizontal region of an audio track or
+<p>To use Live Audio, highlight a horizontal region of an audio track or
 define in and out points.  Then drop the Live Audio effect into it. 
 Create extra tracks and attach shared copies of the first Live Audio
 effect to the other tracks to have extra channels recorded.
-
-   <p>Live Audio uses the sound driver selected in
+</p>
+<p>Live Audio uses the sound driver selected in
 <b>Settings-&gt;Preferences-&gt;Playback-&gt;Audio Out</b> for recording, but
 unlike recording it uses the <b>playback buffer size</b> as the recording
 buffer size and it uses the <b>project sample rate</b> as the sampling
 rate.
-
-   <p>These settings are critical since some sound drivers can't record in
+</p>
+<p>These settings are critical since some sound drivers can&rsquo;t record in
 the same sized buffer they play back in.  Live audio has been most
 reliable when ALSA is the recording driver and the playback fragment
 size is 2048.
-
-   <p>Drop other effects after Live Audio to process soundcard input in
-realtime.
-
-   <p>Now the bad news.  With live audio there is no readahead so effects
+</p>
+<p>Drop other effects after Live Audio to process soundcard input in
+realtime.  
+</p>
+<p>Now the bad news.  With live audio there is no readahead so effects
 like compressor will either delay if they have readahead enabled or
-playback will underrun.
-
-   <p>Another problem is sometimes the recording clock on the soundcard is
+playback will underrun.  
+</p>
+<p>Another problem is sometimes the recording clock on the soundcard is
 slightly slower than the playback clock.  The recording eventually
 falls behind and playback sounds choppy.
+</p>
+<p>Finally, live audio doesn&rsquo;t work in reverse.
+</p>
 
-   <p>Finally, live audio doesn't work in reverse.
 
-<div class="node">
-<a name="LIVE-VIDEO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#LOOP">LOOP</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LIVE-AUDIO">LIVE AUDIO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="LIVE-VIDEO"></a>
+<div class="header">
+<p>
+Next: <a href="#LOOP" accesskey="n" rel="next">LOOP</a>, Previous: <a href="#LIVE-AUDIO" accesskey="p" rel="prev">LIVE AUDIO</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LIVE-VIDEO-1"></a>
 <h3 class="section">18.15 LIVE VIDEO</h3>
 
 <p>This effect reads video directly from the capture card input.  It
-replaces any video on the track so it's normally applied to an empty
+replaces any video on the track so it&rsquo;s normally applied to an empty
 track.  The configuration for the capture card is taken from the
 recording preferences.  Go to <b>Settings-&gt;Preferences-&gt;Recording</b> to
 set up the capture card.
-
-   <p>Go to the <b>Video In</b> section where it says <b>Record driver</b>.  It
+</p>
+<p>Go to the <b>Video In</b> section where it says <b>Record driver</b>.  It
 must be set to either <b>Video4Linux2</b> or <b>IEC 61883</b>.  Other video
-drivers haven't been tested with Live Video and probably won't work.
-
-   <p>For live video, the selection for <b>File Format</b> and <b>Video</b> needs
+drivers haven&rsquo;t been tested with Live Video and probably won&rsquo;t work.
+</p>
+<p>For live video, the selection for <b>File Format</b> and <b>Video</b> needs
 to be set to a format the timeline can use.  The file format must be
 <b>Quicktime for Linux</b> and video recording must be enabled for it. 
-Click on the wrench <img src="wrench.png" alt="wrench.png"> to set the video compression.
-
-   <p>The video compression depends on the recording driver.  For the
+Click on the wrench <img src="wrench.png" alt="wrench"> to set the video compression.
+</p>
+<p>The video compression depends on the recording driver.  For the
 <b>Video4Linux2</b> recording driver, the compression must be <b>Motion
 JPEG A</b>.  For the <b>IEC 61883</b> driver, the compression must be
 <b>DV</b>.  This gets the driver to generate output in a colormodel that
 the timeline can use.
-
-   <p>Some cards provide color and channel settings.  Live video takes the
+</p>
+<p>Some cards provide color and channel settings.  Live video takes the
 color settings from the values set in the <b>Video In</b> window.  Go to
 <b>File-&gt;Record</b> to bring up the recording interface and the Video In
 window.  Values set in the <b>Video in</b> window are used by <b>Live
 Video</b>.  Any channels the capture card supports need to be configured
 in the <b>Video in</b> interface since the same channels are used by the
 <b>Live Video</b> effect.
-
-   <p>With the video recording configured, highlight a horizontal region of a
+</p>
+<p>With the video recording configured, highlight a horizontal region of a
 video track or define in and out points.  Then drop the Live Video
 effect into it.  Drop other effects after Live Video to process the
 live video in realtime.  For best results, you should use OpenGL and a
 video card which supports GL shading language.  Go to
 <b>Settings-&gt;Preferences-&gt;Playback-&gt;Video Out</b> to enable the OpenGL
 driver.
+</p>
+<p>Only one Live Video effect can exist at any time on the timeline.  It
+can&rsquo;t be shared by more than one track.
+</p>
+
 
-   <p>Only one Live Video effect can exist at any time on the timeline.  It
-can't be shared by more than one track.
 
-<div class="node">
-<a name="LOOP"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MOTION">MOTION</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LIVE-VIDEO">LIVE VIDEO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+<hr>
+<a name="LOOP"></a>
+<div class="header">
+<p>
+Next: <a href="#MOTION" accesskey="n" rel="next">MOTION</a>, Previous: <a href="#LIVE-VIDEO" accesskey="p" rel="prev">LIVE VIDEO</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="LOOP-1"></a>
 <h3 class="section">18.16 LOOP</h3>
 
 <p>Sections of audio or video can be looped by dropping a <b>loop</b> effect
@@ -7631,28 +8425,35 @@ on them.  Contrary to the the <b>settings-&gt;loop playback</b> option, the
 loop effects can be rendered where the <b>settings-&gt;loop playback</b>
 option can not be.  The loop effects are also convenient for short
 regions.
-
-   <p>The loop effects have one option: the number of <b>frames</b> or
+</p>
+<p>The loop effects have one option: the number of <b>frames</b> or
 <b>samples</b> to loop.  This specifies the length of the region to loop
 starting from either the beginning of the effect or the latest
 keyframe.  The region is replicated for the entire effect.
+</p>
+<p>Every time a keyframe is set in a loop effect, the keyframe becomes the
+beginning of the region to loop.  Setting several keyframes in
+succession causes several regions to loop.  Setting a single keyframe
+causes the region after the keyframe to be looped throughout the
+effect, no matter where the keyframe is.  The end of an effect can be
+looped from the beginning by setting the keyframe near the end.
+</p>
+
+
+
+
+
+
 
-   <p>Every time a keyframe is set in a loop effect, the keyframe becomes the
-beginning of the region to loop.  Setting several keyframes in
-succession causes several regions to loop.  Setting a single keyframe
-causes the region after the keyframe to be looped throughout the
-effect, no matter where the keyframe is.  The end of an effect can be
-looped from the beginning by setting the keyframe near the end.
 
-<div class="node">
-<a name="MOTION"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MOTION-2-POINT">MOTION 2 POINT</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#LOOP">LOOP</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
+<hr>
+<a name="MOTION"></a>
+<div class="header">
+<p>
+Next: <a href="#MOTION-2-POINT" accesskey="n" rel="next">MOTION 2 POINT</a>, Previous: <a href="#LOOP" accesskey="p" rel="prev">LOOP</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="MOTION-1"></a>
 <h3 class="section">18.17 MOTION</h3>
 
 <p>The motion tracker is almost a complete application in itself.  The
@@ -7660,50 +8461,50 @@ motion tracker tracks two types of motion: translation and rotation.
 It can track both simultaneously or one only.  It can do 1/4 pixel
 tracking or single pixel tracking.  It can stabilize motion or cause
 one track to follow the motion of another track.
-
-   <p>Although the motion tracker is applied as a realtime effect, it usually
+</p>
+<p>Although the motion tracker is applied as a realtime effect, it usually
 must be rendered to see useful results.  The effect takes a long time
 to precisely detect motion.
-
-   <p>The motion tracker works by using one region of the frame as the region
+</p>
+<p>The motion tracker works by using one region of the frame as the region
 to track.  It compares this region between 2 frames to calculate the
 motion.  This region can be defined anywhere on the screen.  Once the
 motion between 2 frames has been calculated, a number of things can be
 done with that motion vector.  It can be scaled by a user value and
 clamped to a maximum range.  It can be thrown away or accumulated with
 all the motion vectors leading up to the current position.
-
-   <p>To save time the motion result can be saved for later reuse, recalled
+</p>
+<p>To save time the motion result can be saved for later reuse, recalled
 from a previous calculation, or discarded.
-
-   <p>The motion tracker has a notion of 2 tracks, the master layer and the
+</p>
+<p>The motion tracker has a notion of 2 tracks, the master layer and the
 target layer.  The master layer is where the comparison between 2
 frames takes place.  The target layer is where motion is applied either
 to track or compensate for the motion in the master layer.
-
-   <p>The intricacies of motion tracking are enough to sustain entire
+</p>
+<p>The intricacies of motion tracking are enough to sustain entire
 companies and build careers around.  The motion tracker in Cinelerra
-isn't as sophisticated as some world class motion trackers but it's
+isn&rsquo;t as sophisticated as some world class motion trackers but it&rsquo;s
 enough to sweeten some camcorder footage.
-
-   <p>Here is a brief description of the motion tracking parameters:
-
-     <ul>
-<li><b>Track translation:</b> Enables translation operations. 
-The motion tracker tracks X and Y motion in the master layer and
+</p>
+<p>Here is a brief description of the motion tracking parameters:
+</p>
+<ul>
+<li> <b>Track translation:</b> Enables translation operations.  
+The motion tracker tracks X and Y motion in the master layer and 
 adjusts X and Y motion in the target layer.
 
-     <li>
+</li><li> 
 <b>Translation block size:</b> For the translation operations, a block is
 compared to a number of neighboring blocks to find the one with the
 least difference.  The size of the block to search for is given by this
 parameter.
 
-     <li>
+</li><li> 
 <b>Translation search radius:</b> The size of the area to scan for the
 translation block.
 
-     <li>
+</li><li> 
 <b>Translation search steps:</b> Ideally the search operation would
 compare the  translation block with every other pixel in the
 translation search radius.  To  speed this operation up, a subset of
@@ -7711,23 +8512,23 @@ the total positions is searched.   Then the search area is narrowed and
 rescanned by the same number of search steps until the motion is known
 to 1/4 pixel accuracy.
 
-     <li>
+</li><li> 
 <b>Block X, Y:</b> These coordinates determine the center of the
 translation  block based on percentages of the width and height of the
 image.  The center of the block should be part of the image which is
 visible at all times.
 
-     <li>
+</li><li> 
 <b>Maximum absolute offset:</b> In <b>track previous frame</b> and <b>previous
 frame same block</b> modes, the motion detected between every frame is
 accumulated to form an absolute motion vector for the entire sequence. 
 The amount of motion detected by the motion tracker is unlimited if this
-is 100.  If it's under 100 the amount of motion is limited to that
+is 100.  If it&rsquo;s under 100 the amount of motion is limited to that
 percentage of the image size.  The value must be smaller for larger
 <b>translation block sizes</b> so there is enough area under the block to
 sense motion with.
 
-     <li>
+</li><li> 
 <b>Settling speed</b> In <b>track previous frame</b> and <b>previous frame
 same block</b> modes, the motion detected between every frame is
 accumulated to form an absolute motion vector for the entire sequence. 
@@ -7737,23 +8538,23 @@ speed is 100 the absolute vector resets to 0 after every frame.  If the
 settling speed is less than 100 the absolute vector is reduced slightly
 before the next frame is added.
 
-     <li>
+</li><li> 
 <b>Track rotation:</b> Enables rotation operations.  The motion tracker
 tracks rotation in the master layer and adjusts rotation in the target
 layer.
 
-     <li>
+</li><li> 
 <b>Rotation block size:</b> For rotation operations a single block is
 compared to equally sized blocks, each rotated by a different amount. 
 This is the size of the rotation block.
 
-     <li>
+</li><li> 
 <b>Rotation search radius:</b> This is the maximum angle of rotation from
 the starting frame the rotation scanner can detect.  The rotation scan
 is from this angle counterclockwise to this angle clockwise.  Thus the
 rotation search radius is half the total range scanned.
 
-     <li>
+</li><li> 
 <b>Rotation search steps:</b> Ideally every possible angle would be tested
 to get the rotation.  To speed up the rotation search, the rotation
 search radius is divided into a finite number of angles and only those
@@ -7761,33 +8562,33 @@ angles compared to the starting frame.  Then the search radius is
 narrowed and an equal number of angles is compared in the smaller
 radius until the highest possible accuracy is achieved.
 
-     <p>Normally you need one search step for every degree scanned.  Since the
+<p>Normally you need one search step for every degree scanned.  Since the
 rotation scanner scans the rotation search radius in two directions,
 you need two steps for every degree in the search radius to search the
 complete range.
-
-     <li>
+</p>
+</li><li> 
 <b>Draw vectors:</b> When translation is enabled, 2 boxes are drawn on the
 frame.  One box represents the translation block.  Another box outside
 the translation block represents the extent of the translation search
 radius.  In the center of these boxes is an arrow showing the
 translation between the 2 master frames.
 
-     <p>When rotation is enabled a single box the size of the rotation block is
+<p>When rotation is enabled a single box the size of the rotation block is
 drawn rotated by the amount of rotation detected.
-
-     <li>
+</p>
+</li><li> 
 <b>Track single frame:</b> When this option is used the motion between a
 single starting frame and the frame currently under the insertion point
 is calculated.  The starting frame is specified in the <b>Frame number</b>
 blank.  The motion calculated this way is taken as the absolute motion
 vector.  The absolute motion vector for each frame replaces the
 absolute motion vector for the previous frame.  Settling speed has no
-effect on it since it doesn't contain any previous motion vectors. 
+effect on it since it doesn&rsquo;t contain any previous motion vectors. 
 Playback can start anywhere on the timeline since there is no
 dependance on previous results.
 
-     <li>
+</li><li> 
 <b>Track previous frame:</b> Causes only the motion between the previous
 frame and the current frame to be calculated.  This is added to an
 absolute motion vector to get the new motion from the start of the
@@ -7796,7 +8597,7 @@ way, the block position is shifted to always cover the same region of
 the image.  Playback must be started from the start of the motion
 effect in order to accumulate all the necessary motion vectors.
 
-     <li>
+</li><li> 
 <b>Previous frame same block:</b> This is useful for stabilizing jerky
 camcorder footage.  In this mode the motion between the previous frame
 and the current frame is calculated.  Instead of adjusting the block
@@ -7804,52 +8605,64 @@ position to reflect the new location of the image, like Track Previous
 Frame does, the block position is unchanged between each frame.  Thus a
 new region is compared for each frame.
 
-     <li>
+</li><li> 
 <b>Master layer:</b> This determines the track which supplies the starting
-frame and ending frame for the motion calculation.  If it's <b>Bottom</b>
+frame and ending frame for the motion calculation.  If it&rsquo;s <b>Bottom</b>
 the bottom track of all the tracks sharing this effect is the master
 layer.  The top track of all the tracks is the target layer.
 
-     <li>
+</li><li> 
 <b>Calculation:</b> This determines whether to calculate the motion at all
-and whether to save it to disk.  If it's <b>Don't Calculate</b> the motion
-calculation is skipped.  If it's <b>Recalculate</b> the motion calculation
-is performed every time each frame is rendered.  If it's <b>Save</b> the
+and whether to save it to disk.  If it&rsquo;s <b>Don&rsquo;t Calculate</b> the motion
+calculation is skipped.  If it&rsquo;s <b>Recalculate</b> the motion calculation
+is performed every time each frame is rendered.  If it&rsquo;s <b>Save</b> the
 motion calculation is always performed but a copy is also saved.  If
-it's <b>Load</b>, the motion calculation is loaded from a previous save
+it&rsquo;s <b>Load</b>, the motion calculation is loaded from a previous save
 calculation.  If there is no previous save calculation on disk, a new
 motion calculation is performed.
 
-     <li>
+</li><li> 
 <b>Action:</b> Once the motion vector is known this determines whether to
 move the target layer opposing the motion vector or following the
-motion vector.  If it's <b>Do Nothing</b> the target layer is untouched. 
-If it's <b>Track...</b> the target layer is moved by the same amount as
+motion vector.  If it&rsquo;s <b>Do Nothing</b> the target layer is untouched. 
+If it&rsquo;s <b>Track...</b> the target layer is moved by the same amount as
 the master layer.  This is useful for matching titles to objects in the
-frame.  If it's <b>Stabilize...</b> the target layer is moved opposite to
+frame.  If it&rsquo;s <b>Stabilize...</b> the target layer is moved opposite to
 the motion vector.  This is useful for stabilizing an object in the
 frame.  The motion operations can be accurate to single pixels or
 subpixels by changing the action setting.
 
-   </ul>
 
-<ul class="menu">
-<li><a accesskey="1" href="#SECRETS-OF-MOTION-TRACKING">SECRETS OF MOTION TRACKING</a>
-<li><a accesskey="2" href="#g_t2-PASS-MOTION-TRACKING">2 PASS MOTION TRACKING</a>
-<li><a accesskey="3" href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING">USING BLUR TO IMPROVE MOTION TRACKING</a>
-<li><a accesskey="4" href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING">USING HISTOGRAM TO IMPROVE MOTION TRACKING</a>
-<li><a accesskey="5" href="#INTERPOLATING-MOTION-BETWEEN-FRAMES">INTERPOLATING MOTION BETWEEN FRAMES</a>
-<li><a accesskey="6" href="#FILLING-IN-THE-BLACK-AREAS">FILLING IN THE BLACK AREAS</a>
-</ul>
 
-<div class="node">
-<a name="SECRETS-OF-MOTION-TRACKING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#g_t2-PASS-MOTION-TRACKING">2 PASS MOTION TRACKING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#MOTION">MOTION</a>
 
-</div>
 
+</li></ul>
+
+
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#SECRETS-OF-MOTION-TRACKING" accesskey="1">SECRETS OF MOTION TRACKING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#g_t2-PASS-MOTION-TRACKING" accesskey="2">2 PASS MOTION TRACKING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING" accesskey="3">USING BLUR TO IMPROVE MOTION TRACKING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING" accesskey="4">USING HISTOGRAM TO IMPROVE MOTION TRACKING</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#INTERPOLATING-MOTION-BETWEEN-FRAMES" accesskey="5">INTERPOLATING MOTION BETWEEN FRAMES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#FILLING-IN-THE-BLACK-AREAS" accesskey="6">FILLING IN THE BLACK AREAS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+
+<hr>
+<a name="SECRETS-OF-MOTION-TRACKING"></a>
+<div class="header">
+<p>
+Next: <a href="#g_t2-PASS-MOTION-TRACKING" accesskey="n" rel="next">2 PASS MOTION TRACKING</a>, Up: <a href="#MOTION" accesskey="u" rel="up">MOTION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SECRETS-OF-MOTION-TRACKING-1"></a>
 <h4 class="subsection">18.17.1 SECRETS OF MOTION TRACKING</h4>
 
 <p>Since it is a very slow effect, there is a method to applying the
@@ -7857,47 +8670,45 @@ motion tracker to get the most out of it.  First disable playback for
 the track to do motion tracking on.  Then drop the effect on a region
 of video with some motion to track.  Then rewind the insertion point to
 the start of the region.  Set <b>Action</b> -&gt; <b>Do Nothing</b>.  Set
-<b>Calculation</b> -&gt; <b>Don't calculate</b>.  Enable <b>Draw vectors</b>. Then
+<b>Calculation</b> -&gt; <b>Don&rsquo;t calculate</b>.  Enable <b>Draw vectors</b>. Then
 enable playback of the track to see the motion tracking areas.
-
-   <p>Enable which of <b>translation motion</b> or <b>rotation motion</b> vectors
+</p>
+<p>Enable which of <b>translation motion</b> or <b>rotation motion</b> vectors
 you want to track.  By watching the compositor window and adjusting the
 <b>Block x,y</b> settings, center the block on the part of the image you
 want to track.  Then set search radius, block size, and block
 coordinates for translation and rotation.
-
-   <p>Once this is configured, set the calculation to <b>Save coords</b> and do
+</p>
+<p>Once this is configured, set the calculation to <b>Save coords</b> and do
 test runs through the sequence to see if the motion tracker works and
 to save the motion vectors.  Once this is done, disable playback for
 the track, disable <b>Draw vectors</b>, set the motion action to perform
 on the target layer and change the calculation to <b>Load coords</b>. 
 Finally enable playback for the track.
-
-   <p>When using a single starting frame to calculate the motion of a
+</p>
+<p>When using a single starting frame to calculate the motion of a
 sequence, the starting frame should be a single frame with the least
 motion to any of the other frames.  This is rarely frame 0.  Usually
-it's a frame near the middle of the sequence.  This way the search
+it&rsquo;s a frame near the middle of the sequence.  This way the search
 radius need only reach halfway to the full extent of the motion in the
 sequence.
-
-   <p>If the motion tracker is used on a render farm, <b>Save coords</b> and
-<b>previous frame</b> mode won't work.  The results of the save coords
+</p>
+<p>If the motion tracker is used on a render farm, <b>Save coords</b> and
+<b>previous frame</b> mode won&rsquo;t work.  The results of the save coords
 operation are saved to the hard drives on the render nodes, not the
 master node.  Future rendering operations on these nodes will process
 different frames and read the wrong coordinates from the node
 filesystems.  The fact that render nodes only visualize a portion of
 the timeline also prevents <b>previous frame</b> from working since it
 depends on calculating an absolute motion vector starting on frame 0.
-
-<div class="node">
+</p>
+<hr>
 <a name="g_t2-PASS-MOTION-TRACKING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING">USING BLUR TO IMPROVE MOTION TRACKING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SECRETS-OF-MOTION-TRACKING">SECRETS OF MOTION TRACKING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#MOTION">MOTION</a>
-
+<div class="header">
+<p>
+Next: <a href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING" accesskey="n" rel="next">USING BLUR TO IMPROVE MOTION TRACKING</a>, Previous: <a href="#SECRETS-OF-MOTION-TRACKING" accesskey="p" rel="prev">SECRETS OF MOTION TRACKING</a>, Up: <a href="#MOTION" accesskey="u" rel="up">MOTION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="g_t2-PASS-MOTION-TRACKING-1"></a>
 <h4 class="subsection">18.17.2 2 PASS MOTION TRACKING</h4>
 
 <p>The method described above is 2 pass motion tracking.  One pass is used
@@ -7905,295 +8716,327 @@ just to calculate the motion vectors.  A second pass is used to apply
 the motion vectors to the footage.  This is faster than a single pass
 because errors in the motion vector calculation can be discovered
 quickly.
-
-   <p>This also allows the motion tracking to use a less demanding colormodel
+</p>
+<p>This also allows the motion tracking to use a less demanding colormodel
 like RGB888 in the scanning step and a more demanding colormodel like
 RGB Float in the action step.  The scanning step takes much longer than
 action.
-
-   <p>This suffers the disadvantage of not being practical for extremely long
+</p>
+<p>This suffers the disadvantage of not being practical for extremely long
 sequences where some error is acceptable and the picture quality is
 lousy to begin with, like stabilizing camcorder footage.
-
-   <p>The slower method is to calculate the motion vectors and apply them
+</p>
+<p>The slower method is to calculate the motion vectors and apply them
 simultaneously.  This method can use one track as the motion vector
 calculation track and another track as the target track for motion
 vector actions.  This is useful for long sequences where some error is
 acceptable.
+</p>
 
-<div class="node">
+<hr>
 <a name="USING-BLUR-TO-IMPROVE-MOTION-TRACKING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING">USING HISTOGRAM TO IMPROVE MOTION TRACKING</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#g_t2-PASS-MOTION-TRACKING">2 PASS MOTION TRACKING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#MOTION">MOTION</a>
-
+<div class="header">
+<p>
+Next: <a href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING" accesskey="n" rel="next">USING HISTOGRAM TO IMPROVE MOTION TRACKING</a>, Previous: <a href="#g_t2-PASS-MOTION-TRACKING" accesskey="p" rel="prev">2 PASS MOTION TRACKING</a>, Up: <a href="#MOTION" accesskey="u" rel="up">MOTION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="USING-BLUR-TO-IMPROVE-MOTION-TRACKING-1"></a>
 <h4 class="subsection">18.17.3 USING BLUR TO IMPROVE MOTION TRACKING</h4>
 
 <p>With extremely noisy or interlaced footage, applying a blur effect
 before the motion tracking can improve accuracy.  Either save the
 motion vectors in a <b>tracking pass</b> and disable the blur for the
 <b>action pass</b> or apply the blur just to the <b>master layer</b>.
+</p>
 
-<div class="node">
+<hr>
 <a name="USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#INTERPOLATING-MOTION-BETWEEN-FRAMES">INTERPOLATING MOTION BETWEEN FRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING">USING BLUR TO IMPROVE MOTION TRACKING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#MOTION">MOTION</a>
-
+<div class="header">
+<p>
+Next: <a href="#INTERPOLATING-MOTION-BETWEEN-FRAMES" accesskey="n" rel="next">INTERPOLATING MOTION BETWEEN FRAMES</a>, Previous: <a href="#USING-BLUR-TO-IMPROVE-MOTION-TRACKING" accesskey="p" rel="prev">USING BLUR TO IMPROVE MOTION TRACKING</a>, Up: <a href="#MOTION" accesskey="u" rel="up">MOTION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING-1"></a>
 <h4 class="subsection">18.17.4 USING HISTOGRAM TO IMPROVE MOTION TRACKING</h4>
 
 <p>A histogram is almost always applied before motion tracking to clamp
 out noise in the darker pixels.  Either save the motion vectors in a
 <b>tracking pass</b> and disable the histogram for the <b>action pass</b> or
 apply the histogram just to the <b>master layer</b>.
+</p>
 
-<div class="node">
-<a name="INTERPOLATING-MOTION-BETWEEN-FRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#FILLING-IN-THE-BLACK-AREAS">FILLING IN THE BLACK AREAS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING">USING HISTOGRAM TO IMPROVE MOTION TRACKING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#MOTION">MOTION</a>
 
-</div>
 
+<hr>
+<a name="INTERPOLATING-MOTION-BETWEEN-FRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#FILLING-IN-THE-BLACK-AREAS" accesskey="n" rel="next">FILLING IN THE BLACK AREAS</a>, Previous: <a href="#USING-HISTOGRAM-TO-IMPROVE-MOTION-TRACKING" accesskey="p" rel="prev">USING HISTOGRAM TO IMPROVE MOTION TRACKING</a>, Up: <a href="#MOTION" accesskey="u" rel="up">MOTION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="INTERPOLATING-MOTION-BETWEEN-FRAMES-1"></a>
 <h4 class="subsection">18.17.5 INTERPOLATING MOTION BETWEEN FRAMES</h4>
 
 <p>The motion tracker can simulate higher frame rates than the media frame
 rate by interpolating the motion.  Interpolation is enabled with the
 <b>maximum absolute offset</b> and <b>settling speed</b> options.
-
-   <p>First, go to <b>Settings-&gt;Format</b> in the main window and set the
+</p>
+<p>First, go to <b>Settings-&gt;Format</b> in the main window and set the
 <b>video frame rate</b> to a number higher than the media frame rate.
-
-   <p>In the <b>Motion</b> window, select a tracking option which accumulates
+</p>
+<p>In the <b>Motion</b> window, select a tracking option which accumulates
 motion.  This is either <b>Track previous frame</b> or <b>Previous frame
 same block</b>.  These cause the <b>maximum absolute offset</b> and
 <b>settling speed</b> options to take effect.
-
-   <p><b>maximum absolute offset</b> must be set to the maximum motion to be
+</p>
+<p><b>maximum absolute offset</b> must be set to the maximum motion to be
 accumulated as a percentage of the video size.  A value of 50 limits the
 motion to 50% of the video size.  50 works well.  The value must be
 smaller for larger <b>translation block sizes</b> so there is enough area
 under the block to sense motion with.
-
-   <p><b>settling speed</b> must be set to the rate at which the accumulated
+</p>
+<p><b>settling speed</b> must be set to the rate at which the accumulated
 motion resets to 0 over time.  The reset happens whether or not any
 motion was detected, so when the project frame rate is higher than the
 media frame rate, the frames between media frames regress towards the
 center.  For interpolated motion, the <b>settling speed</b> value should be
 small, so the movement is smooth.  3 works well.
+</p>
+
+
+
 
-<div class="node">
-<a name="FILLING-IN-THE-BLACK-AREAS"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INTERPOLATING-MOTION-BETWEEN-FRAMES">INTERPOLATING MOTION BETWEEN FRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#MOTION">MOTION</a>
 
-</div>
 
+
+
+<hr>
+<a name="FILLING-IN-THE-BLACK-AREAS"></a>
+<div class="header">
+<p>
+Previous: <a href="#INTERPOLATING-MOTION-BETWEEN-FRAMES" accesskey="p" rel="prev">INTERPOLATING MOTION BETWEEN FRAMES</a>, Up: <a href="#MOTION" accesskey="u" rel="up">MOTION</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="FILLING-IN-THE-BLACK-AREAS-1"></a>
 <h4 class="subsection">18.17.6 FILLING IN THE BLACK AREAS</h4>
 
 <p>Stabilization always creates black borders in the track resolution.  One
 solution is to shrink the project resolution so the borders are always
 cropped off the output.  Another solution is to apply a <b>Time Average</b>
 effect after stabilization.
+</p>
+<p>Configure <b>Time Average</b> the following way:
+</p>
+<ul>
+<li> <b>Frame count:</b> 1
+</li><li> <b>Accumulate sequence again:</b> No
+</li><li> <b>Replace:</b> Yes
+</li><li> <b>Threshold:</b> 1
+</li><li> <b>Border:</b> 4
+</li></ul>
+
+<p>This makes new frames replace only the pixels in the previous frames
+where there is new data.  The black areas in new frames don&rsquo;t replace
+previous data so the previous data shows through and fills them in.
+</p>
+
+
+
+
 
-   <p>Configure <b>Time Average</b> the following way:
 
-     <ul>
-<li><b>Frame count:</b> 1
-<li><b>Accumulate sequence again:</b> No
-<li><b>Replace:</b> Yes
-<li><b>Threshold:</b> 1
-<li><b>Border:</b> 4
-</ul>
 
-   <p>This makes new frames replace only the pixels in the previous frames
-where there is new data.  The black areas in new frames don't replace
-previous data so the previous data shows through and fills them in.
 
-<div class="node">
-<a name="MOTION-2-POINT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#REFRAMERT">REFRAMERT</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MOTION">MOTION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="MOTION-2-POINT"></a>
+<div class="header">
+<p>
+Next: <a href="#REFRAMERT" accesskey="n" rel="next">REFRAMERT</a>, Previous: <a href="#MOTION" accesskey="p" rel="prev">MOTION</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="MOTION-2-POINT-1"></a>
 <h3 class="section">18.18 MOTION 2 POINT</h3>
 
+
 <p>The 2 point motion tracker is the same as using 2 of the translation
-motion trackers to track 2 points.  It doesn't have a rotation tracker. 
+motion trackers to track 2 points.  It doesn&rsquo;t have a rotation tracker. 
 Instead, it uses the angle between the 2 translation points to
 determine  rotation.  The 2 points can be enabled separately.
-
-   <p>If 1 point is enabled, only translation is tracked.
-
-   <p>If 2 points are enabled, translation is tracked by point 1 and rotation
+</p>
+<p>If 1 point is enabled, only translation is tracked.  
+</p>
+<p>If 2 points are enabled, translation is tracked by point 1 and rotation
 is tracked by point 2.  Stabilization is performed with point 1 as the center.
-
-   <p>The other parameters for the 2 point tracker are the same as the single
+</p>
+<p>The other parameters for the 2 point tracker are the same as the single
 point tracker.  In addition, the 2 point tracker supports <b>TRANSLATION
 SEARCH OFFSET</b>.
-
-   <p><b>TRANSLATION SEARCH OFFSET</b> forces the motion search to look in a
+</p>
+<p><b>TRANSLATION SEARCH OFFSET</b> forces the motion search to look in a
 region other than directly next to the translation block position.  The
 <b>translation search offset</b> is added to the new search result, giving
 contiguous motion results throughout any changes in translation search area.
-
-   <p>This is useful if the camera position changed in the middle of a
+</p>
+<p>This is useful if the camera position changed in the middle of a
 sequence of images but the subject stayed the same.  Offset the
 translation search area when the camera position changes and the
 detected motion stays contiguous through the entire sequence.
-
-   <p>2 point tracking works best if the points don't change shape between
+</p>
+<p>2 point tracking works best if the points don&rsquo;t change shape between
 frames.  It is more prone to rotation errors than single point motion
 tracking if the points change shape.  2 point tracking is mainly used
 for tracking stars.
+</p>
+<p>Use the smallest search blocks possible since larger blocks are harder
+to compare when they&rsquo;re rotated.
+</p>
 
-   <p>Use the smallest search blocks possible since larger blocks are harder
-to compare when they're rotated.
 
-<div class="node">
-<a name="REFRAMERT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#REFRAME">REFRAME</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#MOTION-2-POINT">MOTION 2 POINT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="REFRAMERT"></a>
+<div class="header">
+<p>
+Next: <a href="#REFRAME" accesskey="n" rel="next">REFRAME</a>, Previous: <a href="#MOTION-2-POINT" accesskey="p" rel="prev">MOTION 2 POINT</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="REFRAMERT-1"></a>
 <h3 class="section">18.19 REFRAMERT</h3>
 
+
 <p>ReframeRT changes number of frames in a sequence of video directly from
 the timeline.  It has 2 modes, selected by the 2 toggles in the GUI.
-
-   <p><b>Stretch</b> mode multiplies the current frame number of its output by
+</p>
+<p><b>Stretch</b> mode multiplies the current frame number of its output by
 the scale factor to arrive at the frame to read from its input.  If its
 current output frame is #55 and the scale factor is 2, frame #110 is
 read from its input.  The stretch mode has the effect of changing the
 length of output video by the inverse of the scale factor.  If the
 scale factor is greater than 1, the output will end before the end of
-the sequence on the timeline.  If it's less than 1, the output will end
+the sequence on the timeline.  If it&rsquo;s less than 1, the output will end
 after the end of the sequence on the timeline.  The ReframeRT effect
 must be lengthened to the necessary length to accomodate the scale
 factor.  Change the length of the effect by clicking on the endpoint of
 the effect and dragging.
-
-   <p>Although stretch mode changes the number of the frame read from its
-input, it doesn't change the frame rate of the input.  Effects before
+</p>
+<p>Although stretch mode changes the number of the frame read from its
+input, it doesn&rsquo;t change the frame rate of the input.  Effects before
 ReframeRT assume the same frame rate as ReframeRT.
-
-   <p><b>Downsample</b> mode doesn't change the length of the output sequence. 
+</p>
+<p><b>Downsample</b> mode doesn&rsquo;t change the length of the output sequence. 
 It multiplies the frame rate of the output by the scale factor to
 arrive at a frame rate rate to read the input.  This has the effect of
 replicating the input frames so that they only change at the scaled
-frame rate when sent to the output.  It doesn't change the length of
+frame rate when sent to the output.  It doesn&rsquo;t change the length of
 the sequence.  If the scale factor is 0.5 and the output frame rate is
 30 fps, only 15 frames will be shown per second and the input will be
 read at 15 fps.  Downsample is only useful for scalefactors below 1,
 hence the name downsample.
-
-   <p>Downsample mode changes the frame rate of the input as well as the
+</p>
+<p>Downsample mode changes the frame rate of the input as well as the
 number of the frame to read, so effects before ReframeRT see the frame
 rate * the scale factor as their frame rate.  If the scale factor is 2
 and the output frame rate is 30, the input frame rate will be 60 and
-the input frame number will by doubled.  This won't normally do
+the input frame number will by doubled.  This won&rsquo;t normally do
 anything but some input effects may behave differently at the higher
 frame rate.
+</p>
 
-<div class="node">
-<a name="REFRAME"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RESAMPLE">RESAMPLE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#REFRAMERT">REFRAMERT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+<hr>
+<a name="REFRAME"></a>
+<div class="header">
+<p>
+Next: <a href="#RESAMPLE" accesskey="n" rel="next">RESAMPLE</a>, Previous: <a href="#REFRAMERT" accesskey="p" rel="prev">REFRAMERT</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="REFRAME-1"></a>
 <h3 class="section">18.20 REFRAME</h3>
 
 <p>This does exactly the same thing as <b>ReframeRT</b> in <b>Stretch</b> mode. 
 It multiplies the output frame number by the scale factor to arrive at
 the input frame number and changes the length of the sequence.  Unlike
 ReframeRT, this must run from the <b>Video</b> menu and render its output.
-
-   <p>Be aware <b>Reframe</b> doesn't write the scaled frame rate as the frame
+</p>
+<p>Be aware <b>Reframe</b> doesn&rsquo;t write the scaled frame rate as the frame
 rate of the rendered file.  It produces a file of scaled length and
 equal frame rate as the project.  The new length is 1/scale factor as
 big as the original sequence.
+</p>
+
+
 
-<div class="node">
-<a name="RESAMPLE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#REVERSE-VIDEO_002fAUDIO">REVERSE VIDEO/AUDIO</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#REFRAME">REFRAME</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+<hr>
+<a name="RESAMPLE"></a>
+<div class="header">
+<p>
+Next: <a href="#REVERSE-VIDEO_002fAUDIO" accesskey="n" rel="next">REVERSE VIDEO/AUDIO</a>, Previous: <a href="#REFRAME" accesskey="p" rel="prev">REFRAME</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="RESAMPLE-1"></a>
 <h3 class="section">18.21 RESAMPLE</h3>
 
 <p>This multiplies the number of each output sample by a scale factor to
-arrive at the number of the input sample.  The output file's sample
+arrive at the number of the input sample.  The output file&rsquo;s sample
 rate is set to the project sample rate but its length is changed to
 reflect the scaled number of samples.  It also filters the resampled
 audio to remove aliasing.
-
-   <p>If the scale factor is 2, every 2 input samples will be reduced to 1
+</p>
+<p>If the scale factor is 2, every 2 input samples will be reduced to 1
 output sample and the output file will have half as many samples as the
-input sequence.  If it's 0.5, every 0.5 input samples will be stretched
+input sequence.  If it&rsquo;s 0.5, every 0.5 input samples will be stretched
 to 1 output sample and the output file will have twice as many samples
 as the input sequence.
+</p>
+
+
+
+
+
 
-<div class="node">
-<a name="REVERSE-VIDEO%2fAUDIO"></a>
-<a name="REVERSE-VIDEO_002fAUDIO"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#SWAP-FRAMES">SWAP FRAMES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#RESAMPLE">RESAMPLE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="REVERSE-VIDEO_002fAUDIO"></a>
+<div class="header">
+<p>
+Next: <a href="#SWAP-FRAMES" accesskey="n" rel="next">SWAP FRAMES</a>, Previous: <a href="#RESAMPLE" accesskey="p" rel="prev">RESAMPLE</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="REVERSE-VIDEO_002fAUDIO-1"></a>
 <h3 class="section">18.22 REVERSE VIDEO/AUDIO</h3>
 
-<p>Media can be reversed on the timeline in realtime.  This isn't to be
+<p>Media can be reversed on the timeline in realtime.  This isn&rsquo;t to be
 confused with using the reverse playback on the transport.  The reverse
 effects reverse the region covered by the effect regardless of the
 transport direction.  Apply <b>reverse audio</b> to an audio track and
 play it backwards.  The sound plays forward.
-
-   <p>The region to be reversed is first determined by what part of the track
+</p>
+<p>The region to be reversed is first determined by what part of the track
 the effect is under and second by the locations of keyframes in the
 effect.  The reverse effects have an <b>enabled</b> option which allows
 you to set keyframes.  This allows may possibilities.
-
-   <p>Every <b>enabled</b> keyframe is treated as the start of a new reversed
+</p>
+<p>Every <b>enabled</b> keyframe is treated as the start of a new reversed
 region and the end of a previous reversed region.  Several <b>enabled</b>
 keyframes in succession yield several regions reversed independant of
 each other.  An <b>enabled</b> keyframe followed by a <b>disabled</b>
 keyframe yields one reversed region followed by a forward region.
+</p>
+<p>Finally, be aware when reversing audio that the waveform on the
+timeline doesn&rsquo;t reflect the actual reversed output.
+</p>
 
-   <p>Finally, be aware when reversing audio that the waveform on the
-timeline doesn't reflect the actual reversed output.
 
-<div class="node">
-<a name="SWAP-FRAMES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#THRESHOLD">THRESHOLD</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#REVERSE-VIDEO_002fAUDIO">REVERSE VIDEO/AUDIO</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
+<hr>
+<a name="SWAP-FRAMES"></a>
+<div class="header">
+<p>
+Next: <a href="#THRESHOLD" accesskey="n" rel="next">THRESHOLD</a>, Previous: <a href="#REVERSE-VIDEO_002fAUDIO" accesskey="p" rel="prev">REVERSE VIDEO/AUDIO</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="SWAP-FRAMES-1"></a>
 <h3 class="section">18.23 SWAP FRAMES</h3>
 
 <p>This is normally used on interlaced video which has been converted to
@@ -8201,16 +9044,25 @@ fields.  One set of lines becomes one frame and the other set of lines
 becomes the next frame.  Now the frame rate is double and is showing
 fields of the original video sequentially.  The fields may be out of
 order, which is what <b>SWAP FRAMES</b> can correct.
+</p>
+
+
+
+
+
+
 
-<div class="node">
-<a name="THRESHOLD"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TIME-AVERAGE">TIME AVERAGE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SWAP-FRAMES">SWAP FRAMES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+<hr>
+<a name="THRESHOLD"></a>
+<div class="header">
+<p>
+Next: <a href="#TIME-AVERAGE" accesskey="n" rel="next">TIME AVERAGE</a>, Previous: <a href="#SWAP-FRAMES" accesskey="p" rel="prev">SWAP FRAMES</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THRESHOLD-1"></a>
 <h3 class="section">18.24 THRESHOLD</h3>
 
 <p>Threshold converts the image to pure luminance.  Then luminance values
@@ -8220,348 +9072,385 @@ The threshold window shows a histogram of luminance values for the
 current frame.  Click dragging inside the histogram creates a range to
 convert to white.  Shift-clicking extends one border of this range. 
 Values for the threshold range can also be specified in the text boxes.
-
-   <p>This effect is basically a primitive luminance key.  A second track
+</p>
+<p>This effect is basically a primitive luminance key.  A second track
 above the track with the threshold effect can be multiplied, resulting
 in only the parts of the second track within the threshold being
 displayed.
+</p>
+
 
-<div class="node">
-<a name="TIME-AVERAGE"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TITLER">TITLER</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THRESHOLD">THRESHOLD</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+<hr>
+<a name="TIME-AVERAGE"></a>
+<div class="header">
+<p>
+Next: <a href="#TITLER" accesskey="n" rel="next">TITLER</a>, Previous: <a href="#THRESHOLD" accesskey="p" rel="prev">THRESHOLD</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TIME-AVERAGE-1"></a>
 <h3 class="section">18.25 TIME AVERAGE</h3>
 
 <p>Time average is one effect which has many uses besides creating nifty
-trail patterns of moving objects.  It's main use is reducing noise in
+trail patterns of moving objects.  It&rsquo;s main use is reducing noise in
 still images.  Merely point a video camera at a stationary subject for
 30 frames, capture the frames, and average them using TIME AVERAGE and
-you'll have a super high quality print.  In floating point colormodels, time
+you&rsquo;ll have a super high quality print.  In floating point colormodels, time
 average can increase the dynamic range of lousy cameras.
-
-   <p>Inside the time average effect is an accumulation buffer and a
+</p>
+<p>Inside the time average effect is an accumulation buffer and a
 divisor.  A number of frames are accumulated in the accumulation buffer
 and divided by the divisor to get the average.
-
-   <p>Because the time average can consume enourmous amounts of memory, it is
+</p>
+<p>Because the time average can consume enourmous amounts of memory, it is
 best applied by first disabling playback for the track, dropping the
 time average in it, configuring time average for the desired number of
 frames, and re-enabling playback for the track.
-
-   <p><b>Frames count:</b> This determines the number of frames to be accumulated
-in the accumulation buffer.  For extremely large integrations it's
+</p>
+<p><b>Frames count:</b> This determines the number of frames to be accumulated
+in the accumulation buffer.  For extremely large integrations it&rsquo;s
 easier to edit the EDL in a text editor and put in the number of frames.
-
-   <p><b>Accumulate sequence again:</b> If an effect before the time average is
-adjusted the time average normally doesn't reread the accumulation
+</p>
+<p><b>Accumulate sequence again:</b> If an effect before the time average is
+adjusted the time average normally doesn&rsquo;t reread the accumulation
 buffer to get the change.  This forces it to reread the accumulation
 buffer when any other effects change.
+</p>
 
-   <p><b>Average:</b> This causes the accumulation buffer to be divided before
+<p><b>Average:</b> This causes the accumulation buffer to be divided before
 being output.  The result is the average of all the frames.
-
-   <p><b>Accumulate:</b> This outputs the accumulation buffer without dividing
+</p>
+<p><b>Accumulate:</b> This outputs the accumulation buffer without dividing
 it.  The result is the sum of all the frames.
-
-   <p><b>Accumulate only:</b>
-
-   <p>In order to accumulate only the specified number of frames, the time
+</p>
+<p><b>Accumulate only:</b>
+</p>
+<p>In order to accumulate only the specified number of frames, the time
 average retains all the previous frames in memory and subtracts them out
 as it plays forward.  <b>Accumulate only:</b> causes the history buffer to
 not be used in <b>averaging</b> and <b>accumulating</b>.  Without the history
-buffer, frames are added endlessly without ever being subtracted.  It's
+buffer, frames are added endlessly without ever being subtracted.  It&rsquo;s
 the same as an infinitely long accumulation buffer.  The only difference
 is for <b>Average</b> mode, the output is still divided by the <b>Frame
 count</b>.  <b>Accumulate only</b> is used where the number of frames in the
 accumulation would be too big to fit in memory.
-
-   <p><b>Replace:</b> This causes the accumulation buffer to be replaced by only
-pixels which aren't transparent.  This allows black borders from motion
+</p>
+<p><b>Replace:</b> This causes the accumulation buffer to be replaced by only
+pixels which aren&rsquo;t transparent.  This allows black borders from motion
 tracking to be filled in.
-
-   <p><b>Threshold:</b> The value a pixel must be before it replaces the previous
+</p>
+<p><b>Threshold:</b> The value a pixel must be before it replaces the previous
 pixel.  If alpha channels are enabled, the alpha is the value compared. 
 If there is no alpha channel, the brightness is the value compared.
-
-   <p><b>Border:</b> The number of pixels on the border of the image to never
+</p>
+<p><b>Border:</b> The number of pixels on the border of the image to never
 replace.  This hides errors in the replacement operation from the
 output, since errors occur at the transition between the replaced area
 and the ignored area.
-
-   <p><b>Greater:</b> Pixels are replaced if their value is greater than the
+</p>
+<p><b>Greater:</b> Pixels are replaced if their value is greater than the
 previous pixel.  Use this to create star trails in stacks of many night
 sky photos or paint many copies of an object from its motion if it is
 lighter than the background.
-
-   <p><b>Less:</b> Pixels are replaced if their value is less than the previous
+</p>
+<p><b>Less:</b> Pixels are replaced if their value is less than the previous
 pixel.  Use this to paint copies of an object from its motion if it is
 darker than the background.
+</p>
+
+
 
-<div class="node">
-<a name="TITLER"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#VIDEO-SCOPE">VIDEO SCOPE</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TIME-AVERAGE">TIME AVERAGE</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+<hr>
+<a name="TITLER"></a>
+<div class="header">
+<p>
+Next: <a href="#VIDEO-SCOPE" accesskey="n" rel="next">VIDEO SCOPE</a>, Previous: <a href="#TIME-AVERAGE" accesskey="p" rel="prev">TIME AVERAGE</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TITLER-1"></a>
 <h3 class="section">18.26 TITLER</h3>
 
 <p>While it is possible to add text to movies by importing still images
 from The Gimp and compositing them, the Titler allows you to add text
-from within Cinelerra.
-
-   <p>The titler has standard options for <b>font, size, and style</b>.  The
+from within Cinelerra.  
+</p>
+<p>The titler has standard options for <b>font, size, and style</b>.  The
 best font is a generic, normal font like Arial in a large size.
-
-   <p>The titler also has options you'll only find in moving pictures.  The
+</p>
+<p>The titler also has options you&rsquo;ll only find in moving pictures.  The
 <b>Justify</b> operation justifies the text relative to the entire frame. 
 Once justified, the <b>X and Y</b> offset is applied.  This allows text to
 be justified while at the same time letting you push it within the
 title safe region.
-
-   <p>The <b>motion type</b> scrolls the text in any of the four directions. 
+</p>
+<p>The <b>motion type</b> scrolls the text in any of the four directions. 
 When using this, the text may dissappear.  Move the insertion point
 along the timeline until the text is far enough along the animation to
 reappear.  The text scrolls on and scrolls off.
-
-   <p>Setting <b>loop</b> causes the text to scroll completely off and repeat. 
+</p>
+<p>Setting <b>loop</b> causes the text to scroll completely off and repeat. 
 Without <b>loop</b> the text scrolls off and never reappears.
-
-   <p>The speed of the animation is determined by <b>speed</b>  Set it higher to
+</p>
+<p>The speed of the animation is determined by <b>speed</b>  Set it higher to
 speed up the animation.
-
-   <p><b>Drop shadow</b> draws a black copy of the text to the bottom right of
+</p>
+<p><b>Drop shadow</b> draws a black copy of the text to the bottom right of
 the original text.  Useful when drawing text over changing video to
 keep the border always visible.
-
-   <p>In addition to the scrolling, <b>Fade in/Fade out</b> are a second type of
+</p>
+<p>In addition to the scrolling, <b>Fade in/Fade out</b> are a second type of
 animation.  If the fade seconds are 0, no fading is done.
-
-   <p><b>Outline</b> draws an outline on the characters if it's greater than 0. 
+</p>
+<p><b>Outline</b> draws an outline on the characters if it&rsquo;s greater than 0. 
 Set the outline size by changing the number.  Set the outline color with
 the <b>OUTLINE COLOR</b> button.  If no outline is visible, make sure the
 alpha in <b>OUTLINE COLOR</b> is nonzero.  To get pure outline characters,
 set <b>COLOR</b> alpha to 0.
-
-   <p><b>COLOR</b> picks the color to draw the text in.  Usually white is the
+</p>
+<p><b>COLOR</b> picks the color to draw the text in.  Usually white is the
 only practical color.
-
-   <p><b>OUTLINE COLOR</b> picks the color to draw the text outline in.
-
-   <p><b>Stamp timecode</b> replaces the text with the current position on the
+</p>
+<p><b>OUTLINE COLOR</b> picks the color to draw the text outline in.
+</p>
+<p><b>Stamp timecode</b> replaces the text with the current position on the
 timeline in seconds and frames.
-
-   <p><b>SECRETS OF THE TITLER</b>
-
-<ul class="menu">
-<li><a accesskey="1" href="#ADDING-FONTS-TO-THE-TITLER">ADDING FONTS TO THE TITLER</a>:  How to add fonts to the titler
-<li><a accesskey="2" href="#THE-TITLE_002dSAFE-REGION">THE TITLE-SAFE REGION</a>:       How to keep text visible on output
-<li><a accesskey="3" href="#MAKING-TITLES-LOOK-GOOD">MAKING TITLES LOOK GOOD</a>:     How to make your titles look good. 
-</ul>
-
-<div class="node">
+</p>
+<p><b>SECRETS OF THE TITLER</b>
+</p><table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#ADDING-FONTS-TO-THE-TITLER" accesskey="1">ADDING FONTS TO THE TITLER</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to add fonts to the titler
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#THE-TITLE_002dSAFE-REGION" accesskey="2">THE TITLE-SAFE REGION</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to keep text visible on output
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#MAKING-TITLES-LOOK-GOOD" accesskey="3">MAKING TITLES LOOK GOOD</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to make your titles look good.
+</td></tr>
+</table>
+
+<hr>
 <a name="ADDING-FONTS-TO-THE-TITLER"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#THE-TITLE_002dSAFE-REGION">THE TITLE-SAFE REGION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TITLER">TITLER</a>
-
+<div class="header">
+<p>
+Next: <a href="#THE-TITLE_002dSAFE-REGION" accesskey="n" rel="next">THE TITLE-SAFE REGION</a>, Up: <a href="#TITLER" accesskey="u" rel="up">TITLER</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="ADDING-FONTS-TO-THE-TITLER-1"></a>
 <h4 class="subsection">18.26.1 ADDING FONTS TO THE TITLER</h4>
 
-<p>The X Window system originally didn't have a suitable font renderer for
-video.  It also is restricted to the current bit depth.  It doesn't
+<p>The X Window system originally didn&rsquo;t have a suitable font renderer for
+video.  It also is restricted to the current bit depth.  It doesn&rsquo;t
 have a convenient way to know which fonts work with the suitable font
-renderer in the desired bit depth.  The easiest way we've found to
+renderer in the desired bit depth.  The easiest way we&rsquo;ve found to
 support fonts in the titler is to have a directory for them at
 <b>/usr/lib/cinelerra/fonts</b>.
-
-   <p>The titler supports mainly <b>TTF</b>, true type fonts.  It supports
+</p>
+<p>The titler supports mainly <b>TTF</b>, true type fonts.  It supports
 others but TTF are the most reliable.  To add true type fonts, copy the
 <b>.TTF</b> files to the <b>/usr/lib/cinelerra/fonts</b> directory.  In that
 directory run <b>ttmkfdir &amp;&amp; mv fonts.scale fonts.dir</b> and restart
 Cinelerra.  The new fonts should appear.  The usage of ttmkfdir changes
 frequently so this technique might not work.
+</p>
 
-<div class="node">
-<a name="THE-TITLE-SAFE-REGION"></a>
+<hr>
 <a name="THE-TITLE_002dSAFE-REGION"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MAKING-TITLES-LOOK-GOOD">MAKING TITLES LOOK GOOD</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ADDING-FONTS-TO-THE-TITLER">ADDING FONTS TO THE TITLER</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TITLER">TITLER</a>
-
+<div class="header">
+<p>
+Next: <a href="#MAKING-TITLES-LOOK-GOOD" accesskey="n" rel="next">MAKING TITLES LOOK GOOD</a>, Previous: <a href="#ADDING-FONTS-TO-THE-TITLER" accesskey="p" rel="prev">ADDING FONTS TO THE TITLER</a>, Up: <a href="#TITLER" accesskey="u" rel="up">TITLER</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="THE-TITLE_002dSAFE-REGION-1"></a>
 <h4 class="subsection">18.26.2 THE TITLE-SAFE REGION</h4>
 
 <p>If the video is displayed on a consumer TV, the outer border is going
 to be cropped by 5% on each side.  Moreover, text which is too close to
 the edge looks sloppy.  Make sure when adding titles to have the
-<b>title-safe</b> <img src="titlesafe.png" alt="titlesafe.png"> tool active in the <b>compositor</b> window. 
-The text shouldn't cross the inner rectangle.
+<b>title-safe</b> <img src="titlesafe.png" alt="titlesafe"> tool active in the <b>compositor</b> window.
+The text shouldn&rsquo;t cross the inner rectangle.
+</p>
 
-<div class="node">
+<hr>
 <a name="MAKING-TITLES-LOOK-GOOD"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-TITLE_002dSAFE-REGION">THE TITLE-SAFE REGION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#TITLER">TITLER</a>
-
+<div class="header">
+<p>
+Previous: <a href="#THE-TITLE_002dSAFE-REGION" accesskey="p" rel="prev">THE TITLE-SAFE REGION</a>, Up: <a href="#TITLER" accesskey="u" rel="up">TITLER</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="MAKING-TITLES-LOOK-GOOD-1"></a>
 <h4 class="subsection">18.26.3 MAKING TITLES LOOK GOOD</h4>
 
 <p>No-one else is going to tell you this, but to make good looking titles,
 ignore most of the features of the titler.  The best settings are:
+</p>
+<ul>
+<li> Font: <b>Arial</b>
+</li><li> Italic: <b>off</b>
+</li><li> Motion: <b>No motion</b>
+</li><li> Bold: <b>on or off</b>
+</li><li> Fade in: <b>0</b>
+</li><li> Fade out: <b>0</b>
+</li><li> Color: <b>white</b>
+</li><li> Outline color: <b>black</b>
+</li><li> Drop Shadow or outline: <b>use either to improve contrast but not both</b>
+</li></ul>
 
-     <ul>
-<li>Font: <b>Arial</b>
-<li>Italic: <b>off</b>
-<li>Motion: <b>No motion</b>
-<li>Bold: <b>on or off</b>
-<li>Fade in: <b>0</b>
-<li>Fade out: <b>0</b>
-<li>Color: <b>white</b>
-<li>Outline color: <b>black</b>
-<li>Drop Shadow or outline: <b>use either to improve contrast but not both</b>
-</ul>
 
-   <p>Don't waste the audience's time with fading &amp; crawls.  Use crawls only
-if there's too much text to fit on the screen.  The title should be
-legible enough to take the least amount of time to read.  You're
+<p>Don&rsquo;t waste the audience&rsquo;s time with fading &amp; crawls.  Use crawls only
+if there&rsquo;s too much text to fit on the screen.  The title should be
+legible enough to take the least amount of time to read.  You&rsquo;re
 supposed to show the story, not write it.  If they wanted to read a
 story, they would be reading a book instead of watching video.
+</p>
+
+
+
+
+
+
 
-<div class="node">
-<a name="VIDEO-SCOPE"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TITLER">TITLER</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>
 
-</div>
 
+
+
+
+
+<hr>
+<a name="VIDEO-SCOPE"></a>
+<div class="header">
+<p>
+Previous: <a href="#TITLER" accesskey="p" rel="prev">TITLER</a>, Up: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="u" rel="up">SECRETS OF CINELERRA EFFECTS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="VIDEO-SCOPE-1"></a>
 <h3 class="section">18.27 VIDEO SCOPE</h3>
 
 <p>The video scope plots two views of the image.  One view plots the
 intensity of each pixel against horizontal position.  They call this
 the WAVEFORM.  Another view translates hue to angle and saturation to
 radius for each pixel.  They call this the VECTORSCOPE.
-
-   <p>The vectorscope is actually very useful for determining if an image is
-saturated.  When adjusting saturation, it's important to watch the
-vectorscope to make sure pixels don't extend past the 100 radius.
-
-   <p>The waveform allows you to make sure image data extends from complete
+</p>
+<p>The vectorscope is actually very useful for determining if an image is
+saturated.  When adjusting saturation, it&rsquo;s important to watch the
+vectorscope to make sure pixels don&rsquo;t extend past the 100 radius.
+</p>
+<p>The waveform allows you to make sure image data extends from complete
 black to complete white while adjusting the brightness/contrast.
-
-   <p>Some thought is being given to having a video scope for recording. 
+</p>
+<p>Some thought is being given to having a video scope for recording. 
 Unfortunately, this would require a lot of variations of the video
 scope for all the different video drivers.
+</p>
+
 
-<div class="node">
-<a name="PLUGIN-AUTHORING"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#KEYBOARD-SHORTCUTS">KEYBOARD SHORTCUTS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SECRETS-OF-CINELERRA-EFFECTS">SECRETS OF CINELERRA EFFECTS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+<hr>
+<a name="PLUGIN-AUTHORING"></a>
+<div class="header">
+<p>
+Next: <a href="#KEYBOARD-SHORTCUTS" accesskey="n" rel="next">KEYBOARD SHORTCUTS</a>, Previous: <a href="#SECRETS-OF-CINELERRA-EFFECTS" accesskey="p" rel="prev">SECRETS OF CINELERRA EFFECTS</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="PLUGIN-AUTHORING-1"></a>
 <h2 class="chapter">19 PLUGIN AUTHORING</h2>
 
 <p>The plugin API in Cinelerra dates back to 1997, before the LADSPA and
-before VST became popular.  It's fundamentally the same as it was in
+before VST became popular.  It&rsquo;s fundamentally the same as it was in
 1997, with minor modifications to handle keyframes and GUI feedback. 
 The GUI is not abstracted from the programmer.  This allows the
 programmer to use whatever toolkit they want and allows more
 flexibility in appearance but it costs more.
-
-   <p>There are several types of plugins, each with a common method of
+</p>
+<p>There are several types of plugins, each with a common method of
 implementation and specific changes for that particular type.  The
 easiest way to implement a plugin is to take the simplest existing one
-out of the group and rename the symbols.
-
-<ul class="menu">
-<li><a accesskey="1" href="#INTRODUCING-THE-PULL-METHOD">INTRODUCING THE PULL METHOD</a>:  The current paradigm for plugin writing
-<li><a accesskey="2" href="#COMMON-PLUGIN-FUNCTIONS">COMMON PLUGIN FUNCTIONS</a>:  What all effects have to do. 
-<li><a accesskey="3" href="#REALTIME-PLUGINS">REALTIME PLUGINS</a>:  What realtime effects have to do. 
-<li><a accesskey="4" href="#NONREALTIME-PLUGINS">NONREALTIME PLUGINS</a>:  What rendered effects have to do. 
-<li><a accesskey="5" href="#AUDIO-PLUGINS">AUDIO PLUGINS</a>:  What audio effects have to do. 
-<li><a accesskey="6" href="#VIDEO-PLUGINS">VIDEO PLUGINS</a>:  What video effects have to do. 
-<li><a accesskey="7" href="#TRANSITION-PLUGINS">TRANSITION PLUGINS</a>:  What transitions have to do. 
-<li><a accesskey="8" href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>:  How to use currently playing data to draw the GUI. 
-<li><a accesskey="9" href="#USING-OPENGL">USING OPENGL</a>:  How to use hardware to speed up operations. 
-<li><a href="#PLUGIN-QUERIES">PLUGIN QUERIES</a>:  How plugins get information about the data to be processed. 
-</ul>
-
-<div class="node">
+out of the group and rename the symbols.  
+</p>
+
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#INTRODUCING-THE-PULL-METHOD" accesskey="1">INTRODUCING THE PULL METHOD</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The current paradigm for plugin writing
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#COMMON-PLUGIN-FUNCTIONS" accesskey="2">COMMON PLUGIN FUNCTIONS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What all effects have to do.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#REALTIME-PLUGINS" accesskey="3">REALTIME PLUGINS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What realtime effects have to do.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#NONREALTIME-PLUGINS" accesskey="4">NONREALTIME PLUGINS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What rendered effects have to do.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#AUDIO-PLUGINS" accesskey="5">AUDIO PLUGINS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What audio effects have to do.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#VIDEO-PLUGINS" accesskey="6">VIDEO PLUGINS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What video effects have to do.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TRANSITION-PLUGINS" accesskey="7">TRANSITION PLUGINS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What transitions have to do.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK" accesskey="8">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to use currently playing data to draw the GUI.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-OPENGL" accesskey="9">USING OPENGL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to use hardware to speed up operations.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#PLUGIN-QUERIES">PLUGIN QUERIES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How plugins get information about the data to be processed.
+</td></tr>
+</table>
+
+
+
+
+<hr>
 <a name="INTRODUCING-THE-PULL-METHOD"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#COMMON-PLUGIN-FUNCTIONS">COMMON PLUGIN FUNCTIONS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
-
+<div class="header">
+<p>
+Next: <a href="#COMMON-PLUGIN-FUNCTIONS" accesskey="n" rel="next">COMMON PLUGIN FUNCTIONS</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="INTRODUCING-THE-PULL-METHOD-1"></a>
 <h3 class="section">19.1 INTRODUCING THE PULL METHOD</h3>
 
 <p>Originally plugins were designed with the push method.  The push method
 is intuitive and simple.  A source pushes data to a plugin, the plugin
 does math operations on it, and the plugin pushes it to a destination. 
 For 6 years this was the way all realtime plugins were driven
-internally but it didn't allow you to reduce the rate of playback in
-realtime.  While plugins can still be designed as if they're pushing
-data, this is not the way they're processed internally anymore.
-
-   <p>The latest evolution in Cinelerra's plugin design is the pull method. 
+internally but it didn&rsquo;t allow you to reduce the rate of playback in
+realtime.  While plugins can still be designed as if they&rsquo;re pushing
+data, this is not the way they&rsquo;re processed internally anymore.
+</p>
+<p>The latest evolution in Cinelerra&rsquo;s plugin design is the pull method. 
 The rendering pipeline starts at the final output and the final steps
 in the rendering pipeline are reading the data from disk.  Every step
 in the rendering chain involves requesting data from the previous
 step.  When the rendering pipleline eventually requests data from a
 plugin chain, each plugin requests data from the plugin before it.
-
-   <p>This is less intuitive than the push method but is much more powerful. 
+</p>
+<p>This is less intuitive than the push method but is much more powerful. 
 Realtime plugins written using the pull method can change the rate data
 is presented to the viewer and the direction of playback.  The pull
 method allows plugins to take in data at a higher rate than they send
 it out.
-
-   <p>To get the power of rate independance, the pull method requires plugins
+</p>
+<p>To get the power of rate independance, the pull method requires plugins
 to know more about the data than they needed to under the push method. 
 Plugins need to know what rate the project is at, what rate their
 output is supposed to be at and what rate their input is supposed to be
 at.  These different data rates have to be correlated for a plugin to
 configure itself properly.
-
-   <p>Keyframes for a plugin are stored relative to the project frame rate. 
+</p>
+<p>Keyframes for a plugin are stored relative to the project frame rate. 
 Queries from a plugin for for the current playback position are given
-relative to the project frame rate.  If the plugin's output was
+relative to the project frame rate.  If the plugin&rsquo;s output was
 requested to be at twice the project frame rate, the positions need to
 be converted to the project rate for keyframes to match up.  Two
 classes of data rates were created to handle this problem.
-
-   <p>Rate conversions are done in terms of the <b>project rate</b> and the
+</p>
+<p>Rate conversions are done in terms of the <b>project rate</b> and the
 <b>requested rate</b>.  The project rate is identical for all plugins.  It
 is determined by the <b>settings-&gt;format</b> window.  The requested rate
 is determined by the downstream plugin requesting data from the current
 plugin.  The requested rate is arbitrary.  Exactly how to use these
 rates is described below.
+</p>
 
-<div class="node">
-<a name="COMMON-PLUGIN-FUNCTIONS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#REALTIME-PLUGINS">REALTIME PLUGINS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#INTRODUCING-THE-PULL-METHOD">INTRODUCING THE PULL METHOD</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
+<hr>
+<a name="COMMON-PLUGIN-FUNCTIONS"></a>
+<div class="header">
+<p>
+Next: <a href="#REALTIME-PLUGINS" accesskey="n" rel="next">REALTIME PLUGINS</a>, Previous: <a href="#INTRODUCING-THE-PULL-METHOD" accesskey="p" rel="prev">INTRODUCING THE PULL METHOD</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="COMMON-PLUGIN-FUNCTIONS-1"></a>
 <h3 class="section">19.2 COMMON PLUGIN FUNCTIONS</h3>
 
 <p>All plugins inherit from a derivative of PluginClient.  This
@@ -8569,806 +9458,926 @@ PluginClient derivative implements most of the required methods in
 PluginClient, but users must still define methods for PluginClient. 
 The most commonly used methods are predefined in macros to reduce the
 typing yet still allow flexibility.
-
-   <p>The files they include depend on the plugin type.  Audio plugins
+</p>
+<p>The files they include depend on the plugin type.  Audio plugins
 include <b>pluginaclient.h</b> and video plugins include
 <b>pluginvclient.h</b>.  They inherit <b>PluginAClient</b> and
 <b>PluginVClient</b> respectively.
-
-   <p>Cinelerra instantiates all plugins at least twice when they are used in
+</p>
+<p>Cinelerra instantiates all plugins at least twice when they are used in
 a movie.  Once instance is the GUI.  The other instance is the signal
 processor.  User input, through a complicated sequence, is propogated
 from the GUI instance to the signal processor instance.  If the signal
 processor wants to alter the GUI, it propogates data back to the GUI
 instance.  There are utility functions for doing all this.
-
-   <p>All plugins define at least three objects:
-
-     <ul>
-<li>
+</p>
+<p>All plugins define at least three objects:
+</p>
+<ul>
+<li> 
 <b>Processing object</b> - Contains pointers to all the other objects and
 performs the signal processing.  This object contains a number of
 queries to identify itself and is the object you register to register
 the plugin.
 
-     <li>
+
+</li><li> 
 <b>User interface object</b> - This is a subclass of
 <b>PluginClientWindow</b>.  It shows data on the screen and collects
 parameters from the user.
 
-     <p>The window has pointers to a number of widgets, a few initialization
-methods, and a back pointer to the plugin's processing object.  The GUI
-uses Cinelerra's toolkit.  The plugin abstraction layer handles creating
+<p>The window has pointers to a number of widgets, a few initialization
+methods, and a back pointer to the plugin&rsquo;s processing object.  The GUI
+uses Cinelerra&rsquo;s toolkit.  The plugin abstraction layer handles creating
 a thread for the GUI.
+</p>
+
 
-     <li>
+</li><li> 
 <b>Configuration object</b> - This stores the user parameters and always
 needs interpolation, copying, and comparison functions.  Macros for the
 plugin client automatically call configuration methods to interpolate
 keyframes.
 
-   </ul>
+</li></ul>
 
-<ul class="menu">
-<li><a accesskey="1" href="#THE-PROCESSING-OBJECT">THE PROCESSING OBJECT</a>
-<li><a accesskey="2" href="#THE-CONFIGURATION-OBJECT">THE CONFIGURATION OBJECT</a>
-<li><a accesskey="3" href="#THE-USER-INTERFACE-OBJECT">THE USER INTERFACE OBJECT</a>
-</ul>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#THE-PROCESSING-OBJECT" accesskey="1">THE PROCESSING OBJECT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#THE-CONFIGURATION-OBJECT" accesskey="2">THE CONFIGURATION OBJECT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#THE-USER-INTERFACE-OBJECT" accesskey="3">THE USER INTERFACE OBJECT</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
 
-<div class="node">
-<a name="THE-PROCESSING-OBJECT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#THE-CONFIGURATION-OBJECT">THE CONFIGURATION OBJECT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMMON-PLUGIN-FUNCTIONS">COMMON PLUGIN FUNCTIONS</a>
 
-</div>
 
+<hr>
+<a name="THE-PROCESSING-OBJECT"></a>
+<div class="header">
+<p>
+Next: <a href="#THE-CONFIGURATION-OBJECT" accesskey="n" rel="next">THE CONFIGURATION OBJECT</a>, Up: <a href="#COMMON-PLUGIN-FUNCTIONS" accesskey="u" rel="up">COMMON PLUGIN FUNCTIONS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THE-PROCESSING-OBJECT-1"></a>
 <h4 class="subsection">19.2.1 THE PROCESSING OBJECT</h4>
 
-<p>Load up a simple plugin like gain to see what this object looks like. 
+<p>Load up a simple plugin like gain to see what this object looks like.
 The processing object should inherit from the intended PluginClient
 derivative.  Its constructor should take a PluginServer argument.
+</p>
+<div class="example">
+<pre class="example">MyPlugin(PluginServer *server);
+</pre></div>
 
-<pre class="example">     MyPlugin(PluginServer *server);
-</pre>
-   <p>In the implementation, the plugin must contain a registration line with
+<p>In the implementation, the plugin must contain a registration line with
 the name of the processing object like
+</p>
+<div class="example">
+<pre class="example">REGISTER_PLUGIN(MyPlugin)
+</pre></div>
 
-<pre class="example">     REGISTER_PLUGIN(MyPlugin)
-</pre>
-   <p>Another function which is useful but not mandatory is
 
-<pre class="example">     int is_multichannel();
-</pre>
-   <p>It should return 1 if one instance of the plugin handles multiple
+
+
+<p>Another function which is useful but not mandatory is
+</p>
+<div class="example">
+<pre class="example">int is_multichannel();
+</pre></div>
+
+<p>It should return 1 if one instance of the plugin handles multiple
 tracks simultaneously or 0 if one instance of the plugin only handles
 one track.  The default is 0 if it is omitted.
-
-   <p>Multichannel plugins in their processing function should refer to a
+</p>
+<p>Multichannel plugins in their processing function should refer to a
 function called <b>PluginClient::get_total_buffers()</b> to determine the
 number of channels.
+</p>
 
-   <p>To simplify the implementation of realtime plugins, a macro for
+
+
+<p>To simplify the implementation of realtime plugins, a macro for
 commonly used members has been created for the class header, taking the
 configuration object and user interface thread object as arguments. 
 The macro definitions apply mainly to realtime plugins and are not
 useful in nonrealtime plugins.  Fortunately, nonrealtime plugins are
 simpler.
+</p>
+<div class="example">
+<pre class="example">PLUGIN_CLASS_MEMBERS(config_name, thread_name)
+</pre></div>
 
-<pre class="example">     PLUGIN_CLASS_MEMBERS(config_name, thread_name)
-</pre>
-   <p>The commonly used members in PLUGIN_CLASS_MEMBERS are described below.
-
-     <ul>
-<li>int load_configuration();
+<p>The commonly used members in PLUGIN_CLASS_MEMBERS are described below.
+</p>
+<ul>
+<li> int load_configuration();
 
-     <p>Loads the configuration based on surrounding keyframes and current
-position.  The class definition for load_configuration should contain
+<p>Loads the configuration based on surrounding keyframes and current
+position.  The class definition for load_configuration should contain 
+</p>
+<div class="example">
+<pre class="example">LOAD_CONFIGURATION_MACRO(plugin_class, config_class)
+</pre></div>
 
-     <pre class="example">          LOAD_CONFIGURATION_MACRO(plugin_class, config_class)
-</pre>
-     <p>to implement the default behavior for load_configuration.  This stores
-whatever the current configuration is inside the plugin's configuration
+<p>to implement the default behavior for load_configuration.  This stores
+whatever the current configuration is inside the plugin&rsquo;s configuration
 object and returns 1 if the new configuration differs from the previous
 configuration.  The return value of load_configuration is used by
 another commonly used function, update_gui to determine if the GUI really needs to be updated.
-
-     <p>The plugin's configuration object is always called <b>config</b> inside
+</p>
+<p>The plugin&rsquo;s configuration object is always called <b>config</b> inside
 PLUGIN_CLASS_MEMBERS.
+</p>
+</li><li> VFrame* new_picon();
 
-     <li>VFrame* new_picon();
-
-     <p>Creates a picon for display in the resource window.  Use
+<p>Creates a picon for display in the resource window.  Use
+</p>
+<div class="example">
+<pre class="example">#include &quot;picon_png.h&quot;
+NEW_PICON_MACRO(plugin_class)
+</pre></div>
 
-     <pre class="example">          #include "picon_png.h"
-          NEW_PICON_MACRO(plugin_class)
-</pre>
-     <p>to implement new_picon.  In addition, the user should create a
+<p>to implement new_picon.  In addition, the user should create a
 <b>picon_png.h</b> header file from a PNG image using <b>pngtoh</b>. 
 <b>pngtoh</b> is compiled in the <b>guicast/ARCH</b> directory.
-
-     <p>The source PNG image should be called picon.png and can be any format
+</p>
+<p>The source PNG image should be called picon.png and can be any format
 supported by PNG.
+</p>
+</li><li> char* plugin_title();
 
-     <li>char* plugin_title();
-
-     <p>Returns a text string identifying the plugin in the resource window. 
+<p>Returns a text string identifying the plugin in the resource window. 
 The string has to be unique.
+</p>
 
-     <li>void update_gui();
+</li><li> void update_gui(); 
 
-     <p>Should first load the configuration, test for a return of 1, and then
+<p>Should first load the configuration, test for a return of 1, and then
 redraw the GUI with the new parameters.  All the plugins using GuiCast
 have a format like
+</p>
+<div class="example">
+<pre class="example">void MyPlugin::update_gui()
+{
+       if(thread)
+       {
+               if(load_configuration())
+               {
+                       thread-&gt;window-&gt;lock_window();
+// update widgets here
+                       thread-&gt;window-&gt;unlock_window();
+               }
+       }
+}
+</pre></div>
+
+<p>to handle concurrency and conditions of no GUI.
+</p>
+
+
+
+</li></ul>
 
-     <pre class="example">          void MyPlugin::update_gui()
-          {
-               if(thread)
-               {
-                       if(load_configuration())
-                       {
-                               thread-&gt;window-&gt;lock_window();
-          // update widgets here
-                               thread-&gt;window-&gt;unlock_window();
-                       }
-               }
-          }
-</pre>
-     <p>to handle concurrency and conditions of no GUI.
-
-   </ul>
-
-   <p>Important functions the processing object must define are the
+
+<p>Important functions the processing object must define are the
 functions which load and save configuration data from keyframes.  These
 functions are called by the macros so all you need to worry about is
 accessing the keyframe data.
+</p>
+<div class="example">
+<pre class="example">void save_data(KeyFrame *keyframe);
+void read_data(KeyFrame *keyframe);
+</pre></div>
 
-<pre class="example">     void save_data(KeyFrame *keyframe);
-     void read_data(KeyFrame *keyframe);
-</pre>
-   <p>The read data functions are only used in realtime plugins.  The read
+<p>The read data functions are only used in realtime plugins.  The read
 data functions translate the plugin configuration between the KeyFrame
 argument and the configuration object for the plugin.  The keyframes
 are stored on the timeline and can change for every project.
-
-   <p>Use an object called <b>FileXML</b> to do the translation and some
+</p>
+<p>Use an object called <b>FileXML</b> to do the translation and some
 specific commands to get the data out of the KeyFrame argument.  See
 any existing plugin to see the usage of KeyFrame and FileXML.
+</p>
 
-<pre class="example">     int load_defaults();
-     int save_defaults();
-</pre>
-   <p>The load defaults functions are used in realtime and non-realtime
+<div class="example">
+<pre class="example">int load_defaults();
+int save_defaults();
+</pre></div>
+
+<p>The load defaults functions are used in realtime and non-realtime
 plugins.  The load defaults functions translate the plugin
-configuration between a BC_Hash object and the plugin's
+configuration between a BC_Hash object and the plugin&rsquo;s
 configuration.  The BC_Hash object stores configurations in a discrete
-file on disk for each plugin but doesn't isolate different
+file on disk for each plugin but doesn&rsquo;t isolate different
 configurations for different projects.
-
-   <p>The function overriding <b>load_defaults</b> also needs to call <b>defaults
+</p>
+<p>The function overriding <b>load_defaults</b> also needs to call <b>defaults
 = new BC_Hash(path);</b> with the configuration path.  See any existing
 plugin to see the usage of BC_Hash.   The function overriding
 <b>save_defaults</b> does not create <b>defaults</b>.
-
-   <p>Other standard members may be defined in the processing object,
+</p>
+<p>Other standard members may be defined in the processing object,
 depending on the plugin type.
+</p>
 
-<div class="node">
-<a name="THE-CONFIGURATION-OBJECT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#THE-USER-INTERFACE-OBJECT">THE USER INTERFACE OBJECT</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-PROCESSING-OBJECT">THE PROCESSING OBJECT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMMON-PLUGIN-FUNCTIONS">COMMON PLUGIN FUNCTIONS</a>
 
+
+<hr>
+<a name="THE-CONFIGURATION-OBJECT"></a>
+<div class="header">
+<p>
+Next: <a href="#THE-USER-INTERFACE-OBJECT" accesskey="n" rel="next">THE USER INTERFACE OBJECT</a>, Previous: <a href="#THE-PROCESSING-OBJECT" accesskey="p" rel="prev">THE PROCESSING OBJECT</a>, Up: <a href="#COMMON-PLUGIN-FUNCTIONS" accesskey="u" rel="up">COMMON PLUGIN FUNCTIONS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="THE-CONFIGURATION-OBJECT-1"></a>
 <h4 class="subsection">19.2.2 THE CONFIGURATION OBJECT</h4>
 
 <p>The configuration object is critical for GUI updates, signal
 processing, and default settings in realtime plugins.  Be aware it is
 not used in nonrealtime plugins.  The configuration object inherits
-from nothing and has no dependancies.  It's merely a class containing
-three functions and variables specific to the plugin's parameters.
-
-   <p>Usually the configuration object starts with the name of the plugin
+from nothing and has no dependancies.  It&rsquo;s merely a class containing
+three functions and variables specific to the plugin&rsquo;s parameters.
+</p>
+<p>Usually the configuration object starts with the name of the plugin
 followed by Config.
+</p>
+<div class="example">
+<pre class="example">class MyPluginConfig
+{
+public:
+       MyPluginConfig();
+</pre></div>
 
-<pre class="example">     class MyPluginConfig
-     {
-     public:
-       MyPluginConfig();
-</pre>
-   <p>Following the name of the configuration class, we put in three
+
+<p>Following the name of the configuration class, we put in three
 required functions and the configuration variables.
+</p>
+<div class="example">
+<pre class="example">  int equivalent(MyPluginConfig &amp;that);
+       void copy_from(MyPluginConfig &amp;that);
+       void interpolate(MyPluginConfig &amp;prev, 
+               MyPluginConfig &amp;next, 
+               int64_t prev_position, 
+               int64_t next_position, 
+               int64_t current_position);
+
+
+
+       float parameter1;
+       float parameter2;
+       int parameter3;
+};
+
+</pre></div>
+
 
-<pre class="example">          int equivalent(MyPluginConfig &amp;that);
-       void copy_from(MyPluginConfig &amp;that);
-       void interpolate(MyPluginConfig &amp;prev,
-               MyPluginConfig &amp;next,
-               int64_t prev_position,
-               int64_t next_position,
-               int64_t current_position);
-     
-     
-     
-       float parameter1;
-       float parameter2;
-       int parameter3;
-     };
-     
-</pre>
-   <p>Now you must define the three functions.  <b>Equivalent</b> is called by
+<p>Now you must define the three functions.  <b>Equivalent</b> is called by
 LOAD_CONFIGURATION_MACRO to determine if the local configuration
 parameters are identical to the configuration parameters in the
-arguement.  If equivalent returns 0, the LOAD_CONFIGURATION_MACRO
+arguement.  If equivalent returns 0, the LOAD_CONFIGURATION_MACRO 
 causes the GUI to redraw.  If equivalent returns 1, the
-LOAD_CONFIGURATION_MACRO doesn't redraw the GUI.
-
-   <p>Then there's <b>copy_from</b> which transfers the configuration values
+LOAD_CONFIGURATION_MACRO doesn&rsquo;t redraw the GUI.
+</p>
+<p>Then there&rsquo;s <b>copy_from</b> which transfers the configuration values
 from the argument to the local variables.  This is once again used in
-LOAD_CONFIGURATION_MACRO to store configurations in temporaries.  Once
+LOAD_CONFIGURATION_MACRO to store configurations in temporaries.  Once 
 LOAD_CONFIGURATION_MACRO has replicated the configuration, it loads a
 second configuration.  Then it interpolates the two configurations to
 get the current configuration.  The interpolation function performs the
 interpolation and stores the result in the local variables.
-
-   <p>Normally the interpolate function calculates a previous and next
+</p>
+<p>Normally the interpolate function calculates a previous and next
 fraction, using the arguments.
-
-<pre class="example">     void MyPluginConfig::interpolate(MyPluginConfig &amp;prev,
-               MyPluginConfig &amp;next,
-               int64_t prev_position,
-               int64_t next_position,
-               int64_t current_position)
-     {
-       double next_scale = (double)(current_position - prev_position) / (next_position - prev_position);
-       double prev_scale = (double)(next_position - current_position) / (next_position - prev_position);
-</pre>
-   <p>Then the fractions are applied to the previous and next configuration
+</p>
+<div class="example">
+<pre class="example">void MyPluginConfig::interpolate(MyPluginConfig &amp;prev, 
+               MyPluginConfig &amp;next, 
+               int64_t prev_position, 
+               int64_t next_position, 
+               int64_t current_position)
+{
+       double next_scale = (double)(current_position - prev_position) / (next_position - prev_position);
+       double prev_scale = (double)(next_position - current_position) / (next_position - prev_position);
+</pre></div>
+
+<p>Then the fractions are applied to the previous and next configuration
 variables to yield the current values.
+</p>
+<div class="example">
+<pre class="example">
+       this-&gt;parameter1 = (float)(prev.parameter1 * prev_scale + next.parameter1 * next_scale);
+       this-&gt;parameter2 = (float)(prev.parameter2 * prev_scale + next.parameter2 * next_scale);
+       this-&gt;parameter3 = (int)(prev.parameter3 * prev_scale + next.parameter3 * next_scale);
+}
 
-<pre class="example">     
-       this-&gt;parameter1 = (float)(prev.parameter1 * prev_scale + next.parameter1 * next_scale);
-       this-&gt;parameter2 = (float)(prev.parameter2 * prev_scale + next.parameter2 * next_scale);
-       this-&gt;parameter3 = (int)(prev.parameter3 * prev_scale + next.parameter3 * next_scale);
-     }
-     
-</pre>
-   <p>Alternatively you can copy the values from the previous configuration
-argument if no interpolation is desired.
+</pre></div>
 
-   <p>This usage of the configuration object is the same in audio and video
+<p>Alternatively you can copy the values from the previous configuration
+argument if no interpolation is desired.
+</p>
+<p>This usage of the configuration object is the same in audio and video
 plugins.  In video playback, the interpolation function is called for
 every frame, yielding smooth interpolation.  In audio playback, the
 interpolation function is called only once for every console fragment
 and once every time the insertion point moves.  This is good enough for
 updating the GUI while selecting regions on the timeline but it may not
 be accurate enough for really smooth rendering of the effect.
-
-   <p>For really smooth rendering of audio, you can still use
+</p>
+<p>For really smooth rendering of audio, you can still use
 load_configuration when updating the GUI.  For process_buffer; however,
 ignore load_configuration and write your own interpolation routine
 which loads all the keyframes in a console fragment and interpolates
 every sample.  This would be really slow and hard to debug, yielding
 improvement which may not be audible.  Then of course, every country
 has its own wierdos.
-
-   <p>An easier way to get smoother interpolation is to reduce the console
+</p>
+<p>An easier way to get smoother interpolation is to reduce the console
 fragment to 1 sample.  This would have to be rendered and played back
 with the console fragment back over 2048 of course.  The Linux sound
-drivers can't play fragments of 1 sample.
+drivers can&rsquo;t play fragments of 1 sample.
+</p>
+
+
+
 
-<div class="node">
-<a name="THE-USER-INTERFACE-OBJECT"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#THE-CONFIGURATION-OBJECT">THE CONFIGURATION OBJECT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#COMMON-PLUGIN-FUNCTIONS">COMMON PLUGIN FUNCTIONS</a>
 
-</div>
 
+
+<hr>
+<a name="THE-USER-INTERFACE-OBJECT"></a>
+<div class="header">
+<p>
+Previous: <a href="#THE-CONFIGURATION-OBJECT" accesskey="p" rel="prev">THE CONFIGURATION OBJECT</a>, Up: <a href="#COMMON-PLUGIN-FUNCTIONS" accesskey="u" rel="up">COMMON PLUGIN FUNCTIONS</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="THE-USER-INTERFACE-OBJECT-1"></a>
 <h4 class="subsection">19.2.3 THE USER INTERFACE OBJECT</h4>
 
+
 <p>The user interface object is derived from <b>PluginClientWindow</b>.  The
 user must call <b>NEW_WINDOW_MACRO</b> in the processing object to create
 the <b>PluginClientWindow</b>.  This system is used in realtime plugins but
 not in nonrealtime plugins.
-
-   <p>Nonrealtime plugins create and destroy their own GUI in their
-<b>get_parameters</b> function and there's no need for a
+</p>
+<p>Nonrealtime plugins create and destroy their own GUI in their
+<b>get_parameters</b> function and there&rsquo;s no need for a
 <b>PluginClientWindow</b> subclass.
-
-   <p>Now the window class must be declared in the plugin header.  It's
+</p>
+<p>Now the window class must be declared in the plugin header.  It&rsquo;s
 easiest to implement the window by copying an existing plugin and
 renaming the symbols.  The following is an outline of what happens. 
-The plugin header must declare the window's constructor using the
+The plugin header must declare the window&rsquo;s constructor using the
 appropriate arguments.
-
-<pre class="example">     
-     #include "guicast.h"
-     
-     MyWindow::MyWindow(MyPlugin *plugin)
-      : PluginClientWindow(plugin,
-       440,
-       500,
-       440,
-       500,
-       0)
-     {
-     
-</pre>
-   <p>This becomes a window on the screen with the size given by the arguments
+</p>
+<div class="example">
+<pre class="example">
+#include &quot;guicast.h&quot;
+
+MyWindow::MyWindow(MyPlugin *plugin)
+ : PluginClientWindow(plugin, 
+       440, 
+       500, 
+       440, 
+       500, 
+       0)
+{
+
+</pre></div>
+
+<p>This becomes a window on the screen with the size given by the arguments
 to <b>PluginClientWindow</b>.
-
-   <p>It needs two methods
-
-<pre class="example">          void create_objects();
-</pre>
-   <p>and a back pointer to the plugin
-
-<pre class="example">          MyPlugin *plugin;
-</pre>
-   <p>The create_objects member puts widgets in the window according to
-GuiCast's syntax.  A pointer to each widget which you want to
+</p>
+<p>It needs two methods
+</p>
+<div class="example">
+<pre class="example">  void create_objects();
+</pre></div>
+
+<p>and a back pointer to the plugin
+</p>
+<div class="example">
+<pre class="example">  MyPlugin *plugin;
+</pre></div>
+
+
+<p>The create_objects member puts widgets in the window according to
+GuiCast&rsquo;s syntax.  A pointer to each widget which you want to
 synchronize to a configuration parameter is stored in the window class. 
 These are updated in the <b>update_gui</b> function you earlier defined for
 the plugin.  The widgets are usually derivatives of a GuiCast widget and
 they override functions in GuiCast to handle events.  Finally
-create_objects calls
-
-<pre class="example">          show_window();
-</pre>
-   <p>to make the window appear all at once.
-
-   <p>Every widget in the GUI needs to detect when its value changes.  In
+create_objects calls 
+</p>
+<div class="example">
+<pre class="example">  show_window();
+</pre></div>
+
+<p>to make the window appear all at once.
+</p>
+<p>Every widget in the GUI needs to detect when its value changes.  In
 GuiCast the <b>handle_event</b> method is called whenever the value
 changes.  In <b>handle_event</b>, the widget then needs to call
 <b>plugin-&gt;send_configure_change()</b> to propogate the change to any
 copies of the plugin which are processing data.
+</p>
+
+
 
-<div class="node">
-<a name="REALTIME-PLUGINS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#NONREALTIME-PLUGINS">NONREALTIME PLUGINS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#COMMON-PLUGIN-FUNCTIONS">COMMON PLUGIN FUNCTIONS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="REALTIME-PLUGINS"></a>
+<div class="header">
+<p>
+Next: <a href="#NONREALTIME-PLUGINS" accesskey="n" rel="next">NONREALTIME PLUGINS</a>, Previous: <a href="#COMMON-PLUGIN-FUNCTIONS" accesskey="p" rel="prev">COMMON PLUGIN FUNCTIONS</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="REALTIME-PLUGINS-1"></a>
 <h3 class="section">19.3 REALTIME PLUGINS</h3>
 
 <p>Realtime plugins should use PLUGIN_CLASS_MEMBERS to define the basic
 set of members in their headers.  All realtime plugins must define an
+</p>
+<div class="example">
+<pre class="example">int is_realtime()
+</pre></div>
 
-<pre class="example">     int is_realtime()
-</pre>
-   <p>member returning 1.  This causes a number of methods to be called
+<p>member returning 1.  This causes a number of methods to be called
 during live playback and the plugin to be usable on the timeline.
-
-   <p>Realtime plugins must override a member called
-
-<pre class="example">     process_buffer
-</pre>
-   <p>This function takes different arguments depending on if the plugin
+</p>
+<p>Realtime plugins must override a member called
+</p>
+<div class="example">
+<pre class="example">process_buffer 
+</pre></div>
+
+<p>This function takes different arguments depending on if the plugin
 handles video or audio.  See an existing plugin to find out which usage
 applies.
-
-   <p>The main features of the process_buffer function are a buffer to store
+</p>
+<p>The main features of the process_buffer function are a buffer to store
 the output, the starting position of the output, and the requested
-output rate.  For audio, there's also a size argument for the number of
+output rate.  For audio, there&rsquo;s also a size argument for the number of
 samples.
-
-   <p>The starting position of the output buffer is the lowest numbered
+</p>
+<p>The starting position of the output buffer is the lowest numbered
 sample on the timeline if playback is forward and the highest numbered
 sample on the timeline if playback is reverse.  The direction of
 playback is determined by one of the plugin queries described below.
-
-   <p>The position and size arguments are all relative to the frame rate and
+</p>
+<p>The position and size arguments are all relative to the frame rate and
 sample rate passed to process_buffer.  This is the requested data rate
 and may not be the same as the project data rate.
-
-   <p>The process_realtime function should start by calling
+</p>
+<p>The process_realtime function should start by calling
 <b>load_configuration</b>.  The LOAD_CONFIGURATION_MACRO returns 1 if the
 configuration changed.
-
-   <p>After determining the plugin's configuration, input media has to be
+</p>
+<p>After determining the plugin&rsquo;s configuration, input media has to be
 loaded for processing.  Call
-
-<pre class="example">     read_frame(VFrame *buffer,
-               int channel,
-               int64_t start_position,
-               double frame_rate)
-</pre>
-   <p>or
-
-<pre class="example">     read_samples(double *buffer,
-               int channel,
-               int sample_rate,
-               int64_t start_position,
-               int64_t len)
-</pre>
-   <p>to request input data from the object which comes before this plugin. 
+</p>
+<div class="example">
+<pre class="example">read_frame(VFrame *buffer, 
+               int channel, 
+               int64_t start_position,
+               double frame_rate)
+</pre></div>
+
+<p>or
+</p>
+<div class="example">
+<pre class="example">read_samples(double *buffer,
+               int channel,
+               int sample_rate,
+               int64_t start_position,
+               int64_t len)
+</pre></div>
+
+<p>to request input data from the object which comes before this plugin. 
 The read function needs a buffer to store the input data in.  This can
 either be a temporary you create in the plugin or the output buffer
-supplied to process_buffer if you don't need a temporary.
-
-   <p>It also needs a set of position arguments to determine when you want to
+supplied to process_buffer if you don&rsquo;t need a temporary.
+</p>
+<p>It also needs a set of position arguments to determine when you want to
 read the data from.  The start position, rate, and len passed to a read
 function need not be the same as the values recieved by the
 process_buffer function.  This way plugins can read data at a different
 rate than they output data.
-
-   <p>The channel argument is only meaningful if this is a multichannel
+</p>
+<p>The channel argument is only meaningful if this is a multichannel
 plugin.  They need to read data for each track in the
 get_total_buffers() value and process all the tracks.  Single channel
 plugins should pass 0 for channel.
+</p>
 
-   <p>Additional members are implemented to maintain configuration in
+<p>Additional members are implemented to maintain configuration in
 realtime plugins.  Some of these are also needed in nonrealtime
 plugins.
+</p>
+<ul>
+<li> void read_data(KeyFrame *keyframe);
 
-     <ul>
-<li>void read_data(KeyFrame *keyframe);
-
-     <p>Loads data from a keyframe into the plugin's configuration.  Inside the
-keyframe is an XML string.  It's most easily parsed by creating a
+<p>Loads data from a keyframe into the plugin&rsquo;s configuration.  Inside the
+keyframe is an XML string.  It&rsquo;s most easily parsed by creating a
 <b>FileXML</b> object.  See an existing plugin to see how the read_data
 function is implemented.
-
-     <p>Read data loads data out of the XML object and stores values in the
-plugin's configuration object.  Since configuration objects vary from
-plugin to plugin, these functions can't be automated.
-
-     <li>void save_data(KeyFrame *keyframe);
-
-     <p>Saves data from the plugin's configuration to a keyframe.  Inside the
-keyframe you'll put an XML string which is normally created by a
+</p>
+<p>Read data loads data out of the XML object and stores values in the
+plugin&rsquo;s configuration object.  Since configuration objects vary from
+plugin to plugin, these functions can&rsquo;t be automated.
+</p>
+</li><li> void save_data(KeyFrame *keyframe);
+
+<p>Saves data from the plugin&rsquo;s configuration to a keyframe.  Inside the
+keyframe you&rsquo;ll put an XML string which is normally created by a
 FileXML object.  See an existing plugin to see how the save_data
 function is implemented.
-
-     <p>Save data saves data from the plugin's configuration object into the
+</p>
+<p>Save data saves data from the plugin&rsquo;s configuration object into the
 XML object.
+</p>
+</li><li> int load_defaults();
 
-     <li>int load_defaults();
-
-     <p>Another way the plugin gets parameters is from a defaults file.  The
+<p>Another way the plugin gets parameters is from a defaults file.  The
 load and save defaults routines use a BC_Hash object to parse the
 defaults file.  The defaults object is created in <b>load_defaults</b> and
-destroyed in the plugin's destructor.  See an existing plugin to see
+destroyed in the plugin&rsquo;s destructor.  See an existing plugin to see
 how the BC_Hash object is used.
+</p>
+</li><li> int save_defaults();
+
+<p>Saves the configuration in the defaults object.
+</p>
+</li></ul>
 
-     <li>int save_defaults();
 
-     <p>Saves the configuration in the defaults object.
 
-   </ul>
 
-<div class="node">
-<a name="NONREALTIME-PLUGINS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AUDIO-PLUGINS">AUDIO PLUGINS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#REALTIME-PLUGINS">REALTIME PLUGINS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
-</div>
 
+<hr>
+<a name="NONREALTIME-PLUGINS"></a>
+<div class="header">
+<p>
+Next: <a href="#AUDIO-PLUGINS" accesskey="n" rel="next">AUDIO PLUGINS</a>, Previous: <a href="#REALTIME-PLUGINS" accesskey="p" rel="prev">REALTIME PLUGINS</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="NONREALTIME-PLUGINS-1"></a>
 <h3 class="section">19.4 NONREALTIME PLUGINS</h3>
 
 <p>Some references for non-realtime plugins are <b>Normalize</b> for audio
 and <b>Reframe</b> for video.
-
-   <p>Like realtime plugins, <b>load_defaults</b> and <b>save_defaults</b> must be
+</p>
+<p>Like realtime plugins, <b>load_defaults</b> and <b>save_defaults</b> must be
 implemented.  In nonrealtime plugins, these are not just used for
 default parameters but to transfer values from the user interface to
-the signal processor.  There doesn't need to be a configuration class
+the signal processor.  There doesn&rsquo;t need to be a configuration class
 in nonrealtime plugins.
-
-   <p>Unlike realtime plugins, the LOAD_CONFIGURATION_MACRO can't be used in
+</p>
+<p>Unlike realtime plugins, the LOAD_CONFIGURATION_MACRO can&rsquo;t be used in
 the plugin header.  Instead, the following methods must be defined.
-
-   <p>The nonrealtime plugin should contain a pointer to a defaults object.
-
-<pre class="example">     
-     BC_Hash *defaults;
-     
-</pre>
-   <p>It should also have a pointer to a MainProgressBar.
-
-<pre class="example">     
-     MainProgressBar *progress;
-</pre>
-   <p>The progress pointer allows nonrealtime plugins to display their
-progress in Cinelerra's main window.
-
-   <p>The constructor for a nonrealtime plugin can't use
+</p>
+<p>The nonrealtime plugin should contain a pointer to a defaults object.
+</p>
+<div class="example">
+<pre class="example">
+BC_Hash *defaults;
+
+</pre></div>
+
+<p>It should also have a pointer to a MainProgressBar.
+</p>
+<div class="example">
+<pre class="example">
+MainProgressBar *progress;
+</pre></div>
+
+<p>The progress pointer allows nonrealtime plugins to display their
+progress in Cinelerra&rsquo;s main window.
+</p>
+<p>The constructor for a nonrealtime plugin can&rsquo;t use
 PLUGIN_CONSTRUCTOR_MACRO but must call <b>load_defaults</b> directly.
-
-   <p>The destructor, likewise, must call <b>save_defaults</b> and <b>delete
+</p>
+<p>The destructor, likewise, must call <b>save_defaults</b> and <b>delete
 defaults</b> directly instead of PLUGIN_DESTRUCTOR_MACRO.
+</p>
+<ul>
+<li> VFrame* new_picon();
 
-     <ul>
-<li>VFrame* new_picon();
-
-     <p>char* plugin_title();
-
-     <p>The usage of these is the same as realtime plugins.
-
-     <li>int is_realtime();
-
-     <p>This function must return 0 to indicate a nonrealtime plugin.
+<p>char* plugin_title();
+</p>
+<p>The usage of these is the same as realtime plugins.
+</p>
+</li><li> int is_realtime();
 
-     <li>
+<p>This function must return 0 to indicate a nonrealtime plugin.
+</p>
+</li><li> 
 int get_parameters();
 
-     <p>Here, the user should create a GUI, wait for the user to hit an OK
+<p>Here, the user should create a GUI, wait for the user to hit an OK
 button or a cancel button, and store the parameters in plugin
 variables.  This routine must return 0 for success and 1 for failure. 
 This way the user can cancel the effect from the GUI.
-
-     <p>Unlike the realtime plugin, this GUI need not run asynchronously of the
+</p>
+<p>Unlike the realtime plugin, this GUI need not run asynchronously of the
 plugin.  It should block the get_parameters function until the user
 selects OK or Cancel.
+</p>
+</li><li> int load_defaults();
 
-     <li>int load_defaults();
-
-     <p>This should set the <b>defaults</b> variable to a new <b>Defaults</b> object
+<p>This should set the <b>defaults</b> variable to a new <b>Defaults</b> object
 and load parameters from the defaults object into plugin variables.
+</p>
+</li><li> int save_defaults();
 
-     <li>int save_defaults();
-
-     <p>This should save plugin variables to the defaults object.  It should not
+<p>This should save plugin variables to the defaults object.  It should not
 create the defaults object.
+</p>
 
-     <li>int start_loop();
+</li><li> int start_loop();
 
-     <p>If <b>get_parameters</b> returned 0 for success, this is called once to
+<p>If <b>get_parameters</b> returned 0 for success, this is called once to
 give the plugin a chance to initialize processing.  The plugin should
 instantiate the progress object with a line like
+</p>
+<div class="example">
+<pre class="example">
+progress = start_progress(&quot;MyPlugin progress...&quot;, 
+       PluginClient::get_total_len());
 
-     <pre class="example">          
-          progress = start_progress("MyPlugin progress...",
-               PluginClient::get_total_len());
-          
-</pre>
-     <p>The usage of <b>start_progress</b> depends on whether the plugin is
-multichannel or single channel.  If it's multichannel you always call
-start_progress.  If it's single channel, you first need to know whether
-the progress bar has already started in another instance of the plugin.
-
-     <p>If <b>PluginClient::interactive</b> is 1, you need to start the progress
-bar.  If it's 0, the progress bar has already been started.
+</pre></div>
 
-     <p>The PluginClient defines <b>get_total_len()</b> and <b>get_source_start()</b>
+<p>The usage of <b>start_progress</b> depends on whether the plugin is
+multichannel or single channel.  If it&rsquo;s multichannel you always call
+start_progress.  If it&rsquo;s single channel, you first need to know whether
+the progress bar has already started in another instance of the plugin.
+</p>
+<p>If <b>PluginClient::interactive</b> is 1, you need to start the progress
+bar.  If it&rsquo;s 0, the progress bar has already been started.
+</p>
+<p>The PluginClient defines <b>get_total_len()</b> and <b>get_source_start()</b>
 to describe the timeline range to be processed.  The units are either
 samples or frames and in the project rate.
+</p>
+</li><li> int process_loop
 
-     <li>int process_loop
-
-     <p>This is called repeatedly until the timeline range is processed.  It
+<p>This is called repeatedly until the timeline range is processed.  It
 has either a samples or frames buffer for output and a reference to
 write_length to store the number of samples processed.  If this is an
 audio plugin, the user needs to call <b>get_buffer_size()</b> to know how
 many samples the output buffer can hold.
-
-     <p>The plugin must use <b>read_samples</b> or <b>read_frame</b> to read the
+</p>
+<p>The plugin must use <b>read_samples</b> or <b>read_frame</b> to read the
 input.  These functions are a bit different for a non realtime plugin
 than they are for a realtime plugin.
-
-     <p>They take a buffer and a position relative to the start of the
-timeline, in the timeline's rate.  Then you must process it and put the
+</p>
+<p>They take a buffer and a position relative to the start of the
+timeline, in the timeline&rsquo;s rate.  Then you must process it and put the
 output in the buffer argument to process_loop.  write_length should
-contain the number of samples generated if it's audio.
-
-     <p>Finally, process_loop must test <b>PluginClient::interactive</b> and
-update the progress bar if it's 1.
-
-     <pre class="example">          progress-&gt;update(total_written);
-</pre>
-     <p>returns 1 or 0 if the progress bar was cancelled.  If it's 1,
+contain the number of samples generated if it&rsquo;s audio.
+</p>
+<p>Finally, process_loop must test <b>PluginClient::interactive</b> and
+update the progress bar if it&rsquo;s 1.
+</p>
+<div class="example">
+<pre class="example">progress-&gt;update(total_written);
+</pre></div>
+
+<p>returns 1 or 0 if the progress bar was cancelled.  If it&rsquo;s 1,
 process_loop should return 1 to indicate a cancellation.  In addition
 to progress bar cancellation, <b>process_loop</b> should return 1 when the
 entire timeline range is processed.
+</p>
+</li><li> int stop_loop();
 
-     <li>int stop_loop();
-
-     <p>This is called after process_loop processes its last buffer.
-
-     <p>If PluginClient::is_interactive is 1, this should call
+<p>This is called after process_loop processes its last buffer.  
+</p>
+<p>If PluginClient::is_interactive is 1, this should call
 <b>stop_progress</b> in the progress bar pointer and delete the pointer. 
 Then it should delete any objects it created for processing in
 <b>start_loop</b>.
+</p>
 
-   </ul>
+</li></ul>
 
-<div class="node">
-<a name="AUDIO-PLUGINS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#VIDEO-PLUGINS">VIDEO PLUGINS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#NONREALTIME-PLUGINS">NONREALTIME PLUGINS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
-</div>
 
+<hr>
+<a name="AUDIO-PLUGINS"></a>
+<div class="header">
+<p>
+Next: <a href="#VIDEO-PLUGINS" accesskey="n" rel="next">VIDEO PLUGINS</a>, Previous: <a href="#NONREALTIME-PLUGINS" accesskey="p" rel="prev">NONREALTIME PLUGINS</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="AUDIO-PLUGINS-1"></a>
 <h3 class="section">19.5 AUDIO PLUGINS</h3>
 
 <p>The simplest audio plugin is Gain.  The processing object should
 include <b>pluginaclient.h</b> and inherit from <b>PluginAClient</b>.  Realtime audio plugins need to
-define
-
-<pre class="example">     int process_buffer(int64_t size,
-               double **buffer,
-               int64_t start_position,
-               int sample_rate);
-</pre>
-   <p>if it's multichannel or
-
-<pre class="example">     int process_buffer(int64_t size,
-               double *buffer,
-               int64_t start_position,
-               int sample_rate);
-</pre>
-   <p>if it's single channel.  These should return 0 on success and 1 on
+define 
+</p>
+<div class="example">
+<pre class="example">int process_buffer(int64_t size, 
+               double **buffer,
+               int64_t start_position,
+               int sample_rate);
+</pre></div>
+
+<p>if it&rsquo;s multichannel or 
+</p>
+<div class="example">
+<pre class="example">int process_buffer(int64_t size, 
+               double *buffer,
+               int64_t start_position,
+               int sample_rate);
+</pre></div>
+
+<p>if it&rsquo;s single channel.  These should return 0 on success and 1 on
 failure.  In the future, the return value may abort failed rendering.
-
-   <p>The processing function needs to request input samples with
-
-<pre class="example">     int read_samples(double *buffer,
-               int channel,
-               int sample_rate,
-               int64_t start_position,
-               int64_t len);
-</pre>
-   <p>It always returns 0.  The user may specify any desired sample rate and
+</p>
+<p>The processing function needs to request input samples with 
+</p>
+<div class="example">
+<pre class="example">int read_samples(double *buffer,
+               int channel,
+               int sample_rate,
+               int64_t start_position,
+               int64_t len);
+</pre></div>
+
+<p>It always returns 0.  The user may specify any desired sample rate and
 start position.
-
-   <p>Nonrealtime audio plugins need to define
-
-<pre class="example">     int process_loop(double *buffer, int64_t &amp;write_length);
-</pre>
-   <p>for single channel or
-
-<pre class="example">     int process_loop(double **buffers, int64_t &amp;write_length);
-</pre>
-   <p>for multi channel.  Non realtime plugins use a different set of
+</p>
+<p>Nonrealtime audio plugins need to define
+</p>
+<div class="example">
+<pre class="example">int process_loop(double *buffer, int64_t &amp;write_length);
+</pre></div>
+
+<p>for single channel or
+</p>
+<div class="example">
+<pre class="example">int process_loop(double **buffers, int64_t &amp;write_length);
+</pre></div>
+
+<p>for multi channel.  Non realtime plugins use a different set of
 read_samples functions to request input data.  These are fixed to the
 project sample rate.
+</p>
 
-<div class="node">
-<a name="VIDEO-PLUGINS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TRANSITION-PLUGINS">TRANSITION PLUGINS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AUDIO-PLUGINS">AUDIO PLUGINS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
+<hr>
+<a name="VIDEO-PLUGINS"></a>
+<div class="header">
+<p>
+Next: <a href="#TRANSITION-PLUGINS" accesskey="n" rel="next">TRANSITION PLUGINS</a>, Previous: <a href="#AUDIO-PLUGINS" accesskey="p" rel="prev">AUDIO PLUGINS</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="VIDEO-PLUGINS-1"></a>
 <h3 class="section">19.6 VIDEO PLUGINS</h3>
 
-<p>The simplest video plugin is Flip.  The processing object should
-include <b>pluginvclient.h</b> and inherit from <b>PluginVClient</b>. 
-Realtime video plugins need to define
-
-<pre class="example">     int process_buffer(VFrame **frame,
-       int64_t start_position,
-       double frame_rate);
-</pre>
-   <p>if it's multichannel or
-
-<pre class="example">     int process_buffer(VFrame *frame,
-       int64_t start_position,
-       double frame_rate);
-</pre>
-   <p>if it's single channel.
 
-   <p>The nonrealtime video plugins need to define
 
-<pre class="example">     int process_loop(VFrame *buffer);
-</pre>
-   <p>for single channel or
 
-<pre class="example">     int process_loop(VFrame **buffers);
-</pre>
-   <p>for multi channel.  The amount of frames generated in a single
+<p>The simplest video plugin is Flip.  The processing object should
+include <b>pluginvclient.h</b> and inherit from <b>PluginVClient</b>. 
+Realtime video plugins need to define 
+</p>
+<div class="example">
+<pre class="example">int process_buffer(VFrame **frame,
+       int64_t start_position,
+       double frame_rate);
+</pre></div>
+
+<p>if it&rsquo;s multichannel or 
+</p>
+<div class="example">
+<pre class="example">int process_buffer(VFrame *frame,
+       int64_t start_position,
+       double frame_rate);
+</pre></div>
+
+<p>if it&rsquo;s single channel.  
+</p>
+<p>The nonrealtime video plugins need to define
+</p>
+<div class="example">
+<pre class="example">int process_loop(VFrame *buffer);
+</pre></div>
+
+<p>for single channel or
+</p>
+<div class="example">
+<pre class="example">int process_loop(VFrame **buffers);
+</pre></div>
+
+<p>for multi channel.  The amount of frames generated in a single
 process_loop is always assumed to be 1, hence the lack of a
 write_length argument.  Returning 0 causes the rendering to continue. 
 Returning 1 causes the rendering to abort.
-
-   <p>A set of read_frame functions exist for requesting input frames in
+</p>
+<p>A set of read_frame functions exist for requesting input frames in
 non-realtime video plugins.  These are fixed to the project frame rate.
+</p>
 
-<div class="node">
+<hr>
 <a name="TRANSITION-PLUGINS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#VIDEO-PLUGINS">VIDEO PLUGINS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
-
+<div class="header">
+<p>
+Next: <a href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK" accesskey="n" rel="next">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>, Previous: <a href="#VIDEO-PLUGINS" accesskey="p" rel="prev">VIDEO PLUGINS</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="TRANSITION-PLUGINS-1"></a>
 <h3 class="section">19.7 TRANSITION PLUGINS</h3>
 
+
+
+
 <p>The simplest video transition is <b>wipe</b> and the simplest audio
 transition is <b>crossfade</b>.  These use a subset of the default class
 members of realtime plugins, but so far no analogue to
 PLUGIN_CLASS_MEMBERS has been done for transitions.
-
-   <p>The processing object for audio transitions still inherits from
+</p>
+<p>The processing object for audio transitions still inherits from
 PluginAClient and for video transitions it still inherits from
 PluginVClient.
-
-   <p>Transitions may or may not have a GUI.  If they have a GUI, they must
+</p>
+<p>Transitions may or may not have a GUI.  If they have a GUI, they must
 also manage a thread like realtime plugins.  Do this with the same
 PLUGIN_THREAD_OBJECT and PLUGIN_THREAD_HEADER macros as realtime
-plugins.  Since there is only one keyframe in a transition, you don't
+plugins.  Since there is only one keyframe in a transition, you don&rsquo;t
 need to worry about updating the GUI from the processing object like
 you do in a realtime plugin.
-
-   <p>If the transition has a GUI, you can use PLUGIN_CONSTRUCTOR_MACRO and
-PLUGIN_DESTRUCTOR_MACRO to initialize the processing object.  You'll
+</p>
+<p>If the transition has a GUI, you can use PLUGIN_CONSTRUCTOR_MACRO and 
+PLUGIN_DESTRUCTOR_MACRO to initialize the processing object.  You&rsquo;ll
 also need a BC_Hash object and a Thread object for these macros.
-
-   <p>Since the GUI is optional, overwrite a function called <b>uses_gui()</b>
+</p>
+<p>Since the GUI is optional, overwrite a function called <b>uses_gui()</b>
 to signifiy whether or not the transition has a GUI.  Return 1 if it
-does and 0 if it doesn't.
-
-   <p>Transitions need a <b>load_defaults</b> and <b>save_defaults</b> function so
-the first time they're dropped on the timeline they'll have useful
+does and 0 if it doesn&rsquo;t.
+</p>
+<p>Transitions need a <b>load_defaults</b> and <b>save_defaults</b> function so
+the first time they&rsquo;re dropped on the timeline they&rsquo;ll have useful
 settings.
-
-   <p>A <b>read_data</b> and <b>save_data</b> function takes over after insertion
+</p>
+<p>A <b>read_data</b> and <b>save_data</b> function takes over after insertion
 to access data specific to each instance of the transition.
-
-   <p>The most important difference between transitions and realtime plugins
+</p>
+<p>The most important difference between transitions and realtime plugins
 is the addition of an <b>is_transition</b> method to the processing
 object.  <b>is_transition</b> should return 1 to signify the plugin is a
 transition.
-
-   <p>Transitions process data in a <b>process_realtime</b> function.
-
-<pre class="example">     int process_realtime(VFrame *input,
-               VFrame *output);
-</pre>
-   <pre class="example">     int process_realtime(int64_t size,
-               double *input_ptr,
-               double *output_ptr);
-</pre>
-   <p>The input argument to process_realtime is the data for the next edit. 
+</p>
+<p>Transitions process data in a <b>process_realtime</b> function.
+</p>
+<div class="example">
+<pre class="example">int process_realtime(VFrame *input, 
+               VFrame *output);
+</pre></div>
+
+<div class="example">
+<pre class="example">int process_realtime(int64_t size, 
+               double *input_ptr, 
+               double *output_ptr);
+</pre></div>
+
+<p>The input argument to process_realtime is the data for the next edit. 
 The output argument to process_realtime is the data for the previous
 edit.
-
-   <p>Routines exist for determining where you are relative to the
-transition's start and end.
-
-     <ul>
-<li><b>PluginClient::get_source_position()</b> - returns the current
+</p>
+<p>Routines exist for determining where you are relative to the
+transition&rsquo;s start and end.
+</p>
+<ul>
+<li> <b>PluginClient::get_source_position()</b> - returns the current
 position since the start of the transition of the lowest sample in the
 buffers.
 
-     <li><b>PluginClient::get_total_len()</b> - returns the integer length of
+</li><li> <b>PluginClient::get_total_len()</b> - returns the integer length of
 the transition.  The units are either samples or frames, in the data
 rate requested by the first plugin.
 
-   </ul>
+</li></ul>
 
-   <p>Users should divide the source position by total length to get the
+<p>Users should divide the source position by total length to get the
 fraction of the transition the current <b>process_realtime</b> function is
 at.
-
-   <p>Transitions run in the data rate requested by the first plugin in the
+</p>
+<p>Transitions run in the data rate requested by the first plugin in the
 track.  This may be different than the project data rate.  Since
 process_realtime lacks a rate argument, use <b>get_framerate()</b> or
 <b>get_samplerate</b> to get the requested rate.
+</p>
 
-<div class="node">
-<a name="PLUGIN-GUI'S-WHICH-UPDATE-DURING-PLAYBACK"></a>
-<a name="PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-OPENGL">USING OPENGL</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#TRANSITION-PLUGINS">TRANSITION PLUGINS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
-</div>
 
-<h3 class="section">19.8 PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</h3>
+
+<hr>
+<a name="PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK"></a>
+<div class="header">
+<p>
+Next: <a href="#PLUGIN-QUERIES" accesskey="n" rel="next">PLUGIN QUERIES</a>, Previous: <a href="#TRANSITION-PLUGINS" accesskey="p" rel="prev">TRANSITION PLUGINS</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK-1"></a>
+<h3 class="section">19.8 PLUGIN GUI&rsquo;S WHICH UPDATE DURING PLAYBACK</h3>
 
 <p>Effects like <b>Histogram</b> and <b>VideoScope</b> need to update the GUI
 during playback to display information about the signal.  This is
@@ -9377,422 +10386,476 @@ Normally in process_buffer, when the processing object wants to update
 the GUI it should call <b>send_render_gui</b>.  This should only be called
 in process_buffer.  Send_render_gui goes through a search and
 eventually calls <b>render_gui</b> in the GUI instance of the plugin.
+</p>
+<p>Render_gui should have a sequence like
+</p>
+<div class="example">
+<pre class="example">void MyPlugin::render_gui(void *data)
+{
+       if(thread)
+       {
+               thread-&gt;window-&gt;lock_window();
+
+// update GUI here
+
+               thread-&gt;window-&gt;unlock_window();
+       }
+}
+
+</pre></div>
 
-   <p>Render_gui should have a sequence like
-
-<pre class="example">     void MyPlugin::render_gui(void *data)
-     {
-       if(thread)
-       {
-               thread-&gt;window-&gt;lock_window();
-     
-     // update GUI here
-     
-               thread-&gt;window-&gt;unlock_window();
-       }
-     }
-     
-</pre>
-   <p>Send_render_gui and render_gui use one argument, a void pointer to
+
+<p>Send_render_gui and render_gui use one argument, a void pointer to
 transfer information from the processing object to the GUI.  The user
 should typecast this pointer into something useful.
+</p>
+
+
+
+
+
 
-<div class="node">
-<a name="PLUGIN-QUERIES"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#USING-OPENGL">USING OPENGL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
-</div>
 
+
+
+<hr>
+<a name="PLUGIN-QUERIES"></a>
+<div class="header">
+<p>
+Next: <a href="#USING-OPENGL" accesskey="n" rel="next">USING OPENGL</a>, Previous: <a href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK" accesskey="p" rel="prev">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="PLUGIN-QUERIES-1"></a>
 <h3 class="section">19.9 PLUGIN QUERIES</h3>
 
+
 <p>There are several useful queries in PluginClient which can be accessed
 from the processing object.  Some of them have different meaning in
 realtime and non-realtime mode.  They all give information about the
 operating system or the project which can be used to improve the
 quality of the processing.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#SYSTEM-QUERIES" accesskey="1">SYSTEM QUERIES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Utilities for determining the system resources.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#TIMING-QUERIES" accesskey="2">TIMING QUERIES</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Utilities for performing time-dependant processing.
+</td></tr>
+</table>
 
-<ul class="menu">
-<li><a accesskey="1" href="#SYSTEM-QUERIES">SYSTEM QUERIES</a>:  Utilities for determining the system resources. 
-<li><a accesskey="2" href="#TIMING-QUERIES">TIMING QUERIES</a>:  Utilities for performing time-dependant processing. 
-</ul>
 
-<div class="node">
-<a name="SYSTEM-QUERIES"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#TIMING-QUERIES">TIMING QUERIES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-QUERIES">PLUGIN QUERIES</a>
 
-</div>
 
+
+<hr>
+<a name="SYSTEM-QUERIES"></a>
+<div class="header">
+<p>
+Next: <a href="#TIMING-QUERIES" accesskey="n" rel="next">TIMING QUERIES</a>, Up: <a href="#PLUGIN-QUERIES" accesskey="u" rel="up">PLUGIN QUERIES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="SYSTEM-QUERIES-1"></a>
 <h4 class="subsection">19.9.1 SYSTEM QUERIES</h4>
 
-     <ul>
-<li>
+
+<ul>
+<li> 
 <b>get_interpolation_type()</b> returns the type of interpolation the user
 wants for all scaling operations.  This is a macro from
 overlayframe.inc.  It can be applied to any call to the
 <b>OverlayFrame</b> object.
 
-     <li>
-<b>get_project_smp()</b> Gives the number of CPU's on the system minus 1. 
-If it's a uniprocessor it's 0.  If it's a dual processor, it's 1.  This
+</li><li> 
+<b>get_project_smp()</b> Gives the number of CPU&rsquo;s on the system minus 1. 
+If it&rsquo;s a uniprocessor it&rsquo;s 0.  If it&rsquo;s a dual processor, it&rsquo;s 1.  This
 number should be used to gain parallelism.
 
-     <li>
+</li><li> 
 <b>get_total_buffers()</b> Gives the number of tracks a multichannel
 plugin needs to process.
 
-</ul>
 
-<div class="node">
-<a name="TIMING-QUERIES"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#SYSTEM-QUERIES">SYSTEM QUERIES</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-QUERIES">PLUGIN QUERIES</a>
+</li></ul>
+
+
+
 
-</div>
 
+
+<hr>
+<a name="TIMING-QUERIES"></a>
+<div class="header">
+<p>
+Previous: <a href="#SYSTEM-QUERIES" accesskey="p" rel="prev">SYSTEM QUERIES</a>, Up: <a href="#PLUGIN-QUERIES" accesskey="u" rel="up">PLUGIN QUERIES</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="TIMING-QUERIES-1"></a>
 <h4 class="subsection">19.9.2 TIMING QUERIES</h4>
 
+
 <p>There are two rates for media a realtime plugin has to be aware of: the
 project rate and the requested rate.  Functions are provided for
 getting the project and requested rate.  In addition, doing time
 dependant effects requires using several functions which tell where you
 are in the effect.
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 <b>get_project_framerate()</b> Gives the frames per second of the video as
 defined by the project settings.
 
-     <li>
+
+</li><li> 
 <b>get_project_samplerate()</b> Gives the samples per second of the audio as
 defined by the project settings.
 
-     <li>
+</li><li> 
 <b>get_framerate()</b> Gives the frames per second requested by the plugin
 after this one.  This is the requested frame rate and is the same as
 the frame_rate argument to process_buffer.
 
-     <li>
+</li><li> 
 <b>get_samplerate()</b> Gives the samples per second requested by the plugin
 after this one.  This is the requested sample rate and is the same as
 the sample_rate argument to process_buffer.
 
-     <li>
+</li><li> 
 <b>get_total_len()</b> Gives the number of samples or frames in the
 range covered by the effect, relative to the requested data rate.
 
-     <li>
+</li><li> 
 <b>get_source_start()</b> For realtime plugins it gives the lowest sample
 or frame in the effect range in the requested data rate.  For
-nonrealtime plugins it's the start of the range of the timeline to
+nonrealtime plugins it&rsquo;s the start of the range of the timeline to
 process.
 
-     <li>
-<b>get_source_position()</b> For realtime plugins it's the lowest numbered
+</li><li> 
+<b>get_source_position()</b> For realtime plugins it&rsquo;s the lowest numbered
 sample in the requested region to process if playing forward and the
 highest numbered sample in the region if playing backward.  For video
-it's the start of the frame if playing forward and the end of the frame
+it&rsquo;s the start of the frame if playing forward and the end of the frame
 if playing in reverse.  The position is relative to the start of the
 EDL and in the requested data rate.
 
-     <p>For transitions this is always the lowest numbered sample of the region
+<p>For transitions this is always the lowest numbered sample of the region
 to process relative to the start of the transition.
-
-     <li>
+</p>
+</li><li> 
 <b>get_direction()</b> Gives the direction of the current playback
 operation.  This is a macro defined in transportque.inc.  This is
 useful for calling read functions since the read functions position
 themselves at the start or end of the region to read, depending on the
 playback operation.
 
-     <li>
+</li><li> 
 <b>local_to_edl()</b>
 
-     <li>
+</li><li> 
 <b>edl_to_local()</b>
 
-     <p>These convert between the requested data rate and the project data
+<p>These convert between the requested data rate and the project data
 rate.  They are used to convert keyframe positions into numbers which
 can be interpolated at the requested data rate.  The conversion is
 automatically based on frame rate or sample rate depending on the type
 of plugin.
+</p>
+</li><li> <b>get_prev_keyframe(int64_t position, int is_local)</b>
 
-     <li><b>get_prev_keyframe(int64_t position, int is_local)</b>
+</li><li> <b>get_next_keyframe(int64_t position, int is_local)</b>  
 
-     <li><b>get_next_keyframe(int64_t position, int is_local)</b>
-
-     <p>These give the nearest keyframe before or after the position given. 
+<p>These give the nearest keyframe before or after the position given. 
 The macro defined version of load_configuration automatically retrieves
 the right keyframes but you may want to do this on your own.
-
-     <p>The position argument can be either in the project rate or the
-requested rate.  Set is_local to 1 if it's in the requested rate and 0
-if it's in the project rate.
-
-     <p>In each keyframe, another position value tells the keyframe's position
+</p>
+<p>The position argument can be either in the project rate or the
+requested rate.  Set is_local to 1 if it&rsquo;s in the requested rate and 0
+if it&rsquo;s in the project rate.
+</p>
+<p>In each keyframe, another position value tells the keyframe&rsquo;s position
 relative to the start of the timeline and in the project rate.
-
-     <p>The only way to get smooth interpolation between keyframes is to
+</p>
+<p>The only way to get smooth interpolation between keyframes is to
 convert the positions in the keyframe objects to the requested rate. 
 Do this by using edl_to_local on the keyframe positions.
+</p>
+</li></ul>
+
 
-   </ul>
 
-<div class="node">
-<a name="USING-OPENGL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PLUGIN-QUERIES">PLUGIN QUERIES</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PLUGIN-GUI_0027S-WHICH-UPDATE-DURING-PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>
 
-</div>
 
+<hr>
+<a name="USING-OPENGL"></a>
+<div class="header">
+<p>
+Next: <a href="#PLUGIN-QUERIES" accesskey="n" rel="next">PLUGIN QUERIES</a>, Previous: <a href="#PLUGIN-QUERIES" accesskey="p" rel="prev">PLUGIN QUERIES</a>, Up: <a href="#PLUGIN-AUTHORING" accesskey="u" rel="up">PLUGIN AUTHORING</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="USING-OPENGL-1"></a>
 <h3 class="section">19.10 USING OPENGL</h3>
 
+
+
 <p>Realtime video plugins support OpenGL.  Using OpenGL to do plugin
 routines can speed up playback greatly since it does most of the work
 in hardware.  Unfortunately, every OpenGL routine needs a software
 counterpart for rendering, doubling the amount of software to
 maintain.  Fortunately, having an OpenGL routine means the software
-version doesn't need to be as optimized as it did when software was the
+version doesn&rsquo;t need to be as optimized as it did when software was the
 only way.
-
-   <p>As always, the best way to design a first OpenGL plugin is to copy an
+</p>
+<p>As always, the best way to design a first OpenGL plugin is to copy an
 existing one and alter it.  The <b>Brightness</b> plugin is a simple
 OpenGL plugin to copy.  There are 3 main points in OpenGL rendering and
 1 point for optimizing OpenGL rendering.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#GETTING-OPENGL-DATA" accesskey="1">GETTING OPENGL DATA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Getting video data in a form usable by OpenGL
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#DRAWING-USING-OPENGL" accesskey="2">DRAWING USING OPENGL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The method of drawing video in OpenGL
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#USING-SHADERS" accesskey="3">USING SHADERS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Routines to simplify shader usage
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#AGGREGATING-PLUGINS" accesskey="4">AGGREGATING PLUGINS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Combining OpenGL routines from different plugins into one.
+</td></tr>
+</table>
 
-<ul class="menu">
-<li><a accesskey="1" href="#GETTING-OPENGL-DATA">GETTING OPENGL DATA</a>:  Getting video data in a form usable by OpenGL
-<li><a accesskey="2" href="#DRAWING-USING-OPENGL">DRAWING USING OPENGL</a>:  The method of drawing video in OpenGL
-<li><a accesskey="3" href="#USING-SHADERS">USING SHADERS</a>:  Routines to simplify shader usage
-<li><a accesskey="4" href="#AGGREGATING-PLUGINS">AGGREGATING PLUGINS</a>:  Combining OpenGL routines from different plugins into one. 
-</ul>
 
-<div class="node">
-<a name="GETTING-OPENGL-DATA"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#DRAWING-USING-OPENGL">DRAWING USING OPENGL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-OPENGL">USING OPENGL</a>
 
+<hr>
+<a name="GETTING-OPENGL-DATA"></a>
+<div class="header">
+<p>
+Next: <a href="#DRAWING-USING-OPENGL" accesskey="n" rel="next">DRAWING USING OPENGL</a>, Up: <a href="#USING-OPENGL" accesskey="u" rel="up">USING OPENGL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="GETTING-OPENGL-DATA-1"></a>
 <h4 class="subsection">19.10.1 GETTING OPENGL DATA</h4>
 
 <p>The first problem is getting OpenGL-enabled plugins to interact with
 software-only plugins.  To solve this, all the information required to
 do OpenGL playback is stored in the VFrame object which is passed to
 <b>process_buffer</b>.  To support 3D, the VFrame contains a PBuffer and a
-texture, in addition to VFrame's original rows.
-
-   <p>In OpenGL mode, VFrame has 3 states corresponding to the location of
+texture, in addition to VFrame&rsquo;s original rows.
+</p>
+<p>In OpenGL mode, VFrame has 3 states corresponding to the location of
 its video data.  The opengl state is recovered by calling
 <b>get_opengl_state</b> and is set by calling <b>set_opengl_state</b>.  The
 states are:
-
-     <ul>
-<li>
+</p>
+<ul>
+<li> 
 <b>VFrame::RAM</b> - This means the video data is stored in the
 traditional row pointers.  It must be loaded into a texture before
 being drawn using OpenGL routines.
 
-     <li><b>VFrame::TEXTURE</b> - The video data is stored in texture
-memory.  It's ready to be drawn using OpenGL routines.
+</li><li> <b>VFrame::TEXTURE</b> - The video data is stored in texture
+memory.  It&rsquo;s ready to be drawn using OpenGL routines.
 
-     <li><b>VFrame::SCREEN</b> - The video data is stored in a frame buffer
+</li><li> <b>VFrame::SCREEN</b> - The video data is stored in a frame buffer
 in the graphics card.  For plugins, the frame buffer is always a
-PBuffer.  The image on the frame buffer can't be replicated again
+PBuffer.  The image on the frame buffer can&rsquo;t be replicated again
 unless it is read back into the texture and the opengl state is reset
 to TEXTURE.  The frame buffer is limited to 8 bits per channel.  If an
 OpenGL effect is used in a floating point project, it only retains 8
 bits.
 
-   </ul>
+</li></ul>
 
-   <p>In the plugin's <b>process_buffer</b> routine, there is normally a call to
+<p>In the plugin&rsquo;s <b>process_buffer</b> routine, there is normally a call to
 <b>read_frame</b> to get data from the previous plugin in the chain. 
-<b>read_frame</b> takes a new parameter called <b>use_opengl</b>.
-
-   <p>The plugin passes 1 to <b>use_opengl</b> if it intends to handle the data
+<b>read_frame</b> takes a new parameter called <b>use_opengl</b>.  
+</p>
+<p>The plugin passes 1 to <b>use_opengl</b> if it intends to handle the data
 using OpenGL.  It passes 0 to <b>use_opengl</b> if it can only handle the
 data using software.  The value of <b>use_opengl</b> is passed up the
 chain to ensure a plugin which only does software only gets the data in
 the row pointers.  If <b>use_opengl</b> is 0, the opengl state in VFrame
 is RAM.
-
-   <p>The plugin must not only know if it is software-only but if its output
+</p>
+<p>The plugin must not only know if it is software-only but if its output
 must be software only.  Call <b>get_use_opengl</b> to determine if the
 output can be handled by OpenGL.  If <b>get_use_opengl</b> returns 0, the
 plugin must pass 0 for <b>use_opengl</b> in <b>read_frame</b> and do its
 processing in software.  If <b>get_use_opengl</b> is 1, the plugin can
 decide based on its implementation whether to use OpenGL.
+</p>
 
-   <p>The main problem with OpenGL is that all the gl... calls need to be run
+<p>The main problem with OpenGL is that all the gl... calls need to be run
 from the same thread.  To work around this, the plugin interface has
-routines for running OpenGL in a common thread.
+routines for running OpenGL in a common thread.  
+</p>
 
-   <p><b>run_opengl</b> transfers control to the common OpenGL thread.  This is
+<p><b>run_opengl</b> transfers control to the common OpenGL thread.  This is
 normally called by the plugin in <b>process_buffer</b> after it calls
 <b>read_frame</b> and only if <b>get_use_opengl</b> is 1.
-
-   <p>Through a series of indirections, <b>run_opengl</b> eventually transfers
+</p>
+<p>Through a series of indirections, <b>run_opengl</b> eventually transfers
 control to a virtual function called <b>handle_opengl</b>. 
 <b>handle_opengl</b> must be overridden with a function to perform all the
 OpenGL routines.  The contents of <b>handle_opengl</b> must be enclosed in
 <b>#ifdef HAVE_GL</b> ... <b>#endif</b> to allow it to be compiled on systems
 with no graphics support, like render nodes.  The return value of
 <b>handle_opengl</b> is passed back from <b>run_opengl</b>.
-
-   <p><b>read_frame</b> can't be called from inside <b>handle_opengl</b>.  This
+</p>
+<p><b>read_frame</b> can&rsquo;t be called from inside <b>handle_opengl</b>.  This
 would create a recursive lockup because it would cause other objects to
 call <b>run_opengl</b>.
-
-   <p>Once inside <b>handle_opengl</b>, the plugin has full usage of all the
+</p>
+<p>Once inside <b>handle_opengl</b>, the plugin has full usage of all the
 OpenGL features.  VFrame provides some functions to automate common
 OpenGL sequences.
-
-   <p>The VFrame argument to <b>process_buffer</b> is always available through
+</p>
+<p>The VFrame argument to <b>process_buffer</b> is always available through
 the <b>get_output(int layer)</b> function.  If the plugin is multichannel,
 the layer argument retrieves a specific layer of the output buffers. 
 The PBuffer of the output buffer is where the OpenGL output must go if
 any processing is done.
+</p>
 
-<div class="node">
-<a name="DRAWING-USING-OPENGL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#USING-SHADERS">USING SHADERS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#GETTING-OPENGL-DATA">GETTING OPENGL DATA</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-OPENGL">USING OPENGL</a>
 
+<hr>
+<a name="DRAWING-USING-OPENGL"></a>
+<div class="header">
+<p>
+Next: <a href="#USING-SHADERS" accesskey="n" rel="next">USING SHADERS</a>, Previous: <a href="#GETTING-OPENGL-DATA" accesskey="p" rel="prev">GETTING OPENGL DATA</a>, Up: <a href="#USING-OPENGL" accesskey="u" rel="up">USING OPENGL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
 </div>
-
+<a name="DRAWING-USING-OPENGL-1"></a>
 <h4 class="subsection">19.10.2 DRAWING USING OPENGL</h4>
 
+
 <p>The sequence of commands to draw on the output PBuffer stars with
 getting the video in a memory area where it can be recalled for
 drawing:
-
-<pre class="example">     get_output()-&gt;to_texture();
-     get_output()-&gt;enable_opengl();
-</pre>
-   <p><b>to_texture</b> transfers the OpenGL data from wherever it is to the
-output's texture memory and sets the output state to TEXTURE.
-
-   <p><b>enable_opengl</b> makes the OpenGL context relative to the output's
+</p>
+<div class="example">
+<pre class="example">get_output()-&gt;to_texture();
+get_output()-&gt;enable_opengl();
+</pre></div>
+
+<p><b>to_texture</b> transfers the OpenGL data from wherever it is to the
+output&rsquo;s texture memory and sets the output state to TEXTURE.
+</p>
+<p><b>enable_opengl</b> makes the OpenGL context relative to the output&rsquo;s
 PBuffer.
-
-   <p>The next step is to draw the texture with some processing on the
+</p>
+<p>The next step is to draw the texture with some processing on the
 PBuffer.  The normal sequence of commands to draw a texture is:
-
-<pre class="example">     get_output()-&gt;init_screen();
-     get_output()-&gt;bind_texture(0);
-     get_output()-&gt;draw_texture();
-</pre>
-   <p><b>VFrame::init_screen</b> sets the OpenGL frustum and parameters to known
+</p>
+<div class="example">
+<pre class="example">get_output()-&gt;init_screen();
+get_output()-&gt;bind_texture(0);
+get_output()-&gt;draw_texture();
+</pre></div>
+
+<p><b>VFrame::init_screen</b> sets the OpenGL frustum and parameters to known
 values.
-
-   <p><b>VFrame::bind_texture(int texture_unit)</b> binds the texture to the given
+</p>
+<p><b>VFrame::bind_texture(int texture_unit)</b> binds the texture to the given
 texture unit and enables it.
-
-   <p><b>VFrame::draw_texture()</b> calls the vertex functions to draw the
+</p>
+<p><b>VFrame::draw_texture()</b> calls the vertex functions to draw the
 texture normalized to the size of the PBuffer.  Copy this if you want
 custom vertices.
-
-   <p>The last step in the handle_opengl routine, after the texture has been
-drawn on the PBuffer, is to set the output's opengl state to SCREEN
+</p>
+<p>The last step in the handle_opengl routine, after the texture has been
+drawn on the PBuffer, is to set the output&rsquo;s opengl state to SCREEN
 with a call to <b>VFrame::set_opengl_state</b>.  The plugin should not
 read back the frame buffer into a texture or row pointers if it has no
 further processing.  Plugins should only leave the output in the
 texture or RAM if its location results from normal processing.  They
 should set the opengl state to RAM or TEXTURE if they do.
-
-   <p><b>Colormodels in OpenGL</b>
-
-   <p>The colormodel exposed to OpenGL routines is always floating point since
+</p>
+<p><b>Colormodels in OpenGL</b>
+</p>
+<p>The colormodel exposed to OpenGL routines is always floating point since
 that is what OpenGL uses, but it may be YUV or RGB depending on the
-project settings.  If it's YUV, the U &amp; V are offset by 0.5 just like in
+project settings.  If it&rsquo;s YUV, the U &amp; V are offset by 0.5 just like in
 software.  Passing YUV colormodels to plugins was necessary for speed. 
 The other option was to convert YUV to RGB in the first step that needed
 OpenGL.  Every effect and rendering step would have needed a YUV to RGB
 routine.  With the YUV retained, only the final compositing step needs a
 YUV to RGB routine.
-
-   <p>The OpenGL mode differentiates between alpha &amp; flat colormodels even
+</p>
+<p>The OpenGL mode differentiates between alpha &amp; flat colormodels even
 though OpenGL always has an alpha channel.  For RGB colormodels, you
 must multiply the alpha component by the RGB &amp; set the alpha component
 to 1 whenever the colormodel has no alpha to ensure consistency with the
 software mode.
+</p>
+<div class="example">
+<pre class="example">Rout = Rin * Ain
+Gout = Gin * Ain
+Bout = Bin * Ain
+Aout = 1
+</pre></div>
+
 
-<pre class="example">     Rout = Rin * Ain
-     Gout = Gin * Ain
-     Bout = Bin * Ain
-     Aout = 1
-</pre>
-   <p>For YUV colormodels, you must multiply the alpha using the following
+<p>For YUV colormodels, you must multiply the alpha using the following
 formula.
+</p>
+<div class="example">
+<pre class="example">Yout = Yin * Ain
+Uout = Uin * Ain + 0.5 * (1 - Ain)
+Vout = Vin * Ain + 0.5 * (1 - Ain)
+Aout = 1
+</pre></div>
 
-<pre class="example">     Yout = Yin * Ain
-     Uout = Uin * Ain + 0.5 * (1 - Ain)
-     Vout = Vin * Ain + 0.5 * (1 - Ain)
-     Aout = 1
-</pre>
-   <div class="node">
-<a name="USING-SHADERS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AGGREGATING-PLUGINS">AGGREGATING PLUGINS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#DRAWING-USING-OPENGL">DRAWING USING OPENGL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-OPENGL">USING OPENGL</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="USING-SHADERS"></a>
+<div class="header">
+<p>
+Next: <a href="#AGGREGATING-PLUGINS" accesskey="n" rel="next">AGGREGATING PLUGINS</a>, Previous: <a href="#DRAWING-USING-OPENGL" accesskey="p" rel="prev">DRAWING USING OPENGL</a>, Up: <a href="#USING-OPENGL" accesskey="u" rel="up">USING OPENGL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="USING-SHADERS-1"></a>
 <h4 class="subsection">19.10.3 USING SHADERS</h4>
 
 <p>Very few effects can do anything useful with just a straight drawing of
-the texture on the PBuffer.  It's also not easy to figure out exactly
+the texture on the PBuffer.  It&rsquo;s also not easy to figure out exactly
 what math is being used by the different OpenGL blending macros. 
-Normally you'll use shaders.  The shader is a C program which runs on
+Normally you&rsquo;ll use shaders.  The shader is a C program which runs on
 the graphics card.  Since the graphics card is optimized for graphics,
 it can be much faster than running it on the CPU.
-
-   <p>Shaders are written in OpenGL Shading Language.  The shader source code
+</p>
+<p>Shaders are written in OpenGL Shading Language.  The shader source code
 is contained in a string.  The normal sequence for using a shader comes
 after a call to <b>enable_opengl</b>.
-
-<pre class="example">     char *shader_source = "...";
-     unsigned char shader_id = VFrame::make_shader(0, shader_source, 0);
-     glUseProgram(shader_id);
-     // Set uniform variables using glUniform commands
-</pre>
-   <p>The compilation and linking step for shaders is encapsulated by the
+</p>
+<div class="example">
+<pre class="example">char *shader_source = &quot;...&quot;;
+unsigned char shader_id = VFrame::make_shader(0, shader_source, 0);
+glUseProgram(shader_id);
+// Set uniform variables using glUniform commands
+</pre></div>
+
+<p>The compilation and linking step for shaders is encapsulated by the
 VFrame::make_shader command.  It returns a shader_id which can be
 passed to OpenGL functions.  The first and last arguments must always
 by 0.  And arbitrary number of source strings may be put between the
-0's.  The source strings are concatenated by make_shader into one huge
+0&rsquo;s.  The source strings are concatenated by make_shader into one huge
 shader source.  If multiple main functions are in the sources, the main
 functions are renamed and run in order.
-
-   <p>There are a number of useful macros for shaders in playback3d.h.  All
+</p>
+<p>There are a number of useful macros for shaders in playback3d.h.  All
 the shaders so far have been fragment shaders.  After the shader is
 initialized, draw the texture starting from <b>init_screen</b>.  The
 shader program must be disabled with another call to
 <b>glUseProgram(0)</b> and 0 as the argument.
-
-   <p>The shader_id and source code is stored in memory as long as Cinelerra
+</p>
+<p>The shader_id and source code is stored in memory as long as Cinelerra
 runs.  Future calls to make_shader with the same source code run much
 faster.
+</p>
 
-<div class="node">
-<a name="AGGREGATING-PLUGINS"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#USING-SHADERS">USING SHADERS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#USING-OPENGL">USING OPENGL</a>
 
-</div>
 
+<hr>
+<a name="AGGREGATING-PLUGINS"></a>
+<div class="header">
+<p>
+Previous: <a href="#USING-SHADERS" accesskey="p" rel="prev">USING SHADERS</a>, Up: <a href="#USING-OPENGL" accesskey="u" rel="up">USING OPENGL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="AGGREGATING-PLUGINS-1"></a>
 <h4 class="subsection">19.10.4 AGGREGATING PLUGINS</h4>
 
 <p>Further speed improvements may be obtained by combining OpenGL routines
@@ -9802,190 +10865,241 @@ Aggregations of more than two plugins are possible but very hard to get
 working.  Aggregation is useful for OpenGL because each plugin must
 copy the video from a texture to a PBuffer.  In software there was no
 copy operation.
-
-   <p>In aggregation, one plugin processes everything from the other plugins
+</p>
+<p>In aggregation, one plugin processes everything from the other plugins
 and the other plugins fall through.  The fall through plugins must copy
 their parameters to the output buffer so they can be detected by the
 processing plugin.
-
-   <p>The VFrame used as the output buffer contains a parameter table for
-parameter passing between plugins and it's accessed with
+</p>
+<p>The VFrame used as the output buffer contains a parameter table for
+parameter passing between plugins and it&rsquo;s accessed with
 <b>get_output()-&gt;get_params()</b>.  Parameters are set and retrieved in
 the table with calls to <b>update</b> and <b>get</b> just like with defaults.
-
-   <p>The fall through plugins must determine if the processor plugin is
+</p>
+<p>The fall through plugins must determine if the processor plugin is
 attached with calls to <b>next_effect_is</b> and <b>prev_effect_is</b>. 
 These take the name of the processor plugin as a string argument and
 return 1 if the next or previous plugin is the processor plugin.  If
 either returns 1, the fall through plugin must still call <b>read_frame</b> to
 propogate the data but return after that.
-
-   <p>The processor plugin must call <b>next_effect_is</b> and
-<b>prev_effect_is</b> to determine if it's aggregated with a fall through
+</p>
+<p>The processor plugin must call <b>next_effect_is</b> and
+<b>prev_effect_is</b> to determine if it&rsquo;s aggregated with a fall through
 plugin.  If it is, it must perform the operations of the fall through
 plugin in its OpenGL routine.  The parameters for the the fall through
 plugin should be available by <b>get_output()-&gt;get_params()</b> if the
 fall through plugin set them.
+</p>
+
 
-<div class="node">
-<a name="KEYBOARD-SHORTCUTS"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PLUGIN-AUTHORING">PLUGIN AUTHORING</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
-</div>
 
+
+
+
+<hr>
+<a name="KEYBOARD-SHORTCUTS"></a>
+<div class="header">
+<p>
+Previous: <a href="#PLUGIN-AUTHORING" accesskey="p" rel="prev">PLUGIN AUTHORING</a>, Up: <a href="#Top" accesskey="u" rel="up">TOP</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
+</div>
+<a name="KEYBOARD-SHORTCUTS-1"></a>
 <h2 class="chapter">20 KEYBOARD SHORTCUTS</h2>
 
 <p>Alex Ferrer started summarizing most of the keyboard shortcuts.  Most
 of the keys work without any modifier like shift or ctrl.  Most windows
 can be closed with a <b>Ctrl-w</b>.  Most operations can be cancelled with
 <b>ESC</b> and accepted with <b>Enter</b>.
-
+</p>
+<a name="PROGRAM-WINDOW"></a>
 <h3 class="section">20.1 PROGRAM WINDOW</h3>
 
+
+<a name="Editing-Media"></a>
 <h4 class="subsection">20.1.1 Editing Media</h4>
 
-<pre class="example">     z         Undo
-     Shift Z   Re-Do
-     x         Cut
-     c         Copy
-     v         Paste
-     Del       Clear
-     Shift Spc Paste Silence
-     m         Mute region
-     a         Select all
-     shift + click   When done over an edit causes the highlighted selection to extend to the cursor position.
-                     When done over the boundary of an effect causes the trim operation to apply to one effect.
-</pre>
+<div class="example">
+<pre class="example">z         Undo
+Shift Z   Re-Do
+x         Cut
+c         Copy
+v         Paste
+Del       Clear
+Shift Spc Paste Silence
+m         Mute region
+a         Select all
+shift + click   When done over an edit causes the highlighted selection to extend to the cursor position.
+                When done over the boundary of an effect causes the trim operation to apply to one effect.
+</pre></div>
+
+<a name="Editing-Labels-_0026-In_002fOut-Points"></a>
 <h4 class="subsection">20.1.2 Editing Labels &amp; In/Out Points</h4>
 
-<pre class="example">     [             Toggle In point
-     ]             Toggle Out point
-     l             Toggle label at current position
-     Ctrl &lt;-       Go to Previous Label
-     Ctrl -&gt;       Go to Next Label
-</pre>
+<div class="example">
+<pre class="example">[             Toggle In point 
+]             Toggle Out point 
+l             Toggle label at current position
+Ctrl &lt;-       Go to Previous Label
+Ctrl -&gt;       Go to Next Label
+</pre></div>
+
+
+<a name="Navigation"></a>
 <h4 class="subsection">20.1.3 Navigation</h4>
 
-<pre class="example">     Right arrow      Move right*
-     Left arrow       Move left*
-     Up arrow         Zoom out*
-     Down arrow       Zoom in*
-     Ctrl Up          Expand waveform amplitude
-     Ctrl Dn          Shrink waveform amplitude
-     Alt Up           Expand curve amplitude
-     Alt Dn           Shrink curve amplitude
-     f                Fit time displayed to selection
-     Alt f            Fit curve amplitude to highlighted section of curves
-     Alt Left         Move left one edit
-     Alt Right        Move right one edit
-     Page Up          Move up*
-     Page Dn          Move down*
-     Ctrl Page Up     Expand track height
-     Ctrl Page Dn     Shrink track height
-     Home             Go to beginning of timeline*
-     End              Go to end of timeline*
-     
-</pre>
-   <p>* You may have to click on the timeline to deactivate any text boxes or
+<div class="example">
+<pre class="example">Right arrow      Move right*
+Left arrow       Move left*
+Up arrow         Zoom out*
+Down arrow       Zoom in*
+Ctrl Up          Expand waveform amplitude
+Ctrl Dn          Shrink waveform amplitude
+Alt Up           Expand curve amplitude
+Alt Dn           Shrink curve amplitude
+f                Fit time displayed to selection
+Alt f            Fit curve amplitude to highlighted section of curves
+Alt Left         Move left one edit
+Alt Right        Move right one edit
+Page Up          Move up*
+Page Dn          Move down*
+Ctrl Page Up     Expand track height
+Ctrl Page Dn     Shrink track height
+Home             Go to beginning of timeline*
+End              Go to end of timeline*
+
+</pre></div>
+
+<p>* You may have to click on the timeline to deactivate any text boxes or
 tumblers before these work.
+</p>
+
 
+
+<a name="File-operations"></a>
 <h4 class="subsection">20.1.4 File operations</h4>
 
-<pre class="example">     n         New project
-     o         Load Files
-     s         Save Project
-     r         Record
-     Shift R   Render
-     q         Quit
-     Shift P   Preferences
-     Shift B   Batch Render
-     Shift F   Set Format
-</pre>
+<div class="example">
+<pre class="example">n         New project
+o         Load Files
+s         Save Project
+r         Record
+Shift R   Render
+q         Quit
+Shift P   Preferences
+Shift B   Batch Render
+Shift F   Set Format
+</pre></div>
+
+<a name="Key-Frame-Editing"></a>
 <h4 class="subsection">20.1.5 Key Frame Editing</h4>
 
-<pre class="example">     
-     Shift X    Cut keyframes
-     Shift C    Copy keyframes
-     Shift V    Paste keyframes
-     Shift Del  Clear keyframes
-     Alt c      Copy default keyframe
-     Alt v      Paste default keyframe
-     
-</pre>
+<div class="example">
+<pre class="example">
+Shift X    Cut keyframes
+Shift C    Copy keyframes
+Shift V    Paste keyframes
+Shift Del  Clear keyframes
+Alt c      Copy default keyframe
+Alt v      Paste default keyframe
+
+</pre></div>
+
+
+<a name="Track-Manipulation"></a>
 <h4 class="subsection">20.1.6 Track Manipulation</h4>
 
-<pre class="example">     
-     t          Add Audio Track
-     u          Insert default Audio Transition
-     Shift T    Add Video Track
-     Shift U    Insert Default Video Transition
-     d          Delete last Track
-     Shift L    Loop playback
-     Tab        Toggle single track arming status
-     Shift-Tab  Toggle every other track's arming status
-     
-</pre>
-<h4 class="subsection">20.1.7 What's drawn on the timeline</h4>
-
-<pre class="example">     
-     1         Show titles
-     2         Show transitions
-     3         Fade keyframes
-     4         Mute keyframes
-     5         Mode keyframes
-     6         Pan keyframes
-     7         Camera keyframes
-     8         Projector keyframes
-     9         Plugin keyframes
-     0         Mask keyframes
-     -         Camera Zoom
-     =         Projector Zoom
-     
-</pre>
+<div class="example">
+<pre class="example">
+t          Add Audio Track
+u          Insert default Audio Transition
+Shift T    Add Video Track
+Shift U    Insert Default Video Transition
+d          Delete last Track
+Shift L    Loop playback
+Tab        Toggle single track arming status
+Shift-Tab  Toggle every other track's arming status
+
+</pre></div>
+
+<a name="What_0027s-drawn-on-the-timeline"></a>
+<h4 class="subsection">20.1.7 What&rsquo;s drawn on the timeline</h4>
+
+<div class="example">
+<pre class="example">
+1         Show titles
+2         Show transitions
+3         Fade keyframes
+4         Mute keyframes
+5         Mode keyframes
+6         Pan keyframes
+7         Camera keyframes
+8         Projector keyframes
+9         Plugin keyframes
+0         Mask keyframes
+-         Camera Zoom
+=         Projector Zoom
+
+</pre></div>
+
+
+<a name="VIEWER-_0026-COMPOSITOR-WINDOWS"></a>
 <h3 class="section">20.2 VIEWER &amp; COMPOSITOR WINDOWS</h3>
 
-<pre class="example">     
-     x         Cut
-     c         Copy
-     v         Paste
-     v         Splice
-     b         Overwrite
-     [         Toggle In point
-     ]         Toggle Out point
-     l         Toggle label at current position
-     Ctrl &lt;-   Go to Previous Label
-     Ctrl -&gt;   Go to Next Label
-     Home      Go to beginning
-     End       Go to end
-     z         Undo
-     Shift Z   Re-Do
-     +         Zoom in
-     -         Zoom out
-     
-</pre>
+<div class="example">
+<pre class="example">
+x         Cut
+c         Copy
+v         Paste
+v         Splice
+b         Overwrite
+[         Toggle In point 
+]         Toggle Out point 
+l         Toggle label at current position
+Ctrl &lt;-   Go to Previous Label
+Ctrl -&gt;   Go to Next Label
+Home      Go to beginning
+End       Go to end
+z         Undo
+Shift Z   Re-Do
++         Zoom in
+-         Zoom out
+
+</pre></div>
+
+
+
+<a name="PLAYBACK-TRANSPORT"></a>
 <h3 class="section">20.3 PLAYBACK TRANSPORT</h3>
 
 <p>Transport controls work in any window which has a playback transport.  They are
 accessed through the number pad with num lock disabled.
+</p>
+<div class="example">
+<pre class="example">4 Frame back         5 Reverse Slow     6 Reverse      + Reverse Fast
+1 Frame Forward      2 Forward Slow     3 Play     Enter Fast Forward
+0 Stop
 
-<pre class="example">     4 Frame back         5 Reverse Slow     6 Reverse      + Reverse Fast
-     1 Frame Forward      2 Forward Slow     3 Play     Enter Fast Forward
-     0 Stop
-     
-</pre>
-   <p>[ Space bar ] is normal Play, Hitting any key twice is Pause.
+</pre></div>
 
-   <p>Hitting any transport control with CTRL down causes only the region
-between the in/out points to be played, if in/out points are defined.
+<p>[ Space bar ] is normal Play, Hitting any key twice is Pause.
+</p>
 
+<p>Hitting any transport control with CTRL down causes only the region
+between the in/out points to be played, if in/out points are defined.
+</p>
+<a name="RECORD-WINDOW"></a>
 <h3 class="section">20.4 RECORD WINDOW</h3>
 
-<pre class="example">     
-     Space              Start and pause recording of the current batch
-     l                  Toggle label at current position.
-     
-</pre>
-</body></html>
+<div class="example">
+<pre class="example">
+Space              Start and pause recording of the current batch
+l                  Toggle label at current position.
+
+</pre></div>
+
+<hr>
+
+
 
+</body>
+</html>
diff --git a/cinelerra-5.1/ffmpeg/video/hevc422p10.m2ts b/cinelerra-5.1/ffmpeg/video/hevc422p10.m2ts
new file mode 100644 (file)
index 0000000..effb81a
--- /dev/null
@@ -0,0 +1,9 @@
+mpegts libx265
+loglevel=debug
+id=0x1011
+#preset=ultrafast,superfast,veryfast,faster,fast,
+#preset=medium,slow,slower,veryslow,placebo
+preset=medium
+#tune=psnr,ssim,grain,zerolatency,fastdecode
+pixel_format=yuv422p10
+x265_opts=output-depth=10
diff --git a/cinelerra-5.1/ffmpeg/video/hevc422p8.m2ts b/cinelerra-5.1/ffmpeg/video/hevc422p8.m2ts
new file mode 100644 (file)
index 0000000..0496a82
--- /dev/null
@@ -0,0 +1,9 @@
+mpegts libx265
+loglevel=debug
+id=0x1011
+#preset=ultrafast,superfast,veryfast,faster,fast,
+#preset=medium,slow,slower,veryslow,placebo
+preset=medium
+#tune=psnr,ssim,grain,zerolatency,fastdecode
+pixel_format=yuv422p
+x265_opts=output-depth=8
index 62992ab19a7c4bf20093baa740de10345e1809c8..4bcda763ab0139932f9c2fcc0b33d74dceddb947 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 ifeq ($(OBJDIR), i686)
index cc22de83b2362e1fc7dfd246b32c48045ccd60c1..616603f72d543c844cdcc96e32f9826476087ffc 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 CC = gcc
index ff91c6f23f264292432363f941840024c6ac52b8..37ac9a23ecedf68b93d18aab93b6ccd29fe3c543 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 CC = gcc
index 0f016888b51f33fa54ac83b5ca769de1cb865412..6fb9ca7222adfeb2e0b75db973b432b45532b001 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 $(shell mkdir -p $(OBJDIR))
index 68f2532a3d1f0af10693937c0be7d2eca642b555..77cb4c3fc7f3b1508ff0aa6e66885101470043be 100644 (file)
@@ -1,6 +1,3 @@
-TOPDIR ?= $(CURDIR)/..
-export TOPDIR
-include $(TOPDIR)/global_config
 
 CFLAGS += -I../ -I$(CINELERRA) -I$(GUICAST) -I../colors -fPIC
 
index 7f5fee5e96a0ba78e5c0330b50895dd4fbc1d58c..bf9e8c379ab32caebc428a272ee45a4aa69407d3 100644 (file)
@@ -1,5 +1,4 @@
-TOPDIR ?= ../..
-export TOPDIR
+export TOPDIR ?= ../..
 include $(TOPDIR)/global_config
 
 plugin_dirs := themes
@@ -15,7 +14,7 @@ video_transitions := bandslide bandwipe dissolve flip irissquare \
 
 plugin_dirs += transforms
 transforms := 1080to480 1080to540 720to480 lens perspective photoscale \
-       polar rotate scale translate whirl
+       polar rotate scale translate whirl scaleratio
 
 plugin_dirs += colors
 colors := brightness bluebanana C41 color3way colorbalance huesaturation \
index a9469da0ff74c365427ce8bfe7a4a0f7c2bfe928..09ae02694652d75b773186c52da641251b686f7e 100644 (file)
@@ -1,4 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 ifeq ($(WANT_DVB), yes)
@@ -15,6 +15,7 @@ DIRS = \
        1080to540 \
        720to480 \
        aging \
+       scaleratio \
        audioscope \
        bandslide \
        bandwipe \
diff --git a/cinelerra-5.1/plugins/scaleratio/.gdb_history b/cinelerra-5.1/plugins/scaleratio/.gdb_history
new file mode 100644 (file)
index 0000000..2723bc9
--- /dev/null
@@ -0,0 +1,13 @@
+p 19/13.
+q
+p (1920-720)/2.
+p (1080-480)/2.
+qu
+q
+p 1.333333333 / 1.77777777
+p 1080/.75
+p 1920 - 1440
+q
+q
+p 1920*0.75
+q
diff --git a/cinelerra-5.1/plugins/scaleratio/Makefile b/cinelerra-5.1/plugins/scaleratio/Makefile
new file mode 100644 (file)
index 0000000..5febe52
--- /dev/null
@@ -0,0 +1,11 @@
+include ../../plugin_defs
+
+OBJS =         $(OBJDIR)/scaleratio.o  \
+       $(OBJDIR)/scaleratiowin.o
+
+PLUGIN = scaleratio
+
+include ../../plugin_config
+
+$(OBJDIR)/scaleratio.o: scaleratio.C
+$(OBJDIR)/scaleratiowin.o: scaleratiowin.C
diff --git a/cinelerra-5.1/plugins/scaleratio/picon.png b/cinelerra-5.1/plugins/scaleratio/picon.png
new file mode 100644 (file)
index 0000000..4d0673a
Binary files /dev/null and b/cinelerra-5.1/plugins/scaleratio/picon.png differ
diff --git a/cinelerra-5.1/plugins/scaleratio/scaleratio.C b/cinelerra-5.1/plugins/scaleratio/scaleratio.C
new file mode 100644 (file)
index 0000000..c32e7f9
--- /dev/null
@@ -0,0 +1,233 @@
+
+/*
+ * CINELERRA
+ * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ */
+
+#include "clip.h"
+#include "filexml.h"
+#include "language.h"
+#include "scaleratio.h"
+#include "scaleratiowin.h"
+
+#include <string.h>
+
+
+
+
+REGISTER_PLUGIN(ScaleRatioMain)
+
+ScaleRatioConfig::ScaleRatioConfig()
+{
+       type = 0;
+       in_w = 720;   in_h = 480;   in_r = 1;
+       out_w = 720;  out_h = 480;  out_r = 1;
+       src_x = src_y = 0;  src_w = 720;  src_h = 480;
+       dst_x = dst_y = 0;  dst_w = 720;  dst_h = 480;
+}
+
+int ScaleRatioConfig::equivalent(ScaleRatioConfig &that)
+{
+       return EQUIV(src_x, that.src_x) && EQUIV(src_y, that.src_y) && 
+               EQUIV(src_w, that.src_w) && EQUIV(src_h, that.src_h) &&
+               EQUIV(dst_x, that.dst_x) && EQUIV(dst_y, that.dst_y) && 
+               EQUIV(dst_w, that.dst_w) && EQUIV(dst_h, that.dst_h);
+}
+
+void ScaleRatioConfig::copy_from(ScaleRatioConfig &that)
+{
+       in_w  = that.in_w;   in_h  = that.in_h;   in_r  = that.in_r;
+       out_w = that.out_w;  out_h = that.out_h;  out_r = that.out_r;
+       src_x = that.src_x;  src_y = that.src_y;
+       src_w = that.src_w;  src_h = that.src_h;
+       dst_x = that.dst_x;  dst_y = that.dst_y;
+       dst_w = that.dst_w;  dst_h = that.dst_h;
+}
+
+void ScaleRatioConfig::interpolate(ScaleRatioConfig &prev, ScaleRatioConfig &next, 
+       int64_t prev_frame, int64_t next_frame, int64_t current_frame)
+{
+       double next_scale = (double)(current_frame - prev_frame) / (next_frame - prev_frame);
+       double prev_scale = (double)(next_frame - current_frame) / (next_frame - prev_frame);
+
+       this->src_x = prev.src_x * prev_scale + next.src_x * next_scale;
+       this->src_y = prev.src_y * prev_scale + next.src_y * next_scale;
+       this->src_w = prev.src_w * prev_scale + next.src_w * next_scale;
+       this->src_h = prev.src_h * prev_scale + next.src_h * next_scale;
+       this->dst_x = prev.dst_x * prev_scale + next.dst_x * next_scale;
+       this->dst_y = prev.dst_y * prev_scale + next.dst_y * next_scale;
+       this->dst_w = prev.dst_w * prev_scale + next.dst_w * next_scale;
+       this->dst_h = prev.dst_h * prev_scale + next.dst_h * next_scale;
+}
+
+
+ScaleRatioMain::ScaleRatioMain(PluginServer *server)
+ : PluginVClient(server)
+{
+       overlayer = 0;
+       temp_frame = 0;
+}
+
+ScaleRatioMain::~ScaleRatioMain()
+{
+       
+
+       if(temp_frame) delete temp_frame;
+       temp_frame = 0;
+       if(overlayer) delete overlayer;
+       overlayer = 0;
+}
+
+const char* ScaleRatioMain::plugin_title() { return _("Scale Ratio"); }
+int ScaleRatioMain::is_realtime() { return 1; }
+
+
+
+LOAD_CONFIGURATION_MACRO(ScaleRatioMain, ScaleRatioConfig)
+
+void ScaleRatioMain::save_data(KeyFrame *keyframe)
+{
+       FileXML output;
+
+// cause data to be stored directly in text
+       output.set_shared_output(keyframe->get_data(), MESSAGESIZE);
+
+// Store data
+       output.tag.set_title("SCALERATIO");
+       output.tag.set_property("TYPE", config.type);
+       output.tag.set_property("IN_W", config.in_w);
+       output.tag.set_property("IN_H", config.in_h);
+       output.tag.set_property("IN_ASPECT_RATIO", config.in_r);
+       output.tag.set_property("OUT_W", config.out_w);
+       output.tag.set_property("OUT_H", config.out_h);
+       output.tag.set_property("OUT_ASPECT_RATIO", config.out_r);
+       output.tag.set_property("SRC_X", config.src_x);
+       output.tag.set_property("SRC_Y", config.src_y);
+       output.tag.set_property("SRC_W", config.src_w);
+       output.tag.set_property("SRC_H", config.src_h);
+       output.tag.set_property("DST_X", config.dst_x);
+       output.tag.set_property("DST_Y", config.dst_y);
+       output.tag.set_property("DST_W", config.dst_w);
+       output.tag.set_property("DST_H", config.dst_h);
+       output.append_tag();
+       output.tag.set_title("/SCALERATIO");
+       output.append_tag();
+       output.append_newline();
+       output.terminate_string();
+// data is now in *text
+}
+
+void ScaleRatioMain::read_data(KeyFrame *keyframe)
+{
+       FileXML input;
+
+       input.set_shared_input(keyframe->get_data(), strlen(keyframe->get_data()));
+
+       int result = 0;
+
+       while( !(result = input.read_tag()) ) {
+               if(input.tag.title_is("SCALERATIO")) {
+                       config.type  = input.tag.get_property("TYPE", config.type);
+                       config.in_w  = input.tag.get_property("IN_W", config.in_w);
+                       config.in_h  = input.tag.get_property("IN_H", config.in_h);
+                       config.in_r  = input.tag.get_property("IN_ASPECT_RATIO", config.in_r);
+                       config.out_w = input.tag.get_property("OUT_W", config.out_w);
+                       config.out_h = input.tag.get_property("OUT_H", config.out_h);
+                       config.out_r = input.tag.get_property("OUT_ASPECT_RATIO", config.out_r);
+                       config.src_x = input.tag.get_property("SRC_X", config.src_x);
+                       config.src_y = input.tag.get_property("SRC_Y", config.src_y);
+                       config.src_w = input.tag.get_property("SRC_W", config.src_w);
+                       config.src_h = input.tag.get_property("SRC_H", config.src_h);
+                       config.dst_x = input.tag.get_property("DST_X", config.dst_x);
+                       config.dst_y = input.tag.get_property("DST_Y", config.dst_y);
+                       config.dst_w = input.tag.get_property("DST_W", config.dst_w);
+                       config.dst_h = input.tag.get_property("DST_H", config.dst_h);
+               }
+       }
+}
+
+
+#define EPSILON 0.001
+
+int ScaleRatioMain::process_realtime(VFrame *input_ptr, VFrame *output_ptr)
+{
+       VFrame *input = input_ptr;
+       VFrame *output = output_ptr;
+
+       load_configuration();
+
+//printf("ScaleRatioMain::process_realtime 1 %p\n", input);
+       if( input->get_rows()[0] == output->get_rows()[0] ) {
+               if( temp_frame && (
+                   temp_frame->get_w() != input_ptr->get_w() ||
+                   temp_frame->get_h() != input_ptr->get_h() ||
+                   temp_frame->get_color_model() != input_ptr->get_color_model() ) ) {
+                       delete temp_frame;
+                       temp_frame = 0;
+               }
+               if(!temp_frame) 
+                       temp_frame = new VFrame(0, -1,
+                               input_ptr->get_w(), input_ptr->get_h(),
+                               input->get_color_model(), -1);
+               temp_frame->copy_from(input);
+               input = temp_frame;
+       }
+//printf("ScaleRatioMain::process_realtime 2 %p\n", input);
+
+
+       if(!overlayer) {
+               overlayer = new OverlayFrame(smp + 1);
+       }
+
+       output->clear_frame();
+
+       if( config.src_w < EPSILON ) return 1;
+       if( config.src_h < EPSILON ) return 1;
+       if( config.dst_w < EPSILON ) return 1;
+       if( config.dst_h < EPSILON ) return 1;
+       float ix0 = (input->get_w() - config.src_w)/2 + config.src_x;
+       float iy0 = (input->get_h() - config.src_h)/2 + config.src_y;
+       float ix1 = ix0, ix2 = ix1 + config.src_w;
+       float iy1 = iy0, iy2 = iy1 + config.src_h;
+       float ox0 = (output->get_w() - config.dst_w)/2 + config.dst_x;
+       float oy0 = (output->get_h() - config.dst_h)/2 + config.dst_y;
+       float ox1 = ox0, ox2 = ox1 + config.dst_w;
+       float oy1 = oy0, oy2 = oy1 + config.dst_h;
+
+       overlayer->overlay(output, input,
+               ix1, iy1, ix2, iy2,
+               ox1, oy1, ox2, oy2,
+               1, TRANSFER_REPLACE,
+               get_interpolation_type());
+
+       return 0;
+}
+
+NEW_WINDOW_MACRO(ScaleRatioMain, ScaleRatioWin)
+
+void ScaleRatioMain::update_gui()
+{
+        if( !thread ) return;
+       ScaleRatioWin *window = (ScaleRatioWin*)thread->get_window();
+        window->lock_window("ScaleRatio::update_gui");
+        if( load_configuration() )
+                window->update_gui();
+        window->unlock_window();
+}
+
+
diff --git a/cinelerra-5.1/plugins/scaleratio/scaleratio.h b/cinelerra-5.1/plugins/scaleratio/scaleratio.h
new file mode 100644 (file)
index 0000000..9e69053
--- /dev/null
@@ -0,0 +1,71 @@
+
+/*
+ * CINELERRA
+ * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ */
+
+#ifndef TRANSLATE_H
+#define TRANSLATE_H
+
+// the simplest plugin possible
+
+class ScaleRatioMain;
+
+#include "bchash.h"
+#include "mutex.h"
+#include "scaleratiowin.h"
+#include "overlayframe.h"
+#include "pluginvclient.h"
+
+class ScaleRatioConfig
+{
+public:
+       ScaleRatioConfig();
+       int equivalent(ScaleRatioConfig &that);
+       void copy_from(ScaleRatioConfig &that);
+       void interpolate(ScaleRatioConfig &prev, ScaleRatioConfig &next, 
+               int64_t prev_frame, int64_t next_frame, int64_t current_frame);
+
+       int type;
+       float in_w, in_h, in_r;
+       float out_w, out_h, out_r;
+       float src_x, src_y, src_w, src_h;
+       float dst_x, dst_y, dst_w, dst_h;
+};
+
+
+class ScaleRatioMain : public PluginVClient
+{
+public:
+       ScaleRatioMain(PluginServer *server);
+       ~ScaleRatioMain();
+
+       PLUGIN_CLASS_MEMBERS(ScaleRatioConfig)
+       int process_realtime(VFrame *input_ptr, VFrame *output_ptr);
+       int is_realtime();
+       void update_gui();
+       void save_data(KeyFrame *keyframe);
+       void read_data(KeyFrame *keyframe);
+
+
+       OverlayFrame *overlayer;
+       VFrame *temp_frame;
+};
+
+
+#endif
diff --git a/cinelerra-5.1/plugins/scaleratio/scaleratiowin.C b/cinelerra-5.1/plugins/scaleratio/scaleratiowin.C
new file mode 100644 (file)
index 0000000..68aa066
--- /dev/null
@@ -0,0 +1,320 @@
+
+/*
+ * CINELERRA
+ * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ */
+
+#include "bcdisplayinfo.h"
+#include "clip.h"
+#include "language.h"
+#include "rescale.h"
+#include "scaleratio.h"
+#include "scaleratiowin.h"
+#include "mwindow.h"
+
+
+ScaleRatioWin::ScaleRatioWin(ScaleRatioMain *client)
+ : PluginClientWindow(client, 400, 300, 400, 300, 0)
+{ 
+       this->client = client; 
+}
+
+ScaleRatioWin::~ScaleRatioWin()
+{
+}
+
+void ScaleRatioWin::create_objects()
+{
+       int x = 10, y = 10;
+       int x0 = x, x1 = x0 + 50;
+       int y0 = y;
+       client->load_configuration();
+
+       add_tool(new BC_Title(x0, y0, _("In R:")));
+       add_tool(in_r = new ScaleRatioRatio(this, client, x1, y0, &client->config.in_r));
+       in_r->create_objects();
+       y0 += in_r->get_th() + 10;
+
+       add_tool(new BC_Title(x0, y0, _("In W:")));
+       in_w = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.in_w);
+       in_w->create_objects();
+       y0 += in_w->get_h() + 8;
+
+       add_tool(new BC_Title(x0, y0, _("In H:")));
+       in_h = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.in_h);
+       in_h->create_objects();
+
+       x0 = get_w()/2;  y0 = y;
+       x1 = x0 + 50;
+
+       add_tool(new BC_Title(x0, y0, _("Out R:")));
+       add_tool(out_r = new ScaleRatioRatio(this, client, x1, y0, &client->config.out_r));
+       out_r->create_objects();
+       y0 += out_r->get_th() + 10;
+
+       add_tool(new BC_Title(x0, y0, _("Out W:")));
+       out_w = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.out_w);
+       out_w->create_objects();
+       y0 += out_w->get_h() + 8;
+
+       add_tool(new BC_Title(x0, y0, _("Out H:")));
+       out_h = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.out_h);
+       out_h->create_objects();
+       y0 += out_h->get_h() + 8;
+
+       y = y0 + 5;
+       add_tool(apply_button = new ScaleRatioApply(this, x, y));
+       int x2 = x + apply_button->get_w() + 50;
+       add_tool(type_popup = new ScaleRatioType(this, x2, y, &client->config.type));
+       type_popup->create_objects();
+       y += apply_button->get_h() + 30;
+
+       x0 = x;  y0 = y;
+       x1 = x0 + 50;
+
+       add_tool(new BC_Title(x0, y0, _("Src X:")));
+       src_x = new ScaleRatioCoord(this, client, x1, y0, 1, &client->config.src_x);
+       src_x->create_objects();
+       y0 += 30;
+
+       add_tool(new BC_Title(x0, y0, _("Src Y:")));
+       src_y = new ScaleRatioCoord(this, client, x1, y0, 1, &client->config.src_y);
+       src_y->create_objects();
+       y0 += 30;
+
+
+       add_tool(new BC_Title(x0, y0, _("Src W:")));
+       src_w = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.src_w);
+       src_w->create_objects();
+       y0 += 30;
+
+       add_tool(new BC_Title(x0, y0, _("Src H:")));
+       src_h = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.src_h);
+       src_h->create_objects();
+       y0 += 30;
+
+       x0 = get_w()/2;
+       x1 = x0 + 50;
+       y0 = y;
+       add_tool(new BC_Title(x0, y0, _("Dst X:")));
+       dst_x = new ScaleRatioCoord(this, client, x1, y0, 1, &client->config.dst_x);
+       dst_x->create_objects();
+       y0 += 30;
+
+       add_tool(new BC_Title(x0, y0, _("Dst Y:")));
+       dst_y = new ScaleRatioCoord(this, client, x1, y0, 1, &client->config.dst_y);
+       dst_y->create_objects();
+       y0 += 30;
+
+       add_tool(new BC_Title(x0, y0, _("Dst W:")));
+       dst_w = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.dst_w);
+       dst_w->create_objects();
+       y0 += 30;
+
+       add_tool(new BC_Title(x0, y0, _("Dst H:")));
+       dst_h = new ScaleRatioCoord(this, client, x1, y0, 0, &client->config.dst_h);
+       dst_h->create_objects();
+       y0 += 30;
+
+       show_window();
+       flush();
+}
+
+
+
+ScaleRatioCoord::ScaleRatioCoord(ScaleRatioWin *win, 
+       ScaleRatioMain *client, int x, int y, int s, float *value)
+ : BC_TumbleTextBox(win, (int)*value, (int)-10000*s, (int)10000, x, y, 100)
+{
+       this->client = client;
+       this->win = win;
+       this->value = value;
+}
+
+ScaleRatioCoord::~ScaleRatioCoord()
+{
+}
+
+int ScaleRatioCoord::handle_event()
+{
+       *value = atof(get_text());
+       client->send_configure_change();
+       return 1;
+}
+
+
+ScaleRatioTumbler::ScaleRatioTumbler(ScaleRatioRatio *ratio, int value, int x, int y)
+ : BC_TumbleTextBox(ratio->win, value, 0, 10000, x, y, 45)
+{
+       this->ratio = ratio;
+}
+
+ScaleRatioTumbler::~ScaleRatioTumbler()
+{
+}
+
+int ScaleRatioTumbler::handle_event()
+{
+       ratio->update_ratio();
+       return 1;
+}
+
+ScaleRatioRatio::ScaleRatioRatio(ScaleRatioWin *win, 
+       ScaleRatioMain *client, int x, int y, float *value)
+ : BC_TextBox(x, y, 100, 1, *value)
+{
+       this->client = client;
+       this->win = win;
+       this->value = value;
+       this->ah = 0;
+       this->aw = 0;
+}
+
+ScaleRatioRatio::~ScaleRatioRatio()
+{
+       delete ah;
+       delete aw;
+}
+
+int ScaleRatioRatio::handle_event()
+{
+       *value = atof(get_text());
+       float fah = 0, faw = 0;
+       MWindow::create_aspect_ratio(faw, fah, *value*1000000, 1000000);
+       ah->update((int64_t)fah);
+       aw->update((int64_t)faw);
+       win->update_config();
+       win->update_gui();
+       return 1;
+}
+
+void ScaleRatioRatio::create_objects()
+{
+       int tx = BC_TextBox::get_x();
+       int ty = BC_TextBox::get_y();
+       int x = tx;
+       int y = ty + BC_TextBox::get_h() + 5;
+       float faw = 0, fah = 0;
+       MWindow::create_aspect_ratio(faw, fah, *value*1000000, 1000000);
+       aw = new ScaleRatioTumbler(this, faw, x, y);
+       aw->create_objects();
+       x += aw->get_w() + 5;
+       ah = new ScaleRatioTumbler(this, fah, x, y);
+       ah->create_objects();
+       x += ah->get_w();
+       y += ah->get_h();
+       tw = x - tx;
+       int w = BC_TextBox::get_w();
+       if( tw < w ) tw = w;
+       th = y - ty;
+}
+
+void ScaleRatioRatio::update_ratio()
+{
+       float fah = atof(ah->get_text());
+       float faw = atof(aw->get_text());
+       *value = fah > 0 ? faw / fah : 1.f;
+       win->update_config();
+       win->update_gui();
+}
+
+ScaleRatioTypeItem::ScaleRatioTypeItem(ScaleRatioType *popup, int type, const char *text)
+ : BC_MenuItem(text)
+{
+       this->popup = popup;
+       this->type = type;
+}
+
+ScaleRatioTypeItem::~ScaleRatioTypeItem()
+{
+}
+
+int ScaleRatioTypeItem::handle_event()
+{
+       popup->win->client->config.type = type;
+       popup->set_value(type);
+       return popup->handle_event();
+}
+
+
+ScaleRatioType::ScaleRatioType(ScaleRatioWin *win, int x, int y, int *value)
+ : BC_PopupMenu(x, y, 180, "", 1)
+{
+       this->win = win;
+       this->value = value;
+}
+
+ScaleRatioType::~ScaleRatioType()
+{
+}
+
+void ScaleRatioType::create_objects()
+{
+       for( int i=1; i<Rescale::n_scale_types; ++i )
+               add_item(new ScaleRatioTypeItem(this, i, Rescale::scale_types[i]));
+       set_value(*value);
+}
+
+void ScaleRatioType::update(int v)
+{
+       set_value(*value = v);
+}
+
+int ScaleRatioType::handle_event()
+{
+       win->update_config();
+       win->update_gui();
+       return 1;
+}
+
+int ScaleRatioApply::handle_event()
+{
+       win->update_config();
+       win->update_gui();
+       win->client->send_configure_change();
+       return 1;
+}
+
+void ScaleRatioWin::update_config()
+{
+       ScaleRatioConfig *conf = &client->config;
+       Rescale in(conf->in_w, conf->in_h, conf->in_r);
+       Rescale out(conf->out_w, conf->out_h, conf->out_r);
+       in.rescale(out,conf->type, conf->src_w,conf->src_h, conf->dst_w,conf->dst_h);
+}
+
+void ScaleRatioWin::update_gui()
+{
+       ScaleRatioConfig *conf = &client->config;
+       type_popup->update(conf->type);
+       in_r->update(conf->in_r);
+       out_r->update(conf->out_r);
+       in_w->update(conf->in_w);
+       in_h->update(conf->in_h);
+       src_x->update(conf->src_x);
+       src_y->update(conf->src_y);
+       src_w->update(conf->src_w);
+       src_h->update(conf->src_h);
+       out_w->update(conf->out_w);
+       out_h->update(conf->out_h);
+       dst_x->update(conf->dst_x);
+       dst_y->update(conf->dst_y);
+       dst_w->update(conf->dst_w);
+       dst_h->update(conf->dst_h);
+}
+
diff --git a/cinelerra-5.1/plugins/scaleratio/scaleratiowin.h b/cinelerra-5.1/plugins/scaleratio/scaleratiowin.h
new file mode 100644 (file)
index 0000000..6a41b8a
--- /dev/null
@@ -0,0 +1,144 @@
+
+/*
+ * CINELERRA
+ * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ */
+
+#ifndef TRANSLATEWIN_H
+#define TRANSLATEWIN_H
+
+#include "guicast.h"
+
+class ScaleRatioThread;
+class ScaleRatioWin;
+class ScaleRatioTypeItem;
+class ScaleRatioApply;
+class ScaleRatioType;
+class ScaleRatioCoord;
+class ScaleRatioRatio;
+
+
+#include "filexml.h"
+#include "mutex.h"
+#include "pluginclient.h"
+#include "rescale.h"
+#include "scaleratio.h"
+
+
+class ScaleRatioWin : public PluginClientWindow
+{
+public:
+       ScaleRatioWin(ScaleRatioMain *client);
+       ~ScaleRatioWin();
+
+       void create_objects();
+       void update_config();
+       void update_gui();
+
+       ScaleRatioMain *client;
+       ScaleRatioCoord *src_x, *src_y, *src_w, *src_h;
+       ScaleRatioCoord *dst_x, *dst_y, *dst_w, *dst_h;
+       ScaleRatioCoord *in_w, *in_h, *out_w, *out_h;
+       ScaleRatioRatio *in_r, *out_r;
+       BC_GenericButton *apply_button;
+       ScaleRatioType *type_popup;
+};
+
+class ScaleRatioCoord : public BC_TumbleTextBox
+{
+public:
+       ScaleRatioCoord(ScaleRatioWin *win, ScaleRatioMain *client,
+               int x, int y, int s, float *value);
+       ~ScaleRatioCoord();
+       int handle_event();
+
+       ScaleRatioMain *client;
+       ScaleRatioWin *win;
+       float *value;
+};
+
+class ScaleRatioTumbler : public BC_TumbleTextBox {
+public:
+       ScaleRatioTumbler(ScaleRatioRatio *ratio, int value, int x, int y);
+       ~ScaleRatioTumbler();
+       int handle_event();
+       ScaleRatioRatio *ratio;
+};
+
+class ScaleRatioRatio : public BC_TextBox
+{
+public:
+       ScaleRatioRatio(ScaleRatioWin *win, ScaleRatioMain *client, 
+               int x, int y, float *value);
+       ~ScaleRatioRatio();
+       int handle_event();
+       void create_objects();
+       void update_ratio();
+
+       ScaleRatioMain *client;
+       ScaleRatioWin *win;
+       float *value;
+       int tx, ty, tw, th;
+       ScaleRatioTumbler *aw, *ah;
+
+       int get_tw() { return tw; }
+       int get_th() { return th; }
+};
+
+class ScaleRatioTypeItem : public BC_MenuItem
+{
+public:
+       ScaleRatioTypeItem(ScaleRatioType *popup, int type, const char *text);
+       ~ScaleRatioTypeItem();
+
+       int handle_event();
+
+       ScaleRatioType *popup;
+       int type;
+};
+
+class ScaleRatioApply : public BC_GenericButton {
+public:
+       ScaleRatioWin *win;
+
+       ScaleRatioApply(ScaleRatioWin *win, int x, int y)
+        : BC_GenericButton(x, y, "Apply") {
+               this->win = win;
+       }
+       ~ScaleRatioApply() {}
+
+       int handle_event();
+};
+
+class ScaleRatioType : public BC_PopupMenu
+{
+public:
+       ScaleRatioType(ScaleRatioWin *win, int x, int y, int *value);
+       ~ScaleRatioType();
+
+       void create_objects();
+       void update(int v);
+       int handle_event();
+
+       ScaleRatioWin *win;
+       int *value;
+
+       void set_value(int v) { set_text(Rescale::scale_types[v]); }
+};
+
+#endif
index 99047ddabe30d0dd55a07fe234ba205e96e7c7a3..c86750c59eeb247c54fa220118091e7e992e067b 100644 (file)
@@ -1,4 +1,4 @@
-TOPDIR ?= $(CURDIR)/..
+export TOPDIR ?= $(CURDIR)/..
 include $(TOPDIR)/global_config
 
 OBJS := $(foreach i,de es eu fr it nb pt sl hi ko vi zh el ja uk ru, $(i).mo)
index a00f21b4fba497fa6e07510461c9b133c72d96ae..372759133cf7c65b507d887df38eab98e1e9d528 100644 (file)
@@ -32,12 +32,12 @@ BLD := $(THIRDPARTY)/build
 
 # package build flags, if needed
 # need frame pointer for debugs and helps with profiling
-PKG_CFLAGS_ ?= -g -O2 -fno-omit-frame-pointer
 # NOTE: the trailing blank is MANDITORY or the builds fail
 # due to bugs in the build scripts from auto*
-CFLAGS = $(PKG_CFLAGS_) 
-LDFLAGS += $(PKG_LDFLAGS_) 
-CXXFLAGS += $(PKG_CXXFLAGS_) 
+CFLAGS_ ?= -g -O2 -fno-omit-frame-pointer
+CFLAGS ?= $(CFLAGS_) 
+LDFLAGS += $(LDFLAGS_) 
+CXXFLAGS += $(CXXFLAGS_) 
 
 pkg-source=$(BLD)/$(1).source
 pkg-config=$(BLD)/$(1).configure