Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.0 / doc / cinelerra.texi
diff --git a/cinelerra-5.0/doc/cinelerra.texi b/cinelerra-5.0/doc/cinelerra.texi
deleted file mode 100644 (file)
index 85b5eb1..0000000
+++ /dev/null
@@ -1,9460 +0,0 @@
-\input texinfo   @c -*-texinfo-*-
-
-
-
-@setfilename cinelerra.info
-@settitle SECRETS OF CINELERRA
-
-
-@node TOP
-@top
-
-@center 
-
-Version 4.1
-
-by Adam Williams
-
-Copyright @copyright{} 2011
-
-
-
-@chapter SHORT CONTENTS
-
-@menu
-* ABOUT CINELERRA::          Cinelerra in brief.
-* INSTALLATION::             Making Cinelerra work on your system.
-* CONFIGURATION::            Adjusting the behavior of Cinelerra.
-* CREATING A NEW PROJECT::   Creating a new project
-* THE MAIN WINDOWS::         The most often used user interfaces.
-* LOADING AND SAVING FILES:: Moving media between disk and Cinelerra.
-* NAVIGATING THE PROJECT::   Moving around the media.
-* EDITING::                  Moving the media in time.
-* USING EFFECTS::            Altering the media.
-* SETTING PROJECT ATTRIBUTES:: Changing the way the media is displayed.
-* COMPOSITING::              Overlaying different sources of video.
-* KEYFRAMES::                Making effects change over time.
-* CAPTURING MEDIA::          Moving media from the real world to disk.
-* IMPROVING PERFORMANCE::    Making Cinelerra run better on Linux.
-* TROUBLESHOOTING::          Problems with Cinelerra.
-* SECRETS OF CINELERRA::     Unusual applications of Cinelerra to common problems.
-* SECRETS OF CINELERRA EFFECTS::      Secrets of the more complicated effects.
-* PLUGIN AUTHORING::         How to write new effects.
-* KEYBOARD SHORTCUTS::       How to accelerate most commands with the keyboard.
-@end menu
-
-
-
-@contents
-
-
-
-
-
-
-
-@node ABOUT CINELERRA
-@chapter ABOUT CINELERRA
-
-@b{BROADCAST 1.0}
-
-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.
-
-
-@b{BROADCAST 2.0}
-
-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
-resulting waveform to disk.  More notably a few effects could be
-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.
-
-@b{BROADCAST 2000}
-
-But Broadcast 2.0 still didn't handle video and it wasn'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
-files up to 64 terabytes.  It could do everything Broadcast 2.1 did
-with audio except now all effects for video and audio could be chained
-and performed on the fly, with instant feedback as a user tweeked
-parameters during playback.  Broadcast 2000 made it very easy to do a
-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.
-
-@b{CINELERRA}
-
-
-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. 
-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
-replacement were drafted.  The Broadcast name was officially retired
-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
-ground up, while supplementing that with the Broadcast audio
-interface.  As always, quality improvements would happen.
-
-@b{LINUX DERIVATIVES}
-
-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.
-
-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.
-
-
-
-
-
-
-@menu
-* ABOUT THIS MANUAL::
-@end menu
-
-@node ABOUT THIS MANUAL
-@section ABOUT THIS MANUAL
-
-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.
-
-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
-been trying to get it right for 30 years and will probably keep trying
-until the end of time.
-
-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.
-
-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.
-
-After many years of searching for the perfect documentation format
-we'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.
-
-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
-synchronize the manual with the software.
-
-In addition to telling you the basic editing features of Cinelerra this
-manual covers tricks that won't be described anywhere else.  We're
-going to try to come up with certain things you can do with Cinelerra
-that you wouldn't think of on your own.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-@node INSTALLATION
-@chapter INSTALLATION
-
-
-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.
-
-@itemize
-
-@item
-
-@b{Foreign language translations} - These go into /usr/share/locale.
-
-@item
-
-@b{Cinelerra executable} - This goes into /usr/bin
-
-@item
-
-@b{Cinelerra plugins} - These go into /usr/lib/cinelerra in 32 bit
-systems and /usr/lib64/cinelerra in 64 bit systems.
-
-@item
-
-@b{soundtest} - Utility for determining sound card buffer size.
-
-@item
-
-@b{mplexlo} - Multiplexing of MPEG elementary streams without standards
-conformance but more efficiently.
-
-@item
-
-@b{mpeg3cat} - Utility for reading an MPEG file from a certain standard
-and outputting it to stdout.
-
-@item
-
-@b{mpeg3toc, mpeg3cat, mpeg3dump} - Utilities/ for indexing and reading MPEG files.
-
-@item
-
-@b{mpeg3peek} - Utility for displaying the byte offset of a frame in an
-MPEG file.
-
-@end itemize
-
-
-
-@menu
-* INSTALLING AN RPM::
-* COMPILING FROM SCRATCH::
-* RUNNING CINELERRA::
-@end menu
-
-
-
-
-
-
-
-
-@node INSTALLING AN RPM
-@section INSTALLING AN RPM
-
-Cinelerra is easiest installed by downloading an RPM and running
-
-@example
-rpm -U --force --nodeps hvirtual*.rpm
-@end example
-
-on a Fedora 4 system.
-
-On systems which don't support RPM look for a utility called
-@b{rpm2cpio}.  Download a Cinelerra RPM and from the /
-directory run
-
-@example
-rpm2cpio hvirtual*.rpm | cpio -i --make-directories
-@end example
-
-This doesn'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.
-
-
-
-
-
-
-
-@node COMPILING FROM SCRATCH
-@section COMPILING FROM SCRATCH
-
-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
-source code fails to compile, but the method for compiling starts by
-downloading the source code and decompressing.
-
-The compilation is verified on a vanilla Fedora 4 installation,
-workstation mode.  Fedora doesn't install a lot of dependancies like
-@b{nasm} and @b{yasm}.  Yes, 3 assemblers are now required to assemble
-x86 code.  Compiling the source is hard and there's no warranty if the
-source code fails to compile, but the method for compiling starts by
-downloading the source code and decompressing.
-
-@example
-tar jxf cinelerra*.tar.bz2
-@end example
-
-
-The compilation is verified on a Fedora 4 installation.  Fedora 4
-doesn't install a lot of the reqiured compilers.  Mainly @b{nasm} and
-@b{yasm}, 2 of the 3 assemblers.  These have to be installed manually
-for compilation to succeed.
-
-Enter the hvirtual directory
-
-@example
-cd cinelerra
-@end example
-
-Then run
-
-@example
-./configure
-@end example
-
-This checks the build environment for the right tools and should give
-you an error if a tool is missing.  Once that succeeds run
-
-@example
-make
-@end example
-
-The make procedure should run through all the directories and put
-binaries in the @b{i686} or @b{x86_64} 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.
-
-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
-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.
-
-
-Once finished, make sure you are root and run
-
-@example
-make install
-@end example
-
-to install the binaries.  If installation fails it means something
-failed to compile or you weren't root.  Run @b{make} again and watch
-for errors.
-
-Sometimes you'll want to run @b{make clean} if you're programming
-something or the system libraries change.  In this case, you'll
-probably need to run @b{configure} again because some libraries delete
-their configuration files in @b{make clean}.
-
-@node RUNNING CINELERRA
-@section RUNNING CINELERRA
-
-
-The simplest way to run Cinelerra is by running
-
-
-@example
-/usr/bin/cinelerra
-@end example
-
-This command hides a much more capable command line interface.  Run
-@b{cinelerra -h} to get a listing of command line options.  The use of
-these options is described in several sections.
-
-For rendering from the command line @xref{RENDERING FILES}.
-
-
-
-
-
-
-
-
-
-
-
-
-@node CONFIGURATION
-@chapter CONFIGURATION
-
-
-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.
-
-Here we discuss not only the configuration options but which of the
-different API's in Linux are supported.
-
-Go to @b{settings->preferences} and to see the options.
-
-
-@menu
-* ENVIRONMENT VARIABLES::  These environment variables are recognized by Cinelerra
-* AUDIO DRIVERS::          Information about the audio drivers
-* VIDEO DRIVERS::          Information about the video drivers
-* PLAYBACK::               Configuring parameters related to playback.
-* RECORDING::              Configuring parameters related to recording.
-* PERFORMANCE::            Configuring parameters related to how fast things go.
-* INTERFACE::              Configuring the user interface.
-* ABOUT::                  Viewing information about the program.
-@end menu
-
-
-@node ENVIRONMENT VARIABLES
-@section ENVIRONMENT VARIABLES
-
-In UNIX derivatives, environment variables are global variables in the
-shell which all applications can read.  They are set with a command
-like @b{set VARIABLE=value}.  All the environment variables can be
-viewed with a command like @b{env}.  Cinelerra recognizes the following
-environment variables:
-
-@itemize
-
-@item @b{LADSPA_PATH} - 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.  @xref{LADSPA
-EFFECTS}.
-
-
-@end itemize
-
-
-
-
-
-
-@node AUDIO DRIVERS
-@section AUDIO DRIVERS
-
-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.
-
-
-
-
-@menu
-* COMMON SOUND DRIVER ATTRIBUTES:: Attributes used for more than one sound driver.
-* OSS:: Notes about the OSS driver
-* OSS Envy24:: Notes about the OSS driver for the Envy24 chip
-* ALSA:: Notes about the ALSA driver
-* ESOUND:: Notes about the ESound driver
-* RAW 1394:: Notes about the Raw1394 driver
-* DV 1394:: Notes about the DV1394 driver
-* IEC 61883:: Notes about the IEC 61883 driver
-@end menu
-
-@node COMMON SOUND DRIVER ATTRIBUTES
-@subsection COMMON SOUND DRIVER ATTRIBUTES
-
-@itemize
-
-@item
-DEVICE PATH
-
-Usually a file in the @b{/dev/} directory which controls the
-device.
-
-@item
-
-BITS
-
-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 24 bits.  Some sound drivers need to be set to 24 bits for 24
-bit playback.
-
-@end itemize
-
-
-
-@node OSS
-@subsection OSS
-
-This was the first Linux sound driver.  It had an open source
-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.
-
-@node OSS Envy24
-@subsection OSS Envy24
-
-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.
-
-
-@node ALSA
-@subsection ALSA
-
-ALSA is the most common sound driver in Linux 2.6.  It supports the
-most sound cards now.  It takes advantage of low latency features in
-Linux 2.6 to get better performance than OSS had in 2.4 but roughly the
-same performance that OSS had in 2.0.  Unfortunately ALSA is constantly
-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.
-
-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,
-use OSS.
-
-@node ESOUND
-@subsection ESOUND
-
-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.
-
-@node RAW 1394
-@subsection RAW 1394
-
-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.
-
-@node DV 1394
-@subsection DV 1394
-
-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.
-
-@node IEC 61883
-@subsection IEC 61883
-
-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
-next rewrite ought to fix that.
-
-
-
-
-
-
-
-
-@node VIDEO DRIVERS
-@section VIDEO DRIVERS
-
-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.
-
-
-@menu
-* COMMON VIDEO DRIVER ATTRIBUTES:: Parameters used by more than one driver.
-* X11::
-* X11-XV::
-* X11-OPENGL::
-* BUZ::
-* RAW 1394 VIDEO PLAYBACK::
-* DV 1394 VIDEO PLAYBACK::
-* IEC 61883 VIDEO PLAYBACK::
-@end menu
-
-@node COMMON VIDEO DRIVER ATTRIBUTES
-@subsection COMMON VIDEO DRIVER ATTRIBUTES
-
-
-@itemize
-
-@item
-
-DISPLAY
-
-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.
-
-@item
-
-DEVICE PATH
-
-Usually a file in the @b{/dev/} directory
-which controls the device.
-
-@item
-
-SWAP FIELDS
-
-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.
-
-@item
-
-OUTPUT CHANNEL
-
-Devices with multiple outputs may need a
-specific connector to send video on.
-
-@item
-
-PORT
-
-The IEEE1394 standard specifies something known as the
-@b{port}.  This is probably the firewire card number in the system
-to use.
-
-@item
-
-CHANNEL
-
-The IEEE1394 standard specifies something known as the
-@b{channel}.  For DV cameras it's always @b{63}.
-
-@end itemize
-
-@node X11
-@subsection X11
-
-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
-frames.
-
-@node X11-XV
-@subsection X11-XV
-
-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
-maximum video size for XV is usually 1920x1080.
-
-
-@node X11-OPENGL
-@subsection X11-OPENGL
-
-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.
-
-OpenGL doesn'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.
-
-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
-work.
-
-Because of OpenGL limitations, X11-OpenGL processes everything in 8 bit
-colormodels, although the difference between YUV and RGB is retained.
-
-The @b{scaling equation} in Preferences is ignored by OpenGL.  OpenGL
-always uses linear scaling.
-
-Project and track sizes need to be multiples of 4 for OpenGL to work.  
-
-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.
-
-
-
-@node BUZ
-@subsection BUZ
-
-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.
-
-@node RAW 1394 VIDEO PLAYBACK
-@subsection RAW 1394 VIDEO PLAYBACK
-
-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.
-
-
-@node DV 1394 VIDEO PLAYBACK
-@subsection DV 1394 VIDEO PLAYBACK
-
-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.
-
-@node IEC 61883 VIDEO PLAYBACK
-@subsection IEC 61883 VIDEO PLAYBACK
-
-
-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
-next rewrite ought to fix that.
-
-
-
-
-
-
-
-@node PLAYBACK
-@section PLAYBACK
-
-
-
-@menu
-* AUDIO OUT::
-* VIDEO OUT::
-@end menu
-
-
-
-@node AUDIO OUT
-@subsection AUDIO OUT
-
-These determine what happens when you play sound from the timeline.
-
-@itemize 
-
-@item
-SAMPLES TO SEND TO CONSOLE:
-
-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.
-
-Some sound drivers don't allow changing of the console fragment so
-latency is unchanged no matter what this value is.
-
-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.
-
-@item
-
-AUDIO OFFSET:
-
-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
-required for proper video synchronization, it has to be accurate.  The
-@b{AUDIO OFFSET} allows users to adjust the position returned by the
-sound driver to reflect reality.  The audio offset doesn't affect the
-audio playback or rendering at all.  It merely changes the
-synchronization of video playback.
-
-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
-enough for your computer to render it at the full framerate.  Highlight
-a region of the timeline starting at 10 seconds and ending at 20
-seconds.  Drop a @b{gradient} effect on the video track and configure
-it to be clearly visible.  Drop a @b{synthesizer} effect on the audio
-and configure it to be clearly audible.
-
-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
-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} value in preferences.
-
-@b{Note:} if you change sound drivers or you change the value of @b{USE
-SOFTWARE FOR POSITIONING INFORMATION}, you'll need to change the audio
-offset because different sound drivers are unequally inaccurate.
-
-@item
-
-VIEW FOLLOWS PLAYBACK
-
-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.
-
-@item
-USE SOFTWARE FOR POSITIONING INFORMATION
-
-Most soundcards and sound drivers don'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.
-
-@item
-AUDIO PLAYBACK IN REALTIME:
-
-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
-achieving very low latency between console tweeks and soundcard
-output.  You must be root to get realtime priority.
-
-@item
-AUDIO DRIVER
-
-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. 
-@xref{AUDIO DRIVERS}.
-
-@end itemize
-
-
-
-
-@node VIDEO OUT
-@subsection VIDEO OUT
-
-These determine how video gets from the timeline to your eyes.
-
-@itemize
-
-
-@item PLAY EVERY FRAME
-
-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
-dropping anymore.
-
-
-
-@item
-
-FRAMERATE ACHIEVED
-
-The number of frames per second being displayed during playback.  This
-is only updated during playback.
-
-@item DECODE FRAMES ASYNCHRONOUSLY
-
-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.
-
-Since this option requires enourmous amounts of memory, it may crash if
-the input frames are very large.
-
-
-@item
-
-SCALING EQUATION
-
-When video playback involves any kind of scaling or translation, this
-algorithm is used.  This doesn't affect 1:1 playback.
-
-@itemize
-
-@item
-NEAREST NEIGHBOR ENLARGE AND REDUCE
-
-lowest but fastest
-quality.  Produces jagged edges and uneven motion.
-
-
-@item
-
-BICUBIC ENLARGE AND BILINEAR REDUCE
-
-highest but slowest
-quality.  For enlarging a bicubic interpolation is used, which blurs
-slightly but doesn'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.
-
-@item
-
-BILINEAR ENLARGE AND BILINEAR REDUCE
-
-when slight enlargement
-is needed a bilinear enlargement looks better than a bicubic
-enlargement.
-
-@end itemize
-
-
-@item
-
-PRELOAD BUFFER FOR QUICKTIME
-
-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.
-
-
-@item 
-
-DVD SUBTITLE TO DISPLAY
-
-DVD IFO files usually contain subtitle tracks.  These must be decoded
-with by the MPEG decoder.  Select @b{Enable subtitles} 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.
-
-
-@item 
-
-INTERPOLATE CR2 IMAGES
-
-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
-built-in interpolation and is very slow.  This operation can be
-disabled and the @b{Interpolate Pixels} effect used instead for fast
-previewing.
-
-
-@item 
-
-WHITE BALANCE CR2 IMAGES
-
-This enables white balancing for CR2 images if interpolation is also
-enabled.  It uses the camera'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. 
-
-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.
-
-If you disable @b{Interpolate CR2 Images} and use the @b{Interpolate
-Pixels} effect, be aware the @b{Interpolate Pixels} effect always does
-both interpolation and white balancing using the camera's matrix,
-regardless of the settings in Preferences.  Dark frame subtraction
-needs to be performed before @b{Interpolate Pixels}.
-
-@item
-
-
-
-
-VIDEO DRIVER
-
-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
-point is repositioned, however.
-
-The video drivers and their parameters are described in the video
-driver section.  @xref{VIDEO DRIVERS}.
-
-
-@end itemize
-
-
-
-
-@node RECORDING
-@section RECORDING
-
-@menu
-* FILE FORMAT::
-* AUDIO IN::
-* VIDEO IN::
-@end menu
-
-
-
-The parameters here affect what happens when you go to
-@b{File->Record...}.  The intention was to make @b{File->Record...} go
-as fast as possible into the record monitoring window, without a
-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.
-
-
-@node FILE FORMAT
-@subsection FILE FORMAT
-
-This determines the output file format for recordings.  It depends
-heavily on the type of driver used.  The interface is the same as the
-rendering interface.  The @b{Record audio tracks} toggle must be
-enabled to record audio.  The @b{Record video tracks} toggle must be
-enabled to record video.  The wrench button left of each toggle opens a
-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} menu.  Different wrappers may record audio only, video
-only, or both.
-
-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.
-
-
-
-@node AUDIO IN
-@subsection AUDIO IN
-
-These determine what happens when you record audio.
-
-@itemize
-@item
-
-RECORD DRIVER
-
-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.
-
-@itemize
-@item
-
-DEVICE PATH
-
-Usually a file in the @b{/dev/} directory which controls the
-device.
-
-@item
-
-BITS
-
-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
-when set to 24 bits.  Some sound drivers need to be set to 24 bits for
-24 bit recording.
-
-
-
-@end itemize
-
-@item
-
-SAMPLES TO WRITE AT A TIME
-
-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.
-
-@item
-
-SAMPLE RATE FOR RECORDING
-
-Regardless of what the project settings are.  This is the sample rate
-used for recording.  This should be the highest the audio device
-supports.
-
-@end itemize
-
-@node VIDEO IN
-@subsection VIDEO IN
-
-These determine what happens when you record video.
-
-@itemize
-@item
-
-RECORD DRIVER
-
-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.
-
-@item
-
-FRAMES TO RECORD TO DISK AT A TIME
-
-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. 
-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.
-
-@item
-
-FRAMES TO BUFFER IN DEVICE
-
-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.
-
-@item
-USE SOFTWARE FOR POSITIONING INFORMATION
-
-Video uses audio for
-
-
-synchronization but most soundcards don't give accurate position
-information.  This calculates an estimation of audio position in
-software instead of the hardware for synchronization.
-
-@item
-
-SYNC DRIVES AUTOMATICALLY
-
-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.
-
-@item
-
-SIZE OF CAPTURED FRAME
-
-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
-might crash Cinelerra.
-
-@item
-FRAME RATE FOR RECORDING
-
-The frame rate recorded is different from the project settings.  This
-sets the recorded frame rate.
-
-@end itemize
-
-
-
-
-
-
-
-
-@node PERFORMANCE
-@section PERFORMANCE
-
-
-You'll spend most of your time configuring this section.  The main
-focus of performance is rendering parameters not available in the
-rendering dialog.  
-
-
-
-
-
-@itemize 
-
-@item
-CACHE ITEMS
-
-
-
-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.
-
-
-@item
-
-SECONDS TO PREROLL RENDERS
-
-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
-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.
-
-@item
-
-FORCE SINGLE PROCESSOR USE
-
-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
-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.
-
-@end itemize
-
-
-@menu
-* BACKGROUND RENDERING::
-* RENDERFARM::
-@end menu
-
-
-@node BACKGROUND RENDERING
-@subsection BACKGROUND RENDERING
-
-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
-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.
-
-@itemize
-
-
-
-
-
-@item
-FRAMES PER BACKGROUND RENDERING JOB
-
-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.
-
-
-
-@item
-FRAMES TO PREROLL BACKGROUND
-
-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.
-
-
-
-
-
-@item
-OUTPUT FOR BACKGROUND RENDERING
-
-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} commands won't work in the
-background rendering directory.  The @image{magnify} browse button for
-this option normally won't work either, but the @image{wrench}
-configuration button for this option works.
-
-@item
-FILE FORMAT
-
-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.
-
-
-@end itemize
-
-@node RENDERFARM
-@subsection RENDERFARM
-
-To use the renderfarm set these options.  Ignore them for a standalone
-system
-
-@itemize
-
-@item
-
-USE RENDER FARM FOR RENDERING
-
-When selected, all the
-@b{file->render} operations use the renderfarm.
-
-@item
-
-NODES
-
-Displays all the nodes on the renderfarm and which ones are active. 
-
-Nodes are added by entering the host name of the node, verifying the
-value of @b{port} and hitting @b{add node}.
-
-Computer freaks may be better off editing the
-@b{~/.bcast/.Cinelerra_rc} file than this if they have hundreds of
-nodes.  Remember that .Cinelerra_rc is overwritten whenever a copy of
-Cinelerra exits.
-
-Select the @b{ON} column to activate and deactivate nodes once they
-are created.
-
-Nodes may be edited by highlighting a row and hitting @b{apply changes}.
-
-@item
-
-HOSTNAME
-
-Edit the hostname of an existing node or enter the hostname of a new
-node here.
-
-@item
-
-PORT
-
-Edit the port of an existing node or enter the port of a new node here.
-
-@item
-
-REPLACE NODE
-
-When editing an existing node, hit this to commit the changes to
-@b{HOSTNAME} and @b{PORT}.  The changes won't be committed if you
-don't hit this button.
-
-@item
-
-ADD NODE
-
-Create a new node with the @b{HOSTNAME} and @b{PORT} settings.
-
-@item
-
-DELETE NODE
-
-Deletes whatever node is highlighted in the @b{NODES} list.
-
-@item
-
-SORT NODES
-
-Sorts the @b{NODES} list based on the hostname.
-
-@item
-
-RESET RATES
-
-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.
-
-
-
-
-
-
-@item
-
-TOTAL JOBS TO CREATE
-
-Determines the number of jobs to dispatch to the renderfarm.  The more
-jobs you create, the more finely balanced the renderfarm becomes.
-
-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.
-
-@end itemize
-
-
-
-
-
-@node INTERFACE
-@section INTERFACE
-
-These parameters affect purely how the user interface works.
-
-@itemize
-
-@item
-
-INDEX FILES GO HERE
-
-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.
-
-
-@item
-
-SIZE OF INDEX FILE
-
-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.
-
-@item
-
-NUMBER OF INDEX FILES TO KEEP
-
-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.
-
-@item
-
-DELETE ALL INDEXES
-
-When you change the index size or you want to clean out excessive index
-files, this deletes all the index files.
-
-@item
-USE HOURS:MINUTES:SECONDS.XXX
-
-Various representations of time are given.  Select the most convenient
-one.  The time representation can also be changed by @b{CTRL}
-clicking on the time ruler.
-
-@item
-USE THUMBNAILS
-
-The Resource Window displays thumbnails of assets by default.  This can
-take a long time to set up.  This option disables the thumbnails.
-
-@item
-CLICKING IN/OUT POINTS DOES WHAT
-
-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.
-
-@item
-MIN DB FOR METER
-
-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.
-@xref{SOUND LEVEL METERS}.
-
-@item
-MAX DB FOR METER
-
-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.
-@xref{SOUND LEVEL METERS}.
-
-@item
-THEME
-
-Cinelerra supports variable themes.  Select one here and restart
-Cinelerra to see it.
-
-@end itemize
-
-
-
-@node ABOUT
-@section ABOUT
-
-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.
-
-
-
-
-
-
-
-@node CREATING A NEW PROJECT
-@chapter CREATING A NEW PROJECT
-
-There are 2 ways to create a new project: going to @b{File->New} or
-loading new files @xref{LOADING FILES}.  Once a new project is
-created, all the parameters can be changed later without creating a new
-project.  
-
-
-@menu
-* USING THE NEW PROJECT DIALOG::
-* CHANGING PARAMETERS AFTER LOADING::
-@end menu
-
-
-
-@node USING THE NEW PROJECT DIALOG
-@section USING THE NEW PROJECT DIALOG
-
-One way is to go to @b{File->New}.  This dialog contains the parameters
-for the new project.  The sections of the @b{New} dialog are described
-here:
-
-@itemize
-
-@item
-
-@b{Presets} - Select an option from this menu to have all the project
-settings set to one of the known standards.
-
-@item
-@b{Audio -> Tracks} - 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.
-
-@item
-@b{Audio -> Channels} - Sets the number of audio channels the new
-project should have.  The number of audio channels doesn't have to be
-the same as the number of tracks.
-
-@item
-@b{Audio -> Samplerate} - Sets the samplerate of the audio.  The
-project samplerate doesn't have to be the same as the media sample rate
-that you load.  Media is resampled to match the project sample rate.
-
-@item
-@b{Video -> Tracks} - 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.
-
-@item
-@b{Video -> Framerate} - Sets the framerate of the video.  The project
-framerate doesn't have to be the same as the media frame rate that you
-load.  Media is reframed to match the project framerate.
-
-@item
-@b{Video -> Canvas size} - Sets the size of the video output.  Each
-track also has its own frame size.  Initially the @b{New} 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.
-
-@item
-@b{Video -> Aspect ratio} - 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.
-
-@item
-@b{Video -> Auto aspect ratio} - If this is checked, the @b{New} dialog
-always recalculates the @b{Aspect ratio} setting when the @b{Canvas
-size} is changed.  This ensures pixels are always square.
-
-@item 
-@b{Video -> Color model} - This sets the color model video intermediates
-in the project will be stored in.  Color models are described in a 
-separate section @xref{COLOR MODEL}.
-
-@end itemize
-
-
-
-
-
-
-
-
-
-
-
-
-
-@node CHANGING PARAMETERS AFTER LOADING
-@section CHANGING PARAMETERS AFTER LOADING
-
-After a project is created, you have to use the set format dialog to
-change parameters without deleting the project.  Go to @b{Settings->Set
-format}.  
-
-Most of the options are identical to the @b{File->New}
-options except the lack of a number of tracks to create and the
-addition of audio channel locations.
-
-This section is discussed in @xref{SETTING PROJECT ATTRIBUTES}.
-
-
-
-
-
-
-@node THE MAIN WINDOWS
-@chapter THE MAIN WINDOWS
-
-When Cinelerra first starts, you'll get four main windows.  Hitting
-@b{CTRL-w} in any window closes it.
-
-
-@menu
-* VIEWER::
-* COMPOSITOR::
-* PROGRAM::
-* RESOURCES::
-* SOUND LEVEL METERS::
-* OTHER WINDOWS::
-@end menu
-
-@node VIEWER
-@section VIEWER
-
-
-In here you'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.
-
-@node COMPOSITOR
-@section COMPOSITOR
-
-
-This window displays the output of the timeline.  It'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.
-
-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
-output, it just changes the point of view in the compositor window.
-
-If it is unlocked from the window size, middle clicking and dragging
-anywhere in the video pans the point of view.
-
-Hitting the + and - keys zooms in and out of the video output.
-
-Underneath the video output are copies of many of the functions
-available in the main window.  In addition there is a
-@image{cwindow_zoom} zoom menu and a @image{cwindow_light} tally light.
-
-The zoom menu jumps to all the possible zoom settings and, through the
-@b{Auto} option, locks the video to the window size.  The zoom menu
-does not affect the window size.
-
-The tally light turns red when rendering is happening.  This is useful
-for knowing if the output is current.
-
-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.  
-
-The @b{reset camera} and @b{reset projector} options center the camera
-and projector @xref{COMPOSITING}.
-
-The @b{Hide controls} option hides everything except the video.
-
-On the left of the video output is a toolbar specific to the compositor
-window.  Here are the functions in the toolbar:
-
-@menu
-* PROTECT VIDEO::
-* MAGNIFYING GLASS::
-* MASKS TOOL::
-* CAMERA::
-* PROJECTOR::
-* CROP TOOL::
-* EYEDROPPER::
-* TOOL INFO::
-* SAFE REGIONS TOOL::
-@end menu
-
-@node PROTECT VIDEO
-@subsection PROTECT VIDEO
-
-@image{protect}
-
-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.
-
-@node MAGNIFYING GLASS
-@subsection MAGNIFYING GLASS
-
-@image{magnify}
-
-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.
-
-Left clicking in the video zooms in.
-
-Ctrl clicking in the video zooms out.
-
-Rotating the wheel on a wheel mouse zooms in and out.
-
-
-@node MASKS TOOL
-@subsection MASKS TOOL
-
-@image{mask}
-
-This brings up the mask editing tool @xref{MASKS}.  Enable the
-@image{toolwindow} tool window to see options for this tool.
-
-@node CAMERA
-@subsection CAMERA
-
-
-@image{camera}
-
-This brings up the camera editing tool @xref{THE CAMERA AND
-PROJECTOR}.  Enable the @image{toolwindow} tool window to see options
-for this tool.
-
-@node PROJECTOR
-@subsection PROJECTOR
-
-@image{projector}
-
-This brings up the projector editing tool @xref{THE CAMERA AND
-PROJECTOR}.  Enable the @image{toolwindow} tool window to see options
-for this tool.
-
-@node CROP TOOL
-@subsection CROP TOOL
-
-@image{crop}
-
-This brings up the cropping tool @xref{CROPPING}.  The
-@image{toolwindow} tool window must be enabled to use this tool.
-
-@node EYEDROPPER
-@subsection EYEDROPPER
-
-@image{eyedrop}
-
-This brings up the eyedropper.  The eyedropper detects whatever color
-is under it and stores it in a temporary area.  Enabling the
-@image{toolwindow} tool info shows the currently selected color.  Click
-anywhere in the video output to select the color at that point.
-
-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.
-
-
-@node TOOL INFO
-@subsection TOOL INFO
-
-@image{toolwindow}
-
-This brings up a window containing options for the currently selected
-tool.
-
-
-@node SAFE REGIONS TOOL
-@subsection SAFE REGIONS TOOL
-
-@image{titlesafe}
-
-This draws the safe regions in the video output.  This doesn't affect
-the rendered output @xref{SAFE REGIONS}.
-
-
-
-
-
-
-
-
-
-
-
-@node PROGRAM
-@section PROGRAM
-
-
-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.
-
-Under the @b{Window} menu you'll find options affecting the main
-windows.  @b{default positions} repositions all the windows to a 4
-screen editing configuration.  On dual headed displays, the
-@b{default positions} operation fills only one monitor with windows.
-
-
-@node RESOURCES
-@section RESOURCES
-
-
-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.
-
-@node SOUND LEVEL METERS
-@section SOUND LEVEL METERS
-
-An additional window, the @b{levels window} can be brought up from
-the @b{Window} menu.  The @b{levels} window displays the output
-audio levels after all mixing is done.
-
-Sound level meters appear in many locations.  They can be toggled in
-the viewer and compositor windows with the @image{show_meters} level
-toggle. They appear in the patchbay when a track is expanded (@xref{THE
-PATCHBAY}.)  They appear in the recording monitor when audio is being
-recorded.  
-
-The sound levels in the @b{levels window, compositor, and viewer}
-correspond to the final output levels before they are clipped to the
-soundcard range.  In the @b{record monitor} they are the input values
-from the sound card.  In the @b{patchbay} they are the sound levels for
-each track after all effects are processed and before downmixing for
-the output.
-
-Most of the time, audio levels have numerical markings in DB but in the
-patchbay there isn't enough room.
-
-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.
-
-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.
-
-The visible range of the sound level meters is configurable in
-@b{settings->preferences->interface} (@xref{INTERFACE}.)
-
-@node OTHER WINDOWS
-@section OTHER WINDOWS
-
-The @b{Overlays window} can be brought up from the @b{Window}
-menu.  This is a quick way to toggle what is drawn in the timeline. 
-Every option in the @b{View} menu is available here.
-
-
-
-
-
-
-
-@node LOADING AND SAVING FILES
-@chapter LOADING AND SAVING FILES
-
-
-@menu
-* SUPPORTED FILE FORMATS::     What formats Cinelerra can import and export
-* LOADING FILES::              Loading all types of files
-* LOADING THE BACKUP::         Recovering the session from before a crash
-* SAVING FILES::               Saving edit decision lists
-* RENDERING FILES::            Saving media files
-@end menu
-
-
-
-
-
-
-
-
-
-
-@node SUPPORTED FILE FORMATS
-@section SUPPORTED FILE FORMATS
-
-Here are most of the supported file formats and notes regarding their
-compression.  You may be able to load other formats not described here.
-
-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
-96khz.
-
-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} toggle to speed up operations.
-
-
-@sp 1
-@image{track_attributes}
-@b{Track attributes}
-
-Supported file formats are currently:
-
-@itemize
-@item
-WAV
-@item
-FLAC
-@item
-PCM
-@item
-AIFF
-@item
-AC3 audio
-@end itemize
-
-@menu
-* QUICKTIME::
-* MPEG-4 AUDIO::
-* IMAGE SEQUENCES::
-* STILL IMAGES::
-* AVI::
-* MPEG FILES CONTAINING VIDEO::
-* DVD MOVIES::
-* MPEG 1 AUDIO::
-* OGG THEORA/VORBIS::
-* EDIT DECISION LIST::
-@end menu
-
-
-@node QUICKTIME
-@subsection QUICKTIME
-Quicktime is not the standard for UNIX but we use it because it's well
-documented.  All of the Quicktime movies on the internet are
-compressed.  Cinelerra doesn'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.
-
-@b{NOTES ON QUICKTIME ENCODING}
-
-Here are some notes regarding making Quicktime movies in Cinelerra:
-
-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
-sizes.
-
-Cinelerra supports 2 nonstandard codecs: Dual MPEG-4 video and dual
-H.264 video.  These won'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.
-
-@node MPEG-4 AUDIO
-@subsection MPEG-4 AUDIO
-
-This is the same as Quicktime with MPEG-4 Audio as the audio codec.
-
-@node IMAGE SEQUENCES
-@subsection IMAGE SEQUENCES
-
-
-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
-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.
-
-
-@node STILL IMAGES
-@subsection STILL IMAGES
-
-
-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
-project attributes.
-
-Several still image formats not normally found in other programs are
-described here.
-
-@menu
-* OPEN EXR IMAGES::
-* RAW DIGITAL CAMERA IMAGES::
-@end menu
-
-@node OPEN EXR IMAGES
-@subsubsection OPEN EXR IMAGES
-
-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 @xref{SETTING PROJECT ATTRIBUTES}.  Several compression
-options are available for EXR.
-
-@itemize
-
-@item
-
-@b{PIZ} Lossless wavelet compression.  This is the best compression.
-
-@item
-@b{ZIP} Lossless gzip algorithm.
-
-@item
-@b{RLE} Lossless run length encoding.  This is the fastest and worst
-compression.
-
-@item
-@b{PXR24} Lossy compression where the floating point numbers are
-converted to 24 bits and compressed with gzip.
-
-@end itemize
-
-Select @b{Use Alpha} 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.
-
-@node RAW DIGITAL CAMERA IMAGES
-@subsubsection RAW DIGITAL CAMERA IMAGES
-
-RAW digital camera images are a special kind of image file which
-Cinelerra only imports.  These must be processed in a floating point
-color space once they are on the timeline.  Raw images from Canon
-cameras are the only ones tested.  They need to have the @b{Linearize}
-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.
-
-First apply the Linearize effect to a track of raw images and set it to
-@b{automatic} with @b{0.6} 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.
-
-
-
-@node AVI
-@subsection AVI
-
-AVI with assorted audio and video codecs.  Because AVI is so
-fragmented, your luck will vary.
-
-
-@node MPEG FILES CONTAINING VIDEO
-@subsection MPEG FILES CONTAINING VIDEO
-
-
-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.  
-
-To use MPEG files in a renderfarm you need to run @b{mpeg3toc} 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
-directory that Cinelerra is run from.
-
-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.
-
-@b{NOTES ON MPEG VIDEO ENCODING}
-
-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.
-
-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.
-
-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
-mpeg2enc version.
-
-@node DVD MOVIES
-@subsection DVD MOVIES
-
-
-DVD's are spit into a number of programs, each identified by a unique
-@b{IFO} file.  If you want to load a DVD, find the corresponding
-@b{IFO} 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.
-
-Run
-
-@example
-mpeg3toc -v /cdrom/video_ts/vts_01_0.ifo dvd.toc
-@end example
-
-or something similar.  Then load @b{dvd.toc}.
-
-
-
-@node MPEG 1 AUDIO
-@subsection MPEG 1 AUDIO
-
-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}.
-
-@node OGG THEORA/VORBIS
-@subsection OGG THEORA/VORBIS
-
-
-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
-MPEG-4 Audio.  In reality, anyone with enough money and desire can find
-a patent violation so the justification for OGG is questionable.
-
-@node EDIT DECISION LIST
-@subsection EDIT DECISION LIST
-
-
-Edit decision lists are generated by Cinelerra for storing projects. 
-They end in .xml.  They change project attributes when loaded.
-
-Because edit decision lists consist of text, they can be edited in a
-text editor.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-@node LOADING FILES
-@section LOADING FILES
-
-All data that you work with in Cinelerra is acquired either by
-@b{recording from a device} or by @b{loading from disk}.  This
-section describes loading.
-
-The loading and playing of files is just as you would expect. Just go
-to @b{file->Load}, select a file for loading, and hit @b{ok}. Hit
-the forward play button and it should start playing, regardless of
-whether a progress bar has popped up.
-
-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.
-
-If the file is a still image, the project'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.
-
-@menu
-* INSERTION STRATEGY::
-* LOADING MULTIPLE FILES::
-@end menu
-
-
-
-
-
-
-
-
-
-
-
-@node INSERTION STRATEGY
-@subsection INSERTION STRATEGY
-
-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
-created in the timeline.
-
-But Cinelerra lets you change what happens when you load a file.
-
-In the file selection box there is a range of options for @b{Insertion
-strategy}.  Each of these options loads the file a different way.
-
-@image{insertion_strategy}
-
-@itemize
-
-
-@item
-@b{Replace current project}
-@image{loadmode_new}
-
-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.
-
-@item
-@b{Replace current project and concatenate tracks}
-@image{loadmode_newcat}
-
-Same as replace current project except if multiple files are selected
-it concatenates the tracks of every file after the first.
-
-@item
-@b{Append in new tracks}
-@image{loadmode_newtracks}
-
-The current project is not deleted and new tracks are created for the
-source.
-
-@item
-@b{Concatenate to existing tracks}
-@image{loadmode_cat}
-
-The current project is not deleted and new files are concatenated to
-the existing tracks.
-
-@item
-@b{Paste at insertion point}
-@image{loadmode_paste}
-
-The file is pasted in like a normal paste operation.
-
-@item
-@b{Create new resources only}
-@image{loadmode_resource}
-
-The timeline is unchanged and new resources are created in the Resource
-Window.
-
-@item
-@b{Nested EDL}
-@image{loadmode_nested}
-
-If the file is an EDL, the output of the EDL is pasted in like a media
-file.  Nested EDLs have 1 video track & 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, & global processing on the output of an
-EDL without having to manipulate each track.
-
-
-
-@end itemize
-
-
-The insertion strategy is a recurring option in many of Cinelerra's
-functions.  In each place the options do the same thing.  With these
-options you can almost do all your editing by loading files.
-
-If you load files by passing command line arguments to Cinelerra, the
-files are loaded with @b{Replace current project} rules.
-
-
-
-
-
-@node LOADING MULTIPLE FILES
-@subsection LOADING MULTIPLE FILES
-
-In the file selection box go to the list of files.  Select a file.  Go
-to another file and select it while holding down @b{CTRL}.  This
-selects one additional file.  Go to another file and select it while
-holding down @b{SHIFT}.  This selects every intervening file.  This
-behavior is available in most every list box.
-
-Select a bunch of mp3 files and @b{Replace current project and
-concatenate tracks} in the insertion strategy to create a song
-playlist.
-
-
-
-
-@node LOADING THE BACKUP
-@section LOADING THE BACKUP
-
-There is one special XML file on disk at all times.  After every
-editing operation Cinelerra saves the current project to a backup in
-@b{$HOME/.bcast/backup.xml}.  In the event of a crash go to
-@b{file->load backup} 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
-the backup.
-
-
-@node SAVING FILES
-@section SAVING FILES
-
-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->save
-as...}.  Select a file to overwrite or enter a new file.  Cinelerra
-automatically concatenates @b{.xml} to the filename if no
-@b{.xml} extension is given.
-
-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.
-
-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
-absolute path is saved.
-
-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.
-
-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.
-
-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. 
-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.
-
-
-
-
-
-
-@node RENDERING FILES
-@section RENDERING FILES
-
-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
-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.
-
-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. 
-@xref{NAVIGATING THE PROJECT}.  The rendering functions define the
-region based on a set of rules.  When a region is highlighted or in/out
-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.
-
-
-
-@menu
-* SINGLE FILE RENDERING::      Rendering a single file
-* BATCH RENDERING::            Rendering several files unattended
-* THE RENDER FARM::            Rendering using many computers
-* COMMAND LINE RENDERING::     Rendering from the command line without a GUI
-@end menu
-
-
-
-@node SINGLE FILE RENDERING
-@subsection SINGLE FILE RENDERING
-
-The fastest way to get media to disk is to use the single file
-rendering function.
-
-Go to @b{File->render} to bring up the render dialog.  Select the
-magnifying glass @image{magnify} to bring up a file selection dialog.  This determines
-the filename to write the rendered file to and the encoding parameters.
-
-In the render dialog select a format from the @b{File Format} menu. 
-The format of the file determines whether you can render audio or video
-or both.  Select the @b{Render audio tracks} toggle to generate
-audio tracks and @b{Render video tracks} to generate video tracks.
-
-
-Select the wrench @image{wrench} next to each toggle to set compression
-parameters.  If the file format can't store audio or video the
-compression parameters will be blank.  If @b{Render audio tracks} or
-@b{Render video tracks} is selected and the file format doesn't
-support it, trying to render will pop up an error.
-
-The @b{Create new file at each label} 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} causes one
-renderfarm job to be created at every label instead of using the
-internal load balancing algorithm to space jobs.
-
-When @b{Create new file at each label} 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.
-
-In the filename @b{/hmov/track01.wav} the @b{01} would be
-overwritten for every output file.  The filename
-@b{/hmov/track.wav}; however, would become @b{/hmov/track.wav001}
-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.
-
-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} the file will be written out to disk
-without changing the current project.  For other insertion strategies
-be sure to prepare the timeline to have the output inserted at the
-right position before the rendering operation is finished. 
-@xref{EDITING}.  Editing describes how to cause output to be inserted
-at the right position.
-
-It should be noted that even if you only have audio or only have video
-rendered, a @b{paste} 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.
-
-
-
-@node BATCH RENDERING
-@subsection BATCH RENDERING
-
-
-
-If you want to render many projects to media files without having to
-repeatedly attend to the @b{Render} dialog, @b{batch rendering} is the
-function to use.  In this function, you specify many EDL files to
-render and the unique output files for each.  Then Cinelerra loads each
-EDL file and renders it automatically, without any user intervention. 
-Each EDL file and its output to be rendered is called a @b{batch}. 
-This allows a huge amount of media to be processed and greatly
-increases the value of an expensive computer.
-
-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.
-
-With all the EDL files prepared with active regions, go to
-@b{File->batch render}.  This brings up the batch rendering dialog. 
-The interface for batch rendering is a bit more complex than for single
-file rendering.
-
-
-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}.  Above this are
-the configuration parameters for a single batch.
-
-Set the @b{output path}, @b{file format}, @b{Audio}, @b{Video}, and
-@b{Create new file at each label} 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}.
-
-If the @b{batches to render} list is empty or nothing is highlighted,
-click @b{New} to create a new batch.  The new batch will contain all
-the parameters you just set.
-
-Repeatedly press the @b{New} 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.
-
-Click and drag batches to change the order in which they're rendered. 
-Hit @b{delete} to permanently remove the highlighted batch.
-
-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} 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.
-
-The other columns in the batch list are informative.
-
-@itemize
-
-@item
-@b{Output} The output path of the batch.
-@item
-@b{EDL} The source EDL of the batch.
-@item
-@b{Elapsed} The amount of time taken to render the batch if it is finished.
-
-@end itemize
-
-To start rendering from the first enabled batch, hit @b{Start}.
-
-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 currently rendering batch is always highlighted red.
-
-
-To stop rendering before the batches are finished without closing the
-batch render dialog, hit @b{Stop}.
-
-To stop rendering before the batches are finished and close the batch
-render dialog, hit @b{Cancel}.
-
-To exit the batch render dialog whether or not anything is being
-rendered, hit @b{Cancel}.
-
-
-
-
-
-
-
-@node THE RENDER FARM
-@subsection THE RENDER FARM
-
-When bicubic interpolation and HDTV was first done on Cinelerra, the
-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.
-
-While the renderfarm interface isn't spectacular, it'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->render
-operations when it is enabled in the preferences.
-
-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
-to the same filesystem on the same mount point for assets.
-
-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.
-
-It should be noted that in the render dialog, the @b{Create new file at
-each label} 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.
-
-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 
-
-@b{cinelerra -d}
-
-That is the simplest configuration.  Type @b{cinelerra -h} to see more
-options.  The default port number may be overridden by passing a port
-number after the -d.
-
-
-Most of the time you'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
-individual files.
-
-You can load these by creating a new track and specifying
-@b{concatenate to existing tracks} 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.
-
-MPEG files or files which don't support direct copy have to be
-concatenated with a command line utility.  MPEG files can be
-concatenated with @b{cat}.
-
-Configuration of the renderfarm is described in the configuration
-chapter @xref{RENDERFARM}.  The slave nodes traditionally read and
-write data to a common filesystem over a network, thus they don't need
-hard drives.
-
-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.
-
-
-
-
-
-@node COMMAND LINE RENDERING
-@subsection COMMAND LINE RENDERING
-
-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
-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.
-
-To perform rendering from the command line, first run Cinelerra in
-graphical mode.  Go to @b{file->batch render}.  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->preferences} and exit Cinelerra.  These settings are used
-the next time command line rendering is used.
-
-On the command line run 
-
-@b{cinelerra -r}
-
-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.
-
-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.
-
-
-
-
-
-@node NAVIGATING THE PROJECT
-@chapter NAVIGATING THE PROJECT
-
-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.
-
-
-
-@menu
-* NAVIGATING THE PROGRAM WINDOW::
-* NAVIGATING THE VIEWER AND COMPOSITOR::
-* NAVIGATING THE RESOURCES::
-* USING THE TRANSPORT CONTROLS::
-* USING BACKGROUND RENDERING::
-@end menu
-
-
-
-@node NAVIGATING THE PROGRAM WINDOW
-@section NAVIGATING THE PROGRAM WINDOW
-
-The program window contains many features for navigation and displays
-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.
-
-Below the timeline you'll find the zoom panel.  The zoom panel contains
-values for @b{sample zoom}, @b{amplitude}, @b{track zoom}, and
-@b{curve zoom}.  These values in addition to the scrollbars are the
-main tools for positioning the timeline.
-
-
-
-
-
-
-
-
-@sp 1
-
-@image{zoompanel}
-
-
-Changing the @b{sample zoom} 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.}
-
-The @b{amplitude} only affects audio.  It determines how big the
-waveform is if the waveform is drawn.
-
-The @b{track zoom} 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.
-
-The @b{curve zoom} 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} button.  @image{fit_curves,,,,}
-
-
-In addition to the graphical tools, you'll probably more often use the
-keyboard to navigate.  Use @b{PAGE UP} and @b{PAGE DOWN} to
-scroll up and down the tracks.
-
-Use the @b{LEFT} and @b{RIGHT} 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
-@b{RIGHT} arrow to scroll past the end of timeline.
-
-Use the @b{HOME} and @b{END} keys to instantly go to the
-beginning or end of the timeline.  In @b{I-beam} mode, hold down
-shift while pressing @b{HOME} or @b{END} to select the region of
-the timeline between the insertion point and the key pressed.
-
-Use the @b{UP} and @b{DOWN} arrows to change the sample zoom by a
-power of 2.
-
-@b{CTRL-UP} and @b{CTRL-DOWN} cause the amplitude zoom to change.
-
-@b{CTRL-PGUP} and @b{CTRL-PGDOWN} cause the track zoom to change.
-
-@b{ALT-UP} and @b{ALT-DOWN} cause the curve amplitude to change.
-
-
-
-@menu
-* THE INSERTION POINT::
-* THE IN/OUT POINTS::
-* USING LABELS IN THE PROGRAM WINDOW::
-@end menu
-
-
-
-
-
-
-
-
-
-
-
-
-
-@node THE INSERTION POINT
-@subsection THE INSERTION POINT
-
-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.
-
-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.
-
-@sp 1
-@image{main_timebar,,,,}
-@b{The main timebar}
-
-The insertion point also can be moved by clicking in the timeline
-itself, but not always.  The insertion point has two modes of
-operation: 
-
-@itemize
-@item
-drag and drop mode 
-
-@item
-cut and paste mode
-
-@end itemize
-
-The mode of operation is determined by selecting the arrow or the
-i-beam in the buttonbar.
-
-@sp 1
-@image{editing_mode,,,,}
-@b{The editing mode buttons}
-
-If the arrow is highlighted it enables @b{drag and drop} mode.  In
-drag and drop mode, clicking in the timeline doesn'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.
-
-If the i-beam is highlighted it enables @b{cut and paste mode}.  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.
-
-@b{Shift-clicking} in the timeline extends the highlighted region.
-
-@b{Double-clicking} in the timeline selects the entire edit the
-cursor is over.
-
-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
-@b{settings->align cursor on frames}.
-
-If the highlighted region is the region affected by cut and paste
-operations, how do I cut and paste in @b{drag and drop} mode?  In
-this case you need to set @b{in/out points} to define an affected region.
-
-
-
-
-
-@node THE IN/OUT POINTS
-@subsection THE IN/OUT POINTS
-
-In both editing modes you can set in/out points.  The in/out points
-define the affected region.  In drag and drop mode they are the only
-way to define an affected region.  In both cut and paste mode and drag
-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.
-
-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.
-
-To set in/out points go to the timebar and position the insertion point
-somewhere.  Hit the @image{in_point_button} @b{in point button}.  Go
-to a position after the in point and hit the @image{out_point_button}
-@b{out point button}.
-
-@sp 1
-@image{inout_points} @b{Timebar with in/out points set}.
-
-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} the in point will be deleted.  After selecting
-an out point, if you hit the @b{out point button} the out point will
-be deleted.
-
-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.
-
-@b{Shift-clicking} on an in/out point extends the highlighted region
-to that point.
-
-Instead of using the button bar you can use the @b{[} and @b{]}
-keys to toggle in/out points.
-
-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
-timeline very easily.  For this purpose there are labels.
-
-
-
-
-
-@node USING LABELS IN THE PROGRAM WINDOW
-@subsection USING LABELS IN THE PROGRAM WINDOW
-
-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 @image{label_button} @b{label button} a new label appears on the
-timeline.  
-
-@sp 1
-@image{timebar_label} @b{Timebar with a label on it}
-
-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.
-
-@b{Shift-clicking} on a label extends the highlighted region.
-
-@b{Double-clicking} between two labels highlights the region between
-the labels.
-
-Hitting the @b{l} key has the same effect as the label button.
-
-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.
-
-Labels can reposition the insertion point when they are selected but
-they can also be traversed with the @image{label_traversal} @b{label
-traversal} 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.
-
-@b{CTRL-LEFT} repositions the insertion point on the previous label.
-
-@b{CTRL-RIGHT} repositions the insertion point on the next label.
-
-With label traversal you can quickly seek back and forth on the
-timeline but you can also select regions.
-
-@b{SHIFT-CTRL-LEFT} extends the highlighted region to the previous
-label.
-
-@b{SHIFT-CTRL-RIGHT} extends the highlighted region to the next label.
-
-Manually hitting the label button or @b{l} 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->Clear
-labels} function.  If in/out points exist, the labels between the
-in/out points are cleared and the highlighted region ignored.
-
-
-
-
-
-
-
-
-@node NAVIGATING THE VIEWER AND COMPOSITOR
-@section NAVIGATING THE VIEWER AND COMPOSITOR
-
-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.
-
-@sp 1
-
-@image{timebarslider,,,,}
-
-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}.
-
-The @b{preview region} 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.
-
-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.
-
-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.  The click and drag right.  The preview region should have
-changed and the slider resized proportionally.
-
-Go to the right of the timebar until a right resize pointer appears. 
-Drag left so the preview region shrinks.
-
-Go to the center of the preview region in the timebar and drag it
-around to convince yourself if can be moved.
-
-
-@sp 1
-
-@image{previewregion,,,,}
-
-@b{Preview region in compositor}
-
-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
-timebar and slider in the viewer window work exactly the same.
-
-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.
-
-When you hit the @b{label button} in the compositor, the label
-appears both in the compositor timebar and the program timebar.
-
-When you select a label or in/out point in the compositor, the program
-window jumps to that position.
-
-@sp 1
-@image{viewer_labels} @b{Labels and in/out points in the viewer}.
-
-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.
-
-
-
-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} the video is zoomed to match
-the compositor window size as closely as possible.  When set to any
-other percentage, the video is zoomed a power of 2 and scrollbars can
-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} dragging in the video output scans around
-it.  This is exactly when The Gimp does.
-
-Furthermore, the zoom @image{magnify} toggle causes the Compositor
-window to enter zoom mode.  In zoom mode, clicking in the video output
-zooms in while @b{ctrl-clicking} in the video output zooms out.  If
-you have a wheel mouse, rotating the wheel zooms in or out too.
-
-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.
-
-
-
-
-
-
-@node NAVIGATING THE RESOURCES
-@section NAVIGATING THE RESOURCES
-
-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.
-
-The folder and contents can be displayed as icons or text.
-
-@b{Right clicking} in the folder or contents area brings up a menu
-containing formatting options.  Select @b{Display text} to display a
-text listing.  Select @b{Sort items} to sort the contents of the
-folder alphabetically.
-
-
-
-
-
-
-
-
-@node USING THE TRANSPORT CONTROLS
-@section USING THE TRANSPORT CONTROLS
-
-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.
-
-@sp 1
-@image{transport_panel} @b{The transport panel}.
-
-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.
-
-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
-region.
-
-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.
-
-The keyboard interface is usually the fastest and has more speeds.  The
-transport keys are arranged in a sideways @b{T} on the number pad.
-
-@itemize
-
-@item
-@b{+} Fast reverse
-@item
-@b{6} Normal reverse
-@item
-@b{5} Slow reverse
-@item
-@b{4} Frame reverse
-@item
-@b{1} Frame forward
-@item
-@b{2} Slow forward
-@item
-@b{3} Normal forward
-@item
-@b{Enter} Fast forward
-@item
-@b{0} Stop
-@item
-@b{Spacebar} Normal forward
-@end itemize
-
-Hitting any key on the keyboard twice pauses it.
-
-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 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.
-
-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.
-
-
-
-@node USING BACKGROUND RENDERING
-@section USING BACKGROUND RENDERING
-
-
-
-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.
-
-Background rendering is enabled in settings->preferences->performance. 
-It has one interactive function: @b{settings->set background render}.  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.
-
-It's often useful to insert an effect or a transition and then select
-settings->set background render right before the effect to preview it
-in full framerates.
-
-
-
-@node EDITING
-@chapter EDITING
-
-
-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.
-
-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.
-
-There are several concepts Cinelerra uses when editing which apply to
-all the methods.  The @b{timeline} 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.
-
-The @b{active region} 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
-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}, while others treat the active length as 0 if no
-end point for the active region is defined.
-
-Finally, editing decisions never affect source material.  This is
-@b{non destructive editing} 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} it.
-@xref{RENDERING FILES}.
-
-Every track on the timeline has a set of attributes on
-the left, the most important of which is the @b{arm track}
-attribute.
-
-
-
-@menu
-* THE PATCHBAY::           Enabling different features on different tracks
-* NUDGING TRACKS::         Move entire tracks horizontally
-* PANNING TRACKS::         Changing the audio output channels
-* AUTOMATIC TRACK PANNING::  Panning tracks to common speaker arrangements
-* STANDARD AUDIO MAPPINGS::  Making audio panning that works on other players.
-* MANIPULATING TRACKS::    Moving whole tracks around
-* TWO SCREEN EDITING::     Using two video windows to edit
-* DRAG AND DROP EDITING::  Dragging objects to edit
-* CUT AND PASTE EDITING::  Editing media like text
-* TRIMMING::               Changing in and out points
-@end menu
-
-
-@node THE PATCHBAY
-@section THE PATCHBAY
-
-
-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.
-
-All tracks have an @b{expander} @image{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. 
-The effects appear below the media for the track if they exist.
-
-All tracks have the following row of toggles for several features.
-
-@sp 1
-@image{track_attributes}
-@b{Track attributes}
-
-
-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.
-
-Click on an attribute and drag across adjacent tracks to copy the same
-attribute to those tracks.
-
-Hold down @b{shift} while clicking a track's attribute to enable the
-attribute in the current track and toggle the attribute in all the
-other tracks.
-
-Hold down @b{shift} 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.
-
-
-The other attributes affect the output of the track.
-
-@itemize
-
-@item
-
-@b{Play track} determines whether the track is rendered or not.  If
-it'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.
-@sp 1
-
-@item
-
-@b{Arm track} determines whether the track is armed or not.   Only the
-@b{armed tracks} 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.
-
-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
-will be used as destination tracks.
-
-Press @b{Tab} while the cursor is anywhere over a track to toggle the
-track arming status.
-
-Press @b{Shift-Tab} while the cursor is over a track to toggle the
-arming status of every other track.
-
-@item
-
-@b{Gang fader} causes the fader to track the movement of whatever other
-fader you're adjusting.  A fader is only ganged if the @b{arm track} is
-also on.  This is normally used to adjust audio levels on all the
-tracks simultaneously.  Gang also causes @b{Nudge} parameters to
-synchronise across all the ganged tracks.
-
-
-@sp 1
-
-@item
-
-@b{Draw media} 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.
-@sp 1
-
-@item
-
-@b{Mute track} causes the output to be thrown away once the track is
-completely rendered.  This happens whether or not @b{play track} 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
-back to another track.  Mute track is used to keep the effect chain
-track from overlapping the output of the source track.
-@sp 1
-
-@item
-
-@b{Fader} 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
-track in and out.  If it is ganged to other tracks of the same media
-type, with the @b{arm} option enabled, the other faders should follow.
-
-Hold down @b{shift} and drag a fader to center it on 0.
-
-@end itemize
-
-
-
-@node NUDGING TRACKS
-@section NUDGING TRACKS
-
-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.
-
-@image{apatches}
-
-Pan and nudge for an audio track.
-
-@image{vpatches}
-
-Overlay mode and nudge for a video track.
-
-
-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
-audio with video, creating fake stereo, or compensating for an effect
-which shifts time, all without tampering with any edits.
-
-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} or
-the native units for the track.  Select the units by @b{right clicking}
-on the nudge textbox and using the context sensitive menu.
-
-Nudge settings are ganged with the @b{Gang faders} toggle and the
-@b{Arm track} toggle.
-
-Use the mouse wheel over the nudge textbox to increment and decriment
-it.
-
-
-
-
-
-@node PANNING TRACKS
-@section PANNING TRACKS
-
-Audio tracks have a panning box in their patchbay.  It may have to be
-expanded to see it.  The panning box is shown here.
-
-@image{apatches}
-
-Pan and nudge for an audio track.
-
-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.
-
-
-
-@node AUTOMATIC TRACK PANNING
-@section AUTOMATIC TRACK PANNING
-
-
-Several convenience functions are provided for automatically setting
-the panning to several common standards.  They are listed in the
-@b{Audio} menu.  These functions only affect audio tracks with
-@b{recording} enabled.
-
-@b{Audio->Map 1:1} - This maps every track to its own channel and wraps
-around when all the channels are allocated.  It'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.
-
-@b{Audio->Map 5.1:2} - This maps 6 tracks to 2 channels.  The project
-should have 2 channels when using this function.  Go to
-@b{Settings->format} to set the output channels to 2.  This is most
-useful for downmixing 5.1 audio to stereo.
-
-
-
-
-
-@node STANDARD AUDIO MAPPINGS
-@section STANDARD AUDIO MAPPINGS
-
-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.
-
-In the @b{channel position} widget @xref{SETTING PROJECT ATTRIBUTES},
-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.
-
-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
-they encode anything at all.  The low frequency effects track
-specifically can't store high frequencies in most cases.
-
-
-
-
-
-@node MANIPULATING TRACKS
-@section MANIPULATING TRACKS
-
-Tracks in Cinelerra either contain audio or video.  There is no special
-designation for tracks other than the type of media they contain.  When
-you create a new project, it contains a certain mumber of default
-tracks.  You can still add or delete tracks from a number of menus. 
-The @b{Tracks} menu contains a number of options for dealing with
-multiple tracks simultaneously.  Each track itself has a popup menu
-which affects one track.
-
-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.
-
-@b{Move up} and @b{move down} moves the one track up or down in
-the stack.  @b{Delete track} deletes the track.
-
-Operations in the @b{Tracks} menu affect only tracks which are
-armed.
-
-@b{Move tracks up} and @b{Move tracks down} shift all the armed
-tracks up or down the stack.
-
-@b{Delete tracks} deletes the armed tracks.
-
-@b{Delete last track} deletes the last track, whether it's armed or
-not.  Holding down the @b{d} key quickly deletes all the tracks.
-
-@b{Concatenate tracks} is more complicated.  It takes every
-@b{playable} track and concatenates it to the end of the first
-@b{armed tracks}.  If there are two armed tracks followed by two
-playable tracks, the concatenate operation puts the two playable tracks
-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.
-
-Finally, you'll want to create new tracks.  The @b{Audio} and
-@b{Video} 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.
-
-
-
-
-
-
-
-
-
-@node TWO SCREEN EDITING
-@section TWO SCREEN EDITING
-
-This is the fastest way to construct a program out of movie files.  The
-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.
-
-The way to begin a two screen editing session is to load some
-resources.  In @b{file->load} load some movies with the insertion
-mode @b{create new resources}.  You want the timeline to stay
-unchanged while new resources are brought in.  Go to the Resource
-Window and select the @b{media} folder.  The newly loaded resources
-should appear.  Drag a resource from the media side of the window over
-the Viewer window.
-
-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
-or arm more tracks.
-
-In the viewer window seek to the starting point of a clip you want to
-use.  Use either the @b{slider} or the @b{transport controls}. 
-Use the @b{preview region} to narrow down the search.  Set the
-starting point with the @image{in_point_button} @b{in point button}.
-
-Seek to the ending point of the clip you want to use.  Set the ending
-point with the @image{out_point_button} @b{out point button}.  The
-two points should now appear on the timebar and define a clip.
-
-There are several things you can do with the clip now.
-
-@itemize
-
-@item
-
-Splice @image{splice_button} inserts the clip in the timeline, pushing
-everything back.  If an @b{in point} or @b{out point} exists on
-the timeline it's inserted there, otherwise it'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.
-
-@item
-
-Overwrite @image{overwrite_button} overwrites the region of the
-timeline with the clip.  If an @b{in point} or @b{out point}
-exists on the timeline it's overwritten there, otherwise it'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.
-
-
-
-@item
-
-Create a clip @image{toclip_button} generates a new clip for the
-resource window containing the affected region but doesn't change the
-timeline.  Every clip has a title and a description.  These are
-optional.
-
-@item
-
-Copy behaves the same as in cut and paste editing.
-
-@end itemize
-
-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} keys perform in/out points
-and splicing.
-
-
-
-
-
-
-
-
-
-
-
-@node DRAG AND DROP EDITING
-@section DRAG AND DROP EDITING
-
-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.
-
-Load some files using @b{file->load}.  Set the insertion mode to
-@b{Create new resources}.  This loads the files into the Resource
-Window.  Create some audio and video tracks on the timeline using the
-video and audio menus.
-
-Open the @b{Media} 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.
-
-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
-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
-one audio track on the timeline for every audio track in the media and
-the media should be dragged over the first audio track.
-
-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.
-
-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.
-
-To display the resources as text or icons, right click inside the media
-list.  Select either @b{display icons} or @b{display text} to
-change the list format.
-
-When displaying text in the resource window @b{SHIFT-clicking} on
-media files extends the number of highlighted selections. 
-@b{CTRL-clicking} on media files in text mode selects additional
-files one at a time.
-
-When displaying icons in the resource window @b{SHIFT-clicking} or
-@b{CTRL-clicking} selects media files one at a time.
-
-In addition to dragging media files, if you create clips and open the
-@b{clip} folder you can drag clips on the timeline.
-
-In the timeline there is further dragging functionality.  To enable the
-dragging functionality of the timeline, select the arrow toggle
-@image{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.
-
-Dragging edits around the timeline allows you to sort music playlists,
-sort movie scenes, and give better NAB demos but not much else.
-
-
-
-
-
-
-
-
-
-
-
-@node CUT AND PASTE EDITING
-@section CUT AND PASTE EDITING
-
-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.
-
-Load some files onto the timeline.  To perform cut and paste editing
-select the @image{ibeam} i-beam toggle.  Select a region of the
-timeline and select the @image{cut} cut button to cut it.  Move the
-insertion point to another point in the timeline and select the
-@image{paste} paste button.  Assuming no in/out points are defined on
-the timeline this performs a cut and paste operation.
-
-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.
-
-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.
-
-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.
-
-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.
-
-
-
-A final operation in cut and paste editing is the @b{edit->clear}
-operation.  If a region is highlighted or in/out points exist, the
-affected region is cleared by @b{edit->clear}.  But if the insertion
-point is over an edit boundary and the edits on each side of the edit
-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.
-
-
-
-
-
-@node TRIMMING
-@section TRIMMING
-
-With some edits on the timeline it'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.
-
-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. @xref{INTERFACE}.
-
-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.
-
-In a @b{Drag all following edits} 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.
-
-In a @b{Drag only one edit} 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.
-
-In a @b{Drag source only} 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.
-
-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.
-
-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.
-
-
-
-
-
-
-
-
-@node USING EFFECTS
-@chapter USING EFFECTS
-
-It would be sufficient to perform all changes to the timeline using
-editing operations, but this isn'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.
-
-Effects fall into three categories, and each effect in a category is
-applied using the same procedure.
-
-
-@menu
-* REALTIME EFFECTS::
-* RENDERED EFFECTS::
-* TRANSITIONS::
-* LADSPA EFFECTS::
-* EFFECT PRESETS::
-@end menu
-
-
-
-@node REALTIME EFFECTS
-@section REALTIME EFFECTS
-
-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.
-
-@b{APPLYING REALTIME EFFECTS}
-
-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.
-
-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.
-
-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
-track so the dragging operation pastes it without deleting it.
-
-When dragging more than one effect onto a track, you'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.
-
-In addition to dragging from the resource window, there are 2 other
-methods of applying them:
-
-@itemize
-@item
-@b{APPLYING FROM THE TRACK POPUP MENU:}
-
-Right click on a track and select @b{Attach effect} 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} column and hit @b{Attach} under the plugins column to attach
-it.  The effect is the same as if the effect was dragged from the
-resource window.
-
-@item
-@b{APPLYING FROM THE AUDIO AND VIDEO MENUS:}
-
-Select @b{Audio->Attach effect...} or @b{Video->Attach effect} 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.
-
-The menu interface has an option called  @b{Attach single standalone and
-share others}.  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.
-
-@end itemize
-
-
-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} 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,
-nothing pops up when the @b{show} option is selected.  When you
-tweek parameters in the effect GUI, the parameters normally effect the
-entire duration of the effect.
-
-
-@menu
-* REALTIME EFFECT TYPES::
-* EDITING REALTIME EFFECTS::
-@end menu
-
-
-
-@node REALTIME EFFECT TYPES
-@subsection REALTIME EFFECT TYPES
-
-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:
-
-@itemize
-
-@item
-There must be other effects in the timeline.
-
-@item
-
-The other effects must be of the same type as the track you'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.
-
-@item
-
-The insertion point or selected region must start inside the other effects.
-
-@end itemize
-
-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
-be anything in the @b{shared tracks} column if no other video track
-exists.  If you right clicked on an audio track there won't be anything
-in the shared track column if no other audio track exists.
-
-If shared effects or shared tracks are available, they appear in the
-@b{shared effects} and @b{shared tracks} columns.  The
-@b{attach} button under each column causes anything highlighted in
-the column to be attached under the current track.
-
-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
-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.
-
-When a shared effect is played back, it'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.
-
-When an original track has a @b{shared track} as one of its effects,
-the shared track itself is used as a realtime effect.  This is more
-commonly known as @b{bouncing tracks} 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.
-
-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,
-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
-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
-@image{mutepatch_up} mute toggle next to each track for whom you don't
-want to mix on the output.
-
-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
-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
-track it has to be composited before the original track is composited.
-
-
-
-
-
-
-
-@node EDITING REALTIME EFFECTS
-@subsection EDITING REALTIME EFFECTS
-
-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
-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.
-
-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->edit effects} in the project
-window.  This decouples effects from editing operations, but what if
-you just want to edit the effects?
-
-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.  
-
-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}. @xref{INTERFACE}.  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.
-
-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
-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.
-
-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.
-
-In some cases you'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} while
-beginning the trimming operation.  This causes the operation to change
-only one row of effects.
-
-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} and @b{Move down} options move the effect up or down.
-
-When you're moving effects up or down, be aware that if they're shared
-as @b{shared effects}, any references will be pointing to a
-different effect after the move operation.
-
-Finally, there's dragging of effects.  Dragging effects works just like
-dragging edits.  You must select the @image{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.
-
-Right click on an effect to bring up a menu for the effect.  Select
-@b{attach...} to change the effect or change the reference if it is
-a shared effect.
-
-
-
-
-
-
-
-
-@node RENDERED EFFECTS
-@section RENDERED EFFECTS
-
-
-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.
-
-In 15 years, the only effect we actually ever rendered with this feature
-was @b{normalize}.  We've never rendered an effect which could be
-applied on the timeline, even though this feature supports rendering
-realtime effects.
-
-This feature was implemented back when computers were too slow to play
-back anything in realtime.  Decent sounding reverb took a long time &
-was considered major number crunching.
-
-The rendered effects are not listed in the resource window but instead
-are accessed through the @b{Audio->Render effect} and
-@b{Video->Render effect} 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.
-
-A region of the timeline to apply the effect to must be defined before
-selecting @b{Render effect...}.  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.
-
-Secondly, the tracks to apply the rendered affect to need to be
-@b{armed}.  All other tracks are ignored.
-
-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.
-
-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.
-
-Define a file to render the effect to in the @b{Select a file to
-render to} box.  The @image{magnify} magnifying glass allows file
-selection from a list.
-
-Select a file format which can handle the track type.  The
-@image{wrench} wrench allows configuration specific to the file format.
-
-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.
-
-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.
-
-When you click @b{OK} 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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-@node TRANSITIONS
-@section TRANSITIONS
-
-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
-second edit when played back.  Transitions are a way for the first
-edit's output to become the second edit's output with different
-variations.
-
-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} can only apply
-to audio tracks.  Transitions under @b{video transitions} can only
-apply to video tracks.
-
-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} 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.
-
-You can now scrub over the transition with the transport controls and
-watch the output in the @b{Compositor window}.  Scrubbing with the
-insertion point doesn'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
-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.
-
-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} option brings up specific
-parameters for the transition in question if there are any.  The
-@b{length} option adjusts the length of the transition in seconds. 
-Once these two parameters are set, they are applied to future
-transitions until they are changed again.  Finally, the @b{detach}
-option removes the transition from the timeline.
-
-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} and @b{u}
-keys will paste the same transition.  The @b{U} key pastes the last
-video transition and the @b{u} 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.  
-
-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.
-
-
-
-
-
-@node LADSPA EFFECTS
-@section LADSPA EFFECTS
-
-
-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
-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.
-
-LADSPA Effects are enabled merely by setting the @b{LADSPA_PATH}
-environment variable to the location of your LADSPA plugins or putting
-them in the @b{/usr/lib/cinelerra} directory.
-
-
-
-
-
-@node EFFECT PRESETS
-@section EFFECT PRESETS
-
-Save and recall all the settings for an effect by using the @b{presets}
-window.  Bring up the effect context menu by right clicking on the
-effect on the timeline.  Go to @b{Presets...} to bring up the window. 
-Save all the settings to a preset by entering a title in @b{Preset
-title} and clicking @b{save}.  Recall the settings in a preset by
-highlighting it and clicking @b{Apply}.  Delete a preset by highlighting
-it and clicking @b{Delete}.
-
-
-
-
-
-
-
-@node SETTING PROJECT ATTRIBUTES
-@chapter SETTING PROJECT ATTRIBUTES
-
-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
-attributes, it is composited on a black frame, either cropped or
-bordered with black.
-
-The project attributes are adjusted in @b{Settings->Set Format} and in
-to a more limited extent in @b{File->New}.  When you adjust project
-settings in @b{file->new} 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->format}, the timeline is not
-recreated with no data but every timeline created from this point uses
-the same settings.
-
-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.}
-
-
-
-@menu
-* AUDIO CHANNEL POSITIONS::
-* COLOR MODEL::
-* ASPECT RATIO::
-@end menu
-
-
-
-
-
-@node AUDIO CHANNEL POSITIONS
-@section AUDIO CHANNEL POSITIONS
-
-The currently enabled audio channels and their positions in the user
-interface boxes are displayed in the channel position widget.
-
-@sp 2
-@image{channelpositions}
-@sp 2
-
-
-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.
-
-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.
-
-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
-channels.
-
-Channel positions is the only setting which doesn'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.
-
-
-But different channels can be positioned very close together to make
-them have the same output.
-
-
-
-
-@node COLOR MODEL
-@section COLOR MODEL
-
-Color model is very important for video playback because video has the
-disadvantage of being very slow.  Although it isn'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.
-
-Video intermediates must use the least amount of data for the required
-quality because it'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.   
-
-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.
-
-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.
-
-@itemize
-@item
-
-@b{RGB-888} 
-
-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.
-
-@item
-
-@b{RGBA-8888} 
-
-This allocates an alpha channel to the 8 bit RGB colormodel.  It's used
-for overlaying multiple tracks.
-
-@item
-
-@b{YUV-888} 
-
-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. 
-
-@item
-
-@b{YUVA-8888} 
-
-This allocates an alpha channel to the 8 bit YUV colormodel for
-transparency.
-
-@item
-
-@b{RGB-Float} 
-
-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.
-
-@item
-
-@b{RGBA-Float} This adds a 32 bit float for alpha to RGB-Float.  This
-is used for high dynamic range processing with transparency.
-
-@end itemize
-
-
-
-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
-idea to try the effect without alpha channels to see if it works before
-settling on an alpha channel and slowing it down.
-
-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.
-
-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.
-
-RGB float doesn'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.
-
-@node ASPECT RATIO
-@section ASPECT RATIO
-
-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.
-
-Some file formats, like MPEG video, write the project aspect ratio to
-the file.
-
-
-
-
-
-
-
-
-
-
-@node COMPOSITING
-@chapter COMPOSITING
-
-
-A large amount of Cinelerra'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
-screen, and fading in and out among other things are all compositing
-operations in Cinelerra.  Cinelerra detects when it's in a compositing
-operation and plays back through the compositing engine only then. 
-Otherwise, it uses the fastest decoder available in the hardware.
-
-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.
-
-
-
-@menu
-* THE CAMERA AND PROJECTOR::
-* MASKS::
-* CROPPING::
-* SAFE REGIONS::
-* OVERLAY MODES::
-* TRACK AND OUTPUT SIZES::
-@end menu
-
-
-
-@node THE CAMERA AND PROJECTOR
-@section THE CAMERA AND PROJECTOR
-
-In the compositor window, the most important functions are the
-@image{camera} camera button and the @image{projector} projector
-button.  These control operation of the camera and projector.  Inside
-Cinelerra'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
-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.
-
-@sp 2
-@image{compositing_pipeline}
-@sp 2
-@b{Visual representation of the compositing pipeline}.
-
-When editing the camera and projector in the compositing window, the
-first track with @b{record} enabled is the track affected.  Even if
-the track is completely transparent, it's still the affected track.  If
-multiple video tracks exist, the easiest way to select one track for
-editing is to @b{shift-click} on the record icon of the track.  This
-solos the track.
-
-When the @b{projector} button is enabled in the compositor window,
-you'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} 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
-ready to master the camera.
-
-Select the @image{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
-of the video inside the box.
-
-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.
-
-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.
-
-@itemize
-
-@item Reset Camera causes the camera to return to the center position.
-
-@item Reset Projector causes the projector to return to the center.
-
-@end itemize
-
-
-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}.  Most operations in the Compositor window have a
-tool window which is enabled by activating the @image{toolwindow}
-question mark.
-
-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.
-
-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.
-
-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} by a complicated calculation. 
-Instead, we leave @b{out x and out y} at 0 and use the projector's
-tool window.
-
-Merely by selecting @image{left_justify} left justify and
-@image{top_justify} top justify, the projector displays the reduced
-image from the top left corner of the temporary in the center of the
-output.
-
-
-
-
-
-
-@node MASKS
-@section MASKS
-
-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
-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.
-
-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.
-
-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
-subtraction.
-
-@sp 2
-@image{compositing_pipeline2}
-@sp 2
-@b{Compositing pipeline with masks}
-
-To define a mask, go into the Compositor window and enable the
-@image{mask} @b{mask} 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
-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.  
-
-Once points are defined, they can be moved by @b{ctrl-dragging} in
-the vicinity of the corner.  This; however, doesn't smooth out the
-curve.  The in-out points of the bezier curve are accessed by
-@b{shift-dragging} in the vicinity of the corner.  Then
-@b{shift-dragging} near the in or out point causes the point to
-move.
-
-Finally, once you have a mask, the mask can be translated in one piece
-by @b{alt-dragging} 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.
-
-The masks have many more parameters which couldn't be represented with
-video overlays.  These are represented in the tool window for masks. 
-Selecting the @image{toolwindow} question mark when the @image{mask}
-mask toggle is highlighted brings up the mask options.
-
-The @b{mode} 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.
-
-The @b{value} 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.
-
-The mask number determines which one of the 8 possible masks we'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
-value of @b{mask number} 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.
-
-When multiple masks are used, their effects are ORed together.  Every
-mask in a single track uses the same value and mode.
-
-The edges of a mask are hard by default but this rarely is desired. 
-The @b{feather} parameter determines how many pixels to feather the
-mask.  This creates softer edges but takes longer to render.
-
-Finally, there are parameters which affect one point on the current
-mask instead of the whole mask.  These are @b{Delete, x, y}.  The
-active point is defined as the last point dragged in the compositor
-window.  Any point can be activated merely by @b{ctrl-clicking} near
-it without moving the pointer.  Once a point is activated,
-@b{Delete} deletes it and @b{x, y} allow repositioning by numeric
-entry.
-
-
-
-
-@node CROPPING
-@section CROPPING
-
-
-
-Cropping changes the value of the output dimensions and the projector
-to reduce the visible picture area.  Enable the @image{crop} crop
-toggle and the @image{toolwindow} tool window in the @b{compositing
-window} to perform cropping.
-
-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.
-
-Alt-click in the cropping rectangle to translate the rectangle to any
-position without resizing it.
-
-The tool window allows text entry of the coordinates and executes the
-cropping operation.  When the rectangle is positioned, hit the @b{do
-it} button in the tool window to execute the cropping operation.
-
-
-
-
-
-
-@node SAFE REGIONS
-@section SAFE REGIONS
-
-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 compositor window.  The borders are intended for scratch room and
-vertical blanking data.  You can show where these borders are by
-enabling the @image{titlesafe} safe regions toggle.  Keep titles inside
-the inner rectangle and keep action inside the outer rectangle.
-
-
-
-
-
-
-
-
-@node OVERLAY MODES
-@section OVERLAY MODES
-
-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.
-
-Select the @image{expandpatch_checked} expand track toggle to view all
-the options for a video track if you can't see the overlay mode.  The
-overlay mode of video tracks is @b{normal} by default.  Select other
-modes by clicking the overlay button and selecting an item from the
-popup menu.
-
-Overlay modes are processed inside the projector stage of compositing. 
-The different modes are summarized below.
-
-@itemize
-
-@item
-
-@b{Normal} 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.
-
-@item
-
-@b{Addition}  In this mode, whatever is in the output is added to the
-current track.  The result is blended based on the current track's
-alpha onto the output.
-
-@item
-
-@b{Subtraction} In this mode, the current track is subtracted from the
-output and the result is alpha blended onto the output.
-
-@item 
-
-@b{Multiply} 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.
-
-@item
-
-@b{Divide} divides the current track by the output and the result is
-blended into the output.  It usually results in overloaded levels.
-
-@item
-
-@b{Replace} does no blending and overwrites the output with the current
-track.
-
-@end itemize
-
-
-
-
-
-@node TRACK AND OUTPUT SIZES
-@section TRACK AND OUTPUT SIZES
-
-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
-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.
-
-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. 
-Select @b{Resize Track} to resize the track to any arbitrary size. 
-Alternatively you can select @b{Match output size} to make the track
-the same size as the output.
-
-The output size is set in either @b{New} when creating a new project
-or @b{Settings->Format}.  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} 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.
-
-
-
-
-
-
-@node KEYFRAMES
-@chapter KEYFRAMES
-
-
-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. 
-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.
-
-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? 
-The keyframe it is stored in by default is known as the @b{default
-keyframe}.  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.
-
-Display keyframes for any parameter by using the @b{view} menu.  A
-faster way to toggle multiple keyframe types is to bring up
-@b{window->overlays}.  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.
-
-Keyframes come in many forms: curves, toggles, modes, and so on. 
-How to handle the different types of keyframes is described here.
-
-@menu
-* CURVE KEYFRAMES::  Using rubber band curves
-* CHANGING BEZIER & LINEAR MODE::  Change curves from linear to curved
-* SNAPPING TO NEIGHBOR KEYFRAMES::  
-* NAVIGATING CURVE KEYFRAMES::
-* TOGGLE KEYFRAMES::
-* AUTOMATIC KEYFRAMES::
-* COMPOSITOR KEYFRAMES::  
-* EDITING KEYFRAMES::   Moving keyframes around
-* KEYFRAME SPANNING::   How to change 1 parameter in many keyframes simultaneously
-@end menu
-
-
-
-@node CURVE KEYFRAMES
-@section CURVE KEYFRAMES
-
-Many parameters are stored in rubber band curves.  Go to @b{view->fade} or
-@b{view->...zoom} to show curves on the timeline for those parameters. 
-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.
-
-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.
-
-@node CHANGING BEZIER & LINEAR MODE
-@section CHANGING BEZIER & LINEAR MODE
-
-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.
-
-These are keyframes in linear mode.
-
-@image{linear}
-
-These are keyframes in bezier mode.
-
-@image{bezier}
-
-Change the mode of an existing keyframe by right clicking on it to bring
-up the context menu and selecting @b{make linear} or @b{make bezier}.
-
-
-Change the mode of several keyframes by highlighting the entire region of the
-timeline and selecting @b{Keyframes->change to linear} or
-@b{Keyframes->change to bezier}.
-
-When keyframes are created, they can be linear or bezier by default. 
-Change the default mode by checking or unchecking @b{Keyframes->create
-bezier}.
-
-
-For bezier keyframes, @b{ctrl-dragging} on the control lines of a
-keyframe changes the value of either the input control or the output
-control.  Without @b{ctrl} the cursor only affects the central
-keyframe.  This affects the sharpness of the curve.  The input and
-output controls can only be moved vertically.
-
-If the control lines aren't visible, @b{ctrl-drag} on the left or right
-of the keyframe.
-
-@node SNAPPING TO NEIGHBOR KEYFRAMES
-@section SNAPPING TO NEIGHBOR KEYFRAMES
-
-@b{shift-drag} 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.
-
-
-
-@node NAVIGATING CURVE KEYFRAMES
-@section NAVIGATING CURVE KEYFRAMES
-
-There isn'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
-@image{fitautos} and automation zoom menu @image{autozoom}.
-
-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} also performs
-automation fitting.
-
-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} change the automation zoom from the keyboard.
-
-
-@node TOGGLE KEYFRAMES
-@section TOGGLE KEYFRAMES
-
-Mute is the only toggle keyframe.  Mute keyframes determine where the
-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.
-
-
-
-
-
-
-@node AUTOMATIC KEYFRAMES
-@section AUTOMATIC KEYFRAMES
-
-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. 
-The faders themselves can set keyframes in automatic keyframe mode. 
-Automatic keyframe mode is usually more useful than dragging curves.
-
-Enable automatic keyframe mode by enabling the automatic keyframe
-toggle @image{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
-enabled just before you need a keyframe and disabled immediately
-thereafter.
-
-It's useful to go into the @b{View} 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.
-
-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.
-
-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
-curve.
-
-Effects are only keyframable in automatic mode because of the number of
-parameters in each individual effect.  
-
-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.
-
-
-
-@node COMPOSITOR KEYFRAMES
-@section COMPOSITOR KEYFRAMES
-
-Camera and projector translation is represented by two parameters: x
-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.
-
-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.
-
-Now when scrubbing around with the compositor window'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
-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.
-
-Click-drag when automatic keyframes are off to adjust the preceeding
-keyframe.  If you'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
-because, halfway between two keyframes the projector translation is
-interpolated.  In order to set the second keyframe you'll need to scrub
-after the second keyframe.
-
-By default the motion path is a straight line, but it can be curved
-with control points.  @b{Ctrl-drag} to set either the in or out
-control point of the preceeding keyframe.  Once again, we depart from
-The Gimp because @b{shift} is already used for zoom.  After the in
-or out control points are extrapolated from the keyframe,
-@b{Ctrl-dragging} anywhere in the video adjusts the nearest control
-point.  A control point can be out of view entirely yet still
-controllable.
-
-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
-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.
-
-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.
-
-
-
-
-
-
-@node EDITING KEYFRAMES
-@section EDITING KEYFRAMES
-
-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} menu are affected by keyframe
-editing operations, however.
-
-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 @image{recordpatch} patch
-by @b{shift-clicking} on it.  Then either set in/out points or
-highlight the desired region of keyframes.  Go to @b{keyframes->copy
-keyframes} to copy them to the clipboard.  Solo the destination track's
-record @image{recordpatch} patch by @b{shift-clicking} on it and
-go to @b{keyframes->paste keyframes} to paste the clipboard.
-
-The media editing commands are mapped to the keyframe editing commands
-by using the @b{shift} key instead of just the keyboard shortcut.  
-
-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
-always exists.  What if the default keyframe is a good value which you
-want to transpose between other non-default keyframes?  The
-@b{keyframes->copy default keyframe} and @b{keyframes->paste
-default keyframe} allow conversion of the default keyframe to a
-non-default keyframe.
-
-@b{Keyframes->copy default keyframe} copies the default keyframe to
-the clipboard, no matter what region of the timeline is selected.  The
-@b{keyframes->paste keyframes} function may then be used to paste
-the clipboard as a non-default keyframe.
-
-If you've copied a non-default keyframe, it can be stored as the
-default keyframe by calling @b{keyframes->paste default keyframe}. 
-After using paste default keyframe to convert a non-default keyframe
-into a default keyframe, you won't see the value of the default
-keyframe reflected until all the non-default keyframes are removed.
-
-Finally, there is a convenient way to delete keyframes besides
-selecting a region and calling @b{keyframes->clear keyframes}. 
-Merely click-drag a keyframe before its preceeding keyframe or after
-its following keyframe on the track.
-
-
-
-@node KEYFRAME SPANNING
-@section KEYFRAME SPANNING
-
-
-
-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.
-
-It doesn't matter if @image{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.
-
-
-
-
-
-
-
-
-
-
-
-@node CAPTURING MEDIA
-@chapter CAPTURING MEDIA
-
-Ideally, all media would be stored on hard drives, CD-ROM, flash, or
-DVD and loading it into Cinelerra would be a matter of loading a file. 
-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.
-
-The first step in recording is to configure the input device.  In
-@b{Settings->preferences} are a number of recording parameters
-described in configuration @xref{RECORDING}.  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.
-
-Go to @b{File->record} to record a dumb I/O source.  This prompts
-for an output format much like rendering does.  Once that's done, the
-record window and the record monitor pop up.
-
-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.
-
-@itemize
-
-@item
-
-The output format area describes the format of the output file and the
-current position within it.
-
-
-@item
-
-The edit batch area lets you change parameters in the current batch.
-
-@item
-
-The transport controls start and stop recording different ways.
-
-@item
-
-The batch list displays all the defined batches.
-
-@item
-
-The confirmation area lets you determine how the output files are
-imported into the timeline and quit.
-
-@end itemize
-
-@image{recording}
-@sp 2
-@b{Recording window areas}
-
-
-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 @image{record}.
-
-The record button opens the current output file if it isn'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 @image{singleframe} which records a single
-frame.
-
-When enough media is recorded, choose an insertion method from the
-@b{Insertion Strategy} menu and hit @b{close}.
-
-
-
-
-@menu
-* BATCHES::
-* EDITING TUNER INFORMATION::
-@end menu
-
-
-
-
-@node BATCHES
-@section BATCHES
-
-Now we come to the concept of batches.  Batches try to make the dumb
-I/O look more like a filesystem.  Batches are traditionally used to
-divide tape into different programs and save the different programs as
-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
-knows.
-
-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.
-
-Batch recording happens when the @b{start} button is pressed.  In
-batch recording, the @b{start time} is the time the batch starts
-recording.
-
-First, you'll want to create some batches.  Each batch has certain
-parameters and methods of adjustment.  
-
-
-
-
-@itemize
-
-@item 
-
-@b{On} determines whether the batch is included in batch recording
-operations.  Click the list row under @b{On} to enable or disable
-batches.
-
-
-@item 
-
-@b{Path} 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} area.
-
-
-@item
-
-@b{News} 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} if
-it exists and @b{OK} if it doesn't.  Every time you resume recording
-in the same batch, the news should say @b{Open}, indicating the file
-is already opened and won't be erased in the next record button press.
-
-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.
-
-@item
-
-@b{Start time} 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
-of day.
-
-@item
-
-@b{Duration} is the length of the batch.  It only has meaning if the
-@b{Mode} of the batch is @b{Timed}.  Once the recording length
-reaches @b{duration} the recording stops, whether in interactive or
-batch mode.
-
-@item
-
-@b{Source} 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.
-
-
-@end itemize
-
-The record window has a notion of the @b{current batch}.  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.
-
-By coloring the current batch red, any batch can be edited by
-highlighting it, without changing the batch to be recorded.
-
-All recording operations take place in the current batch.   If there
-are multiple batches, highlight the desired batch and hit
-@b{activate} to make it the current batch.  If the @b{start}
-button is pressed, the current batch flashes to indicate it's waiting
-for the start time in batch mode.  If the @b{record} button is
-pressed, the current batch is recorded immediately in interactive mode.
-
-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.
-
-Interrupt either the batch or the interactive operation by hitting the
-stop button.
-
-Finally there is the @image{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.
-
-
-
-
-
-
-@node EDITING TUNER INFORMATION
-@section EDITING TUNER INFORMATION
-
-
-Sometimes in the recording process and the configuration process,
-you'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.  
-
-Defining tuner channels is accomplished by pushing the @image{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.
-
-The @b{add} 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.  
-
-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.
-
-To sort channels, highlight the channel in the list and push @b{move
-up} or @b{move down} to move it.
-
-Once channels are defined, the @b{source} 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.
-
-For some drivers an option to @b{swap fields} may be visible.  These
-drivers don'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.
-
-
-
-
-@node IMPROVING PERFORMANCE
-@chapter IMPROVING PERFORMANCE
-
-
-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
-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.
-
-
-@menu
-* DISABLING SWAP SPACE::
-* ENLARGING SOUND BUFFERS::
-* FREEING MORE SHARED MEMORY::
-* SPEEDING UP THE HARD DRIVE::
-* DISABLING CRON::
-* REDUCING USB MOUSE SENSITIVITY::
-* ASSORTED X TWEEKS::
-* SPEEDING UP THE FILE SYSTEM::
-* IMPROVING ZORAN VIDEO::
-@end menu
-
-@node DISABLING SWAP SPACE
-@section DISABLING SWAP SPACE
-
-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
-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
-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.  
-
-The question then is how to make Linux run without a swap space. 
-Theoretically it should be a matter of running
-
-@example
-swapoff -a
-@end example
-
-Unfortunately, without a swap space the @b{kswapd} tasklet normally
-spins at 100%.  To eliminate this problem, edit @b{linux/mm/vmscan.c}.
-In this file, put a line saying @b{return 0;} before it says 
-
-@example
-       /*
-        * Kswapd main loop.
-        */
-@end example
-
-Then recompile the kernel.
-
-
-
-
-@node ENLARGING SOUND BUFFERS
-@section ENLARGING SOUND BUFFERS
-
-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
-recording video with audio.  This is where you need to hack the kernel.
-
-To see if your sound buffers are suitable, run the included
-@b{soundtest} program with nothing playing or recording.  This
-allocates the largest possible buffers and displays them.  If the
-@b{TOTAL BYTES AVAILABLE} 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.
-
-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
-sound cards.  Edit @b{linux/drivers/sound/emu10k1/audio.c}
-
-Where is says
-
-@example
-if (bufsize >= 0x10000)
-@end example
-
-change it to say
-
-@example
-if (bufsize > 0x40000)
-@end example
-
-
-
-Where is says
-
-@example
-               for (i = 0; i < 8; i++)
-                       for (j = 0; j < 4; j++)
-@end example
-
-change it to say
-
-@example
-               for (i = 0; i < 16; i++)
-                       for (j = 0; j < 4; j++)
-@end example
-
-
-
-In @b{linux/drivers/sound/emu10k1/hwaccess.h}
-
-Change
-
-@b{#define MAXBUFSIZE  65536} 
-
-to 
-
-@b{#define MAXBUFSIZE  262144} 
-
-Finally, in @b{linux/drivers/sound/emu10k1/cardwi.h}
-
-@b{#define WAVEIN_MAXBUFSIZE         65536}
-
-to
-
-@b{#define WAVEIN_MAXBUFSIZE         262144}
-
-Then recompile the kernel modules.
-
-
-
-
-
-
-@node FREEING MORE SHARED MEMORY
-@section FREEING MORE SHARED MEMORY
-
-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:
-
-@b{echo "0x7fffffff" > /proc/sys/kernel/shmmax}
-
-
-
-
-
-@node SPEEDING UP THE HARD DRIVE
-@section SPEEDING UP THE HARD DRIVE
-
-This is a very popular command sequence among Linux gurus, which is not
-done by default on Linux distributions.
-
-@b{hdparm -c3 -d1 -u1 -k1 /dev/hda}
-
-@b{-c3} 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
-you get lost interrupt or SeekComplete errors, quickly use @b{-c0}
-instead of @b{-c3} in your command.
-
-@b{-d1} enables DMA of course.  This frees up the CPU partially during
-data transfers.
-
-@b{-u1} allows multiple interrupts to be handled during hard drive
-transactions.  This frees up even more CPU time.
-
-@b{-k1} prevents Linux from resetting your settings in case of a
-glitch.
-
-
-
-
-
-@node DISABLING CRON
-@section DISABLING CRON
-
-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}.
-
-Put @b{exit} before the first line not beginning in @b{#}.
-
-In @b{/etc/rc.d/init.d/crond} put @b{exit} before the first line not
-beginning in @b{#}.  Then make like Win 2000 and reboot.
-
-You can't use the @b{at} command anymore, but who uses that command
-anyways?
-
-
-
-
-
-
-
-
-
-@node REDUCING USB MOUSE SENSITIVITY
-@section REDUCING USB MOUSE SENSITIVITY
-
-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} but you're out of luck with USB mice or KVM's.
-
-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}.  
-
-After the line saying 
-
-@example
-struct mousedev_hw_data @{
-@end example
-
-
-put
-
-@example
-#define DOWNSAMPLE_N 100
-#define DOWNSAMPLE_D 350
-int x_accum, y_accum;
-@end example
-
-Next, the section which says something like:
-
-@example
-switch (code) @{
-       case REL_X:     mousedev->packet.dx += value; break;
-       case REL_Y:     mousedev->packet.dy -= value; break;
-       case REL_WHEEL: mousedev->packet.dz -= value; break;
-@}
-@end example
-
-must be replaced by
-
-@example
-
-       switch (code) @{
-               case REL_X:
-                       mousedev->packet.x_accum += value * DOWNSAMPLE_N;
-                       mousedev->packet.dx += (int)mousedev->packet.x_accum / (int)DOWNSAMPLE_D;
-                       mousedev->packet.x_accum -= ((int)mousedev->packet.x_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
-                       break;
-               case REL_Y:
-                       mousedev->packet.y_accum += value * DOWNSAMPLE_N;
-                       mousedev->packet.dy -= (int)mousedev->packet.y_accum / (int)DOWNSAMPLE_D;
-                       mousedev->packet.y_accum -= ((int)mousedev->packet.y_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
-                       break;
-               case REL_WHEEL: mousedev->packet.dz -= value; break;
-       @}
-
-
-
-@end example
-
-Change the value of @b{DOWNSAMPLE_N} to change the mouse sensitivity.
-
-
-
-
-
-
-
-
-@node ASSORTED X TWEEKS
-@section ASSORTED X TWEEKS
-
-
-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.
-
-In the @b{Section "Device"} area, add a line saying:
-
-@b{Option "XaaNoOffscreenPixmaps"}
-
-and restart the X server.
-
-
-
-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} put 
-
-@example
-xset s off
-xset s noblank
-@end example
-
-before the first @b{if} statement.
-
-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}.  Append the following to it.
-
-@example
-keycode 115 = Hyper_L
-keycode 116 = Hyper_R
-add mod4 = Hyper_L
-add mod5 = Hyper_R
-@end example
-
-The actual changes to a window manager to make it recognize window keys
-for ALT are complex.  In @b{FVWM} at least, you can edit
-@b{/etc/X11/fvwm/system.fvwm2rc} and put
-
-@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
-@end example
-
-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.
-
-
-
-
-
-
-
-
-
-
-
-@node SPEEDING UP THE FILE SYSTEM
-@section SPEEDING UP THE FILE SYSTEM
-
-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
-filesystem on this disk array, using the @b{mke2fs} command.  By far
-the fastest file system is 
-
-@example
-
-mke2fs -i 65536 -b 4096 my_device
-tune2fs -r0 -c10000 my_device
-
-@end example
-
-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
-
-@example
-
-mke2fs -j -i 65536 -b 4096 my_device
-tune2fs -r0 -c10000 my_device
-
-@end example
-
-This adds a journal which slows down the writes but makes us immune to
-power failures.
-
-
-
-
-
-
-
-@node IMPROVING ZORAN VIDEO
-@section IMPROVING ZORAN VIDEO
-
-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.
-
-In @b{/usr/src/linux/drivers/media/video/zr36067.c} 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 
-
-@example
-static struct tvnorm f60ccir601 = @{ 858, 720, 57, 788, 525, 480, 16 @};
-@end example
-
-to
-
-@example
-static struct tvnorm f60ccir601 = @{ 858, 720, 57, 788, 525, 480, 17 @};
-@end example
-
-
-In @b{/usr/src/linux/drivers/media/video/bt819.c} more structures near
-line 76 affect alignment and encoding.
-
-For NTSC 
-
-@example
-@{858 - 24, 2, 523, 1, 0x00f8, 0x0000@},
-@end example
-
-could be changed to 
-@example
-@{868 - 24, 2, 523, 1, 0x00f8, 0x0000@},
-@end example
-
-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
-before capturing the first frame.
-
-
-@subsection NEW IN 2.6.5
-
-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} and look for a group of lines like
-
-@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 -> 74)
- * (Maxim Yevtyushkin <max@@linuxmedialabs.com>) */
-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 @};
-@end example
-
-These seem to control the image position.  At least for the LML33 the
-following definition for @b{f60ccir601_lml33} does the trick.
-
-@example
-static struct tvnorm f60ccir601_lml33 = @{ 858, 720, 67+34, 788, 525, 480, 13 @};
-@end example
-
-
-
-
-
-
-@node TROUBLESHOOTING
-@chapter TROUBLESHOOTING
-
-
-@menu
-* BUZ DRIVER CRASHES::
-* DRAGGING IN AND OUT POINTS DOESN'T WORK::
-* LOCKING UP WHEN LOADING FILES::
-* SYNCHRONIZATION LOST WHILE RECORDING::
-* APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK::
-@end menu
-
-@node BUZ DRIVER CRASHES
-@section BUZ DRIVER CRASHES
-
-First, Zoran capture boards must be accessed using the @b{Buz} video
-driver in @b{Preferences->Recording} and @b{Preferences->Playback}. 
-Some performance tweeks are available in another section. 
-@xref{IMPROVING PERFORMANCE}.
-
-Once tweeked, the Buz driver seems to crash if the number of recording
-buffers is too high.  Make sure @b{Preferences->Recording->Frames to
-buffer in device} is below 10.
-
-
-@node DRAGGING IN AND OUT POINTS DOESN'T WORK
-@section DRAGGING IN AND OUT POINTS DOESN'T WORK
-
-
-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.
-
-
-
-@node LOCKING UP WHEN LOADING FILES
-@section LOCKING UP WHEN LOADING FILES
-
-
-The most common reason loading files locks up is because the codec
-isn'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->preferences->interface and disable @b{Use thumbnails in
-resource window} to skip this process.
-
-
-
-
-
-@node SYNCHRONIZATION LOST WHILE RECORDING
-@section SYNCHRONIZATION LOST WHILE RECORDING
-
-If the framerate of the recording is much lower than the framerate of
-the source, the video will accumulate in the recording buffers over
-time while the audio and video are well out of sync.  Decrease the
-@b{number of frames to buffer in the device} in
-@b{preferences->recording} so the excess frames are dropped instead of
-buffered.
-
-@node APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK
-@section APPLYING LINEARIZE FOLLOWED BY BLUR DOESN'T WORK
-
-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.
-
-
-
-
-
-
-
-
-
-
-@node SECRETS OF CINELERRA
-@chapter SECRETS OF CINELERRA
-
-In this section, you'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.
-
-@menu
-* DOLBY PRO LOGIC ENCODING::
-* ANALOG TV CLEANING::
-* DEFEATING INTERLACING::
-* MAKING VIDEO LOOK LIKE FILM::
-* CLEARING OUT HAZE::
-* MAKING A DVD::
-* MAKING A RINGTONE::
-* TIME STRETCHING AUDIO::
-* PITCH SHIFTING AUDIO::
-* TEXT TO MOVIE::
-@end menu
-
-
-@node DOLBY PRO LOGIC ENCODING
-@section DOLBY PRO LOGIC ENCODING
-
-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.
-
-Create 2 audio tracks with the same audio.  Apply @b{invert audio} to
-one track.  The signal comes out of the back speakers.
-
-Create a single audio track with monaural audio of a different source. 
-Center it in the @b{pan} control.  The signal comes out of the center
-speaker.
-
-Create other tracks with different signals and pan them left or right
-to put signals in the front left or right speaker.
-
-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.
-
-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.
-
-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.
-
-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.
-
-
-
-
-@node ANALOG TV CLEANING
-@section ANALOG TV CLEANING
-
-
-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.
-
-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
-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.
-
-Now on the timeline use @b{Settings->Format} to set a YUV colorspace. 
-Drop a @b{Downsample} effect on the footage.  Set it for 
-
-@example
-Horizontal:        2
-Horizontal offset: 0
-Vertical:          2
-Vertical offset:   0
-
-      red
-  x   green
-  x   blue
-      alpha
-@end example
-
-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:
-
-@sp 1
-
-@image{cleaning1}
-
-If you have vertical blanking information or crawls which constantly
-change in each frame, block them out with the @b{Mask} tool.  This
-improves compression ratios.
-
-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.
-
-
-
-
-
-@node DEFEATING INTERLACING
-@section DEFEATING INTERLACING
-
-
-Interlacing is done on most video sources because it costs too much to
-build progressive scanning cameras and progressive scanning CRT'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.
-
-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.
-
-We don't believe there has ever been a perfect deinterlacing effect. 
-They're either irreversible or don'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.
-
-@b{Line Doubling}
-
-This one is done by the @b{Deinterlace} effect when set to @b{Odd
-lines} or @b{Even lines}.  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.
-
-@b{Line averaging}
-
-The @b{Deinterlace} effect when set to @b{Average even lines} or
-@b{Average odd lines} 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.
-
-There'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.
-
-@b{Inverse Telecine}
-
-This is the most effective deinterlacing tool when the footage is an
-NTSC TV broadcast of a film.  @xref{INVERSE TELECINE}.
-
-
-@b{Time base correction}
-
-The first three tools either destroy footage irreversibly or don't work
-sometimes.  @b{Time base correction} 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.
-
-The @b{Frames to Fields} 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
-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.
-
-Best of all, this effect can be reversed with the @b{Fields to frames}
-effect.  That one combines two frames of footage back into the one
-original interlaced frame of half the framerate.
-
-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.
-
-Unfortunately, the output of @b{Frames to Fields} can't be compressed
-as efficiently as the original because it introduces vertical twitter
-and a super high framerate.
-
-Interlaced 29.97fps footage can be made to look like film by applying
-@b{Frames to Fields} 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.
-
-
-@b{HDTV exceptions}
-
-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
-rebroadcast of a 720x480 source, you need to use a time base and line
-doubling algorithm to deinterlace it, @xref{1080 TO 480}.
-
-
-
-
-@node MAKING VIDEO LOOK LIKE FILM
-@section MAKING VIDEO LOOK LIKE FILM
-
-
-
-
-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
-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.
-
-@itemize
-
-@item
-
-Step 1 - Set project framerate to twice the video framerate.
-
-@item
-
-Step 2 - Apply a @b{Sharpen} effect.  Set it to sharpness: 25, no
-interlacing, and horizontal only.
-
-@item
-
-Step 3 - Drop a @b{Frame to Fields} 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
-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.
-
-
-@item
-
-Step 4 - Render just the video to the highest quality file possible.
-
-@item
-
-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.
-
-@end itemize
-
-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
-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.
-
-
-
-
-
-
-
-
-
-@node CLEARING OUT HAZE
-@section CLEARING OUT HAZE
-
-Let's face it, if you'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} is for.
-
-Drop the gradient effect on hazy tracks.  Set the following parameters:
-
-@example
-Angle: 0
-Inner radius: 0
-Outer radius: 40
-Inner color: blue 100% alpha
-Outer color: blue 0% alpha
-@end example
-
-It's important to set the 0% alpha color to blue even though it'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.
-
-
-
-
-
-
-
-@node MAKING A DVD
-@section MAKING A DVD
-
-@b{A single chapter DVD}
-
-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.
-
-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:
-
-@example
-Derivative: MPEG-2
-Fixed bitrate
-I frame distance: 15
-P frame distance: 0
-Sequence start codes in every GOP
-@end example
-
-Render the audio to an AC3 audio file.  Any bitrate can be used.
-
-@b{Dvdrtools} 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} directory and running @b{make
-ifogen}.  Mkisofs and ifogen must be put into /usr/bin manually.
-
-Also, the @b{mplex} program from @b{mjpegtools} must be installed.  The
-mjpegtools package is built in the hvirtual distribution and the mplex
-utility may be extracted from there.
-
-Given the files audio.ac3 and video.m2v, rendered by Cinelerra, the
-following commands pack them into a dvd readable by commercial
-appliances.
-
-@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/
-@end example
-
-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.
-
-@example
-ifogen -o dvd --chapters=0,0021.788,0047.447,0077.043 final.mpg
-@end example
-
-Replace the chapter times.
-
-dvd.iso can be burned directly to a DVD with the following:
-
-@example
-dvdrecord -ignsize -dao -v dev=/dev/hdc fs=67108864 dvd.iso
-@end example
-
-The argument to dev= is the IDE device of the DVD drive.  Burning DVD's
-through SCSI is currently not supported.
-
-
-
-
-
-
-
-
-@node MAKING A RINGTONE
-@section MAKING A RINGTONE
-
-This is how we made ringtones for the low end Motorola V180's and it'll
-probably work with any new phone.  Go to @b{File->Load files...} and
-load a sound file with Insertion strategy: @b{Replace current
-project}.  Go to @b{Settings->Format} change @b{Channels} to 1 and
-@b{Samplerate} to 16000 or 22050.
-
-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..}.  Highlight the
-@b{Compressor} effect and hit @b{Attach} in the attachment popup.
-
-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..}.  Highlight @b{Audio 1: Compressor} and hit
-@b{Attach}.  Click the Audio1 Compressor's magnifying glass
-@image{magnify} to bring up the compressor GUI.
-
-Set the following parameters:
-
-@example
-Reaction secs: @b{-0.1}
-Decay secs: @b{0.1}
-Trigger Type: @b{Total}
-Trigger: @b{0}
-Smooth only: @b{No}
-@end example
-
-
-Click @b{Clear} 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.
-
-@sp 1
-@image{compress}
-
-Go to @b{File->Render}.  Specify the name of an mp3 file to output to. 
-Set the file format to @b{MPEG Audio}.  Click the wrench @image{wrench}
-for Audio and set @b{Layer} to @b{III} and @b{Kbits per second} to
-@b{24} or @b{32}.  Check @b{Render audio tracks} and uncheck @b{Render
-video tracks}.  Hit OK to render the file.
-
-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.
-There also may be a size limit on the file.
-
-
-
-
-
-
-
-@node TIME STRETCHING AUDIO
-@section TIME STRETCHING AUDIO
-
-It may appear that time stretching audio is a matter of selecting a
-region of the audio tracks, enabling recording for the desired tracks,
-going to @b{Audio->Render Effect}, and applying @b{Time Stretch}.  In
-actuality there are 3 audio effects for time stretching: @b{Time
-Stretch}, @b{Resample}, and @b{Asset info dialog}.
-
-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
-because obvious changes in duration make windowing artifacts less
-obtrusive.
-
-For smaller changes in duration, in the range of 5%, @b{Resample}
-should be used.  This changes the pitch of the audio but small enough
-changes aren't noticable.  Resample doesn'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.
-
-Another way to change duration slightly is to go to the @b{Resources}
-window, highlight the @b{media} folder, right click on an audio file,
-click on @b{Info}.  Adjust the sample rate in the @b{Info} 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.
-
-
-@node PITCH SHIFTING AUDIO
-@section PITCH SHIFTING AUDIO
-
-Like the time stretching methods, there are three pitch shifting
-methods: @b{Pitch shift}, @b{Resample}, and @b{Asset info dialog}. 
-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.
-
-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} from the
-@b{Audio->Render Effect} interface.  Resample can change the pitch
-within 5% without a noticable change in duration.
-
-Another way to change pitch slightly is to go to the @b{Resources}
-window, highlight the @b{media} folder, right click on an audio file,
-click on @b{Info}.  Adjust the sample rate in the @b{Info} 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.
-
-
-@node TEXT TO MOVIE
-@section TEXT TO MOVIE
-
-
-
-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.
-
-The easiest way to make a movie is to copy @b{tests/text2movie} and
-@b{tests/text2movie.xml} as a starting point.  Load the
-@b{text2movie.xml} file to see the movie.
-
-The @b{text2movie} 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} 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->edit length}.
-
-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}. 
-Right click on the asset and go to @b{Asset info...}  Camera angles are
-fixed.
-
-Since its only use was to show dialog between 2 people, that'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}.
-
-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.
-
-The models are 2D png images, because all the animations are baked.  No
-custom movement is currently supported, that would require a 3D
-renderer.  
-
-Some actions are implemented.  Character2 can cut off character1 if
-character1's dialog ends in @b{...}
-
-Inserting @b{[pause]} anywhere causes the character to pause.  Useful
-for adjusting the timing of dialog.
-
-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.
-
-
-
-
-
-
-@node SECRETS OF CINELERRA EFFECTS
-@chapter SECRETS OF CINELERRA EFFECTS
-
-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.
-
-
-@menu
-* 1080 TO 480::       How to convert HDTV into SD
-* CHROMA KEY::        Create transparency based on color similarities.
-* COMPRESSOR::        How to reduce the dynamic range of audio.
-* DECIMATE::          How to reduce frame rates by eliminating similar frames.
-* DEINTERLACE::       How to convert interlaced video to progressive video.
-* DIFFERENCE KEY::    Create transparency based on color differences.
-* FIELDS TO FRAMES::  How to recover interlaced video from bobbed video
-* FREEZE FRAME::      How to stop action in the timeline.
-* HISTOGRAM::         How to change the mapping of different brightness values.
-* INVERSE TELECINE::  How to convert pulled down frames to progressive frames.
-* INTERPOLATE VIDEO:: How to create the illusion of higher framerates.
-* LENS::              Correcting spherical aberration
-* LINEARIZE::         Fix gamma in raw camera images
-* LIVE AUDIO::        Pass audio from the soundcard directly to the timeline.
-* LIVE VIDEO::        Pass video from the capture card directly to the timeline.
-* LOOP::              How to loop regions of the timeline.
-* MOTION::            Motion tracking with rotation.
-* MOTION 2 POINT::    Motion and rotation tracking from translation only.
-* REFRAMERT::         Changing the number of frames in a sequence.
-* REFRAME::           Changing the number of frames in a sequence with rendering.
-* RESAMPLE::          Change the number of samples in a sequence with rendering.
-* REVERSE VIDEO/AUDIO:: How to play regions in reverse.
-* SWAP FRAMES::       Fixing temporal field order
-* THRESHOLD::         How to get monochrome out of a region of the image.
-* TIME AVERAGE::      How to stack images.
-* TITLER::            How to add text to a track from inside Cinelerra.
-* VIDEO SCOPE::       How to view the dynamic range of intensity and hue.
-@end menu
-
-
-
-
-@node 1080 TO 480
-@section 1080 TO 480
-
-
-Most TV broadcasts are recieved with a 1920x1080 resolution but
-originate from a 720x480 source at the studio.  It'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
-simple as shrinking it.
-
-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.
-
-If you merely deinterlaced the 1920x1080 images, you would end up with
-resolution of 720x240.  The @b{1080 to 480} 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} effect must then be applied to reduce the horizontal size to
-960 or 720 depending on the original aspect ratio.
-
-The tracks to which @b{1080 to 480} is applied need to be at 1920x1080
-resolution.  The project settings in @b{settings->format} should be at
-least 720x480 resolution.
-
-The effect doesn'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.
-
-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.
-
-Finally, once you have 720x480 interlaced video you can either apply
-@b{frames to fields} of @b{inverse telecine} to further recover original
-progressive frames.
-
-
-
-
-
-
-
-@node CHROMA KEY
-@section CHROMA KEY
-
-
-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.
-
-Chroma key uses either the lightness or the hue to determine what is
-erased.  @b{Use value} singles out only the lightness to determine
-transparency.  Select a center color to erase using the @b{Color}
-button.  Alternatively a color can be picked directly from the output
-frame by first using the @b{color picker} in the compositor window and
-then selecting the @b{Use color picker} button.  This sets the chroma
-key color to the current color picker color.
-
-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.
-
-
-If the lightness or hue is within a certain threshold it'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
-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.
-
-Normally threshold is very low when using a high slope.  The two
-parameters tend to be exclusive because slope fills in extra threshold.
-
-The slope tries to soften the edges of the chroma key but it doesn'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.
-
-
-
-
-
-
-
-
-
-@node COMPRESSOR
-@section COMPRESSOR
-
-Contrary to computer science experience, the audio compressor does not
-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.
-
-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.
-
-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.
-
-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
-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.
-
-@b{Reaction secs:} 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
-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.
-
-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.
-
-@b{Decay secs:} 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.
-
-@b{Trigger type:}  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.
-
-The @b{Trigger} trigger type uses the value supplied in the @b{Trigger}
-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
-the other tracks.
-
-The @b{Maximum} trigger takes the loudest track and uses it as the
-input for the compressor.
-
-The @b{Total} 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.
-
-
-
-@b{Trigger:} 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}.  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.
-
-@b{Smooth only:} 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} affects the detected peak values.
-
-
-
-
-
-
-
-@node DECIMATE
-@section DECIMATE
-
-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.
-
-The output rate of @b{decimate} is the project frame rate.  The input
-rate is set in the @b{decimate} 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.
-
-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.
-
-
-
-
-
-
-
-
-@node DEINTERLACE
-@section DEINTERLACE
-
-The deinterlace effect has evolved over the years to deinterlacing and
-a whole lot more.  In fact two of the deinterlacing methods, @b{Inverse
-Telecine} and @b{Frames to Fields}, are separate effects.  The
-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.
-
-
-
-
-
-
-
-
-@node DIFFERENCE KEY
-@section DIFFERENCE KEY
-
-The differency key creates transparency in areas which are similar
-between 2 frames.  The Difference key effect must be applied to 2
-tracks.  One track contains the action in front of a constant
-background and another track contains the background with nothing in
-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.
-
-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} in the differency key window to make
-more pixels which aren't the same color transparent. Change @b{slope}
-to change the rate at which the transparency tapers off as pixels get
-more different.
-
-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.
-
-@b{Use value} causes the intensity of pixels to be compared instead of
-the color.
-
-Applying a blur to the top track with just the alpha channel blurred
-can soften the transparency border.
-
-
-
-
-
-@node FIELDS TO FRAMES
-@section FIELDS TO FRAMES
-
-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} process frames at twice the project frame rate. 
-Each input frame is called a field.
-
-@b{Fields to frames} 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}, the wrong setting results
-in blurrier output.  If the input fields are the result of a standards
-conversion process like @b{1080 to 480}, the wrong setting won't make
-any difference.
-
-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.
-
-
-
-
-
-
-
-@node FREEZE FRAME
-@section FREEZE FRAME
-
-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.  
-
-Freezeframe has an @b{enabled} 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.
-
-If a freeze frame effect has a keyframe in the middle of it set to
-@b{enabled}, the frame in the middle is repeated in the entire effect.
-
-If a freeze frame effect has several keyframes, each set to
-@b{enabled}, every time a keyframe is encountered the frame under it
-becomes the frozen one.
-
-If a freeze frame effect alternates between @b{enabled} and
-@b{disabled}, each time an @b{enabled} keyframe is encountered the
-frame under it is replicated until the next @b{disabled} keyframe.  The
-disabled regions play through.
-
-
-
-
-
-
-@node HISTOGRAM
-@section HISTOGRAM
-
-
-This shows the number of occurances of each color on a histogram plot.
-
-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.
-
-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
-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.
-
-Select which transfer to view by selecting one of the channels on the
-top of the histogram.
-
-
-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.
-
-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
-window.  The input and output color of the point can be changed through
-these text boxes.
-
-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}.
-
-
-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
-minimum.
-
-
-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
-values into.
-
-Enable the @b{automatic} 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} 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.
-
-Automatic input transfer is calculated for the R, G, and B channels but
-not the value.
-
-
-@b{PLOT HISTOGRAM}
-
-@b{SPLIT OUTPUT}
-
-
-
-
-
-
-
-
-@node INVERSE TELECINE
-@section INVERSE TELECINE
-
-This is the most effective deinterlacing tool when the footage is a
-video transfer of a film.  Here the film was converted from 24fps to
-60fps.  Then the 60fps was downsampled to 30fps by extracting odd and
-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.
-
-@example
-  A AB BC CD D
-  AB CD CD DE EF
-  Automatic
-@end example
-
-The first two options are fixed patterns and affected by the @b{pattern
-offset} and @b{odd field first} parameters.  The last option creates
-several combinations of lines for each frame and picks the most
-progressive combination.  It's a brute force algorithm.
-
-This technique doesn'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.
-
-
-
-
-
-@node INTERPOLATE VIDEO
-@section INTERPOLATE VIDEO
-
-
-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. 
-The input frames are at different times, resulting in a dissolve for
-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,
-
-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.
-
-
-@node LENS
-@section LENS
-
-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.
-
-@b{R, G, B, A Field of view:} These determine how much the image is
-stretched in each channel.
-
-@b{Lock:} This causes changes to 1 channel to affect all the channels. 
-This is normally the desired behavior.
-
-@b{Aspect Ratio:} 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.
-
-@b{Radius:} This determines the size of the stretched region.  While
-adjusting the @b{field of view}, black borders may appear.  Adjust the
-@b{radius} to shrink or expand the output so black borders are out of
-frame.
-
-@b{Center X, Y:} 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.
-
-@b{Draw center:} This is a visual aid when adjusting the @b{Center X, Y}
-but doesn't affect the results.
-
-@b{Mode:} The type of stretching algorithm.
-
-@itemize
-@item
-@b{Sphere shrink:} This is for making an image look like it's mapped to a sphere.
-
-@item
-@b{Sphere expand:} This is for unmapping an image mapped to a sphere and
-flattening it.
-
-@item
-@b{Rectilinear Stretch:} This is for flattening a fish eye lens.
-
-@item
-@b{Rectilinear Shrink:} This is for making something flat look like it
-was taken by a fish eye lens.
-
-
-@end itemize
-
-
-
-
-
-
-
-
-
-
-
-@node LINEARIZE
-@section LINEARIZE
-
-
-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
-also does its processing in 16 bit integers, which takes away a lot of
-information.
-
-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.
-
-The linearize effect has 2 more parameters to simplify gamma
-correction.  The @b{automatic} option causes it to calculate @b{max}
-from the histogram of the image.  Use this when making a preview of a
-long list of images since it changes for every image.
-
-The @b{use color picker} option uses the value currently in the color
-picker to set the @b{max} value.  Note that every time you pick a color
-from the compositor window, you need to hit @b{use color picker} to
-apply the new value.
-
-
-
-
-
-
-
-
-@node LIVE AUDIO
-@section LIVE AUDIO
-
-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. 
-
-
-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.
-
-Live Audio uses the sound driver selected in
-@b{Settings->Preferences->Playback->Audio Out} for recording, but
-unlike recording it uses the @b{playback buffer size} as the recording
-buffer size and it uses the @b{project sample rate} as the sampling
-rate.
-
-These settings are critical since some sound drivers can'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.
-
-Drop other effects after Live Audio to process soundcard input in
-realtime.  
-
-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.  
-
-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.
-
-Finally, live audio doesn't work in reverse.
-
-
-
-
-
-@node LIVE VIDEO
-@section LIVE VIDEO
-
-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
-track.  The configuration for the capture card is taken from the
-recording preferences.  Go to @b{Settings->Preferences->Recording} to
-set up the capture card.
-
-Go to the @b{Video In} section where it says @b{Record driver}.  It
-must be set to either @b{Video4Linux2} or @b{IEC 61883}.  Other video
-drivers haven't been tested with Live Video and probably won't work.
-
-For live video, the selection for @b{File Format} and @b{Video} needs
-to be set to a format the timeline can use.  The file format must be
-@b{Quicktime for Linux} and video recording must be enabled for it. 
-Click on the wrench @image{wrench} to set the video compression.
-
-The video compression depends on the recording driver.  For the
-@b{Video4Linux2} recording driver, the compression must be @b{Motion
-JPEG A}.  For the @b{IEC 61883} driver, the compression must be
-@b{DV}.  This gets the driver to generate output in a colormodel that
-the timeline can use.
-
-Some cards provide color and channel settings.  Live video takes the
-color settings from the values set in the @b{Video In} window.  Go to
-@b{File->Record} to bring up the recording interface and the Video In
-window.  Values set in the @b{Video in} window are used by @b{Live
-Video}.  Any channels the capture card supports need to be configured
-in the @b{Video in} interface since the same channels are used by the
-@b{Live Video} effect.
-
-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->Preferences->Playback->Video Out} to enable the OpenGL
-driver.
-
-Only one Live Video effect can exist at any time on the timeline.  It
-can't be shared by more than one track.
-
-
-
-
-
-
-
-
-@node LOOP
-@section LOOP
-
-Sections of audio or video can be looped by dropping a @b{loop} effect
-on them.  Contrary to the the @b{settings->loop playback} option, the
-loop effects can be rendered where the @b{settings->loop playback}
-option can not be.  The loop effects are also convenient for short
-regions.
-
-The loop effects have one option: the number of @b{frames} or
-@b{samples} 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.
-
-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.
-
-
-
-
-
-
-
-
-
-
-@node MOTION
-@section MOTION
-
-The motion tracker is almost a complete application in itself.  The
-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.
-
-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.
-
-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.
-
-To save time the motion result can be saved for later reuse, recalled
-from a previous calculation, or discarded.
-
-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.
-
-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
-enough to sweeten some camcorder footage.
-
-Here is a brief description of the motion tracking parameters:
-
-@itemize
-@item
-@b{Track translation:} 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.
-
-@item
-
-@b{Translation block size:} 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.
-
-@item
-
-@b{Translation search radius:} The size of the area to scan for the
-translation block.
-
-@item
-
-@b{Translation search steps:} 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
-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.
-
-@item
-
-@b{Block X, Y:} 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.
-
-@item 
-
-@b{Maximum absolute offset:} In @b{track previous frame} and @b{previous
-frame same block} 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
-percentage of the image size.  The value must be smaller for larger
-@b{translation block sizes} so there is enough area under the block to
-sense motion with.
-
-@item
-
-@b{Settling speed} In @b{track previous frame} and @b{previous frame
-same block} modes, the motion detected between every frame is
-accumulated to form an absolute motion vector for the entire sequence. 
-To keep the absolute motion from exceeding limits, it can be
-automatically reset over time by the settling speed.  If the settling
-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.
-
-@item
-
-@b{Track rotation:} Enables rotation operations.  The motion tracker
-tracks rotation in the master layer and adjusts rotation in the target
-layer.
-
-@item
-
-@b{Rotation block size:} 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.
-
-@item
-
-@b{Rotation search radius:} 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.
-
-@item
-
-@b{Rotation search steps:} 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
-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.
-
-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.
-
-@item
-
-@b{Draw vectors:} 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.
-
-When rotation is enabled a single box the size of the rotation block is
-drawn rotated by the amount of rotation detected.
-
-@item
-
-@b{Track single frame:} 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}
-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. 
-Playback can start anywhere on the timeline since there is no
-dependance on previous results.
-
-@item
-
-@b{Track previous frame:} 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
-sequence to the current position.  After every frame processed this
-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.
-
-@item
-
-@b{Previous frame same block:} 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
-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.
-
-@item
-
-@b{Master layer:} This determines the track which supplies the starting
-frame and ending frame for the motion calculation.  If it's @b{Bottom}
-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.
-
-@item
-
-@b{Calculation:} This determines whether to calculate the motion at all
-and whether to save it to disk.  If it's @b{Don't Calculate} the motion
-calculation is skipped.  If it's @b{Recalculate} the motion calculation
-is performed every time each frame is rendered.  If it's @b{Save} the
-motion calculation is always performed but a copy is also saved.  If
-it's @b{Load}, 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.
-
-@item
-
-@b{Action:} 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} the target layer is untouched. 
-If it's @b{Track...} 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...} 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.
-
-
-
-
-
-@end itemize
-
-
-
-@menu
-* SECRETS OF MOTION TRACKING::
-* 2 PASS MOTION TRACKING::
-* USING BLUR TO IMPROVE MOTION TRACKING::
-* USING HISTOGRAM TO IMPROVE MOTION TRACKING::
-* INTERPOLATING MOTION BETWEEN FRAMES::
-* FILLING IN THE BLACK AREAS::
-@end menu
-
-
-@node SECRETS OF MOTION TRACKING
-@subsection SECRETS OF MOTION TRACKING
-
-Since it is a very slow effect, there is a method to applying the
-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{Do Nothing}.  Set
-@b{Calculation} -> @b{Don't calculate}.  Enable @b{Draw vectors}. Then
-enable playback of the track to see the motion tracking areas.
-
-Enable which of @b{translation motion} or @b{rotation motion} vectors
-you want to track.  By watching the compositor window and adjusting the
-@b{Block x,y} 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.
-
-Once this is configured, set the calculation to @b{Save coords} 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}, set the motion action to perform
-on the target layer and change the calculation to @b{Load coords}. 
-Finally enable playback for the track.
-
-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
-radius need only reach halfway to the full extent of the motion in the
-sequence.
-
-If the motion tracker is used on a render farm, @b{Save coords} and
-@b{previous frame} mode won'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} from working since it
-depends on calculating an absolute motion vector starting on frame 0.
-
-@node 2 PASS MOTION TRACKING
-@subsection 2 PASS MOTION TRACKING
-
-The method described above is 2 pass motion tracking.  One pass is used
-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.
-
-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.
-
-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.
-
-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.
-
-
-@node USING BLUR TO IMPROVE MOTION TRACKING
-@subsection USING BLUR TO IMPROVE MOTION TRACKING
-
-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} and disable the blur for the
-@b{action pass} or apply the blur just to the @b{master layer}.
-
-
-@node USING HISTOGRAM TO IMPROVE MOTION TRACKING
-@subsection USING HISTOGRAM TO IMPROVE MOTION TRACKING
-
-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} and disable the histogram for the @b{action pass} or
-apply the histogram just to the @b{master layer}.
-
-
-
-
-@node INTERPOLATING MOTION BETWEEN FRAMES
-@subsection INTERPOLATING MOTION BETWEEN FRAMES
-
-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} and @b{settling speed} options.
-
-First, go to @b{Settings->Format} in the main window and set the
-@b{video frame rate} to a number higher than the media frame rate.
-
-In the @b{Motion} window, select a tracking option which accumulates
-motion.  This is either @b{Track previous frame} or @b{Previous frame
-same block}.  These cause the @b{maximum absolute offset} and
-@b{settling speed} options to take effect.
-
-@b{maximum absolute offset} 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} so there is enough area
-under the block to sense motion with.
-
-@b{settling speed} 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} value should be
-small, so the movement is smooth.  3 works well.
-
-
-
-
-
-
-
-
-
-@node FILLING IN THE BLACK AREAS
-@subsection FILLING IN THE BLACK AREAS
-
-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}
-effect after stabilization.
-
-Configure @b{Time Average} the following way:
-
-@itemize
-@item
-@b{Frame count:} 1
-@item
-@b{Accumulate sequence again:} No
-@item
-@b{Replace:} Yes
-@item
-@b{Threshold:} 1
-@item
-@b{Border:} 4
-@end itemize
-
-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.
-
-
-
-
-
-
-
-
-
-
-
-
-@node MOTION 2 POINT
-@section MOTION 2 POINT
-
-
-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. 
-Instead, it uses the angle between the 2 translation points to
-determine  rotation.  The 2 points can be enabled separately.
-
-If 1 point is enabled, only translation is tracked.  
-
-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.
-
-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{TRANSLATION SEARCH OFFSET} forces the motion search to look in a
-region other than directly next to the translation block position.  The
-@b{translation search offset} is added to the new search result, giving
-contiguous motion results throughout any changes in translation search area.
-
-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.
-
-2 point tracking works best if the points don'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.
-
-Use the smallest search blocks possible since larger blocks are harder
-to compare when they're rotated.
-
-
-
-
-
-@node REFRAMERT
-@section REFRAMERT
-
-
-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.
-
-@b{Stretch} 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
-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.
-
-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
-ReframeRT assume the same frame rate as ReframeRT.
-
-@b{Downsample} mode doesn'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
-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.
-
-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
-anything but some input effects may behave differently at the higher
-frame rate.
-
-
-
-
-@node REFRAME
-@section REFRAME
-
-This does exactly the same thing as @b{ReframeRT} in @b{Stretch} 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} menu and render its output.
-
-Be aware @b{Reframe} doesn'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.
-
-
-
-
-
-
-
-
-@node RESAMPLE
-@section RESAMPLE
-
-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
-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.
-
-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
-to 1 output sample and the output file will have twice as many samples
-as the input sequence.
-
-
-
-
-
-
-
-
-
-
-@node REVERSE VIDEO/AUDIO
-@section REVERSE VIDEO/AUDIO
-
-Media can be reversed on the timeline in realtime.  This isn'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} to an audio track and
-play it backwards.  The sound plays forward.
-
-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} option which allows
-you to set keyframes.  This allows may possibilities.
-
-Every @b{enabled} keyframe is treated as the start of a new reversed
-region and the end of a previous reversed region.  Several @b{enabled}
-keyframes in succession yield several regions reversed independant of
-each other.  An @b{enabled} keyframe followed by a @b{disabled}
-keyframe yields one reversed region followed by a forward region.
-
-Finally, be aware when reversing audio that the waveform on the
-timeline doesn't reflect the actual reversed output.
-
-
-
-
-@node SWAP FRAMES
-@section SWAP FRAMES
-
-This is normally used on interlaced video which has been converted to
-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} can correct.
-
-
-
-
-
-
-
-
-
-
-
-
-@node THRESHOLD
-@section THRESHOLD
-
-Threshold converts the image to pure luminance.  Then luminance values
-below and above the threshold range are converted to black and
-luminance values inside the threshold range are converted to white. 
-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.
-
-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.
-
-
-
-
-
-
-
-@node TIME AVERAGE
-@section TIME AVERAGE
-
-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
-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
-average can increase the dynamic range of lousy cameras.
-
-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.
-
-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.
-
-@b{Frames count:} This determines the number of frames to be accumulated
-in the accumulation buffer.  For extremely large integrations it's
-easier to edit the EDL in a text editor and put in the number of frames.
-
-@b{Accumulate sequence again:} If an effect before the time average is
-adjusted the time average normally doesn't reread the accumulation
-buffer to get the change.  This forces it to reread the accumulation
-buffer when any other effects change.
-
-
-@b{Average:} This causes the accumulation buffer to be divided before
-being output.  The result is the average of all the frames.
-
-@b{Accumulate:} This outputs the accumulation buffer without dividing
-it.  The result is the sum of all the frames.
-
-@b{Accumulate only:}
-
-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:} causes the history buffer to
-not be used in @b{averaging} and @b{accumulating}.  Without the history
-buffer, frames are added endlessly without ever being subtracted.  It's
-the same as an infinitely long accumulation buffer.  The only difference
-is for @b{Average} mode, the output is still divided by the @b{Frame
-count}.  @b{Accumulate only} is used where the number of frames in the
-accumulation would be too big to fit in memory.
-
-@b{Replace:} This causes the accumulation buffer to be replaced by only
-pixels which aren't transparent.  This allows black borders from motion
-tracking to be filled in.
-
-@b{Threshold:} 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.
-
-@b{Border:} 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.
-
-@b{Greater:} 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.
-
-@b{Less:} 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.
-
-
-
-
-
-
-
-@node TITLER
-@section TITLER
-
-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.  
-
-The titler has standard options for @b{font, size, and style}.  The
-best font is a generic, normal font like Arial in a large size.
-
-The titler also has options you'll only find in moving pictures.  The
-@b{Justify} operation justifies the text relative to the entire frame. 
-Once justified, the @b{X and Y} offset is applied.  This allows text to
-be justified while at the same time letting you push it within the
-title safe region.
-
-The @b{motion type} 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.
-
-Setting @b{loop} causes the text to scroll completely off and repeat. 
-Without @b{loop} the text scrolls off and never reappears.
-
-The speed of the animation is determined by @b{speed}  Set it higher to
-speed up the animation.
-
-@b{Drop shadow} 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.
-
-In addition to the scrolling, @b{Fade in/Fade out} are a second type of
-animation.  If the fade seconds are 0, no fading is done.
-
-@b{Outline} draws an outline on the characters if it's greater than 0. 
-Set the outline size by changing the number.  Set the outline color with
-the @b{OUTLINE COLOR} button.  If no outline is visible, make sure the
-alpha in @b{OUTLINE COLOR} is nonzero.  To get pure outline characters,
-set @b{COLOR} alpha to 0.
-
-@b{COLOR} picks the color to draw the text in.  Usually white is the
-only practical color.
-
-@b{OUTLINE COLOR} picks the color to draw the text outline in.
-
-@b{Stamp timecode} replaces the text with the current position on the
-timeline in seconds and frames.
-
-@b{SECRETS OF THE TITLER}
-@menu
-* ADDING FONTS TO THE TITLER:: How to add fonts to the titler
-* THE TITLE-SAFE REGION::      How to keep text visible on output
-* MAKING TITLES LOOK GOOD::    How to make your titles look good.
-@end menu
-
-@node ADDING FONTS TO THE TITLER
-@subsection ADDING FONTS TO THE TITLER
-
-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
-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
-support fonts in the titler is to have a directory for them at
-@b{/usr/lib/cinelerra/fonts}.
-
-The titler supports mainly @b{TTF}, true type fonts.  It supports
-others but TTF are the most reliable.  To add true type fonts, copy the
-@b{.TTF} files to the @b{/usr/lib/cinelerra/fonts} directory.  In that
-directory run @b{ttmkfdir && mv fonts.scale fonts.dir} and restart
-Cinelerra.  The new fonts should appear.  The usage of ttmkfdir changes
-frequently so this technique might not work.
-
-
-@node THE TITLE-SAFE REGION
-@subsection THE TITLE-SAFE REGION
-
-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} @image{titlesafe} tool active in the @b{compositor} window.
-The text shouldn't cross the inner rectangle.
-
-
-@node MAKING TITLES LOOK GOOD
-@subsection MAKING TITLES LOOK GOOD
-
-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:
-
-@itemize
-@item
-Font: @b{Arial}
-@item
-Italic: @b{off}
-@item
-Motion: @b{No motion}
-@item
-Bold: @b{on or off}
-@item
-Fade in: @b{0}
-@item
-Fade out: @b{0}
-@item
-Color: @b{white}
-@item
-Outline color: @b{black}
-@item
-Drop Shadow or outline: @b{use either to improve contrast but not both}
-@end itemize
-
-
-Don't waste the audience's time with fading & 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
-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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-@node VIDEO SCOPE
-@section VIDEO SCOPE
-
-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.
-
-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.
-
-The waveform allows you to make sure image data extends from complete
-black to complete white while adjusting the brightness/contrast.
-
-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.
-
-
-
-
-
-@node PLUGIN AUTHORING
-@chapter PLUGIN AUTHORING
-
-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
-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.
-
-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.  
-
-
-
-@menu
-* INTRODUCING THE PULL METHOD:: The current paradigm for plugin writing
-* COMMON PLUGIN FUNCTIONS:: What all effects have to do.
-* REALTIME PLUGINS:: What realtime effects have to do.
-* NONREALTIME PLUGINS:: What rendered effects have to do.
-* AUDIO PLUGINS:: What audio effects have to do.
-* VIDEO PLUGINS:: What video effects have to do.
-* TRANSITION PLUGINS:: What transitions have to do.
-* PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK:: How to use currently playing data to draw the GUI.
-* USING OPENGL:: How to use hardware to speed up operations.
-* PLUGIN QUERIES:: How plugins get information about the data to be processed.
-@end menu
-
-
-
-
-@node INTRODUCING THE PULL METHOD
-@section INTRODUCING THE PULL METHOD
-
-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.
-
-The latest evolution in Cinelerra'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.
-
-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.
-
-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.
-
-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
-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.
-
-Rate conversions are done in terms of the @b{project rate} and the
-@b{requested rate}.  The project rate is identical for all plugins.  It
-is determined by the @b{settings->format} 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.
-
-
-
-@node COMMON PLUGIN FUNCTIONS
-@section COMMON PLUGIN FUNCTIONS
-
-All plugins inherit from a derivative of PluginClient.  This
-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.
-
-The files they include depend on the plugin type.  Audio plugins
-include @b{pluginaclient.h} and video plugins include
-@b{pluginvclient.h}.  They inherit @b{PluginAClient} and
-@b{PluginVClient} respectively.
-
-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.
-
-All plugins define at least three objects:
-
-@itemize
-
-@item
-
-@b{Processing object} - 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.
-
-
-@item
-
-@b{User interface object} - This is a subclass of
-@b{PluginClientWindow}.  It shows data on the screen and collects
-parameters from the user.
-
-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
-a thread for the GUI.
-
-
-
-@item
-
-@b{Configuration object} - 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.
-
-@end itemize
-
-@menu
-* THE PROCESSING OBJECT::
-* THE CONFIGURATION OBJECT::
-* THE USER INTERFACE OBJECT::
-@end menu
-
-
-
-@node THE PROCESSING OBJECT
-@subsection THE PROCESSING OBJECT
-
-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.
-
-@example
-MyPlugin(PluginServer *server);
-@end example
-
-In the implementation, the plugin must contain a registration line with
-the name of the processing object like
-
-@example
-REGISTER_PLUGIN(MyPlugin)
-@end example
-
-
-
-
-Another function which is useful but not mandatory is
-
-@example
-int is_multichannel();
-@end example
-
-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.
-
-Multichannel plugins in their processing function should refer to a
-function called @b{PluginClient::get_total_buffers()} to determine the
-number of channels.
-
-
-
-
-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.
-
-@example
-PLUGIN_CLASS_MEMBERS(config_name, thread_name)
-@end example
-
-The commonly used members in PLUGIN_CLASS_MEMBERS are described below.
-
-@itemize
-
-@item
-int load_configuration();
-
-Loads the configuration based on surrounding keyframes and current
-position.  The class definition for load_configuration should contain 
-
-@example
-LOAD_CONFIGURATION_MACRO(plugin_class, config_class)
-@end example
-
-to implement the default behavior for load_configuration.  This stores
-whatever the current configuration is inside the plugin'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.
-
-The plugin's configuration object is always called @b{config} inside
-PLUGIN_CLASS_MEMBERS.
-
-@item
-VFrame* new_picon();
-
-Creates a picon for display in the resource window.  Use
-
-@example
-#include "picon_png.h"
-NEW_PICON_MACRO(plugin_class)
-@end example
-
-to implement new_picon.  In addition, the user should create a
-@b{picon_png.h} header file from a PNG image using @b{pngtoh}. 
-@b{pngtoh} is compiled in the @b{guicast/ARCH} directory.
-
-The source PNG image should be called picon.png and can be any format
-supported by PNG.
-
-@item
-char* plugin_title();
-
-Returns a text string identifying the plugin in the resource window. 
-The string has to be unique.
-
-
-@item
-void update_gui(); 
-
-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
-
-@example
-void MyPlugin::update_gui()
-@{
-       if(thread)
-       @{
-               if(load_configuration())
-               @{
-                       thread->window->lock_window();
-// update widgets here
-                       thread->window->unlock_window();
-               @}
-       @}
-@}
-@end example
-
-to handle concurrency and conditions of no GUI.
-
-
-
-
-@end itemize
-
-
-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.
-
-@example
-void save_data(KeyFrame *keyframe);
-void read_data(KeyFrame *keyframe);
-@end example
-
-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.
-
-Use an object called @b{FileXML} 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.
-
-
-@example
-int load_defaults();
-int save_defaults();
-@end example
-
-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.  The BC_Hash object stores configurations in a discrete
-file on disk for each plugin but doesn't isolate different
-configurations for different projects.
-
-The function overriding @b{load_defaults} also needs to call @b{defaults
-= new BC_Hash(path);} with the configuration path.  See any existing
-plugin to see the usage of BC_Hash.   The function overriding
-@b{save_defaults} does not create @b{defaults}.
-
-Other standard members may be defined in the processing object,
-depending on the plugin type.
-
-
-
-
-@node THE CONFIGURATION OBJECT
-@subsection THE CONFIGURATION OBJECT
-
-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.
-
-Usually the configuration object starts with the name of the plugin
-followed by Config.
-
-@example
-class MyPluginConfig
-@{
-public:
-       MyPluginConfig();
-@end example
-
-
-Following the name of the configuration class, we put in three
-required functions and the configuration variables.
-
-@example
-       int equivalent(MyPluginConfig &that);
-       void copy_from(MyPluginConfig &that);
-       void interpolate(MyPluginConfig &prev, 
-               MyPluginConfig &next, 
-               int64_t prev_position, 
-               int64_t next_position, 
-               int64_t current_position);
-
-
-
-       float parameter1;
-       float parameter2;
-       int parameter3;
-@};
-
-@end example
-
-
-Now you must define the three functions.  @b{Equivalent} 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 
-causes the GUI to redraw.  If equivalent returns 1, the
-LOAD_CONFIGURATION_MACRO doesn't redraw the GUI.
-
-Then there's @b{copy_from} 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 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.
-
-Normally the interpolate function calculates a previous and next
-fraction, using the arguments.
-
-@example
-void MyPluginConfig::interpolate(MyPluginConfig &prev, 
-               MyPluginConfig &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);
-@end example
-
-Then the fractions are applied to the previous and next configuration
-variables to yield the current values.
-
-@example
-
-       this->parameter1 = (float)(prev.parameter1 * prev_scale + next.parameter1 * next_scale);
-       this->parameter2 = (float)(prev.parameter2 * prev_scale + next.parameter2 * next_scale);
-       this->parameter3 = (int)(prev.parameter3 * prev_scale + next.parameter3 * next_scale);
-@}
-
-@end example
-
-Alternatively you can copy the values from the previous configuration
-argument if no interpolation is desired.
-
-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.
-
-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.
-
-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.
-
-
-
-
-
-
-
-
-@node THE USER INTERFACE OBJECT
-@subsection THE USER INTERFACE OBJECT
-
-
-The user interface object is derived from @b{PluginClientWindow}.  The
-user must call @b{NEW_WINDOW_MACRO} in the processing object to create
-the @b{PluginClientWindow}.  This system is used in realtime plugins but
-not in nonrealtime plugins.
-
-Nonrealtime plugins create and destroy their own GUI in their
-@b{get_parameters} function and there's no need for a
-@b{PluginClientWindow} subclass.
-
-Now the window class must be declared in the plugin header.  It'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
-appropriate arguments.
-
-@example
-
-#include "guicast.h"
-
-MyWindow::MyWindow(MyPlugin *plugin)
- : PluginClientWindow(plugin, 
-       440, 
-       500, 
-       440, 
-       500, 
-       0)
-@{
-
-@end example
-
-This becomes a window on the screen with the size given by the arguments
-to @b{PluginClientWindow}.
-
-It needs two methods
-
-@example
-       void create_objects();
-@end example
-
-and a back pointer to the plugin
-
-@example
-       MyPlugin *plugin;
-@end example
-
-
-The create_objects member puts widgets in the window according to
-GuiCast'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} 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 
-
-@example
-       show_window();
-@end example
-
-to make the window appear all at once.
-
-Every widget in the GUI needs to detect when its value changes.  In
-GuiCast the @b{handle_event} method is called whenever the value
-changes.  In @b{handle_event}, the widget then needs to call
-@b{plugin->send_configure_change()} to propogate the change to any
-copies of the plugin which are processing data.
-
-
-
-
-
-
-
-
-
-@node REALTIME PLUGINS
-@section REALTIME PLUGINS
-
-Realtime plugins should use PLUGIN_CLASS_MEMBERS to define the basic
-set of members in their headers.  All realtime plugins must define an
-
-@example
-int is_realtime()
-@end example
-
-member returning 1.  This causes a number of methods to be called
-during live playback and the plugin to be usable on the timeline.
-
-Realtime plugins must override a member called
-
-@example
-process_buffer 
-@end example
-
-This function takes different arguments depending on if the plugin
-handles video or audio.  See an existing plugin to find out which usage
-applies.
-
-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
-samples.
-
-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.
-
-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.
-
-The process_realtime function should start by calling
-@b{load_configuration}.  The LOAD_CONFIGURATION_MACRO returns 1 if the
-configuration changed.
-
-After determining the plugin's configuration, input media has to be
-loaded for processing.  Call
-
-@example
-read_frame(VFrame *buffer, 
-               int channel, 
-               int64_t start_position,
-               double frame_rate)
-@end example
-
-or
-
-@example
-read_samples(double *buffer,
-               int channel,
-               int sample_rate,
-               int64_t start_position,
-               int64_t len)
-@end example
-
-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.
-
-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.
-
-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.
-
-
-Additional members are implemented to maintain configuration in
-realtime plugins.  Some of these are also needed in nonrealtime
-plugins.
-
-@itemize
-@item
-void read_data(KeyFrame *keyframe);
-
-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
-@b{FileXML} object.  See an existing plugin to see how the read_data
-function is implemented.
-
-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.
-
-@item
-void save_data(KeyFrame *keyframe);
-
-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
-FileXML object.  See an existing plugin to see how the save_data
-function is implemented.
-
-Save data saves data from the plugin's configuration object into the
-XML object.
-
-@item
-int load_defaults();
-
-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} and
-destroyed in the plugin's destructor.  See an existing plugin to see
-how the BC_Hash object is used.
-
-@item
-int save_defaults();
-
-Saves the configuration in the defaults object.
-
-@end itemize
-
-
-
-
-
-
-@node NONREALTIME PLUGINS
-@section NONREALTIME PLUGINS
-
-Some references for non-realtime plugins are @b{Normalize} for audio
-and @b{Reframe} for video.
-
-Like realtime plugins, @b{load_defaults} and @b{save_defaults} 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
-in nonrealtime plugins.
-
-Unlike realtime plugins, the LOAD_CONFIGURATION_MACRO can't be used in
-the plugin header.  Instead, the following methods must be defined.
-
-The nonrealtime plugin should contain a pointer to a defaults object.
-
-@example
-
-BC_Hash *defaults;
-
-@end example
-
-It should also have a pointer to a MainProgressBar.
-
-@example
-
-MainProgressBar *progress;
-@end example
-
-The progress pointer allows nonrealtime plugins to display their
-progress in Cinelerra's main window.
-
-The constructor for a nonrealtime plugin can't use
-PLUGIN_CONSTRUCTOR_MACRO but must call @b{load_defaults} directly.
-
-The destructor, likewise, must call @b{save_defaults} and @b{delete
-defaults} directly instead of PLUGIN_DESTRUCTOR_MACRO.
-
-@itemize
-
-@item
-VFrame* new_picon();
-
-char* plugin_title();
-
-The usage of these is the same as realtime plugins.
-
-@item
-int is_realtime();
-
-This function must return 0 to indicate a nonrealtime plugin.
-
-@item
-
-int get_parameters();
-
-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.
-
-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.
-
-@item
-int load_defaults();
-
-This should set the @b{defaults} variable to a new @b{Defaults} object
-and load parameters from the defaults object into plugin variables.
-
-@item
-int save_defaults();
-
-This should save plugin variables to the defaults object.  It should not
-create the defaults object.
-
-
-@item
-int start_loop();
-
-If @b{get_parameters} 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
-
-@example
-
-progress = start_progress("MyPlugin progress...", 
-       PluginClient::get_total_len());
-
-@end example
-
-The usage of @b{start_progress} 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.
-
-If @b{PluginClient::interactive} is 1, you need to start the progress
-bar.  If it's 0, the progress bar has already been started.
-
-The PluginClient defines @b{get_total_len()} and @b{get_source_start()}
-to describe the timeline range to be processed.  The units are either
-samples or frames and in the project rate.
-
-@item
-int process_loop
-
-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()} to know how
-many samples the output buffer can hold.
-
-The plugin must use @b{read_samples} or @b{read_frame} to read the
-input.  These functions are a bit different for a non realtime plugin
-than they are for a realtime plugin.
-
-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
-output in the buffer argument to process_loop.  write_length should
-contain the number of samples generated if it's audio.
-
-Finally, process_loop must test @b{PluginClient::interactive} and
-update the progress bar if it's 1.
-
-@example
-progress->update(total_written);
-@end example
-
-returns 1 or 0 if the progress bar was cancelled.  If it's 1,
-process_loop should return 1 to indicate a cancellation.  In addition
-to progress bar cancellation, @b{process_loop} should return 1 when the
-entire timeline range is processed.
-
-@item
-int stop_loop();
-
-This is called after process_loop processes its last buffer.  
-
-If PluginClient::is_interactive is 1, this should call
-@b{stop_progress} in the progress bar pointer and delete the pointer. 
-Then it should delete any objects it created for processing in
-@b{start_loop}.
-
-
-@end itemize
-
-
-
-@node AUDIO PLUGINS
-@section AUDIO PLUGINS
-
-The simplest audio plugin is Gain.  The processing object should
-include @b{pluginaclient.h} and inherit from @b{PluginAClient}.  Realtime audio plugins need to
-define 
-
-@example
-int process_buffer(int64_t size, 
-               double **buffer,
-               int64_t start_position,
-               int sample_rate);
-@end example
-
-if it's multichannel or 
-
-@example
-int process_buffer(int64_t size, 
-               double *buffer,
-               int64_t start_position,
-               int sample_rate);
-@end example
-
-if it's single channel.  These should return 0 on success and 1 on
-failure.  In the future, the return value may abort failed rendering.
-
-The processing function needs to request input samples with 
-
-@example
-int read_samples(double *buffer,
-               int channel,
-               int sample_rate,
-               int64_t start_position,
-               int64_t len);
-@end example
-
-It always returns 0.  The user may specify any desired sample rate and
-start position.
-
-Nonrealtime audio plugins need to define
-
-@example
-int process_loop(double *buffer, int64_t &write_length);
-@end example
-
-for single channel or
-
-@example
-int process_loop(double **buffers, int64_t &write_length);
-@end example
-
-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.
-
-
-
-@node VIDEO PLUGINS
-@section VIDEO PLUGINS
-
-
-
-
-The simplest video plugin is Flip.  The processing object should
-include @b{pluginvclient.h} and inherit from @b{PluginVClient}. 
-Realtime video plugins need to define 
-
-@example
-int process_buffer(VFrame **frame,
-       int64_t start_position,
-       double frame_rate);
-@end example
-
-if it's multichannel or 
-
-@example
-int process_buffer(VFrame *frame,
-       int64_t start_position,
-       double frame_rate);
-@end example
-
-if it's single channel.  
-
-The nonrealtime video plugins need to define
-
-@example
-int process_loop(VFrame *buffer);
-@end example
-
-for single channel or
-
-@example
-int process_loop(VFrame **buffers);
-@end example
-
-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.
-
-A set of read_frame functions exist for requesting input frames in
-non-realtime video plugins.  These are fixed to the project frame rate.
-
-
-@node TRANSITION PLUGINS
-@section TRANSITION PLUGINS
-
-
-
-
-The simplest video transition is @b{wipe} and the simplest audio
-transition is @b{crossfade}.  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.
-
-The processing object for audio transitions still inherits from
-PluginAClient and for video transitions it still inherits from
-PluginVClient.
-
-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
-need to worry about updating the GUI from the processing object like
-you do in a realtime plugin.
-
-If the transition has a GUI, you can use PLUGIN_CONSTRUCTOR_MACRO and 
-PLUGIN_DESTRUCTOR_MACRO to initialize the processing object.  You'll
-also need a BC_Hash object and a Thread object for these macros.
-
-Since the GUI is optional, overwrite a function called @b{uses_gui()}
-to signifiy whether or not the transition has a GUI.  Return 1 if it
-does and 0 if it doesn't.
-
-Transitions need a @b{load_defaults} and @b{save_defaults} function so
-the first time they're dropped on the timeline they'll have useful
-settings.
-
-A @b{read_data} and @b{save_data} function takes over after insertion
-to access data specific to each instance of the transition.
-
-The most important difference between transitions and realtime plugins
-is the addition of an @b{is_transition} method to the processing
-object.  @b{is_transition} should return 1 to signify the plugin is a
-transition.
-
-Transitions process data in a @b{process_realtime} function.
-
-@example
-int process_realtime(VFrame *input, 
-               VFrame *output);
-@end example
-
-@example
-int process_realtime(int64_t size, 
-               double *input_ptr, 
-               double *output_ptr);
-@end example
-
-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.
-
-Routines exist for determining where you are relative to the
-transition's start and end.
-
-@itemize
-
-@item @b{PluginClient::get_source_position()} - returns the current
-position since the start of the transition of the lowest sample in the
-buffers.
-
-@item @b{PluginClient::get_total_len()} - returns the integer length of
-the transition.  The units are either samples or frames, in the data
-rate requested by the first plugin.
-
-@end itemize
-
-Users should divide the source position by total length to get the
-fraction of the transition the current @b{process_realtime} function is
-at.
-
-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()} or
-@b{get_samplerate} to get the requested rate.
-
-
-
-
-
-@node PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK
-@section PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK
-
-Effects like @b{Histogram} and @b{VideoScope} need to update the GUI
-during playback to display information about the signal.  This is
-achieved with the @b{send_render_gui} and @b{render_gui} methods. 
-Normally in process_buffer, when the processing object wants to update
-the GUI it should call @b{send_render_gui}.  This should only be called
-in process_buffer.  Send_render_gui goes through a search and
-eventually calls @b{render_gui} in the GUI instance of the plugin.
-
-Render_gui should have a sequence like
-
-@example
-void MyPlugin::render_gui(void *data)
-@{
-       if(thread)
-       @{
-               thread->window->lock_window();
-
-// update GUI here
-
-               thread->window->unlock_window();
-       @}
-@}
-
-@end example
-
-
-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.
-
-
-
-
-
-
-
-
-
-
-
-@node PLUGIN QUERIES
-@section PLUGIN QUERIES
-
-
-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.
-
-@menu
-* SYSTEM QUERIES:: Utilities for determining the system resources.
-* TIMING QUERIES:: Utilities for performing time-dependant processing.
-@end menu
-
-
-
-
-
-@node SYSTEM QUERIES
-@subsection SYSTEM QUERIES
-
-
-@itemize
-
-@item 
-
-@b{get_interpolation_type()} 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} object.
-
-@item
-
-@b{get_project_smp()} 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
-number should be used to gain parallelism.
-
-@item
-
-@b{get_total_buffers()} Gives the number of tracks a multichannel
-plugin needs to process.
-
-
-@end itemize
-
-
-
-
-
-
-@node TIMING QUERIES
-@subsection TIMING QUERIES
-
-
-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.
-
-@itemize
-@item
-
-@b{get_project_framerate()} Gives the frames per second of the video as
-defined by the project settings.
-
-
-@item
-
-@b{get_project_samplerate()} Gives the samples per second of the audio as
-defined by the project settings.
-
-@item
-
-@b{get_framerate()} 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.
-
-@item
-
-@b{get_samplerate()} 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.
-
-@item
-
-@b{get_total_len()} Gives the number of samples or frames in the
-range covered by the effect, relative to the requested data rate.
-
-@item
-
-@b{get_source_start()} 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
-process.
-
-@item
-
-@b{get_source_position()} For realtime plugins it'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
-if playing in reverse.  The position is relative to the start of the
-EDL and in the requested data rate.
-
-For transitions this is always the lowest numbered sample of the region
-to process relative to the start of the transition.
-
-@item
-
-@b{get_direction()} 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.
-
-@item
-
-@b{local_to_edl()}
-
-@item
-
-@b{edl_to_local()}
-
-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.
-
-@item
-@b{get_prev_keyframe(int64_t position, int is_local)}
-
-@item
-@b{get_next_keyframe(int64_t position, int is_local)}  
-
-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.
-
-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.
-
-In each keyframe, another position value tells the keyframe's position
-relative to the start of the timeline and in the project rate.
-
-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.
-
-@end itemize
-
-
-
-
-
-@node USING OPENGL
-@section USING OPENGL
-
-
-
-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
-only way.
-
-As always, the best way to design a first OpenGL plugin is to copy an
-existing one and alter it.  The @b{Brightness} plugin is a simple
-OpenGL plugin to copy.  There are 3 main points in OpenGL rendering and
-1 point for optimizing OpenGL rendering.
-
-@menu
-* GETTING OPENGL DATA:: Getting video data in a form usable by OpenGL
-* DRAWING USING OPENGL:: The method of drawing video in OpenGL
-* USING SHADERS:: Routines to simplify shader usage
-* AGGREGATING PLUGINS:: Combining OpenGL routines from different plugins into one.
-@end menu
-
-
-
-@node GETTING OPENGL DATA
-@subsection GETTING OPENGL DATA
-
-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}.  To support 3D, the VFrame contains a PBuffer and a
-texture, in addition to VFrame's original rows.
-
-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} and is set by calling @b{set_opengl_state}.  The
-states are:
-
-@itemize
-
-@item
-
-@b{VFrame::RAM} - 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.
-
-@item @b{VFrame::TEXTURE} - The video data is stored in texture
-memory.  It's ready to be drawn using OpenGL routines.
-
-@item @b{VFrame::SCREEN} - 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
-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.
-
-@end itemize
-
-In the plugin's @b{process_buffer} routine, there is normally a call to
-@b{read_frame} to get data from the previous plugin in the chain. 
-@b{read_frame} takes a new parameter called @b{use_opengl}.  
-
-The plugin passes 1 to @b{use_opengl} if it intends to handle the data
-using OpenGL.  It passes 0 to @b{use_opengl} if it can only handle the
-data using software.  The value of @b{use_opengl} 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} is 0, the opengl state in VFrame
-is RAM.
-
-The plugin must not only know if it is software-only but if its output
-must be software only.  Call @b{get_use_opengl} to determine if the
-output can be handled by OpenGL.  If @b{get_use_opengl} returns 0, the
-plugin must pass 0 for @b{use_opengl} in @b{read_frame} and do its
-processing in software.  If @b{get_use_opengl} is 1, the plugin can
-decide based on its implementation whether to use OpenGL.
-
-
-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.  
-
-
-@b{run_opengl} transfers control to the common OpenGL thread.  This is
-normally called by the plugin in @b{process_buffer} after it calls
-@b{read_frame} and only if @b{get_use_opengl} is 1.
-
-Through a series of indirections, @b{run_opengl} eventually transfers
-control to a virtual function called @b{handle_opengl}. 
-@b{handle_opengl} must be overridden with a function to perform all the
-OpenGL routines.  The contents of @b{handle_opengl} must be enclosed in
-@b{#ifdef HAVE_GL} ... @b{#endif} to allow it to be compiled on systems
-with no graphics support, like render nodes.  The return value of
-@b{handle_opengl} is passed back from @b{run_opengl}.
-
-@b{read_frame} can't be called from inside @b{handle_opengl}.  This
-would create a recursive lockup because it would cause other objects to
-call @b{run_opengl}.
-
-Once inside @b{handle_opengl}, the plugin has full usage of all the
-OpenGL features.  VFrame provides some functions to automate common
-OpenGL sequences.
-
-The VFrame argument to @b{process_buffer} is always available through
-the @b{get_output(int layer)} 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.
-
-
-
-@node DRAWING USING OPENGL
-@subsection DRAWING USING OPENGL
-
-
-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:
-
-@example
-get_output()->to_texture();
-get_output()->enable_opengl();
-@end example
-
-@b{to_texture} transfers the OpenGL data from wherever it is to the
-output's texture memory and sets the output state to TEXTURE.
-
-@b{enable_opengl} makes the OpenGL context relative to the output's
-PBuffer.
-
-The next step is to draw the texture with some processing on the
-PBuffer.  The normal sequence of commands to draw a texture is:
-
-@example
-get_output()->init_screen();
-get_output()->bind_texture(0);
-get_output()->draw_texture();
-@end example
-
-@b{VFrame::init_screen} sets the OpenGL frustum and parameters to known
-values.
-
-@b{VFrame::bind_texture(int texture_unit)} binds the texture to the given
-texture unit and enables it.
-
-@b{VFrame::draw_texture()} calls the vertex functions to draw the
-texture normalized to the size of the PBuffer.  Copy this if you want
-custom vertices.
-
-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
-with a call to @b{VFrame::set_opengl_state}.  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.
-
-@b{Colormodels in OpenGL}
-
-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 & 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.
-
-The OpenGL mode differentiates between alpha & flat colormodels even
-though OpenGL always has an alpha channel.  For RGB colormodels, you
-must multiply the alpha component by the RGB & set the alpha component
-to 1 whenever the colormodel has no alpha to ensure consistency with the
-software mode.
-
-@example
-Rout = Rin * Ain
-Gout = Gin * Ain
-Bout = Bin * Ain
-Aout = 1
-@end example
-
-
-For YUV colormodels, you must multiply the alpha using the following
-formula.
-
-@example
-Yout = Yin * Ain
-Uout = Uin * Ain + 0.5 * (1 - Ain)
-Vout = Vin * Ain + 0.5 * (1 - Ain)
-Aout = 1
-@end example
-
-
-
-
-
-
-@node USING SHADERS
-@subsection USING SHADERS
-
-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
-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
-the graphics card.  Since the graphics card is optimized for graphics,
-it can be much faster than running it on the CPU.
-
-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}.
-
-@example
-char *shader_source = "...";
-unsigned char shader_id = VFrame::make_shader(0, shader_source, 0);
-glUseProgram(shader_id);
-// Set uniform variables using glUniform commands
-@end example
-
-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
-shader source.  If multiple main functions are in the sources, the main
-functions are renamed and run in order.
-
-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}.  The
-shader program must be disabled with another call to
-@b{glUseProgram(0)} and 0 as the argument.
-
-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.
-
-
-
-
-@node AGGREGATING PLUGINS
-@subsection AGGREGATING PLUGINS
-
-Further speed improvements may be obtained by combining OpenGL routines
-from two plugins into a single handle_opengl function.  This is done
-when @b{Frame to Fields} and @b{RGB to 601} are attached in order. 
-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.
-
-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.
-
-The VFrame used as the output buffer contains a parameter table for
-parameter passing between plugins and it's accessed with
-@b{get_output()->get_params()}.  Parameters are set and retrieved in
-the table with calls to @b{update} and @b{get} just like with defaults.
-
-The fall through plugins must determine if the processor plugin is
-attached with calls to @b{next_effect_is} and @b{prev_effect_is}. 
-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} to
-propogate the data but return after that.
-
-The processor plugin must call @b{next_effect_is} and
-@b{prev_effect_is} to determine if it'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()->get_params()} if the
-fall through plugin set them.
-
-
-
-
-
-
-
-
-@node KEYBOARD SHORTCUTS
-@chapter KEYBOARD SHORTCUTS
-
-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}.  Most operations can be cancelled with
-@b{ESC} and accepted with @b{Enter}.
-
-@section PROGRAM WINDOW
-
-
-@subsection Editing Media
-
-@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.
-@end example
-
-@subsection Editing Labels & In/Out Points
-
-@example
-[             Toggle In point 
-]             Toggle Out point 
-l             Toggle label at current position
-Ctrl <-       Go to Previous Label
-Ctrl ->       Go to Next Label
-@end example
-
-
-@subsection Navigation
-
-@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*
-
-@end example
-
-* You may have to click on the timeline to deactivate any text boxes or
-tumblers before these work.
-
-
-
-
-@subsection File operations
-
-@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
-@end example
-
-@subsection Key Frame Editing
-
-@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
-
-@end example
-
-
-@subsection Track Manipulation
-
-@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
-
-@end example
-
-@subsection What's drawn on the timeline
-
-@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
-
-@end example
-
-
-@section VIEWER & COMPOSITOR WINDOWS
-
-@example
-
-x         Cut
-c         Copy
-v         Paste
-v         Splice
-b         Overwrite
-[         Toggle In point 
-]         Toggle Out point 
-l         Toggle label at current position
-Ctrl <-   Go to Previous Label
-Ctrl ->   Go to Next Label
-Home      Go to beginning
-End       Go to end
-z         Undo
-Shift Z   Re-Do
-+         Zoom in
--         Zoom out
-
-@end example
-
-
-
-@section PLAYBACK TRANSPORT
-
-Transport controls work in any window which has a playback transport.  They are
-accessed through the number pad with num lock disabled.
-
-@example
-4 Frame back         5 Reverse Slow     6 Reverse      + Reverse Fast
-1 Frame Forward      2 Forward Slow     3 Play     Enter Fast Forward
-0 Stop
-
-@end example
-
-[ Space bar ] is normal Play, Hitting any key twice is Pause.
-
-
-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.
-
-@section RECORD WINDOW
-
-@example
-
-Space              Start and pause recording of the current batch
-l                  Toggle label at current position.
-
-@end example
-
-@bye
-