diff options
Diffstat (limited to 'media-video/cinelerra')
-rw-r--r-- | media-video/cinelerra/Manifest | 6 | ||||
-rw-r--r-- | media-video/cinelerra/cinelerra-1.1.5.ebuild | 62 | ||||
-rw-r--r-- | media-video/cinelerra/files/compile-1.1.5.diff | 6908 | ||||
-rw-r--r-- | media-video/cinelerra/files/digest-cinelerra-1.1.5 | 1 |
4 files changed, 6974 insertions, 3 deletions
diff --git a/media-video/cinelerra/Manifest b/media-video/cinelerra/Manifest index c53d74a45dde..c2cb35bb9ed3 100644 --- a/media-video/cinelerra/Manifest +++ b/media-video/cinelerra/Manifest @@ -1,8 +1,8 @@ -MD5 c18bf54dd581c75c7fc22a61bc9e3b27 ChangeLog 933 -MD5 9043f9ea66cbdd82c650a3335809d387 cinelerra-1.1.5.ebuild 1179 +MD5 88321e72dbdf94289aef7d47adc520fc ChangeLog 1125 MD5 a4f1bc017ca723056dcf4d643683573c cinelerra-1.0.0.ebuild 1128 MD5 c69120050a1046a849e4231a12794dc9 cinelerra-110802.ebuild 1200 -MD5 07cc4d63fc6636b11a09265bd359f02c files/digest-cinelerra-1.1.5 74 +MD5 4c9d268e27859e6b97c057b19e45c614 cinelerra-1.1.5.ebuild 1179 MD5 bb1b390c6a20a9240f1100c3a3974b0d files/digest-cinelerra-1.0.0 73 MD5 0251b5e587fcbf93534c1633a3d27ad1 files/digest-cinelerra-110802 74 +MD5 07cc4d63fc6636b11a09265bd359f02c files/digest-cinelerra-1.1.5 74 MD5 ea82f6b3b08112f20623ddb10bf97fce files/compile-1.1.5.diff 300491 diff --git a/media-video/cinelerra/cinelerra-1.1.5.ebuild b/media-video/cinelerra/cinelerra-1.1.5.ebuild new file mode 100644 index 000000000000..e453bbdd6f0f --- /dev/null +++ b/media-video/cinelerra/cinelerra-1.1.5.ebuild @@ -0,0 +1,62 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/media-video/cinelerra/cinelerra-1.1.5.ebuild,v 1.1 2003/05/04 14:15:59 lu_zero Exp $ + +inherit gcc eutils +export WANT_GCC_3="yes" + +DESCRIPTION="Cinelerra - Professional Video Editor" +HOMEPAGE="http://heroinewarrior.com/cinelerra.php3" +SRC_URI="mirror://sourceforge/heroines/${P}-src.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~x86" + +DEPEND="virtual/x11 + virtual/glibc + =sys-devel/gcc-3* + >=media-libs/a52dec-0.7.3" + +#S=${WORKDIR}/hvirtual-${PV} + +src_unpack() { + unpack ${A} + epatch ${FILESDIR}/compile-1.1.5.diff +} + +src_compile() { + export ${CFLAGS} + make || die "make failed" +} + +src_install() { + cd ${S}/${PN}/i686 + + dobin ${PN} + + cd ${S}/plugins + insinto /usr/lib/${PN} + doins i686/*.plugin + insinto /usr/lib/${PN}/fonts + doins titler/fonts/* + + cd ${S}/libmpeg3/i686 + dobin mpeg3dump mpeg3cat mpeg3toc + +# cd ${S}/mix/i686 +# dobin mix2000 + +# cd ${S}/xmovie/i686 +# dobin xmovie + + cd ${S}/mplexhi/i686 + dobin mplexhi + + cd ${S}/mplexlo/i686 + dobin mplexlo + + cd ${S} +# dodoc CVS COPYING + dohtml -a png,html,texi,sdw -r doc/* +} diff --git a/media-video/cinelerra/files/compile-1.1.5.diff b/media-video/cinelerra/files/compile-1.1.5.diff new file mode 100644 index 000000000000..cbccdfadd0e0 --- /dev/null +++ b/media-video/cinelerra/files/compile-1.1.5.diff @@ -0,0 +1,6908 @@ +diff -ruN cinelerra-1.1.5.orig/cinelerra/builddate.h cinelerra-1.1.5/cinelerra/builddate.h +--- cinelerra-1.1.5.orig/cinelerra/builddate.h 2003-02-10 08:25:29.000000000 +0100 ++++ cinelerra-1.1.5/cinelerra/builddate.h 2003-05-04 08:50:11.000000000 +0200 +@@ -1 +1 @@ +-#define BUILDDATE "Sun Feb 9 23:25:29 PST 2003" ++#define BUILDDATE "Sun May 4 08:48:32 CEST 2003" +diff -ruN cinelerra-1.1.5.orig/cinelerra/tracksedit.C cinelerra-1.1.5/cinelerra/tracksedit.C +--- cinelerra-1.1.5.orig/cinelerra/tracksedit.C 2002-12-14 06:10:45.000000000 +0100 ++++ cinelerra-1.1.5/cinelerra/tracksedit.C 2003-05-04 08:50:11.000000000 +0200 +@@ -745,7 +745,7 @@ + dest_edit->insert_transition(server->title); + } + +-void Tracks::paste_video_transition(PluginServer *server, int first_track = 0) ++void Tracks::paste_video_transition(PluginServer *server, int first_track) + { + for(Track *current = first; current; current = NEXT) + { +diff -ruN cinelerra-1.1.5.orig/doc/cinelerra.html cinelerra-1.1.5/doc/cinelerra.html +--- cinelerra-1.1.5.orig/doc/cinelerra.html 2003-02-10 07:02:54.000000000 +0100 ++++ cinelerra-1.1.5/doc/cinelerra.html 2003-05-04 08:50:11.000000000 +0200 +@@ -2,30 +2,32 @@ + <head> + <title>Secrets of Cinelerra</title> + <meta http-equiv="Content-Type" content="text/html"> +-<meta name=description content="Secrets of Cinelerra"> +-<meta name=generator content="makeinfo 4.2"> +-<link href="http://www.gnu.org/software/texinfo/" rel=generator-home> ++<meta name="description" content="Secrets of Cinelerra"> ++<meta name="generator" content="makeinfo 4.5"> ++<link href="http://www.gnu.org/software/texinfo/" rel="generator-home"> + </head> + <body> +-<h1>Secrets of Cinelerra</h1> ++<h1 class="settitle">Secrets of Cinelerra</h1> ++<div class="node"> + <p><hr> + Node:<a name="Top">Top</a>, +-Next:<a rel=next accesskey=n href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a>, +-Up:<a rel=up accesskey=u href="#dir">(dir)</a> ++Next:<a rel="next" accesskey="n" href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a>, ++Up:<a rel="up" accesskey="u" href="#dir">(dir)</a> + <br> ++</div> + +-<h2>BRIEF CONTENTS</h2> ++<h2 class="unnumbered">BRIEF CONTENTS</h2> + +-<ul> +-<li><a accesskey=1 href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a>: +-<li><a accesskey=2 href="#INSTALLATION">INSTALLATION</a>: +-<li><a accesskey=3 href="#CONFIGURATION">CONFIGURATION</a>: +-<li><a accesskey=4 href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a>: +-<li><a accesskey=5 href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a>: +-<li><a accesskey=6 href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>: +-<li><a accesskey=7 href="#EDITING">EDITING</a>: +-<li><a accesskey=8 href="#USING%20EFFECTS">USING EFFECTS</a>: +-<li><a accesskey=9 href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a>: ++<li><a accesskey="2" href="#INSTALLATION">INSTALLATION</a>: ++<li><a accesskey="3" href="#CONFIGURATION">CONFIGURATION</a>: ++<li><a accesskey="4" href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a>: ++<li><a accesskey="5" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a>: ++<li><a accesskey="6" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>: ++<li><a accesskey="7" href="#EDITING">EDITING</a>: ++<li><a accesskey="8" href="#USING%20EFFECTS">USING EFFECTS</a>: ++<li><a accesskey="9" href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>: + <li><a href="#COMPOSITING">COMPOSITING</a>: + <li><a href="#KEYFRAMES">KEYFRAMES</a>: + <li><a href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a>: +@@ -36,92 +38,82 @@ + </ul> + + ++<div class="contents"> + <h2>Table of Contents</h2> + <ul> +-<li><a name="toc_Top"></a> +- <a href="#Top">BRIEF CONTENTS</a> +-<li><a name="toc_ABOUT%20CINELERRA"></a> +- <a href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a> ++<li><a name="toc_Top" href="#Top">BRIEF CONTENTS</a> ++<li><a name="toc_ABOUT%20CINELERRA" href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a> + <ul> + <li><a href="#ABOUT%20THIS%20MANUAL">ABOUT THIS MANUAL</a> +-</ul> +-<li><a name="toc_INSTALLATION"></a> +- <a href="#INSTALLATION">INSTALLATION</a> +-<li><a name="toc_CONFIGURATION"></a> +- <a href="#CONFIGURATION">CONFIGURATION</a> ++</li></ul> ++<li><a name="toc_INSTALLATION" href="#INSTALLATION">INSTALLATION</a> ++<li><a name="toc_CONFIGURATION" href="#CONFIGURATION">CONFIGURATION</a> + <ul> + <li><a href="#PLAYBACK">PLAYBACK</a> + <ul> + <li><a href="#AUDIO%20OUT">AUDIO OUT</a> + <li><a href="#VIDEO%20OUT">VIDEO OUT</a> +-</ul> ++</li></ul> + <li><a href="#RECORDING">RECORDING</a> + <ul> + <li><a href="#AUDIO%20IN">AUDIO IN</a> + <li><a href="#VIDEO%20IN">VIDEO IN</a> +-</ul> ++</li></ul> + <li><a href="#PERFORMANCE">PERFORMANCE</a> + <ul> + <li><a href="#BACKGROUND%20RENDERING">BACKGROUND RENDERING</a> + <li><a href="#RENDERFARM">RENDERFARM</a> +-</ul> ++</li></ul> + <li><a href="#INTERFACE">INTERFACE</a> +-</ul> +-<li><a name="toc_THE%20MAIN%20WINDOWS"></a> +- <a href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a> +-<li><a name="toc_LOADING%20AND%20SAVING%20FILES"></a> +- <a href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> ++</li></ul> ++<li><a name="toc_THE%20MAIN%20WINDOWS" href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a> ++<li><a name="toc_LOADING%20AND%20SAVING%20FILES" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> + <ul> + <li><a href="#LOADING%20FILES">LOADING FILES</a> + <ul> + <li><a href="#SUPPORTED%20FILE%20FORMATS">SUPPORTED FILE FORMATS</a> + <li><a href="#INSERTION%20STRATEGY">INSERTION STRATEGY</a> + <li><a href="#LOADING%20MULTIPLE%20FILES">LOADING MULTIPLE FILES</a> +-</ul> ++</li></ul> + <li><a href="#LOADING%20THE%20BACKUP">LOADING THE BACKUP</a> + <li><a href="#SAVING%20FILES">SAVING FILES</a> + <li><a href="#RENDERING%20FILES">RENDERING FILES</a> + <li><a href="#THE%20RENDER%20FARM">THE RENDER FARM</a> +-</ul> +-<li><a name="toc_NAVIGATING%20THE%20PROJECT"></a> +- <a href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> ++</li></ul> ++<li><a name="toc_NAVIGATING%20THE%20PROJECT" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> + <ul> + <li><a href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a> + <ul> + <li><a href="#THE%20INSERTION%20POINT">THE INSERTION POINT</a> + <li><a href="#THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a> + <li><a href="#USING%20LABELS%20IN%20THE%20PROGRAM%20WINDOW">USING LABELS IN THE PROGRAM WINDOW</a> +-</ul> ++</li></ul> + <li><a href="#NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a> + <li><a href="#NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a> + <li><a href="#USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a> + <li><a href="#USING%20BACKGROUND%20RENDERING">USING BACKGROUND RENDERING</a> +-</ul> +-<li><a name="toc_EDITING"></a> +- <a href="#EDITING">EDITING</a> ++</li></ul> ++<li><a name="toc_EDITING" href="#EDITING">EDITING</a> + <ul> + <li><a href="#MANIPULATING%20TRACKS">MANIPULATING TRACKS</a> + <li><a href="#TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a> + <li><a href="#DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a> + <li><a href="#CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a> + <li><a href="#TRIMMING">TRIMMING</a> +-</ul> +-<li><a name="toc_USING%20EFFECTS"></a> +- <a href="#USING%20EFFECTS">USING EFFECTS</a> ++</li></ul> ++<li><a name="toc_USING%20EFFECTS" href="#USING%20EFFECTS">USING EFFECTS</a> + <ul> + <li><a href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a> + <ul> + <li><a href="#REALTIME%20EFFECT%20TYPES">REALTIME EFFECT TYPES</a> + <li><a href="#EDITING%20REALTIME%20EFFECTS">EDITING REALTIME EFFECTS</a> +-</ul> ++</li></ul> + <li><a href="#RENDERED%20EFFECTS">RENDERED EFFECTS</a> + <li><a href="#TRANSITIONS">TRANSITIONS</a> + <li><a href="#LADSPA%20EFFECTS">LADSPA EFFECTS</a> +-</ul> +-<li><a name="toc_SETTING%20PROJECT%20ATTRIBUTES"></a> +- <a href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a> +-<li><a name="toc_COMPOSITING"></a> +- <a href="#COMPOSITING">COMPOSITING</a> ++</li></ul> ++<li><a name="toc_SETTING%20PROJECT%20ATTRIBUTES" href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a> ++<li><a name="toc_COMPOSITING" href="#COMPOSITING">COMPOSITING</a> + <ul> + <li><a href="#THE%20CAMERA%20AND%20PROJECTOR">THE CAMERA AND PROJECTOR</a> + <li><a href="#MASKS">MASKS</a> +@@ -129,24 +121,21 @@ + <li><a href="#SAFE%20REGIONS">SAFE REGIONS</a> + <li><a href="#OVERLAY%20MODES">OVERLAY MODES</a> + <li><a href="#TRACK%20AND%20OUTPUT%20SIZES">TRACK AND OUTPUT SIZES</a> +-</ul> +-<li><a name="toc_KEYFRAMES"></a> +- <a href="#KEYFRAMES">KEYFRAMES</a> ++</li></ul> ++<li><a name="toc_KEYFRAMES" href="#KEYFRAMES">KEYFRAMES</a> + <ul> + <li><a href="#CURVE%20KEYFRAMES">CURVE KEYFRAMES</a> + <li><a href="#TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a> + <li><a href="#AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a> + <li><a href="#COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a> + <li><a href="#EDITING%20KEYFRAMES">EDITING KEYFRAMES</a> +-</ul> +-<li><a name="toc_CAPTURING%20MEDIA"></a> +- <a href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a> ++</li></ul> ++<li><a name="toc_CAPTURING%20MEDIA" href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a> + <ul> + <li><a href="#BATCHES">BATCHES</a> + <li><a href="#EDITING%20TUNER%20INFORMATION">EDITING TUNER INFORMATION</a> +-</ul> +-<li><a name="toc_IMPROVING%20PERFORMANCE"></a> +- <a href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++</li></ul> ++<li><a name="toc_IMPROVING%20PERFORMANCE" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <ul> + <li><a href="#DISABLING%20SWAP%20SPACE">DISABLING SWAP SPACE</a> + <li><a href="#ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a> +@@ -157,45 +146,45 @@ + <li><a href="#REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a> + <li><a href="#ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a> + <li><a href="#SPEEDING%20UP%20THE%20FILE%20SYSTEM">SPEEDING UP THE FILE SYSTEM</a> +-</ul> +-<li><a name="toc_EFFECT%20DESCRIPTIONS"></a> +- <a href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> ++</li></ul> ++<li><a name="toc_EFFECT%20DESCRIPTIONS" href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> + <ul> + <li><a href="#CHROMA%20KEY">CHROMA KEY</a> + <li><a href="#HISTOGRAM">HISTOGRAM</a> + <li><a href="#TIME%20AVERAGE">TIME AVERAGE</a> + <li><a href="#VIDEO%20SCOPE">VIDEO SCOPE</a> +-</ul> +-<li><a name="toc_PLUGIN%20AUTHORING"></a> +- <a href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++</li></ul> ++<li><a name="toc_PLUGIN%20AUTHORING" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <ul> + <li><a href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a> + <ul> + <li><a href="#THE%20PROCESSING%20OBJECT">THE PROCESSING OBJECT</a> + <li><a href="#THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a> + <li><a href="#THE%20USER%20INTERFACE%20OBJECT">THE USER INTERFACE OBJECT</a> +-</ul> ++</li></ul> + <li><a href="#REALTIME%20PLUGINS">REALTIME PLUGINS</a> + <li><a href="#NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a> + <li><a href="#AUDIO%20PLUGINS">AUDIO PLUGINS</a> + <li><a href="#VIDEO%20PLUGINS">VIDEO PLUGINS</a> + <li><a href="#TRANSITION%20PLUGINS">TRANSITION PLUGINS</a> + <li><a href="#PLUGIN%20GUI'S%20WHICH%20UPDATE%20DURING%20PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a> +-</ul> +-<li><a name="toc_RELEASE%20NOTES"></a> +- <a href="#RELEASE%20NOTES">RELEASE NOTES</a> +-</ul> ++</li></ul> ++<li><a name="toc_RELEASE%20NOTES" href="#RELEASE%20NOTES">RELEASE NOTES</a> ++</li></ul> ++</div> + ++<div class="node"> + <p><hr> + Node:<a name="ABOUT%20CINELERRA">ABOUT CINELERRA</a>, +-Next:<a rel=next accesskey=n href="#INSTALLATION">INSTALLATION</a>, +-Previous:<a rel=previous accesskey=p href="#Top">Top</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#INSTALLATION">INSTALLATION</a>, ++Previous:<a rel="previous" accesskey="p" href="#Top">Top</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>ABOUT CINELERRA</h2> ++<h2 class="chapter">ABOUT CINELERRA</h2> + +-<p>There are two types of moviegoers: producers who create new content, ++ <p>There are two types of moviegoers: producers who create new content, + going back over their content at future points for further refinement, + and consumers who want to acquire the content and watch it. Cinelerra + is not intended for consumers. Cinelerra has many features for +@@ -206,13 +195,13 @@ + for consumers like MainActor, Kino, or Moxy, which you should consider + before using Cinelerra. + +-<p>In 1996 our first editor came out: Broadcast 1.0. It was just a window ++ <p>In 1996 our first editor came out: Broadcast 1.0. It was just a window + with a waveform in it, it could cut and paste stereo audio waveforms on + a UNIX box, except unlike other audio editors it could handle files up + to 2 gigabytes with only 64 megs of RAM. That was a feature normally + only accessible to the highest end professional audio houses. + +-<p>In 1997 Broadcast 1.0 was replaced by Broadcast 2.0. This time the ++ <p>In 1997 Broadcast 1.0 was replaced by Broadcast 2.0. This time the + window had a menubar, patchbay, console, and transport control. + Broadcast 2.0 still only handled audio but this time it handled + unlimited tracks, and it could perform effects on audio and save the +@@ -222,7 +211,7 @@ + result instantly. Amazingly this real time tweeking is still + unavailable on most audio programs. + +-<p>But Broadcast 2.0 still didn't handle video and it wasn't very graceful ++ <p>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 +@@ -235,7 +224,7 @@ + disk. For a time it seemed as if the original dream of immersive movie + making for everyone regardless of income level had arrived. + +-<p>Later on Broadcast 2000 began to come short. Its audio and video was ++ <p>Later on Broadcast 2000 began to come short. Its audio and video was + graceful if you knew how to use it efficiently, but quality issues and + new user interface techniques were emerging. Broadcast 2000 kept the + audio interface from its ancestors, which didn't apply well to video. +@@ -251,24 +240,26 @@ + ground up, while supplementing that with the Broadcast audio + interface. As always, quality improvements would happen. + +-<ul> +-<li><a accesskey=1 href="#ABOUT%20THIS%20MANUAL">ABOUT THIS MANUAL</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#ABOUT%20THIS%20MANUAL">ABOUT THIS MANUAL</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="ABOUT%20THIS%20MANUAL">ABOUT THIS MANUAL</a>, +-Up:<a rel=up accesskey=u href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a> ++Up:<a rel="up" accesskey="u" href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a> + <br> ++</div> + +-<h3>ABOUT THIS MANUAL</h3> ++<h3 class="section">ABOUT THIS MANUAL</h3> + +-<p>After many years of searching for the perfect documentation format ++ <p>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. Documents written in Texinfo will be + readable as long as there's a C compiler. + +-<p>There are no screenshots in this manual. Screenshots become obsolete ++ <p>There are no screenshots in this manual. Screenshots become obsolete + quickly and as a result confuse the users. What looks one way in a + screenshot will always look different in the real program because the + real program and the manual are always evolving, never perfectly +@@ -277,244 +268,252 @@ + so you don't have to pay for it. That includes additional labor to + synchronize the manual with the software. + +-<p>In addition to telling you the basic editing features of Cinelerra this ++ <p>In addition to telling you the basic editing features of Cinelerra this + manual covers tricks that won't be described anywhere else. We're + going to try to come up with certain things you can do with Cinelerra + that you wouldn't think of on your own. + ++<div class="node"> + <p><hr> + Node:<a name="INSTALLATION">INSTALLATION</a>, +-Next:<a rel=next accesskey=n href="#CONFIGURATION">CONFIGURATION</a>, +-Previous:<a rel=previous accesskey=p href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#CONFIGURATION">CONFIGURATION</a>, ++Previous:<a rel="previous" accesskey="p" href="#ABOUT%20CINELERRA">ABOUT CINELERRA</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>INSTALLATION</h2> ++<h2 class="chapter">INSTALLATION</h2> + +-<p>The Cinelerra package contains Cinelerra, Mix2000, Mplex, and XMovie, ++ <p>The Cinelerra package contains Cinelerra, Mix2000, Mplex, and XMovie, + along with standalone libraries for various functions. All these + programs are useful and in most cases they're the only free programs + available for dealing with uncompressed, high resolution movies. + +-<p>All of these programs tie into the same code base. Updates in one area ++ <p>All of these programs tie into the same code base. Updates in one area + of the code base usually affect everything else so everything would + have to be downloaded again even if one thing changed. By including + everything in one package you can be instantly updated for movie making + after one download. + +-<p>The purpose of the various programs is as follows: ++ <p>The purpose of the various programs is as follows: + +-<ul> ++ <ul> + +-<li> ++ <li> + Cinelerra - capturing, editing and production of material + +-<li> ++ <li> + Mix2000 - higher resolution volume controller than the standard Linux + volume controls. + +-<li> ++ <li> + MPlex - Multiplexing of MPEG elementary streams. + +-<li> ++ <li> + XMovie - Standalone player for all the formats Cinelerra exports. + +-<li> ++ <li> + mpeg3toc - Utility for indexing and reading MPEG files. + +-</ul> ++ </ul> + +-<p>We try to include all the dependancies because of the difficulty in ++ <p>We try to include all the dependancies because of the difficulty in + tracking them down. Furthermore, the versions of some of the + dependancies Cinelerra requires differ from the versions other + utilities may require, making it impossible to coexist on the same + system without static inclusion. + +-<p>Cinelerra is best installed by downloading an RPM and running ++ <p>Cinelerra is best installed by downloading an RPM and running + +-<br><pre>rpm -U --force --nodeps hvirtual*.rpm +-</pre> ++<pre class="example"> rpm -U --force --nodeps hvirtual*.rpm ++ </pre> + +-<p>on a RedHat system. ++ <p>on a RedHat system. + +-<p>On systems which don't support RPM look for a utility called ++ <p>On systems which don't support RPM look for a utility called + <em>rpm2cpio</em>. Download a Cinelerra RPM and from the / + directory run + +-<br><pre>rpm2cpio hvirtual*.rpm | cpio -i --make-directories +-</pre> ++<pre class="example"> rpm2cpio hvirtual*.rpm | cpio -i --make-directories ++ </pre> + +-<p>It should be noted that the compiler used in building Cinelerra ++ <p>It should be noted that the compiler used in building Cinelerra + binaries is the free GNU compiler and although it can reorder + instructions for Pentium I and use some the of Pentium II branch + instructions it's 12 years behind most modern CPUs. You can try + different compilers and optimization flags by compiling the source. + +-<p>Compiling the source is hard and there's no warranty if the source code ++ <p>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. + +-<br><pre>tar jxf hvirtual*.tar.bz2 +-</pre> ++<pre class="example"> tar jxf hvirtual*.tar.bz2 ++ </pre> + +-<p>Enter the hvirtual directory ++ <p>Enter the hvirtual directory + +-<br><pre>cd hvirtual +-</pre> ++<pre class="example"> cd hvirtual ++ </pre> + +-<p>and set some environment variables. For Pentium II use: ++ <p>and set some environment variables. For Pentium II use: + +-<br><pre>export CFLAGS='-O3 -march=i686 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -I/usr/local/include' +-</pre> ++<pre class="example"> export CFLAGS='-O3 -march=i686 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -I/usr/local/include' ++ </pre> + +-<p>For Pentium I and old AMD's use: ++ <p>For Pentium I and old AMD's use: + +-<br><pre>export CFLAGS='-O3 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -I/usr/local/include' +-</pre> ++<pre class="example"> export CFLAGS='-O3 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -I/usr/local/include' ++ </pre> + +-<p>Then run ++ <p>Then run + +-<br><pre>make +-</pre> ++<pre class="example"> make ++ </pre> + +-<p>The make procedure should run through all the directories and put ++ <p>The make procedure should run through all the directories and put + binaries in the <em>i686</em> directories. When we originally supported + Alpha it was convenient to compile Alpha and i686 binaries + simultaneously, in different directories so all the binaries are put in + i686 directories. + +-<p>Once finished run ++ <p>Once finished run + +-<br><pre>make install +-</pre> ++<pre class="example"> make install ++ </pre> + +-<p>to install the binaries. The output is put in the following directories: ++ <p>to install the binaries. The output is put in the following directories: + +-<ul> ++ <ul> + <li>Executables ->/usr/bin + <li>Plugins ->/usr/lib/cinelerra + </ul> + +-<p>The main binaries are the Cinelerra, XMovie, Mix2000 executables and ++ <p>The main binaries are the Cinelerra, XMovie, Mix2000 executables and + several utilities for reading MPEG transport streams. + +-<p>Run Cinelerra by running ++ <p>Run Cinelerra by running + +-<br><pre>/usr/bin/cinelerra +-</pre> ++<pre class="example"> /usr/bin/cinelerra ++ </pre> + ++<div class="node"> + <p><hr> + Node:<a name="CONFIGURATION">CONFIGURATION</a>, +-Next:<a rel=next accesskey=n href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a>, +-Previous:<a rel=previous accesskey=p href="#INSTALLATION">INSTALLATION</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a>, ++Previous:<a rel="previous" accesskey="p" href="#INSTALLATION">INSTALLATION</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>CONFIGURATION</h2> ++<h2 class="chapter">CONFIGURATION</h2> + +-<p>Because of the variety of uses, Cinelerra cannot be run optimally ++ <p>Because of the variety of uses, Cinelerra cannot be run optimally + without some intimate configuration for your specific needs. Very few + parameters are adjustible at compile time. Runtime configuration is + the only option for most configuration because of the multitude of + parameters. + +-<p>Go to <em>settings->preferences</em> and run through the options. ++ <p>Go to <em>settings->preferences</em> and run through the options. + +-<ul> +-<li><a accesskey=1 href="#PLAYBACK">PLAYBACK</a>: +-<li><a accesskey=2 href="#RECORDING">RECORDING</a>: +-<li><a accesskey=3 href="#PERFORMANCE">PERFORMANCE</a>: +-<li><a accesskey=4 href="#INTERFACE">INTERFACE</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#PLAYBACK">PLAYBACK</a>: ++<li><a accesskey="2" href="#RECORDING">RECORDING</a>: ++<li><a accesskey="3" href="#PERFORMANCE">PERFORMANCE</a>: ++<li><a accesskey="4" href="#INTERFACE">INTERFACE</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="PLAYBACK">PLAYBACK</a>, +-Next:<a rel=next accesskey=n href="#RECORDING">RECORDING</a>, +-Up:<a rel=up accesskey=u href="#CONFIGURATION">CONFIGURATION</a> ++Next:<a rel="next" accesskey="n" href="#RECORDING">RECORDING</a>, ++Up:<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a> + <br> ++</div> + +-<h3>PLAYBACK</h3> ++<h3 class="section">PLAYBACK</h3> + +-<ul> +-<li><a accesskey=1 href="#AUDIO%20OUT">AUDIO OUT</a>: +-<li><a accesskey=2 href="#VIDEO%20OUT">VIDEO OUT</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#AUDIO%20OUT">AUDIO OUT</a>: ++<li><a accesskey="2" href="#VIDEO%20OUT">VIDEO OUT</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="AUDIO%20OUT">AUDIO OUT</a>, +-Next:<a rel=next accesskey=n href="#VIDEO%20OUT">VIDEO OUT</a>, +-Up:<a rel=up accesskey=u href="#PLAYBACK">PLAYBACK</a> ++Next:<a rel="next" accesskey="n" href="#VIDEO%20OUT">VIDEO OUT</a>, ++Up:<a rel="up" accesskey="u" href="#PLAYBACK">PLAYBACK</a> + <br> ++</div> + +-<h4>AUDIO OUT</h4> ++<h4 class="subsection">AUDIO OUT</h4> + +-<p>These determine what happens when you play sound from the timeline. ++ <p>These determine what happens when you play sound from the timeline. + +-<ul> ++ <ul> + +-<li>SAMPLES TO READ FROM DISK ++ <li>SAMPLES TO READ FROM DISK + +-<p>Cinelerra uses a pipeline for rendering audio. The first stage is ++ <p>Cinelerra uses a pipeline for rendering audio. The first stage is + reading large chunks of audio from disk, the samples to read from + disk. This is followed by processing small fragments in a virtual + console. + +-</p><li>SAMPLES TO SEND TO CONSOLE: ++ </p><li>SAMPLES TO SEND TO CONSOLE: + +-<p>The second stage is rendering small fragments through the virtual ++ <p>The second stage is rendering small fragments through the virtual + console to the sound driver. A larger value here causes more latency + when you change mixing parameters but gives more reliable playback. + +-<p>Some sound drivers don't allow changing of the console fragment so ++ <p>Some sound drivers don't allow changing of the console fragment so + latency is unchanged no matter what this value is. + +-</p><li> ++ </p><li> + VIEW FOLLOWS PLAYBACK + +-<p>Causes the timeline window to scroll when the playback cursor moves out ++ <p>Causes the timeline window to scroll when the playback cursor moves out + of view. This can bog down the X Server. + +-</p><li>USE SOFTWARE FOR POSITIONING INFORMATION ++ </p><li>USE SOFTWARE FOR POSITIONING INFORMATION + +-<p>Most soundcards and sound drivers don't give reliable information on ++ <p>Most soundcards and sound drivers don't give reliable information on + the number of samples the card has played. When playing video you need + this information for synchronization. This option causes the sound + driver to be ignored and a software timer to be used for + synchronization. + +-</p><li>AUDIO PLAYBACK IN REALTIME: ++ </p><li>AUDIO PLAYBACK IN REALTIME: + +-<p>Back in the days when 150Mhz was the maximum, this allowed ++ <p>Back in the days when 150Mhz was the maximum, this allowed + uninterrupted playback on heavy loads. Now you'll probably only need it + for playing video and audio when the load is to high for uninterrupted + audio. + +-</p><li>AUDIO DRIVER ++ </p><li>AUDIO DRIVER + +-<p>There are many sound drivers for Linux. This allows selecting one and ++ <p>There are many sound drivers for Linux. This allows selecting one and + setting parameters specific to it. Some of the common parameters for a + sound driver are + +-<ul> ++ <ul> + +-<li>DEVICE PATH ++ <li>DEVICE PATH + +-<p>Usually a file in the <em>/dev/</em> directory which controls the ++ <p>Usually a file in the <em>/dev/</em> directory which controls the + device. + +-</p><li> ++ </p><li> + BITS + +-<p>The number of bits of precision Cinelerra should set the device for. ++ <p>The number of bits of precision Cinelerra should set the device for. + This sometimes has a figuritive meaning. Some sound drivers need to be + set to 32 bits to perform 24 bit playback and won't play anything when + set to 24 bits. Some sound drivers need to be set to 24 bits for 24 + bit playback. + +-</p><li> ++ </p><li> + CHANNELS + +-<p>The number of channels Cinelerra should set the device for. Regardless ++ <p>The number of channels Cinelerra should set the device for. Regardless + of the number of channels in the project, the number of channels set + here will be written to the device. When this is set to 2 and the + project has 1 channel you'll hear sound through the left speaker and +@@ -522,184 +521,190 @@ + and the project has 2 channels you'll hear the left channel centered + and not 2 channels mixed together. + +-</ul> +-</ul> ++ </ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="VIDEO%20OUT">VIDEO OUT</a>, +-Previous:<a rel=previous accesskey=p href="#AUDIO%20OUT">AUDIO OUT</a>, +-Up:<a rel=up accesskey=u href="#PLAYBACK">PLAYBACK</a> ++Previous:<a rel="previous" accesskey="p" href="#AUDIO%20OUT">AUDIO OUT</a>, ++Up:<a rel="up" accesskey="u" href="#PLAYBACK">PLAYBACK</a> + <br> ++</div> + +-<h4>VIDEO OUT</h4> ++<h4 class="subsection">VIDEO OUT</h4> + +-<p>These determine what happens when you play video from the timeline. ++ <p>These determine what happens when you play video from the timeline. + +-<ul> ++ <ul> + +-<li> ++ <li> + FRAMERATE ACHIEVED + +-<p>The number of frames per second being ++ <p>The number of frames per second being + displayed during playback. + +-</p><li> ++ </p><li> + SCALING EQUATION + +-<p>The algorithm used in all video resizing in ++ <p>The algorithm used in all video resizing in + the virtual console. This doesn't affect scaling to the size of the + compositor window. + +-<ul> ++ <ul> + +-<li>NEAREST NEIGHBOR ENLARGE AND REDUCE ++ <li>NEAREST NEIGHBOR ENLARGE AND REDUCE + +-<p>lowest but fastest ++ <p>lowest but fastest + quality. Produces jagged edges and uneven motion. + +-</p><li> ++ </p><li> + BICUBIC ENLARGE AND BILINEAR REDUCE + +-<p>highest but slowest ++ <p>highest but slowest + quality. For enlarging a bicubic interpolation is used, which blurs + slightly but doesn't reveal stair steps. For reduction a bilinear + 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. + +-</p><li> ++ </p><li> + BILINEAR ENLARGE AND BILINEAR REDUCE + +-<p>when slight enlargement ++ <p>when slight enlargement + is needed a bilinear enlargement looks better than a bicubic + enlargement. + +-</ul> ++ </ul> + +-</p><li> ++ </p><li> + PRELOAD BUFFER FOR QUICKTIME + +-<p>The Quicktime/AVI decoder can ++ <p>The Quicktime/AVI decoder can + handle CDROM sources better when this is around 1000000. This reduces + the amount of seeking. For normal use this should be 0. + +-</p><li> ++ </p><li> + MPEG-4 DEBLOCKING + +-<p>For assets which are compressed in OpenDivx and Quicktime, this enables ++ <p>For assets which are compressed in OpenDivx and Quicktime, this enables + deblocking. This greatly improves the picture quality during decoding + while slowing it down. + +-</p><li> ++ </p><li> + VIDEO DRIVER + +-<p>Normally video on the timeline goes to the ++ <p>Normally video on the timeline goes to the + compositor window during continuous playback and when the insertion + point is repositioned. Instead of sending video to the Compositor + window the video driver can be set to send video to another output + device during continuous playback. This doesn't affect where video + goes when the insertion point is repositioned, however. + +-<p>Various parameters are given for Video Driver depending on the driver. ++ <p>Various parameters are given for Video Driver depending on the driver. + +-<ul> ++ <ul> + +-<li> ++ <li> + DISPLAY + +-<p>The is intended for dual monitor ++ <p>The is intended for dual monitor + displays. Depending on the value of Display, the Compositor window + will appear on a different monitor from the rest of the windows. + +-</p><li> ++ </p><li> + DEVICE PATH + +-<p>Usually a file in the <em>/dev/</em> directory ++ <p>Usually a file in the <em>/dev/</em> directory + which controls the device. + +-</p><li> ++ </p><li> + SWAP FIELDS + +-<p>Make the even lines odd and the odd lines even ++ <p>Make the even lines odd and the odd lines even + when sending to the device. On an NTSC or 1080i monitor the fields may + need to be swapped to prevent jittery motion. + +-</p><li> ++ </p><li> + OUTPUT CHANNEL + +-<p>Devices with multiple outputs may need a ++ <p>Devices with multiple outputs may need a + specific connector to send video on. + +-</p><li> ++ </p><li> + PORT + +-<p>The IEEE1394 standard specifies something known as the ++ <p>The IEEE1394 standard specifies something known as the + <em>port</em>. This is probably the firewire card number in the system + to use. + +-</p><li> ++ </p><li> + CHANNEL + +-<p>The IEEE1394 standard specifies something known as the ++ <p>The IEEE1394 standard specifies something known as the + <em>channel</em>. For DV cameras it's always <em>63</em>. + +-</ul> ++ </ul> + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="RECORDING">RECORDING</a>, +-Next:<a rel=next accesskey=n href="#PERFORMANCE">PERFORMANCE</a>, +-Previous:<a rel=previous accesskey=p href="#PLAYBACK">PLAYBACK</a>, +-Up:<a rel=up accesskey=u href="#CONFIGURATION">CONFIGURATION</a> ++Next:<a rel="next" accesskey="n" href="#PERFORMANCE">PERFORMANCE</a>, ++Previous:<a rel="previous" accesskey="p" href="#PLAYBACK">PLAYBACK</a>, ++Up:<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a> + <br> ++</div> + +-<h3>RECORDING</h3> ++<h3 class="section">RECORDING</h3> + +-<ul> +-<li><a accesskey=1 href="#AUDIO%20IN">AUDIO IN</a>: +-<li><a accesskey=2 href="#VIDEO%20IN">VIDEO IN</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#AUDIO%20IN">AUDIO IN</a>: ++<li><a accesskey="2" href="#VIDEO%20IN">VIDEO IN</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="AUDIO%20IN">AUDIO IN</a>, +-Next:<a rel=next accesskey=n href="#VIDEO%20IN">VIDEO IN</a>, +-Up:<a rel=up accesskey=u href="#RECORDING">RECORDING</a> ++Next:<a rel="next" accesskey="n" href="#VIDEO%20IN">VIDEO IN</a>, ++Up:<a rel="up" accesskey="u" href="#RECORDING">RECORDING</a> + <br> ++</div> + +-<h4>AUDIO IN</h4> ++<h4 class="subsection">AUDIO IN</h4> + +-<p>These determine what happens when you record audio. ++ <p>These determine what happens when you record audio. + +-<ul> ++ <ul> + <li> + RECORD DRIVER + +-<p>This is used for recording audio in the Record window. It may be ++ <p>This is used for recording audio in the Record window. It may be + shared with the Record Driver for video if the audio and video are + wrapped in the same stream. It takes variable parameters depending on + the driver. The parameters have the same meaning as they do for + playback. + +-<ul> ++ <ul> + <li> + DEVICE PATH + +-<p>Usually a file in the <em>/dev/</em> directory which controls the ++ <p>Usually a file in the <em>/dev/</em> directory which controls the + device. + +-</p><li> ++ </p><li> + BITS + +-<p>The number of bits of precision Cinelerra should set the device for. ++ <p>The number of bits of precision Cinelerra should set the device for. + This sometimes has a figuritive meaning. Some sound drivers need to be + set to 32 bits to perform 24 bit recording and won't record anything + when set to 24 bits. Some sound drivers need to be set to 24 bits for + 24 bit recording. + +-</p><li>CHANNELS ++ </p><li>CHANNELS + +-<p>The number of channels Cinelerra should set the device for. Regardless ++ <p>The number of channels Cinelerra should set the device for. Regardless + of the number of channels in the record operation, the number of + channels set here will be read from the device. When this is set to 2 + and the record operation has 1 channel you'll record the left speaker +@@ -708,120 +713,124 @@ + record the left and right channels mixed into the left speaker and not + 1 channel spead across two speakers. + +-</ul> ++ </ul> + +-</p><li> ++ </p><li> + SAMPLES TO WRITE AT A TIME + +-<p>Audio is first read in small fragments from the device. Many small ++ <p>Audio is first read in small fragments from the device. Many small + fragments are combined into a large fragment before writing to disk. + The disk writing process is done in a different thread. The value here + determines how large the combination of fragments is for each disk + write. + +-</p><li> ++ </p><li> + SAMPLE RATE FOR RECORDING + +-<p>Regardless of what the project settings are. This is the sample rate ++ <p>Regardless of what the project settings are. This is the sample rate + used for recording. This should be the highest the audio device + supports. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="VIDEO%20IN">VIDEO IN</a>, +-Previous:<a rel=previous accesskey=p href="#AUDIO%20IN">AUDIO IN</a>, +-Up:<a rel=up accesskey=u href="#RECORDING">RECORDING</a> ++Previous:<a rel="previous" accesskey="p" href="#AUDIO%20IN">AUDIO IN</a>, ++Up:<a rel="up" accesskey="u" href="#RECORDING">RECORDING</a> + <br> ++</div> + +-<h4>VIDEO IN</h4> ++<h4 class="subsection">VIDEO IN</h4> + +-<p>These determine what happens when you record video. ++ <p>These determine what happens when you record video. + +-<ul> ++ <ul> + <li> + RECORD DRIVER + +-<p>This is used for recording video in the Record window. It may be ++ <p>This is used for recording video in the Record window. It may be + shared with the Record Driver for audio if the audio and video are + wrapped in the same stream. It takes variable parameters depending on + the driver. The parameters have the same meaning as they do for + playback. + +-</p><li> ++ </p><li> + FRAMES TO RECORD TO DISK AT A TIME + +-<p>Frames are recorded in a pipeline. First frames are buffered in the ++ <p>Frames are recorded in a pipeline. First frames are buffered in the + device. Then they're read into a larger buffer for writing to disk. + 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. + +-</p><li> ++ </p><li> + FRAMES TO BUFFER IN DEVICE + +-<p>The number of frames to store in the device before reading. This ++ <p>The number of frames to store in the device before reading. This + determines how much latency there can be in the system before frames + are dropped. + +-</p><li>USE SOFTWARE FOR POSITIONING INFORMATION ++ </p><li>USE SOFTWARE FOR POSITIONING INFORMATION + +-<p>Video uses audio for ++ <p>Video uses audio for + +-<p>synchronization but most soundcards don't give accurate position ++ <p>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. + +-</p><li> ++ </p><li> + SYNC DRIVES AUTOMATICALLY + +-<p>For high bitrate recording the drives may be fast enough to store the ++ <p>For high bitrate recording the drives may be fast enough to store the + data but Linux may wait several minutes and stall as it writes several + minutes of data at a time. This forces Linux to flush its buffers + every second instead of every few minutes and produce slightly better + realtime behavior. + +-</p><li> ++ </p><li> + SIZE OF CAPTURED FRAME + +-<p>This is the size of the frames recorded. It is independant of the ++ <p>This is the size of the frames recorded. It is independant of the + project frame size because most video devices only record a fixed frame + size. If the frame size given here isn't supported by the device it + might crash Cinelerra. + +-</p><li>FRAME RATE FOR RECORDING ++ </p><li>FRAME RATE FOR RECORDING + +-<p>The frame rate recorded is different from the project settings. This ++ <p>The frame rate recorded is different from the project settings. This + sets the recorded frame rate. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="PERFORMANCE">PERFORMANCE</a>, +-Next:<a rel=next accesskey=n href="#INTERFACE">INTERFACE</a>, +-Previous:<a rel=previous accesskey=p href="#RECORDING">RECORDING</a>, +-Up:<a rel=up accesskey=u href="#CONFIGURATION">CONFIGURATION</a> ++Next:<a rel="next" accesskey="n" href="#INTERFACE">INTERFACE</a>, ++Previous:<a rel="previous" accesskey="p" href="#RECORDING">RECORDING</a>, ++Up:<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a> + <br> ++</div> + +-<h3>PERFORMANCE</h3> ++<h3 class="section">PERFORMANCE</h3> + +-<p>You'll spend most of your time configuring this section. The main ++ <p>You'll spend most of your time configuring this section. The main + focus of performance is rendering parameters not available in the + rendering dialog. + +-<ul> ++ <ul> + +-<li>CACHE ITEMS ++ <li>CACHE ITEMS + +-<p>To speed up rendering, several assets are kept open simultaneously. ++ <p>To speed up rendering, several assets are kept open simultaneously. + This determines how many are kept open. A number too large may exhaust + your memory pretty fast and result in a crash. A number too small may + result in slow playback as assets need to be reopened more frequently. + +-</p><li> ++ </p><li> + SECONDS TO PREROLL RENDERS + +-<p>Some effects need a certain amount of time to settle in. This sets a ++ <p>Some effects need a certain amount of time to settle in. This sets a + number of seconds to render without writing to disk before the selected + region is rendered. When using the renderfarm you'll sometimes need to + preroll to get seemless transitions between the jobs. Every job in a +@@ -829,32 +838,34 @@ + rendering, however. Background rendering uses a different preroll + value. + +-</p><li> ++ </p><li> + FORCE SINGLE PROCESSOR USE + +-<p>Cinelerra tries to use all processors on the system by default but ++ <p>Cinelerra tries to use all processors on the system by default but + sometimes you'll only want to use one processor, like in a renderfarm + 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. + +-</ul> ++ </ul> + +-<ul> +-<li><a accesskey=1 href="#BACKGROUND%20RENDERING">BACKGROUND RENDERING</a>: +-<li><a accesskey=2 href="#RENDERFARM">RENDERFARM</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#BACKGROUND%20RENDERING">BACKGROUND RENDERING</a>: ++<li><a accesskey="2" href="#RENDERFARM">RENDERFARM</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="BACKGROUND%20RENDERING">BACKGROUND RENDERING</a>, +-Next:<a rel=next accesskey=n href="#RENDERFARM">RENDERFARM</a>, +-Up:<a rel=up accesskey=u href="#PERFORMANCE">PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#RENDERFARM">RENDERFARM</a>, ++Up:<a rel="up" accesskey="u" href="#PERFORMANCE">PERFORMANCE</a> + <br> ++</div> + +-<h4>BACKGROUND RENDERING</h4> ++<h4 class="subsection">BACKGROUND RENDERING</h4> + +-<p>Background rendering was originally concieved to allow HDTV effects to ++ <p>Background rendering was originally concieved to allow HDTV effects to + be displayed in realtime. Background rendering causes temporary output + to constantly be rendered while the timeline is being modified. The + temporary output is played during playack whenever possible. It's very +@@ -863,26 +874,26 @@ + renderfarm is used for background rendering, giving you the potential + for realtime effects if enough network bandwidth and CPU nodes exist. + +-<ul> ++ <ul> + +-<li>FRAMES PER BACKGROUND RENDERING JOB ++ <li>FRAMES PER BACKGROUND RENDERING JOB + +-<p>This only works if renderfarm is being used, otherwise background ++ <p>This only works if renderfarm is being used, otherwise background + rendering creates a single job for the entire timeline. The number of + frames specified here is scaled to the relative CPU speed of rendering + nodes and used in a single renderfarm job. The optimum number is 10 - + 30 since network bandwidth is used to initialize each job. + +-</p><li>FRAMES TO PREROLL BACKGROUND ++ </p><li>FRAMES TO PREROLL BACKGROUND + +-<p>This is the number of frames to render ahead of each background ++ <p>This is the number of frames to render ahead of each background + rendering job. Background rendering is degraded when preroll is used + since the jobs are small. When using background rendering, this number + is ideally 0. Some effects may require 3 frames of preroll. + +-</p><li>OUTPUT FOR BACKGROUND RENDERING ++ </p><li>OUTPUT FOR BACKGROUND RENDERING + +-<p>Background rendering generates a sequence of image files in a certain ++ <p>Background rendering generates a sequence of image files in a certain + directory. This parameter determines the filename prefix of the image + files. It should be on a fast disk, accessible to every node in the + renderfarm by the same path. Since hundreds of thousands of image +@@ -891,317 +902,329 @@ + this option normally won't work either, but the <img src="wrench.png" alt="wrench.png"> + configuration button for this option works. + +-</p><li>FILE FORMAT ++ </p><li>FILE FORMAT + +-<p>The file format for background rendering has to be a sequence of ++ <p>The file format for background rendering has to be a sequence of + images. The format of the image sequence determines the quality and + speed of playback. JPEG is good most of the time. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="RENDERFARM">RENDERFARM</a>, +-Previous:<a rel=previous accesskey=p href="#BACKGROUND%20RENDERING">BACKGROUND RENDERING</a>, +-Up:<a rel=up accesskey=u href="#PERFORMANCE">PERFORMANCE</a> ++Previous:<a rel="previous" accesskey="p" href="#BACKGROUND%20RENDERING">BACKGROUND RENDERING</a>, ++Up:<a rel="up" accesskey="u" href="#PERFORMANCE">PERFORMANCE</a> + <br> ++</div> + +-<h4>RENDERFARM</h4> ++<h4 class="subsection">RENDERFARM</h4> + +-<p>To use the renderfarm set these options. Ignore them for a standalone ++ <p>To use the renderfarm set these options. Ignore them for a standalone + system + +-<ul> ++ <ul> + +-<li> ++ <li> + USE RENDER FARM FOR RENDERING + +-<p>When selected, all the ++ <p>When selected, all the + <em>file->render</em> operations use the renderfarm. + +-</p><li> ++ </p><li> + NODES + +-<p>Displays all the nodes on the renderfarm and which ones are active. ++ <p>Displays all the nodes on the renderfarm and which ones are active. + +-<p>Nodes are added by entering the host name of the node, verifying the ++ <p>Nodes are added by entering the host name of the node, verifying the + value of <em>port</em> and hitting <em>add node</em>. + +-<p>Computer freaks may be better off editing the ++ <p>Computer freaks may be better off editing the + <em>~/.bcast/.Cinelerra_rc</em> file than this if they have hundreds of + nodes. Remember that .Cinelerra_rc is overwritten whenever a copy of + Cinelerra exits. + +-<p>Select the <em>ON</em> column to activate and deactivate nodes once they ++ <p>Select the <em>ON</em> column to activate and deactivate nodes once they + are created. + +-<p>Nodes may be edited by highlighting a row and hitting <em>replace ++ <p>Nodes may be edited by highlighting a row and hitting <em>replace + node</em>. + +-</p><li> ++ </p><li> + HOSTNAME + +-<p>Edit the hostname of an existing node or enter the hostname of a new ++ <p>Edit the hostname of an existing node or enter the hostname of a new + node here. + +-</p><li> ++ </p><li> + PORT + +-<p>Edit the port of an existing node or enter the port of a new node here. ++ <p>Edit the port of an existing node or enter the port of a new node here. + +-</p><li> ++ </p><li> + REPLACE NODE + +-<p>When editing an existing node, hit this to commit the changes to ++ <p>When editing an existing node, hit this to commit the changes to + <em>HOSTNAME</em> and <em>PORT</em>. The changes won't be committed if you + don't hit this button. + +-</p><li> ++ </p><li> + ADD NODE + +-<p>Create a new node with the <em>HOSTNAME</em> and <em>PORT</em> settings. ++ <p>Create a new node with the <em>HOSTNAME</em> and <em>PORT</em> settings. + +-</p><li> ++ </p><li> + DELETE NODE + +-<p>Deletes whatever node is highlighted in the <em>NODES</em> list. ++ <p>Deletes whatever node is highlighted in the <em>NODES</em> list. + +-</p><li> ++ </p><li> + SORT NODES + +-<p>Sorts the <em>NODES</em> list based on the hostname. ++ <p>Sorts the <em>NODES</em> list based on the hostname. + +-</p><li> ++ </p><li> + RESET RATES + +-<p>This sets the framerate for all the nodes to 0. Frame rates are used ++ <p>This sets the framerate for all the nodes to 0. Frame rates are used + to scale job sizes based on CPU speed of the node. Frame rates are + only calculated when renderfarm is enabled. + +-</p><li> ++ </p><li> + FILESYSTEM PREFIX ON REMOTE NODES + +-<p>Sets the relative location of all the assets on the nodes. If the ++ <p>Sets the relative location of all the assets on the nodes. If the + assets are in <em>/mov</em> on the master and the master filesystem is + mounted under <em>/mnt</em> on the nodes, the filesystem prefix should be + <em>/mnt</em>. Ideally the assets should appear under the same directory + on the nodes as the master. In this case the filesystem prefix can be + <em>/</em>. + +-<p>You don't have to mount a shared filesystem on remote nodes. If the ++ <p>You don't have to mount a shared filesystem on remote nodes. If the + shared filesystem is replicated somewhere on the slave node's hard + drive, Cinelerra will read all the assets from the node's hard drive + and write the output to the node's hard drive, and you won't need a + very fast network. This is much more difficult to pull off but it's an + option for really slow networks. + +-<p>You don't have to specify a file on the master node's filesystem as the ++ <p>You don't have to specify a file on the master node's filesystem as the + output file. If the output file is specified in some other directory + on the slave node hard drive Cinelerra will read assets from the master + filesystem but write to the node's hard drive. Thus you have a way of + rendering across an asymetric network. + +-</p><li> ++ </p><li> + TOTAL JOBS TO CREATE + +-<p>Determines the number of jobs to dispatch to the renderfarm. The more ++ <p>Determines the number of jobs to dispatch to the renderfarm. The more + jobs you create, the more finely balanced the renderfarm becomes. + +-<p>Determine the total jobs to create by multiplying the number of nodes ++ <p>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. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="INTERFACE">INTERFACE</a>, +-Previous:<a rel=previous accesskey=p href="#PERFORMANCE">PERFORMANCE</a>, +-Up:<a rel=up accesskey=u href="#CONFIGURATION">CONFIGURATION</a> ++Previous:<a rel="previous" accesskey="p" href="#PERFORMANCE">PERFORMANCE</a>, ++Up:<a rel="up" accesskey="u" href="#CONFIGURATION">CONFIGURATION</a> + <br> ++</div> + +-<h3>INTERFACE</h3> ++<h3 class="section">INTERFACE</h3> + +-<p>These parameters affect purely how the user interface works. ++ <p>These parameters affect purely how the user interface works. + +-<ul> ++ <ul> + +-<li> ++ <li> + INDEX FILES GO HERE + +-<p>Back in the days when 4 MB/sec was unearthly speed for a hard drive, ++ <p>Back in the days when 4 MB/sec was unearthly speed for a hard drive, + index files were introduced to speed up drawing the audio tracks. This + option determines where index files are placed on the hard drive. + +-</p><li> ++ </p><li> + SIZE OF INDEX FILE + +-<p>Determines the size of an index file. Larger index sizes allow smaller ++ <p>Determines the size of an index file. Larger index sizes allow smaller + files to be drawn faster while slowing down the drawing of large files. + Smaller index sizes allow large files to be drawn faster while slowing + down small files. + +-</p><li> ++ </p><li> + NUMBER OF INDEX FILES TO KEEP + +-<p>To keep the index directory from becoming unruly, old index files are ++ <p>To keep the index directory from becoming unruly, old index files are + deleted. This determines the maximum number of index files to keep in + the directory. + +-</p><li> ++ </p><li> + DELETE ALL INDEXES + +-<p>When you change the index size or you want to clean out excessive index ++ <p>When you change the index size or you want to clean out excessive index + files, this deletes all the index files. + +-</p><li>USE HOURS:MINUTES:SECONDS.XXX ++ </p><li>USE HOURS:MINUTES:SECONDS.XXX + +-<p>Various representations of time are given. Select the most convenient ++ <p>Various representations of time are given. Select the most convenient + one. The time representation can also be changed by <em>CTRL</em> + clicking on the time ruler. + +-</p><li>USE THUMBNAILS ++ </p><li>USE THUMBNAILS + +-<p>The Resource Window displays thumbnails of assets by default. This can ++ <p>The Resource Window displays thumbnails of assets by default. This can + take a long time to set up. This option disables the thumbnails. + +-</p><li>CLICKING IN/OUT POINTS DOES WHAT ++ </p><li>CLICKING IN/OUT POINTS DOES WHAT + +-<p>Cinelerra not only allows you to perform editing by dragging in/out ++ <p>Cinelerra not only allows you to perform editing by dragging in/out + points but also defines three seperate operations which occur when you + drag an in/out point. For each mouse button you select the behavior in + this window. The usage of each editing mode is described in editing. + +-</p><li>MIN DB FOR METER ++ </p><li>MIN DB FOR METER + +-<p>Some sound sources have a lower noise threshold than others. ++ <p>Some sound sources have a lower noise threshold than others. + Everything below the noise threshold is meaningless. This option sets + the meters to clip below a certain level. Consumer soundcards usually + bottom out at -65. Professional soundcards bottom out at -90. + +-</p><li>FORMAT FOR METER ++ </p><li>FORMAT FOR METER + +-<p>This option allows you to select the format for all the VU meters. If ++ <p>This option allows you to select the format for all the VU meters. If + you're a CS major select percentage and if you're a EE major select DB. + With that, be aware all levels in Cinelerra are input as DB. + +-</p><li>THEME ++ </p><li>THEME + +-<p>Cinelerra supports variable themes. Select one here and restart ++ <p>Cinelerra supports variable themes. Select one here and restart + Cinelerra to see it. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a>, +-Next:<a rel=next accesskey=n href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a>, +-Previous:<a rel=previous accesskey=p href="#CONFIGURATION">CONFIGURATION</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a>, ++Previous:<a rel="previous" accesskey="p" href="#CONFIGURATION">CONFIGURATION</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>THE MAIN WINDOWS</h2> ++<h2 class="chapter">THE MAIN WINDOWS</h2> + +-<p>When Cinelerra first starts, you'll get four main windows. Hitting ++ <p>When Cinelerra first starts, you'll get four main windows. Hitting + <em>CTRL-w</em> in any window closes it. + +-<ul> ++ <ul> + +-<li>Viewer ++ <li>Viewer + +-<p>In here you'll scrub around source media and clips, selecting regions ++ <p>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. + +-</p><li>Compositor ++ </p><li>Compositor + +-<p>This window displays the output of the timeline. It's the interface ++ <p>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. + +-</p><li>Program ++ </p><li>Program + +-<p>This contains the timeline and the entry point for all menu driven ++ <p>This contains the timeline and the entry point for all menu driven + operations. The timeline consists of a vertical stack of tracks with + horizontal representation of time. This defines the output of + rendering operations and what is saved when you save files. + +-</p><li>Resources ++ </p><li>Resources + +-<p>Effects, transitions, clips, and assets are accessed here. Most of the ++ <p>Effects, transitions, clips, and assets are accessed here. Most of the + resources are inserted into the project by dragging them out of the + resource window. Management of resource allocation is also performed + here. + +-</ul> ++ </ul> + +-<p>Under the <em>Window</em> menu you'll find options affecting the main ++ <p>Under the <em>Window</em> menu you'll find options affecting the main + windows. <em>default positions</em> repositions all the windows to a 4 + screen editing configuration. On dual headed displays, the + <em>default positions</em> operation fills only one monitor with windows. + +-<p>An additional window, the <em>levels window</em> can be brought up from ++ <p>An additional window, the <em>levels window</em> can be brought up from + the <em>Window</em> menu. The <em>levels</em> window displays the output + audio levels after all mixing is done. + ++<div class="node"> + <p><hr> + Node:<a name="LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a>, +-Next:<a rel=next accesskey=n href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>, +-Previous:<a rel=previous accesskey=p href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>, ++Previous:<a rel="previous" accesskey="p" href="#THE%20MAIN%20WINDOWS">THE MAIN WINDOWS</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>LOADING AND SAVING FILES</h2> ++<h2 class="chapter">LOADING AND SAVING FILES</h2> + +-<ul> +-<li><a accesskey=1 href="#LOADING%20FILES">LOADING FILES</a>: +-<li><a accesskey=2 href="#LOADING%20THE%20BACKUP">LOADING THE BACKUP</a>: +-<li><a accesskey=3 href="#SAVING%20FILES">SAVING FILES</a>: +-<li><a accesskey=4 href="#RENDERING%20FILES">RENDERING FILES</a>: +-<li><a accesskey=5 href="#THE%20RENDER%20FARM">THE RENDER FARM</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#LOADING%20FILES">LOADING FILES</a>: ++<li><a accesskey="2" href="#LOADING%20THE%20BACKUP">LOADING THE BACKUP</a>: ++<li><a accesskey="3" href="#SAVING%20FILES">SAVING FILES</a>: ++<li><a accesskey="4" href="#RENDERING%20FILES">RENDERING FILES</a>: ++<li><a accesskey="5" href="#THE%20RENDER%20FARM">THE RENDER FARM</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="LOADING%20FILES">LOADING FILES</a>, +-Next:<a rel=next accesskey=n href="#LOADING%20THE%20BACKUP">LOADING THE BACKUP</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> ++Next:<a rel="next" accesskey="n" href="#LOADING%20THE%20BACKUP">LOADING THE BACKUP</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> + <br> ++</div> + +-<h3>LOADING FILES</h3> ++<h3 class="section">LOADING FILES</h3> + +-<p>All data that you work with in Cinelerra is acquired either by ++ <p>All data that you work with in Cinelerra is acquired either by + <em>recording from a device</em> or by <em>loading from disk</em>. This + section describes loading. + +-<p>The loading and playing of files is just as you would expect. Just go ++ <p>The loading and playing of files is just as you would expect. Just go + to <em>file->Load</em>, select a file for loading, and hit <em>ok</em>. Hit + the forward play button and it should start playing, regardless of + whether a progress bar has popped up. + +-<p>Another way to load files is to pass the filenames as arguments on the ++ <p>Another way to load files is to pass the filenames as arguments on the + command line. This creates new tracks for every file and starts the + program with all the arguments loaded. + +-<p>If the file is a still image, the project's attributes are not changed ++ <p>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. + +-<ul> +-<li><a accesskey=1 href="#SUPPORTED%20FILE%20FORMATS">SUPPORTED FILE FORMATS</a>: +-<li><a accesskey=2 href="#INSERTION%20STRATEGY">INSERTION STRATEGY</a>: +-<li><a accesskey=3 href="#LOADING%20MULTIPLE%20FILES">LOADING MULTIPLE FILES</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#SUPPORTED%20FILE%20FORMATS">SUPPORTED FILE FORMATS</a>: ++<li><a accesskey="2" href="#INSERTION%20STRATEGY">INSERTION STRATEGY</a>: ++<li><a accesskey="3" href="#LOADING%20MULTIPLE%20FILES">LOADING MULTIPLE FILES</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="SUPPORTED%20FILE%20FORMATS">SUPPORTED FILE FORMATS</a>, +-Next:<a rel=next accesskey=n href="#INSERTION%20STRATEGY">INSERTION STRATEGY</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20FILES">LOADING FILES</a> ++Next:<a rel="next" accesskey="n" href="#INSERTION%20STRATEGY">INSERTION STRATEGY</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20FILES">LOADING FILES</a> + <br> ++</div> + +-<h4>SUPPORTED FILE FORMATS</h4> ++<h4 class="subsection">SUPPORTED FILE FORMATS</h4> + +-<p>The format of the file affects what Cinelerra does with it. Some ++ <p>The format of the file affects what Cinelerra does with it. Some + formats replace all the project settings. Some just insert data with + existing project settings. If your project sample rate is 48khz and + you load a sound file with 96khz, you'll still be playing it at +@@ -1209,158 +1232,164 @@ + an XML file at 96khz and the current project sample rate is 48khz, + you'll change it to 96khz. Supported file formats are currently: + +-<ul> ++ <ul> + <li>WAV + <li>PCM + <li>AIFF + <li>Uncompresed Quicktime + +-<p>Quicktime is not the standard for UNIX but we use it because it's well ++ <p>Quicktime is not the standard for UNIX but we use it because it's well + documented. All of the Quicktime movies on the internet are + compressed. Cinelerra doesn't support compressed Quicktime movies. + Most of the Quicktime footage dealt with in Cinelerra is generated by + Cinelerra either recording from a device or rendering. The best + Quicktime settings to use are JPEG video and twos audio. + +-</p><li>JPEG, PNG, TIFF, TGA sequences ++ </p><li>JPEG, PNG, TIFF, TGA sequences + +-<p>Cinelerra generates a special table of contents file when you render an ++ <p>Cinelerra generates a special table of contents file when you render an + image sequence. You can either select every image file to load or + select the table of contents when the rendering is done. Selecting the + table of contents is faster and doesn't fill up the resource window + with thousands of images. + +-</p><li>JPEG, PNG, TIFF, TGA still images ++ </p><li>JPEG, PNG, TIFF, TGA still images + +-<p>When loaded, the image takes up one frame in length and doesn't change ++ <p>When loaded, the image takes up one frame in length and doesn't change + the project attributes. + +-</p><li>AVI with mp3 audio and MPEG-4 video ++ </p><li>AVI with mp3 audio and MPEG-4 video + +-<li>MPEG 1, 2 video ++ <li>MPEG 1, 2 video + +-<p>You need to run <em>mpeg3toc</em> to generate a table of contents for ++ <p>You need to run <em>mpeg3toc</em> to generate a table of contents for + these, then load the table of contents. If you want to edit a DVD, + find the corresponding <em>ifo</em> file for the program of interest and run + +-<br><pre>mpeg3toc /cdrom/video_ts/vts_01_0.ifo dvd.toc +-</pre> ++ <pre class="example"> mpeg3toc /cdrom/video_ts/vts_01_0.ifo dvd.toc ++ </pre> + +-<p>or something similar. Then load <em>dvd.toc</em>. This allows frame ++ <p>or something similar. Then load <em>dvd.toc</em>. This allows frame + accurate editing where none would be possible otherwise. + +-</p><li>MPEG program streams and transport streams ++ </p><li>MPEG program streams and transport streams + +-<p>You need to run <em>mpeg3toc</em> on these just like MPEG 1,2 video. ++ <p>You need to run <em>mpeg3toc</em> on these just like MPEG 1,2 video. + Program and transport 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, so + for MPEG streams with multiple tracks, the tracks will be flattened. + +-</p><li>MPEG audio layer II, III ++ </p><li>MPEG audio layer II, III + +-<p>These can be loaded directly with no table of contents. Variable ++ <p>These can be loaded directly with no table of contents. Variable + bitrate streams may need a table of contents but are playable without + it. + +-</p><li>AC3 audio ++ </p><li>AC3 audio + +-<li>XML ++ <li>XML + +-<p>These are generated by Cinelerra for storing edit lists. They change ++ <p>These are generated by Cinelerra for storing edit lists. They change + project attributes when loaded. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="INSERTION%20STRATEGY">INSERTION STRATEGY</a>, +-Next:<a rel=next accesskey=n href="#LOADING%20MULTIPLE%20FILES">LOADING MULTIPLE FILES</a>, +-Previous:<a rel=previous accesskey=p href="#SUPPORTED%20FILE%20FORMATS">SUPPORTED FILE FORMATS</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20FILES">LOADING FILES</a> ++Next:<a rel="next" accesskey="n" href="#LOADING%20MULTIPLE%20FILES">LOADING MULTIPLE FILES</a>, ++Previous:<a rel="previous" accesskey="p" href="#SUPPORTED%20FILE%20FORMATS">SUPPORTED FILE FORMATS</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20FILES">LOADING FILES</a> + <br> ++</div> + +-<h4>INSERTION STRATEGY</h4> ++<h4 class="subsection">INSERTION STRATEGY</h4> + +-<p>Usually three things happen when you load a file. First the existing ++ <p>Usually three things happen when you load a file. First the existing + project is cleared from the screen, second the project's attributes are + changed to match the file's, and finally the new file's tracks are + created in the timeline. + +-<p>But Cinelerra lets you change what happens when you load a file. ++ <p>But Cinelerra lets you change what happens when you load a file. + +-<p>In the file selection box go to the <em>Insertion strategy</em> box and ++ <p>In the file selection box go to the <em>Insertion strategy</em> box and + select it. Each of these options loads the file a different way. + +-<ul> ++ <ul> + +-<li>Replace current project ++ <li>Replace current project + +-<p>All tracks in the current project are deleted and new tracks are ++ <p>All tracks in the current project are deleted and new tracks are + created to match the source. Project attributes are only changed when + loading XML. If multiple files are selected it adds new tracks for + every file. + +-</p><li>Replace current project and concatenate tracks ++ </p><li>Replace current project and concatenate tracks + +-<p>Same as replace current project except if multiple files are selected ++ <p>Same as replace current project except if multiple files are selected + it concatenates the tracks of every file after the first. + +-</p><li>Append in new tracks ++ </p><li>Append in new tracks + +-<p>The current project is not deleted and new tracks are created for the ++ <p>The current project is not deleted and new tracks are created for the + source. + +-</p><li>Concatenate to existing tracks ++ </p><li>Concatenate to existing tracks + +-<p>The current project is not deleted and new files are concatenated to ++ <p>The current project is not deleted and new files are concatenated to + the existing tracks. + +-</p><li>Paste at insertion point ++ </p><li>Paste at insertion point + +-<p>The file is pasted in like a normal paste operation. ++ <p>The file is pasted in like a normal paste operation. + +-</p><li>Create new resources only ++ </p><li>Create new resources only + +-<p>The timeline is unchanged and new resources are created in the Resource ++ <p>The timeline is unchanged and new resources are created in the Resource + Window. + +-</ul> ++ </ul> + +-<p>The insertion strategy is a recurring option in many of Cinelerra's ++ <p>The insertion strategy is a recurring option in many of Cinelerra's + functions. In each place the options do the same thing. With these + options you can almost do all your editing by loading files. + +-<p>If you load files by passing command line arguments to Cinelerra, the ++ <p>If you load files by passing command line arguments to Cinelerra, the + files are loaded with <em>Replace current project</em> rules. + ++<div class="node"> + <p><hr> + Node:<a name="LOADING%20MULTIPLE%20FILES">LOADING MULTIPLE FILES</a>, +-Previous:<a rel=previous accesskey=p href="#INSERTION%20STRATEGY">INSERTION STRATEGY</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20FILES">LOADING FILES</a> ++Previous:<a rel="previous" accesskey="p" href="#INSERTION%20STRATEGY">INSERTION STRATEGY</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20FILES">LOADING FILES</a> + <br> ++</div> + +-<h4>LOADING MULTIPLE FILES</h4> ++<h4 class="subsection">LOADING MULTIPLE FILES</h4> + +-<p>In the file selection box go to the list of files. Select a file. Go ++ <p>In the file selection box go to the list of files. Select a file. Go + to another file and select it while holding down <em>CTRL</em>. This + selects one additional file. Go to another file and select it while + holding down <em>SHIFT</em>. This selects every intervening file. This + behavior is available in most every list box. + +-<p>Select a bunch of mp3 files and <em>Replace current project and ++ <p>Select a bunch of mp3 files and <em>Replace current project and + concatenate tracks</em> in the insertion strategy to create a song + playlist. + ++<div class="node"> + <p><hr> + Node:<a name="LOADING%20THE%20BACKUP">LOADING THE BACKUP</a>, +-Next:<a rel=next accesskey=n href="#SAVING%20FILES">SAVING FILES</a>, +-Previous:<a rel=previous accesskey=p href="#LOADING%20FILES">LOADING FILES</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> ++Next:<a rel="next" accesskey="n" href="#SAVING%20FILES">SAVING FILES</a>, ++Previous:<a rel="previous" accesskey="p" href="#LOADING%20FILES">LOADING FILES</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> + <br> ++</div> + +-<h3>LOADING THE BACKUP</h3> ++<h3 class="section">LOADING THE BACKUP</h3> + +-<p>There is one special XML file on disk at all times. After every ++ <p>There is one special XML file on disk at all times. After every + editing operation Cinelerra saves the current project to a backup in + <em>$HOME/.bcast/backup.xml</em>. In the event of a crash go to + <em>file->load backup</em> to load the backup. It is important after a +@@ -1368,40 +1397,42 @@ + Loading the backup should be the first operation or you'll overwrite + the backup. + ++<div class="node"> + <p><hr> + Node:<a name="SAVING%20FILES">SAVING FILES</a>, +-Next:<a rel=next accesskey=n href="#RENDERING%20FILES">RENDERING FILES</a>, +-Previous:<a rel=previous accesskey=p href="#LOADING%20THE%20BACKUP">LOADING THE BACKUP</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> ++Next:<a rel="next" accesskey="n" href="#RENDERING%20FILES">RENDERING FILES</a>, ++Previous:<a rel="previous" accesskey="p" href="#LOADING%20THE%20BACKUP">LOADING THE BACKUP</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> + <br> ++</div> + +-<h3>SAVING FILES</h3> ++<h3 class="section">SAVING FILES</h3> + +-<p>When Cinelerra saves a file it saves an edit decision list of the ++ <p>When Cinelerra saves a file it saves an edit decision list of the + current project but doesn't save any media. Go to <em>File->save + as...</em>. Select a file to overwrite or enter a new file. Cinelerra + automatically concatenates <em>.xml</em> to the filename if no + <em>.xml</em> extension is given. + +-<p>The saved file contains all the project settings and locations of every ++ <p>The saved file contains all the project settings and locations of every + edit but instead of media it contains pointers to the original media + files on disk. + +-<p>For each media file the XML file stores either an absolute path or just ++ <p>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. + +-<p>In order to move XML files around without breaking the media linkages ++ <p>In order to move XML files around without breaking the media linkages + you either need to keep the media in the same directory as XML file + forever or save the XML file in a different directory than the media + and not move the media ever again. + +-<p>If you want to create an audio playlist and burn it on CD-ROM, save the ++ <p>If you want to create an audio playlist and burn it on CD-ROM, save the + XML file in the same directory as the audio files and burn the entire + directory. This keeps the media paths relative. + +-<p>XML files are useful for saving the current state before going to sleep ++ <p>XML files are useful for saving the current state before going to sleep + and saving audio playlists but they're limited in that they're specific + to Cinelerra. You can't play XML files in a dedicated movie player. + Realtime effects in an XML file have to be resynthesized every time you +@@ -1410,16 +1441,18 @@ + lot of electricity to spin. For a more persistent storage of the + output there's rendering. + ++<div class="node"> + <p><hr> + Node:<a name="RENDERING%20FILES">RENDERING FILES</a>, +-Next:<a rel=next accesskey=n href="#THE%20RENDER%20FARM">THE RENDER FARM</a>, +-Previous:<a rel=previous accesskey=p href="#SAVING%20FILES">SAVING FILES</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> ++Next:<a rel="next" accesskey="n" href="#THE%20RENDER%20FARM">THE RENDER FARM</a>, ++Previous:<a rel="previous" accesskey="p" href="#SAVING%20FILES">SAVING FILES</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> + <br> ++</div> + +-<h3>RENDERING FILES</h3> ++<h3 class="section">RENDERING FILES</h3> + +-<p>Rendering takes a section of the timeline, performs all the editing, ++ <p>Rendering takes a section of the timeline, performs all the editing, + effects and compositing, and stores it in a pure movie file. You can + then delete all the source assets, play the rendered file in a movie + player, or bring it back into Cinelerra for more editing. It's very +@@ -1427,18 +1460,18 @@ + however, so keep the original assets and XML file around several days + after you render it. + +-<p>To begin a render operation you need to define a region of the timeline ++ <p>To begin a render operation you need to define a region of the timeline + to render. The navigation section describes methods of defining + regions. See <a href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>. 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. + +-<p>Go to <em>File->render</em> to bring up the render dialog. Select the ++ <p>Go to <em>File->render</em> to bring up the render dialog. Select the + magnifying glass to bring up a file selection dialog. This determines + the filename to write the rendered file to. + +-<p>In the render dialog select a format from the <em>File Format</em> menu. ++ <p>In the render dialog select a format from the <em>File Format</em> menu. + The format of the file determines whether you can render audio or video + or both. Select <em>Render audio tracks</em> to generate audio tracks + and <em>Render video tracks</em> to generate video tracks. Select the +@@ -1448,28 +1481,28 @@ + selected and the file format doesn't support it, trying to render will + pop up an error. + +-<p>The <em>Create new file at each label</em> option causes a new file to be ++ <p>The <em>Create new file at each label</em> 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, <em>Create new file at each label</em> causes one + renderfarm job to be created at every label instead of using the + internal load balancing algorithm to space jobs. + +-<p>When <em>Create new file at each label</em> is selected, a new filename ++ <p>When <em>Create new file at each label</em> is selected, a new filename + is created for every output file. If the filename given in the render + dialog has a 2 digit number in it, the 2 digit number is overwritten + with a different incremental number for every output file. If no 2 + digit number is given, Cinelerra automatically concatenates a number to + the end of the given filename for every output file. + +-<p>In the filename <em>/hmov/track01.wav</em> the <em>01</em> would be ++ <p>In the filename <em>/hmov/track01.wav</em> the <em>01</em> would be + overwritten for every output file. The filename + <em>/hmov/track.wav</em>; however, would become <em>/hmov/track.wav001</em> + and so on and so forth. Filename regeneration is only used when either + renderfarm mode is active or creating new files for every label is + active. + +-<p>Finally the render dialog lets you select an insertion mode. The ++ <p>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 <em>insert nothing</em> the file will be written out to disk + without changing the current project. For other insertion strategies +@@ -1478,51 +1511,53 @@ + See <a href="#EDITING">EDITING</a>. Editing describes how to cause output to be inserted + at the right position. + +-<p>It should be noted that even if you only have audio or only have video ++ <p>It should be noted that even if you only have audio or only have video + rendered, a <em>paste</em> 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. + ++<div class="node"> + <p><hr> + Node:<a name="THE%20RENDER%20FARM">THE RENDER FARM</a>, +-Previous:<a rel=previous accesskey=p href="#RENDERING%20FILES">RENDERING FILES</a>, +-Up:<a rel=up accesskey=u href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> ++Previous:<a rel="previous" accesskey="p" href="#RENDERING%20FILES">RENDERING FILES</a>, ++Up:<a rel="up" accesskey="u" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a> + <br> ++</div> + +-<h3>THE RENDER FARM</h3> ++<h3 class="section">THE RENDER FARM</h3> + +-<p>When bicubic interpolation and HDTV was first done on Cinelerra, the ++ <p>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. + +-<p>While the renderfarm interface isn't spectacular, it's simple enough to ++ <p>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. + +-<p>It should be noted that <em>Create new file at each label</em> causes a ++ <p>It should be noted that <em>Create new file at each label</em> causes a + new renderfarm job to be created at each label instead of the default + load balancing. If this option is selected when no labels exist, only + one job will be created. + +-<p>A Cinelerra renderfarm is organized into a master node and any number ++ <p>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. + +-<p>Cinelerra divides the selected region of the timeline into a certain ++ <p>Cinelerra divides the selected region of the timeline into a certain + number of jobs which are then dispatched to the different nodes + depending on the load balance. The nodes process the jobs and write + their output to individual files on the filesystem. The output files + are not concatenated. It's important for all the nodes and the master + node to use the same filesystem for assets, mounted over the network. + +-<p>Since most of the time you'll want to bring in the rendered output and ++ <p>Since most of the time you'll want to bring in the rendered output and + fine tune it on the timeline, the jobs are left in individual files. + You can load these using <em>concatenate mode</em> and render them again + with renderfarm disabled. If the track and output dimensions equal the +@@ -1531,173 +1566,181 @@ + MPEG has the distinction that you can concatenate the subfiles with the + UNIX cat utility. + +-<p>Configuration of the renderfarm is described in the configuration ++ <p>Configuration of the renderfarm is described in the configuration + chapter See <a href="#RENDERFARM">RENDERFARM</a>. The slave nodes traditionally read and + write data to a common filesystem over a network, thus they don't need + hard drives. + +-<p>Ideally all the nodes on the renderfarm have similar CPU performance. ++ <p>Ideally all the nodes on the renderfarm have similar CPU performance. + Cinelerra load balances on a first come first serve basis. If the last + segment is dispatched to the slowest node, all the fastest nodes may + end up waiting for the slowest node to finish while they themselves + could have rendered it faster. + ++<div class="node"> + <p><hr> + Node:<a name="NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>, +-Next:<a rel=next accesskey=n href="#EDITING">EDITING</a>, +-Previous:<a rel=previous accesskey=p href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#EDITING">EDITING</a>, ++Previous:<a rel="previous" accesskey="p" href="#LOADING%20AND%20SAVING%20FILES">LOADING AND SAVING FILES</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>NAVIGATING THE PROJECT</h2> ++<h2 class="chapter">NAVIGATING THE PROJECT</h2> + +-<p>The thing you want to do most of the time is get to a certain time and ++ <p>The thing you want to do most of the time is get to a certain time and + place in the media. Internally the media is organized into tracks. + Each track extends across time. Navigation involves both getting to a + track and getting to a certain time in the track. + +-<ul> +-<li><a accesskey=1 href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a>: +-<li><a accesskey=2 href="#NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>: +-<li><a accesskey=3 href="#NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a>: +-<li><a accesskey=4 href="#USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a>: +-<li><a accesskey=5 href="#USING%20BACKGROUND%20RENDERING">USING BACKGROUND RENDERING</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a>: ++<li><a accesskey="2" href="#NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>: ++<li><a accesskey="3" href="#NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a>: ++<li><a accesskey="4" href="#USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a>: ++<li><a accesskey="5" href="#USING%20BACKGROUND%20RENDERING">USING BACKGROUND RENDERING</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a>, +-Next:<a rel=next accesskey=n href="#NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> ++Next:<a rel="next" accesskey="n" href="#NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> + <br> ++</div> + +-<h3>NAVIGATING THE PROGRAM WINDOW</h3> ++<h3 class="section">NAVIGATING THE PROGRAM WINDOW</h3> + +-<p>The program window contains many features for navigation and displays ++ <p>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. The horizontal scroll bar allows you to + scan across time. The vertical scroll bar allows you to scan across + tracks. + +-<p>Below the timeline you'll find the zoom panel. The zoom panel contains ++ <p>Below the timeline you'll find the zoom panel. The zoom panel contains + values for <em>sample zoom</em>, <em>amplitude</em>, and <em>track + zoom</em>. These values in addition to the scrollbars are all that's + needed to position the timeline. + + <br><p> +-<img src="zoompanel.png" alt="zoompanel.png"> ++ <img src="zoompanel.png" alt="zoompanel.png"> + +-<p>Changing the <em>sample zoom</em> causes the amount of time visible to ++ <p>Changing the <em>sample zoom</em> causes the amount of time visible to + change. <em>If your mouse has a wheel and it works in X11 go over + the tumblers and use the wheel to zoom in and out.</em> + +-<p>The <em>amplitude</em> only affects audio. It determines how big the ++ <p>The <em>amplitude</em> only affects audio. It determines how big the + waveform is if the waveform is drawn. + +-<p>The <em>track zoom</em> affects all tracks. It determines the height of ++ <p>The <em>track zoom</em> affects all tracks. It determines the height of + each track. If you change the track zoom the amplitude zoom + compensates so audio waveforms look proportional. + +-<p>In addition to the graphical tools, you'll probably more often use the ++ <p>In addition to the graphical tools, you'll probably more often use the + keyboard to navigate. Use <em>PAGE UP</em> and <em>PAGE DOWN</em> to + scroll up and down the tracks. + +-<p>Use the <em>LEFT</em> and <em>RIGHT</em> arrows to move across time. ++ <p>Use the <em>LEFT</em> and <em>RIGHT</em> arrows to move across time. + You'll often need to scroll beyond the end of the timeline but + scrollbars won't let you do it. Instead use the <em>RIGHT</em> arrow to + scroll past the end of timeline. + +-<p>Use the <em>UP</em> and <em>DOWN</em> arrows to change the sample zoom by a ++ <p>Use the <em>UP</em> and <em>DOWN</em> arrows to change the sample zoom by a + power of 2. + +-<p><em>CTRL-UP</em> and <em>CTRL-DOWN</em> cause the amplitude zoom to change. ++ <p><em>CTRL-UP</em> and <em>CTRL-DOWN</em> cause the amplitude zoom to change. + +-<p><em>CTRL-PGUP</em> and <em>CTRL-PGDOWN</em> cause the track zoom to change. ++ <p><em>CTRL-PGUP</em> and <em>CTRL-PGDOWN</em> cause the track zoom to change. + +-<ul> +-<li><a accesskey=1 href="#THE%20INSERTION%20POINT">THE INSERTION POINT</a>: +-<li><a accesskey=2 href="#THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a>: +-<li><a accesskey=3 href="#USING%20LABELS%20IN%20THE%20PROGRAM%20WINDOW">USING LABELS IN THE PROGRAM WINDOW</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#THE%20INSERTION%20POINT">THE INSERTION POINT</a>: ++<li><a accesskey="2" href="#THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a>: ++<li><a accesskey="3" href="#USING%20LABELS%20IN%20THE%20PROGRAM%20WINDOW">USING LABELS IN THE PROGRAM WINDOW</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="THE%20INSERTION%20POINT">THE INSERTION POINT</a>, +-Next:<a rel=next accesskey=n href="#THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a> ++Next:<a rel="next" accesskey="n" href="#THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a> + <br> ++</div> + +-<h4>THE INSERTION POINT</h4> ++<h4 class="subsection">THE INSERTION POINT</h4> + +-<p>By default you'll see a flashing insertion point in the program window ++ <p>By default you'll see a flashing insertion point in the program window + the first time you boot it up. This is where new media is pasted onto + the timeline. It's also the starting point of all playback + operations. When rendering it defines the region of the timeline to be + rendered. + +-<p>The insertion point is normally moved by clicking inside the timebar. ++ <p>The insertion point is normally moved by clicking inside the timebar. + Any region of the timebar not obscured by labels and in/out points is a + hotspot for repositioning the insertion point. + + <br><p> +-<img src="main_timebar.png" alt="main_timebar.png"> ++ <img src="main_timebar.png" alt="main_timebar.png"> + <em>The main timebar</em> + +-<p>The insertion point also can be moved by clicking in the timeline ++ <p>The insertion point also can be moved by clicking in the timeline + itself, but not always. The insertion point has two modes of + operation: + +-<ul> ++ <ul> + <li>drag and drop mode + +-<li>cut and paste mode ++ <li>cut and paste mode + +-</ul> ++ </ul> + +-<p>The mode of operation is determined by selecting the arrow or the ++ <p>The mode of operation is determined by selecting the arrow or the + i-beam in the buttonbar. + + <br><p> +-<img src="editing_mode.png" alt="editing_mode.png"> ++ <img src="editing_mode.png" alt="editing_mode.png"> + <em>The editing mode buttons</em> + +-<p>If the arrow is highlighted it enables <em>drag and drop</em> mode. In ++ <p>If the arrow is highlighted it enables <em>drag and drop</em> 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. + +-<p>If the i-beam is highlighted it enables <em>cut and paste mode</em>. In ++ <p>If the i-beam is highlighted it enables <em>cut and paste mode</em>. In + cut and paste mode clicking in the timeline repositions the insertion + point. Dragging in the timeline highlights a region. The highlighted + region becomes the playback range during the next playback operation, + the rendered range during the next render operation, and the region + affected by cut and paste operations. + +-<p><em>Shift-clicking</em> in the timeline extends the highlighted region. ++ <p><em>Shift-clicking</em> in the timeline extends the highlighted region. + +-<p><em>Double-clicking</em> in the timeline selects the entire edit the ++ <p><em>Double-clicking</em> in the timeline selects the entire edit the + cursor is over. + +-<p>It should be noted that when moving the insertion point and selecting ++ <p>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 + <em>settings->align cursor on frames</em>. + +-<p>If the highlighted region is the region affected by cut and paste ++ <p>If the highlighted region is the region affected by cut and paste + operations, how do I cut and paste in <em>drag and drop</em> mode? In + this case you need to set <em>in/out points</em> to define an affected region. + ++<div class="node"> + <p><hr> + Node:<a name="THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a>, +-Next:<a rel=next accesskey=n href="#USING%20LABELS%20IN%20THE%20PROGRAM%20WINDOW">USING LABELS IN THE PROGRAM WINDOW</a>, +-Previous:<a rel=previous accesskey=p href="#THE%20INSERTION%20POINT">THE INSERTION POINT</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a> ++Next:<a rel="next" accesskey="n" href="#USING%20LABELS%20IN%20THE%20PROGRAM%20WINDOW">USING LABELS IN THE PROGRAM WINDOW</a>, ++Previous:<a rel="previous" accesskey="p" href="#THE%20INSERTION%20POINT">THE INSERTION POINT</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a> + <br> ++</div> + +-<h4>THE IN/OUT POINTS</h4> ++<h4 class="subsection">THE IN/OUT POINTS</h4> + +-<p>In both editing modes you can set in/out points. The in/out points ++ <p>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 they override the highlighted area. If a highlighted +@@ -1706,162 +1749,166 @@ + it's best to use either highlighting or in/out points but not both + simultaneously. + +-<p>To set in/out points go to the timebar and position the insertion point ++ <p>To set in/out points go to the timebar and position the insertion point + somewhere. Hit the <img src="in_point_button.png" alt="in_point_button.png"> <em>in point button</em>. Go + to a position after the in point and hit the <img src="out_point_button.png" alt="out_point_button.png"> + <em>out point button</em>. + + <br><p> +-<img src="inout_points.png" alt="inout_points.png"> <em>Timebar with in/out points set</em>. ++ <img src="inout_points.png" alt="inout_points.png"> <em>Timebar with in/out points set</em>. + +-<p>Select either the in point or the out point and the insertion point ++ <p>Select either the in point or the out point and the insertion point + jumps to that location. After selecting an in point, if you hit the + <em>in point button</em> the in point will be deleted. After selecting + an out point, if you hit the <em>out point button</em> the out point will + be deleted. + +-<p>If you select a region somewhere else while in/out points already ++ <p>If you select a region somewhere else while in/out points already + exist, the existing points will be repositioned when you hit the in/out + buttons. + +-<p><em>Shift-clicking</em> on an in/out point extends the highlighted region ++ <p><em>Shift-clicking</em> on an in/out point extends the highlighted region + to that point. + +-<p>Instead of using the button bar you can use the <em>[</em> and <em>]</em> ++ <p>Instead of using the button bar you can use the <em>[</em> and <em>]</em> + keys to toggle in/out points. + +-<p>The insertion point and the in/out points allow you to define an ++ <p>The insertion point and the in/out points allow you to define an + affected region but they don't let you jump to exact points on the + timeline very easily. For this purpose there are labels. + ++<div class="node"> + <p><hr> + Node:<a name="USING%20LABELS%20IN%20THE%20PROGRAM%20WINDOW">USING LABELS IN THE PROGRAM WINDOW</a>, +-Previous:<a rel=previous accesskey=p href="#THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a> ++Previous:<a rel="previous" accesskey="p" href="#THE%20IN%2fOUT%20POINTS">THE IN/OUT POINTS</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a> + <br> ++</div> + +-<h4>USING LABELS IN THE PROGRAM WINDOW</h4> ++<h4 class="subsection">USING LABELS IN THE PROGRAM WINDOW</h4> + +-<p>Labels are an easy way to set exact locations on the timeline you want ++ <p>Labels are an easy way to set exact locations on the timeline you want + to jump to. When you position the insertion point somewhere and hit + the <img src="label_button.png" alt="label_button.png"> <em>label button</em> a new label appears on the + timeline. + + <br><p> +-<img src="timebar_label.png" alt="timebar_label.png"> <em>Timebar with a label on it</em> ++ <img src="timebar_label.png" alt="timebar_label.png"> <em>Timebar with a label on it</em> + +-<p>No matter what the zoom settings are, clicking on the label positions ++ <p>No matter what the zoom settings are, clicking on the label positions + the insertion point exactly where you set it. Hitting the label button + again when a label is selected deletes it. + +-<p><em>Shift-clicking</em> on a label extends the highlighted region. ++ <p><em>Shift-clicking</em> on a label extends the highlighted region. + +-<p><em>Double-clicking</em> between two labels highlights the region between ++ <p><em>Double-clicking</em> between two labels highlights the region between + the labels. + +-<p>Hitting the <em>l</em> key has the same effect as the label button. ++ <p>Hitting the <em>l</em> key has the same effect as the label button. + +-<p>If you hit the label button when a region is highlighted, two labels ++ <p>If you hit the label button when a region is highlighted, two labels + are toggled at each end of the highlighted region. If one end already + has a label, then the existing label is deleted and a label is created + at the opposite end. + +-<p>Labels can reposition the insertion point when they are selected but ++ <p>Labels can reposition the insertion point when they are selected but + they can also be traversed with the <img src="label_traversal.png" alt="label_traversal.png"> <em>label + traversal</em> buttons. When a label is out of view, the label traversal + buttons reposition the timeline so the label is visible. There are + keyboard shortcuts for label traversal, too. + +-<p><em>CTRL-LEFT</em> repositions the insertion point on the previous label. ++ <p><em>CTRL-LEFT</em> repositions the insertion point on the previous label. + +-<p><em>CTRL-RIGHT</em> repositions the insertion point on the next label. ++ <p><em>CTRL-RIGHT</em> repositions the insertion point on the next label. + +-<p>With label traversal you can quickly seek back and forth on the ++ <p>With label traversal you can quickly seek back and forth on the + timeline but you can also select regions. + +-<p><em>SHIFT-CTRL-LEFT</em> extends the highlighted region to the previous ++ <p><em>SHIFT-CTRL-LEFT</em> extends the highlighted region to the previous + label. + +-<p><em>SHIFT-CTRL-RIGHT</em> extends the highlighted region to the next label. ++ <p><em>SHIFT-CTRL-RIGHT</em> extends the highlighted region to the next label. + +-<p>Manually hitting the label button or <em>l</em> key over and over again ++ <p>Manually hitting the label button or <em>l</em> 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 <em>Edit->Clear + labels</em> function. If in/out points exist, the labels between the + in/out points are cleared and the highlighted region ignored. + ++<div class="node"> + <p><hr> + Node:<a name="NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>, +-Next:<a rel=next accesskey=n href="#NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a>, +-Previous:<a rel=previous accesskey=p href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> ++Next:<a rel="next" accesskey="n" href="#NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a>, ++Previous:<a rel="previous" accesskey="p" href="#NAVIGATING%20THE%20PROGRAM%20WINDOW">NAVIGATING THE PROGRAM WINDOW</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> + <br> ++</div> + +-<h3>NAVIGATING THE VIEWER AND COMPOSITOR</h3> ++<h3 class="section">NAVIGATING THE VIEWER AND COMPOSITOR</h3> + +-<p>The navigation features of the Viewer and Compositor behave very ++ <p>The navigation features of the Viewer and Compositor behave very + similarly. Each has a timebar and slider below the video output. The + timebar and slider are critical for navigation. + + <br><p> +-<img src="timebarslider.png" alt="timebarslider.png"> ++ <img src="timebarslider.png" alt="timebarslider.png"> + +-<p>The timebar represents the entire time covered by the program. When ++ <p>The timebar represents the entire time covered by the program. When + you define labels and in/out points it defines those, too. Finally the + timebar defines a region known as the <em>preview region</em>. + +-<p>The <em>preview region</em> is the region of the timeline which the ++ <p>The <em>preview region</em> is the region of the timeline which the + slider effects. The slider only covers the time covered by the preview + region. By using a preview region inside the entire program and using + the slider inside the preview region you can quickly and precisely seek + in the compositor and viewer. + +-<p>When you replace the current project with a file the preview region ++ <p>When you replace the current project with a file the preview region + automatically resizes to cover the entire file. When you append data + or change the size of the current project, the preview region stays the + same size and shrinks. Therefore, you need to resize the preview + region. + +-<p>Load a file and then slide around it using the compositor slider. The ++ <p>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. + +-<p>Go to the right of the timebar until a right resize pointer appears. ++ <p>Go to the right of the timebar until a right resize pointer appears. + Drag left so the preview region shrinks. + +-<p>Go to the center of the preview region in the timebar and drag it ++ <p>Go to the center of the preview region in the timebar and drag it + around to convince yourself if can be moved. + + <br><p> +-<img src="previewregion.png" alt="previewregion.png"> ++ <img src="previewregion.png" alt="previewregion.png"> + +-<p><em>Preview region in compositor</em> ++ <p><em>Preview region in compositor</em> + +-<p>If you go to the slider and slide it around with the preview region ++ <p>If you go to the slider and slide it around with the preview region + shrunk, you'll see the slider only affects the preview region. The + timebar and slider in the viewer window work exactly the same. + +-<p>Labels and in/out points are fully supported in the viewer and ++ <p>Labels and in/out points are fully supported in the viewer and + compositor. The only difference between the viewer and compositor is + the compositor reflects the state of the program while the viewer + reflects the state of a clip but not the program. + +-<p>When you hit the <em>label button</em> in the compositor, the label ++ <p>When you hit the <em>label button</em> in the compositor, the label + appears both in the compositor timebar and the program timebar. + +-<p>When you select a label or in/out point in the compositor, the program ++ <p>When you select a label or in/out point in the compositor, the program + window jumps to that position. + + <br><p> +-<img src="viewer_labels.png" alt="viewer_labels.png"> <em>Labels and in/out points in the viewer</em>. ++ <img src="viewer_labels.png" alt="viewer_labels.png"> <em>Labels and in/out points in the viewer</em>. + +-<p>In the viewer and compositor, labels and in/out points are displayed in ++ <p>In the viewer and compositor, labels and in/out points are displayed in + the timebar. Instead of displaying just a region of the program, the + timebar displays the entire program here. + +-<p>Like the Program window, the Compositor has a zoom capability. First, ++ <p>Like the Program window, the Compositor has a zoom capability. First, + the pulldown menu on the bottom of the compositor window has a number + of zoom options. When set to <em>Auto</em> the video is zoomed to match + the compositor window size as closely as possible. When set to any +@@ -1871,73 +1918,77 @@ + <em>middle mouse button</em> dragging in the video output scans around + it. This is exactly when The Gimp does. + +-<p>Furthermore, the zoom <img src="magnify.png" alt="magnify.png"> toggle causes the Compositor ++ <p>Furthermore, the zoom <img src="magnify.png" alt="magnify.png"> toggle causes the Compositor + window to enter zoom mode. In zoom mode, clicking in the video output + zooms in while <em>ctrl-clicking</em> in the video output zooms out. If + you have a wheel mouse, rotating the wheel zooms in or out too. + +-<p>Zooming in or out with the zoom tool does not change the rendered ++ <p>Zooming in or out with the zoom tool does not change the rendered + output, mind you. It's merely for scrutinizing video or fitting it in + the desktop. + ++<div class="node"> + <p><hr> + Node:<a name="NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a>, +-Next:<a rel=next accesskey=n href="#USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a>, +-Previous:<a rel=previous accesskey=p href="#NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> ++Next:<a rel="next" accesskey="n" href="#USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a>, ++Previous:<a rel="previous" accesskey="p" href="#NAVIGATING%20THE%20VIEWER%20AND%20COMPOSITOR">NAVIGATING THE VIEWER AND COMPOSITOR</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> + <br> ++</div> + +-<h3>NAVIGATING THE RESOURCES</h3> ++<h3 class="section">NAVIGATING THE RESOURCES</h3> + +-<p>The resource window is divided into two areas. One area lists folders ++ <p>The resource window is divided into two areas. One area lists folders + and another area lists folder contents. Going into the folder list and + clicking on a folder updates the contents area with the contents of + that folder. + +-<p>The folder and contents can be displayed as icons or text. ++ <p>The folder and contents can be displayed as icons or text. + +-<p><em>Right clicking</em> in the folder or contents area brings up a menu ++ <p><em>Right clicking</em> in the folder or contents area brings up a menu + containing formatting options. Select <em>Display text</em> to display a + text listing. Select <em>Sort items</em> to sort the contents of the + folder alphabetically. + ++<div class="node"> + <p><hr> + Node:<a name="USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a>, +-Next:<a rel=next accesskey=n href="#USING%20BACKGROUND%20RENDERING">USING BACKGROUND RENDERING</a>, +-Previous:<a rel=previous accesskey=p href="#NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> ++Next:<a rel="next" accesskey="n" href="#USING%20BACKGROUND%20RENDERING">USING BACKGROUND RENDERING</a>, ++Previous:<a rel="previous" accesskey="p" href="#NAVIGATING%20THE%20RESOURCES">NAVIGATING THE RESOURCES</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> + <br> ++</div> + +-<h3>USING THE TRANSPORT CONTROLS</h3> ++<h3 class="section">USING THE TRANSPORT CONTROLS</h3> + +-<p>Transport controls are just as useful in navigation as they are in ++ <p>Transport controls are just as useful in navigation as they are in + playing back footage, hence they are described here. Each of the + Viewer, Compositor, and Program windows has a transport panel. + + <br><p> +-<img src="transport_panel.png" alt="transport_panel.png"> <em>The transport panel</em>. ++ <img src="transport_panel.png" alt="transport_panel.png"> <em>The transport panel</em>. + +-<p>The transport panel is controlled by the keyboard as well as the ++ <p>The transport panel is controlled by the keyboard as well as the + graphical interface. For each of the operations it performs, the + starting position is the position of the insertion point or slider. + The ending position is either the end or start of the timeline or the + end or start of the selected region if there is one. + +-<p>The orientation of the end or start depends on the direction of ++ <p>The orientation of the end or start depends on the direction of + playback. If it's forward the end position is the end of the selected + region. If it's backward the end position is the start of the selected + region. + +-<p>The insertion point moves to track playback. When playback stops it ++ <p>The insertion point moves to track playback. When playback stops it + leaves the insertion point where it stopped. Thus, by playing back you + change the position of the insertion point. + +-<p>The keyboard interface is usually the fastest and has more speeds. The ++ <p>The keyboard interface is usually the fastest and has more speeds. The + transport keys are arranged in a <em>T</em> on the number pad. + +-<ul> ++ <ul> + +-<li><em>+</em> Fast reverse ++ <li><em>+</em> Fast reverse + <li><em>6</em> Normal reverse + <li><em>5</em> Slow reverse + <li><em>4</em> Frame reverse +@@ -1949,9 +2000,9 @@ + <li><em>Spacebar</em> Normal forward + </ul> + +-<p>Hitting any key on the keyboard twice pauses it. ++ <p>Hitting any key on the keyboard twice pauses it. + +-<p>When using frame advance functions the behavior may seem odd. If you ++ <p>When using frame advance functions the behavior may seem odd. If you + frame advance forward and then frame advance backward, the displayed + frame doesn't change. This is because the playback position isn't the + frame but the time between two frames. The rendered frame is the area +@@ -1959,87 +2010,91 @@ + between two frames by one and decrement it by one, you cross the same + frame both times and so the same frame is displayed. + ++<div class="node"> + <p><hr> + Node:<a name="USING%20BACKGROUND%20RENDERING">USING BACKGROUND RENDERING</a>, +-Previous:<a rel=previous accesskey=p href="#USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a>, +-Up:<a rel=up accesskey=u href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> ++Previous:<a rel="previous" accesskey="p" href="#USING%20THE%20TRANSPORT%20CONTROLS">USING THE TRANSPORT CONTROLS</a>, ++Up:<a rel="up" accesskey="u" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a> + <br> ++</div> + +-<h3>USING BACKGROUND RENDERING</h3> ++<h3 class="section">USING BACKGROUND RENDERING</h3> + +-<p>Background rendering allows impossibly slow effects to play back in ++ <p>Background rendering allows impossibly slow effects to play back in + realtime shortly after the effect is pasted in the timeline. It + continuously renders temporary output. When renderfarm is enabled, + background rendering uses the renderfarm continuously. This way, any + size video can be seen in realtime merely by creating a fast enough + network with enough nodes. + +-<p>Background rendering is enabled in settings->preferences->performance. ++ <p>Background rendering is enabled in settings->preferences->performance. + It has one interactive function: <em>settings->set background render</em>. This + sets the point where background rendering begins to where the in point + is. If any video exists, a red bar appears in the time bar showing + what has been background rendered. + +-<p>It's often useful to insert an effect or a transition and then select ++ <p>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. + ++<div class="node"> + <p><hr> + Node:<a name="EDITING">EDITING</a>, +-Next:<a rel=next accesskey=n href="#USING%20EFFECTS">USING EFFECTS</a>, +-Previous:<a rel=previous accesskey=p href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#USING%20EFFECTS">USING EFFECTS</a>, ++Previous:<a rel="previous" accesskey="p" href="#NAVIGATING%20THE%20PROJECT">NAVIGATING THE PROJECT</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>EDITING</h2> ++<h2 class="chapter">EDITING</h2> + +-<p>Editing comprises both the time domain and the track domain. Since the ++ <p>Editing comprises both the time domain and the track domain. Since the + timeline consists of a stack of tracks, you need to worry about how to + sort and create tracks in addition to what time certain media appears + on a track. + +-<p>In the time domain, Cinelerra offers many ways to approach the editing ++ <p>In the time domain, Cinelerra offers many ways to approach the editing + process. The three main methods are two screen editing, drag and drop + editing, and cut and paste editing. + +-<p>There are several concepts Cinelerra uses when editing which apply to ++ <p>There are several concepts Cinelerra uses when editing which apply to + all the methods. The timeline is where all editing decisions are + represented. Every track on the timeline has a set of attributes on + the left, the most important of which is the <em>arm track</em> + attribute. + + <br><p> +-<img src="track_attributes.png" alt="track_attributes.png"> ++ <img src="track_attributes.png" alt="track_attributes.png"> + <em>Track attributes</em> + +-<p>Only the <em>armed tracks</em> are affected by editing operations. Make ++ <p>Only the <em>armed tracks</em> are affected by editing operations. Make + sure you have enough armed destination tracks when you paste or splice + material or some tracks in the material will get left out. + +-<p>The other attributes affect the output of the track. ++ <p>The other attributes affect the output of the track. + +-<ul> ++ <ul> + +-<li> ++ <li> + <b>Play track</b> determines whether the track is rendered or not. If + it's off, the track is not rendered. However, if the track is chained + to any other tracks, the other tracks perform all the effects in the + chained track, regardless of play status. + +-<li> ++ <li> + <b>Gang fader</b> causes the fader to track the movement of whatever other + fader you're adjusting. A fader is only ganged if the <b>arm track</b> is + also on. This is normally used to adjust audio levels on all the + tracks simultaneously. + +-<li> ++ <li> + <b>Draw data</b> determines if picons or waveforms are drawn on the + track. By default, some file formats load with this off while other + file formats load with it on. This depends on whether the file format + takes a long time to draw on the timeline. Merely set it to on if you + want to see picons for any file format. + +-<li> ++ <li> + <b>Mute track</b> causes the output to be thrown away once the track is + completely rendered. This happens whether or not <b>play track</b> is + on. If the track is part of an effect chain, the output of the effect +@@ -2047,48 +2102,50 @@ + back to another track. Mute track is used to keep the effect chain + track from overlapping the output of the source track. + +-</ul> ++ </ul> + +-<p>There are two ways to set the same attribute on multiple tracks very ++ <p>There are two ways to set the same attribute on multiple tracks very + quickly. Hold down <b>shift</b> while clicking a track's attribute to + match the same attribute in all the other tracks. If you don't want to + affect all the other tracks, click on an attribute and drag across + other tracks to have the same attribute set in them. + +-<p>In addition to restricting editing operations, the armed tracks in ++ <p>In addition to restricting editing operations, the armed tracks in + combination with the active region determine where material is inserted + when loading files. If the files are loaded with one of the insertion + strategies which doesn't delete the existing project, the armed tracks + will be used as destination tracks. + +-<p>The active region is the range of time in the edit decision on the ++ <p>The active region is the range of time in the edit decision 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 active region and the active length is 0. + +-<p>Finally, editing decisions never affect source material. Editing only affects ++ <p>Finally, editing decisions never affect source material. 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 <em>render</em> it. See <a href="#RENDERING%20FILES">RENDERING FILES</a>. + +-<ul> +-<li><a accesskey=1 href="#MANIPULATING%20TRACKS">MANIPULATING TRACKS</a>: +-<li><a accesskey=2 href="#TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a>: +-<li><a accesskey=3 href="#DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a>: +-<li><a accesskey=4 href="#CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a>: +-<li><a accesskey=5 href="#TRIMMING">TRIMMING</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#MANIPULATING%20TRACKS">MANIPULATING TRACKS</a>: ++<li><a accesskey="2" href="#TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a>: ++<li><a accesskey="3" href="#DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a>: ++<li><a accesskey="4" href="#CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a>: ++<li><a accesskey="5" href="#TRIMMING">TRIMMING</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="MANIPULATING%20TRACKS">MANIPULATING TRACKS</a>, +-Next:<a rel=next accesskey=n href="#TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a>, +-Up:<a rel=up accesskey=u href="#EDITING">EDITING</a> ++Next:<a rel="next" accesskey="n" href="#TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a>, ++Up:<a rel="up" accesskey="u" href="#EDITING">EDITING</a> + <br> ++</div> + +-<h3>MANIPULATING TRACKS</h3> ++<h3 class="section">MANIPULATING TRACKS</h3> + +-<p>Tracks in Cinelerra either contain audio or video. There is no special ++ <p>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. +@@ -2096,24 +2153,24 @@ + multiple tracks simultaneously. Each track itself has a popup menu + which affects one track. + +-<p>Bring up the popup menu by moving over a track and right clicking. The ++ <p>Bring up the popup menu by moving over a track and right clicking. The + popup menu affects the track whether it's armed or not. + +-<p><em>Move up</em> and <em>move down</em> moves the one track up or down in ++ <p><em>Move up</em> and <em>move down</em> moves the one track up or down in + the stack. <em>Delete track</em> deletes the track. + +-<p>Operations in the <em>Tracks</em> menu affect only tracks which are ++ <p>Operations in the <em>Tracks</em> menu affect only tracks which are + armed. + +-<p><em>Move tracks up</em> and <em>Move tracks down</em> shift all the armed ++ <p><em>Move tracks up</em> and <em>Move tracks down</em> shift all the armed + tracks up or down the stack. + +-<p><em>Delete tracks</em> deletes the armed tracks. ++ <p><em>Delete tracks</em> deletes the armed tracks. + +-<p><em>Delete last track</em> deletes the last track, whether it's armed or ++ <p><em>Delete last track</em> deletes the last track, whether it's armed or + not. Holding down the <em>d</em> key quickly deletes all the tracks. + +-<p><em>Concatenate tracks</em> is more complicated. It takes every ++ <p><em>Concatenate tracks</em> is more complicated. It takes every + <em>playable</em> track and concatenates it to the end of the first + <em>armed tracks</em>. If there are two armed tracks followed by two + playable tracks, the concatenate operation puts the two playable tracks +@@ -2122,7 +2179,7 @@ + put on the end of the first armed track. The destination track wraps + around until all the playable tracks are concatenated. + +-<p>Finally, you'll want to create new tracks. The <em>Audio</em> and ++ <p>Finally, you'll want to create new tracks. The <em>Audio</em> and + <em>Video</em> 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 +@@ -2130,22 +2187,24 @@ + top of the timeline. This way, video has a natural compositing order. + New video tracks are overlayed on top of old tracks. + ++<div class="node"> + <p><hr> + Node:<a name="TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a>, +-Next:<a rel=next accesskey=n href="#DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a>, +-Previous:<a rel=previous accesskey=p href="#MANIPULATING%20TRACKS">MANIPULATING TRACKS</a>, +-Up:<a rel=up accesskey=u href="#EDITING">EDITING</a> ++Next:<a rel="next" accesskey="n" href="#DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a>, ++Previous:<a rel="previous" accesskey="p" href="#MANIPULATING%20TRACKS">MANIPULATING TRACKS</a>, ++Up:<a rel="up" accesskey="u" href="#EDITING">EDITING</a> + <br> ++</div> + +-<h3>TWO SCREEN EDITING</h3> ++<h3 class="section">TWO SCREEN EDITING</h3> + +-<p>This is the fastest way to construct a program out of movie files. The ++ <p>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. + +-<p>The way to begin a two screen editing session is to load some ++ <p>The way to begin a two screen editing session is to load some + resources. In <em>file->load</em> load some movies with the insertion + mode <em>create new resources</em>. You want the timeline to stay + unchanged while new resources are brought in. Go to the Resource +@@ -2153,24 +2212,24 @@ + should appear. Drag a resource from the media side of the window over + the Viewer window. + +-<p>There should be enough armed tracks on the timeline to put the sections ++ <p>There should be enough armed tracks on the timeline to put the sections + of source material that you want. If there aren't, create new tracks + or arm more tracks. + +-<p>In the viewer window seek to the starting point of a clip you want to ++ <p>In the viewer window seek to the starting point of a clip you want to + use. Use either the <em>slider</em> or the <em>transport controls</em>. + Use the <em>preview region</em> to narrow down the search. Set the + starting point with the <img src="in_point_button.png" alt="in_point_button.png"> <em>in point button</em>. + +-<p>Seek to the ending point of the clip you want to use. Set the ending ++ <p>Seek to the ending point of the clip you want to use. Set the ending + point with the <img src="out_point_button.png" alt="out_point_button.png"> <em>out point button</em>. The + two points should now appear on the timebar and define a clip. + +-<p>There are several things you can do with the clip now. ++ <p>There are several things you can do with the clip now. + +-<ul> ++ <ul> + +-<li> ++ <li> + Splice <img src="splice_button.png" alt="splice_button.png"> inserts the clip in the timeline, pushing + everything back. If an <em>in point</em> or <em>out point</em> exists on + the timeline it's inserted there, otherwise it's inserted after the +@@ -2179,7 +2238,7 @@ + used as the next splice location. This way you can continuously build + up the program by splicing. + +-<li> ++ <li> + Overwrite <img src="overwrite_button.png" alt="overwrite_button.png"> overwrites the region of the + timeline with the clip. If an <em>in point</em> or <em>out point</em> + exists on the timeline it's overwritten there, otherwise it's +@@ -2187,46 +2246,48 @@ + both in and out points exist the difference between the active region + and the clip length is deleted. + +-<li> ++ <li> + Create a clip <img src="toclip_button.png" alt="toclip_button.png"> generates a new clip for the + resource window containing the affected region but doesn't change the + timeline. Every clip has a title and a description. These are + optional. + +-<li> ++ <li> + Copy behaves the same as in cut and paste editing. + +-</ul> ++ </ul> + +-<p>Two screen editing can be done purely by keybard shortcuts. When you ++ <p>Two screen editing can be done purely by keybard shortcuts. When you + move the pointer over any button a tooltip should appear, showing what + key is bound to that button. In the Viewer window, the number pad keys + control the transport and the <em>[ ] v</em> keys perform in/out points + and splicing. + ++<div class="node"> + <p><hr> + Node:<a name="DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a>, +-Next:<a rel=next accesskey=n href="#CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a>, +-Previous:<a rel=previous accesskey=p href="#TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a>, +-Up:<a rel=up accesskey=u href="#EDITING">EDITING</a> ++Next:<a rel="next" accesskey="n" href="#CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a>, ++Previous:<a rel="previous" accesskey="p" href="#TWO%20SCREEN%20EDITING">TWO SCREEN EDITING</a>, ++Up:<a rel="up" accesskey="u" href="#EDITING">EDITING</a> + <br> ++</div> + +-<h3>DRAG AND DROP EDITING</h3> ++<h3 class="section">DRAG AND DROP EDITING</h3> + +-<p>The answer is yes, you can you create a bunch of clips and drag them on ++ <p>The answer is yes, you can you create a bunch of clips and drag them on + the timeline. You can also drag edits around the timeline. + +-<p>Load some files using <em>file->load</em>. Set the insertion mode to ++ <p>Load some files using <em>file->load</em>. Set the insertion mode to + <em>Create new resources</em>. This loads the files into the Resource + Window. Create some audio and video tracks on the timeline using the + video and audio menus. + +-<p>Open the <em>Media</em> folder in the resource window. Drag a media file ++ <p>Open the <em>Media</em> folder in the resource window. Drag a media file + from the resource window to the timeline. If the media has video, drag + it onto a video track. If the media is pure audio, drag it onto an + audio track. + +-<p>Cinelerra fills out the audio and video tracks below the dragging ++ <p>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 +@@ -2235,84 +2296,86 @@ + one audio track on the timeline for every audio track in the media and + the media should be dragged over the first audio track. + +-<p>When dragging, the media snaps to the start of track if the track is ++ <p>When dragging, the media snaps to the start of track if the track is + empty. If there are edits on the track, the media snaps to the nearest + edit boundary. + +-<p>You can also drag multiple files from the resource window. Either draw ++ <p>You can also drag multiple files from the resource window. Either draw + a box around the files, use SHIFT, or use CTRL when selecting files. + When you drop the files in the timeline, they are concatenated. The + behavior of SHIFT and CTRL changes depending on if the resources are in + text or icons. + +-<p>To display the resources as text or icons, right click inside the media ++ <p>To display the resources as text or icons, right click inside the media + list. Select either <em>display icons</em> or <em>display text</em> to + change the list format. + +-<p>When displaying text in the resource window <em>SHIFT-clicking</em> on ++ <p>When displaying text in the resource window <em>SHIFT-clicking</em> on + media files extends the number of highlighted selections. + <em>CTRL-clicking</em> on media files in text mode selects additional + files one at a time. + +-<p>When displaying icons in the resource window <em>SHIFT-clicking</em> or ++ <p>When displaying icons in the resource window <em>SHIFT-clicking</em> or + <em>CTRL-clicking</em> selects media files one at a time. + +-<p>In addition to dragging media files, if you create clips and open the ++ <p>In addition to dragging media files, if you create clips and open the + <em>clip</em> folder you can drag clips on the timeline. + +-<p>In the timeline there is further dragging functionality. To enable the ++ <p>In the timeline there is further dragging functionality. To enable the + dragging functionality of the timeline, select the arrow toggle + <img src="arrow.png" alt="arrow.png">. Move over an edit and drag it. If more than one + track is armed, Cinelerra will drag any edits which start on the same + position as the edit the cursur is currently over. During a dragging + operation the edit snaps to the nearest boundary. + +-<p>Dragging edits around the timeline allows you to sort music playlists, ++ <p>Dragging edits around the timeline allows you to sort music playlists, + sort movie scenes, and give better NAB demos but not much else. + ++<div class="node"> + <p><hr> + Node:<a name="CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a>, +-Next:<a rel=next accesskey=n href="#TRIMMING">TRIMMING</a>, +-Previous:<a rel=previous accesskey=p href="#DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a>, +-Up:<a rel=up accesskey=u href="#EDITING">EDITING</a> ++Next:<a rel="next" accesskey="n" href="#TRIMMING">TRIMMING</a>, ++Previous:<a rel="previous" accesskey="p" href="#DRAG%20AND%20DROP%20EDITING">DRAG AND DROP EDITING</a>, ++Up:<a rel="up" accesskey="u" href="#EDITING">EDITING</a> + <br> ++</div> + +-<h3>CUT AND PASTE EDITING</h3> ++<h3 class="section">CUT AND PASTE EDITING</h3> + +-<p>This is the traditional method of editing in audio editors. In the ++ <p>This is the traditional method of editing in audio editors. In the + case of Cinelerra, you either need to start a second copy of Cinelerra + and copy from one copy to the other, copy from different tracks in the + same copy, or load a media file into the Viewer and copy from there. + +-<p>Load some files onto the timeline. To perform cut and paste editing ++ <p>Load some files onto the timeline. To perform cut and paste editing + select the <img src="ibeam.png" alt="ibeam.png"> i-beam toggle. Select a region of the + timeline and select the <img src="cut.png" alt="cut.png"> cut button to cut it. Move the + insertion point to another point in the timeline and select the + <img src="paste.png" alt="paste.png"> paste button. Assuming no in/out points are defined on + the timeline this performs a cut and paste operation. + +-<p>If in/out points are defined, the insertion point and highlighted ++ <p>If in/out points are defined, the insertion point and highlighted + region are overridden by the in/out points for clipboard operations. + Thus, with in/out points you can perform cut and paste in drag and drop + mode as well as cut and paste mode. + +-<p>When editing audio, it is customary to cut from one part of a waveform ++ <p>When editing audio, it is customary to cut from one part of a waveform + into the same part of another waveform. The start and stop points of + the cut are identical in each waveform and might be offset slightly, + while the wave data is different. It would be very hard to highlight + one waveform to cut it and highlight the second waveform to paste it + without changing the relative start and stop positions. + +-<p>One option for simplifying this is to open a second copy of Cinelerra, ++ <p>One option for simplifying this is to open a second copy of Cinelerra, + cutting and pasting to transport media between the two copies. This + way two highlighed regions can exist simultanously. + +-<p>Another option is to set in/out points for the source region of the ++ <p>Another option is to set in/out points for the source region of the + source waveform and set labels for the destination region of the + destination waveform. Perform a cut, clear the in/out points, select + the region between the labels, and perform a paste. + +-<p>A final operation in cut and paste editing is the <em>edit->clear</em> ++ <p>A final operation in cut and paste editing is the <em>edit->clear</em> + operation. If a region is highlighted or in/out points exist, the + affected region is cleared by <em>edit->clear</em>. But if the insertion + point is over an edit boundary and the edits on each side of the edit +@@ -2321,15 +2384,17 @@ + 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. + ++<div class="node"> + <p><hr> + Node:<a name="TRIMMING">TRIMMING</a>, +-Previous:<a rel=previous accesskey=p href="#CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a>, +-Up:<a rel=up accesskey=u href="#EDITING">EDITING</a> ++Previous:<a rel="previous" accesskey="p" href="#CUT%20AND%20PASTE%20EDITING">CUT AND PASTE EDITING</a>, ++Up:<a rel="up" accesskey="u" href="#EDITING">EDITING</a> + <br> ++</div> + +-<h3>TRIMMING</h3> ++<h3 class="section">TRIMMING</h3> + +-<p>With some edits on the timeline it's possible to do trimming. By ++ <p>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 +@@ -2337,16 +2402,16 @@ + dragging operation affects the beginning of the edit. If the cursor is + an expand right, the dragging operation affects the end of the edit. + +-<p>When you click on an edit boundary to start dragging, the mouse button ++ <p>When you click on an edit boundary to start dragging, the mouse button + number determines which dragging behavior is going to be followed. 3 + possible behaviors are bound to mouse buttons in the interface + preferences. See <a href="#INTERFACE">INTERFACE</a>. + +-<p>The effect of each drag operation not only depends on the behavior ++ <p>The effect of each drag operation not only depends on the behavior + button but whether the beginning or end of the edit is being dragged. + When you release the mouse button, the trimming operation is performed. + +-<p>In a <em>Drag all following edits</em> operation, the beginning of the ++ <p>In a <em>Drag all following edits</em> 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 +@@ -2354,85 +2419,89 @@ + shift. Finally, if you drag the end of the edit past the start of the + edit, the edit is deleted. + +-<p>In a <em>Drag only one edit</em> operation, the behavior is the same when ++ <p>In a <em>Drag only one edit</em> operation, the behavior is the same when + you drag the beginning or end of an edit. The only difference is none + of the other edits in the track shift. Instead, anything adjacent to + the current edit expands or shrinks to fill gaps left by the drag + operation. + +-<p>In a <em>Drag source only</em> operation, nothing is cut or pasted. If ++ <p>In a <em>Drag source only</em> operation, nothing is cut or pasted. If + you move the beginning or end of the edit forward, the source reference + in the edit shifts forward. If you move the beginning or end of the + edit backward, the source reference shifts backward. Where the edit + appears in the timeline remains the same but the source shifts. + +-<p>For all file formats besides still images, the extent of the trimming ++ <p>For all file formats besides still images, the extent of the trimming + operation is clamped to the source file length. Attempting to drag the + start of the edit beyond the start of the source clamps it to the + source start. + +-<p>In all trimming operations, all edits which start on the same position ++ <p>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. + ++<div class="node"> + <p><hr> + Node:<a name="USING%20EFFECTS">USING EFFECTS</a>, +-Next:<a rel=next accesskey=n href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>, +-Previous:<a rel=previous accesskey=p href="#EDITING">EDITING</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>, ++Previous:<a rel="previous" accesskey="p" href="#EDITING">EDITING</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>USING EFFECTS</h2> ++<h2 class="chapter">USING EFFECTS</h2> + +-<p>It would be sufficient to perform all changes to the timeline using ++ <p>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. + +-<p>Effects fall into three categories, and each effect in a category is ++ <p>Effects fall into three categories, and each effect in a category is + applied using the same procedure. + +-<ul> +-<li><a accesskey=1 href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a>: +-<li><a accesskey=2 href="#RENDERED%20EFFECTS">RENDERED EFFECTS</a>: +-<li><a accesskey=3 href="#TRANSITIONS">TRANSITIONS</a>: +-<li><a accesskey=4 href="#LADSPA%20EFFECTS">LADSPA EFFECTS</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a>: ++<li><a accesskey="2" href="#RENDERED%20EFFECTS">RENDERED EFFECTS</a>: ++<li><a accesskey="3" href="#TRANSITIONS">TRANSITIONS</a>: ++<li><a accesskey="4" href="#LADSPA%20EFFECTS">LADSPA EFFECTS</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="REALTIME%20EFFECTS">REALTIME EFFECTS</a>, +-Next:<a rel=next accesskey=n href="#RENDERED%20EFFECTS">RENDERED EFFECTS</a>, +-Up:<a rel=up accesskey=u href="#USING%20EFFECTS">USING EFFECTS</a> ++Next:<a rel="next" accesskey="n" href="#RENDERED%20EFFECTS">RENDERED EFFECTS</a>, ++Up:<a rel="up" accesskey="u" href="#USING%20EFFECTS">USING EFFECTS</a> + <br> ++</div> + +-<h3>REALTIME EFFECTS</h3> ++<h3 class="section">REALTIME EFFECTS</h3> + +-<p>These are layered under the track they apply to. They process the ++ <p>These are layered under the track they apply to. They process the + track when the track is played back, with no permanent storage of the + output except when the project is rendered. + +-<p>All the realtime effects are listed in the resource window, divided ++ <p>All the realtime effects are listed in the resource window, divided + into two groups: audio effects and video effects. Audio effects should + be dragged from the resource window onto audio tracks. Video effects + should be dragged onto video tracks. + +-<p>If there is data on the destination track, the effect is applied to the ++ <p>If there is data on the destination track, the effect is applied to the + entire track. If there is no data on the track the effect is deleted. + Finally, if a region of the track is selected the effect is pasted into + the region, regardless of whether there is data. + +-<p>Some of the effects don't process data but synthesize data. In the ++ <p>Some of the effects don't process data but synthesize data. In the + case of a synthesis effect, you'll want to select a region of the + track so the dragging operation pastes it without deleting it. + +-<p>When dragging more than one effect onto a track, you'll see the effects ++ <p>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. + +-<p>In addition to dragging from the resource window, effects may be ++ <p>In addition to dragging from the resource window, effects may be + applied to a track by a popup menu. Right click on a track and select + <em>Attach effect</em> from the popup. The attach effect dialog gives + you more control than pure dragging and dropping. For one thing, the +@@ -2442,7 +2511,7 @@ + The effect is the same as if the effect was dragged from the resource + window. + +-<p>When an effect exists under a track, it most often needs to be ++ <p>When an effect exists under a track, it most often needs to be + configured. Go to the effect and right click on it to bring up the + effect popup. In the effect popup is a <em>show</em> option. The show + option causes the GUI for the effect to appear under the cursor. Most +@@ -2451,39 +2520,41 @@ + tweek parameters in the effect GUI, the parameters normally effect the + entire duration of the effect. + +-<ul> +-<li><a accesskey=1 href="#REALTIME%20EFFECT%20TYPES">REALTIME EFFECT TYPES</a>: +-<li><a accesskey=2 href="#EDITING%20REALTIME%20EFFECTS">EDITING REALTIME EFFECTS</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#REALTIME%20EFFECT%20TYPES">REALTIME EFFECT TYPES</a>: ++<li><a accesskey="2" href="#EDITING%20REALTIME%20EFFECTS">EDITING REALTIME EFFECTS</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="REALTIME%20EFFECT%20TYPES">REALTIME EFFECT TYPES</a>, +-Next:<a rel=next accesskey=n href="#EDITING%20REALTIME%20EFFECTS">EDITING REALTIME EFFECTS</a>, +-Up:<a rel=up accesskey=u href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a> ++Next:<a rel="next" accesskey="n" href="#EDITING%20REALTIME%20EFFECTS">EDITING REALTIME EFFECTS</a>, ++Up:<a rel="up" accesskey="u" href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a> + <br> ++</div> + +-<h4>REALTIME EFFECT TYPES</h4> ++<h4 class="subsection">REALTIME EFFECT TYPES</h4> + +-<p>The two other effect types supported by the Attach Effect dialog are ++ <p>The two other effect types supported by the Attach Effect dialog are + recycled effects. In order to use a recycled effect, three requiremenets + must be met: + +-<ul> ++ <ul> + +-<li>There must be other effects in the timeline. ++ <li>There must be other effects in the timeline. + +-<li> ++ <li> + 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. + +-<li> ++ <li> + The insertion point or selected region must start inside the other effects. + +-</ul> ++ </ul> + +-<p>In the case of a shared effect, these conditions must be true. In the ++ <p>In the case of a shared effect, these conditions must be true. In the + case of a shared track, there merely must be another track on the + timeline of the same type as the track you're applying an effect to. + If you right clicked on a video track to attach an effect, there won't +@@ -2491,19 +2562,19 @@ + 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. + +-<p>If shared effects or shared tracks are available, they appear in the ++ <p>If shared effects or shared tracks are available, they appear in the + <em>shared effects</em> and <em>shared tracks</em> columns. The + <em>attach</em> button under each column causes anything highlighted in + the column to be attached under the current track. + +-<p>Shared effects and shared tracks allow very unique things to be done. ++ <p>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. + +-<p>When a shared effect is played back, it's processed just like a normal ++ <p>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 +@@ -2511,7 +2582,7 @@ + some value. The reverb mixes tracks together to simulate ambience. + The compressor uses one of the sharing tracks as the trigger. + +-<p>When an original track has a <em>shared track</em> as one of its effects, ++ <p>When an original track has a <em>shared track</em> as one of its effects, + the shared track itself is used as a realtime effect. This is more + commonly known as <em>bouncing tracks</em> but Cinelerra achieves the + same operation by attaching shared tracks. The fade and any effects in +@@ -2519,7 +2590,7 @@ + track has processed the data, the original track performs any effects + which come below the shared track and then composites it on the output. + +-<p>In addition, once the shared track has processed the output of the ++ <p>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 +@@ -2529,7 +2600,7 @@ + <img src="mutepatch_up.png" alt="mutepatch_up.png"> mute toggle next to each track for whom you don't + want to mix on the output. + +-<p>Suppose you were making video and you did want the shared track to ++ <p>Suppose you were making video and you did want the shared track to + composite the original track's data on the output a second time. In + 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 +@@ -2537,159 +2608,165 @@ + 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. + ++<div class="node"> + <p><hr> + Node:<a name="EDITING%20REALTIME%20EFFECTS">EDITING REALTIME EFFECTS</a>, +-Previous:<a rel=previous accesskey=p href="#REALTIME%20EFFECT%20TYPES">REALTIME EFFECT TYPES</a>, +-Up:<a rel=up accesskey=u href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a> ++Previous:<a rel="previous" accesskey="p" href="#REALTIME%20EFFECT%20TYPES">REALTIME EFFECT TYPES</a>, ++Up:<a rel="up" accesskey="u" href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a> + <br> ++</div> + +-<h4>EDITING REALTIME EFFECTS</h4> ++<h4 class="subsection">EDITING REALTIME EFFECTS</h4> + +-<p>Many operations exist for manipulating effects once they are in the ++ <p>Many operations exist for manipulating effects once they are in the + timeline. Because mixing effects and media is such complex business, + the methods used in editing effects aren't as concise as cutting and + pasting. Some of the editing happens by dragging in/out points, some + of the editing happens through popup menus, and some of it happens by + dragging effects. + +-<p>Normally when you edit tracks, the effects follow the editing ++ <p>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 <em>Settings->edit effects</em> in the project + window. This decouples effects from editing operations, but what if + you just want to edit the effects? + +-<p>Move the timeline cursor over the effect borders until it changes to a ++ <p>Move the timeline cursor over the effect borders until it changes to a + resize left or resize right icon. In this state, if you drag the end + of the effect, it performs an edit just like dragging the end of a + track does. + +-<p>The three editing behaviors of track trimming apply to effect trimming ++ <p>The three editing behaviors of track trimming apply to effect trimming + and they are bound to the mouse buttons that you set in <em>interface + preferences</em>. See <a href="#INTERFACE">INTERFACE</a>. When you perform a trim edit on an + effect, the effect boundary is moved by dragging on it. Unlike track + editing, the effect has no source length. You can extend the end of an + effect as much as desired without being limited. + +-<p>Also unlike track editing, the starting position of the drag operation ++ <p>Also unlike track editing, the starting position of the drag operation + doesn't bind the edit decision to media. The media the effect is bound + to doesn't follow effect edits. Other effects; however, do follow + editing decisions made on an effect. If you drag the end of an effect + which is lined up to effects on other tracks, the effects on the other + tracks will be edited while the media stays the same. + +-<p>What happens if you trim the end of an effect in, leaving a lot of ++ <p>What happens if you trim the end of an effect in, leaving a lot of + unaffected time near the end of the track? When you drag an effect in + from the Resource Window you can insert the effect in the portion of + the row unoccupied by the trimming operation. Realtime effects are + organized into rows under the track. Each row can have multiple + effects. + +-<p>In addition to trimming, you can move effects up or down. Every track ++ <p>In addition to trimming, you can move effects up or down. Every track + can have a stack of effects under it. By moving an effect up or down + you change the order in which effects are processed in the stack. Go + to an effect and right click to bring up the effect menu. The + <em>Move up</em> and <em>Move down</em> options move the effect up or down. + +-<p>When you're moving effects up or down, be aware that if they're shared ++ <p>When you're moving effects up or down, be aware that if they're shared + as <em>shared effects</em>, any references will be pointing to a + different effect after the move operation. + +-<p>Finally, there's dragging of effects. Dragging effects works just like ++ <p>Finally, there's dragging of effects. Dragging effects works just like + dragging edits. You must select the <img src="arrow.png" alt="arrow.png"> arrow to enter drag and + drop mode before dragging effects. The effects snap to media + boundaries, effect boundaries, and tracks. Be aware if you drag a + reference to a shared effect, the reference will usually point to the + wrong effect afterwards. + +-<p>Right click on an effect to bring up a menu for the effect. Select ++ <p>Right click on an effect to bring up a menu for the effect. Select + <em>attach...</em> to change the effect or change the reference if it is + a shared effect. + ++<div class="node"> + <p><hr> + Node:<a name="RENDERED%20EFFECTS">RENDERED EFFECTS</a>, +-Next:<a rel=next accesskey=n href="#TRANSITIONS">TRANSITIONS</a>, +-Previous:<a rel=previous accesskey=p href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a>, +-Up:<a rel=up accesskey=u href="#USING%20EFFECTS">USING EFFECTS</a> ++Next:<a rel="next" accesskey="n" href="#TRANSITIONS">TRANSITIONS</a>, ++Previous:<a rel="previous" accesskey="p" href="#REALTIME%20EFFECTS">REALTIME EFFECTS</a>, ++Up:<a rel="up" accesskey="u" href="#USING%20EFFECTS">USING EFFECTS</a> + <br> ++</div> + +-<h3>RENDERED EFFECTS</h3> ++<h3 class="section">RENDERED EFFECTS</h3> + +-<p>Another type of effect is performed on a section of the track and the ++ <p>Another type of effect is performed on a section of the track and the + result stored somewhere before it is played back. The result is + usually pasted into the track to replace the original data. + +-<p>The rendered effects are not listed in the resource window but instead ++ <p>The rendered effects are not listed in the resource window but instead + are accessed through the <em>Audio->Render effect</em> and + <em>Video->Render effect</em> menu options. Each of these menu options + brings up a dialog for the rendered effect. Rendered effects apply to + only one type of track, either audio or video. If no tracks of the + type exist, an error pops up. + +-<p>A region of the timeline to apply the effect to must be defined before ++ <p>A region of the timeline to apply the effect to must be defined before + selecting <em>Render effect...</em>. If no in/out points and no + highlighted region exists, the entire region after the insertion point + is treated as the affected region. Otherwise, the region between the + in/out points or the highlighted region is the affected region. + +-<p>In the render effect dialog is a list of all the realtime and all the ++ <p>In the render effect dialog is a list of all the realtime and all the + rendered effects. The difference here is that the realtime effects are + rendered to disk and not applied under the track. Highlight an effect + in the list to designate it as the one being performed. + +-<p>Define a file to render the effect to in the <em>Select a file to ++ <p>Define a file to render the effect to in the <em>Select a file to + render to</em> box. The <img src="magnify.png" alt="magnify.png"> magnifying glass allows file + selection from a list. + +-<p>Select a file format which can handle the track type. The ++ <p>Select a file format which can handle the track type. The + <img src="wrench.png" alt="wrench.png"> wrench allows configuration specific to the file format. + +-<p>There is also an option for creating a new file at each label. If you ++ <p>There is also an option for creating a new file at each label. If you + have a CD rip on the timeline which you want to divide into different + files, the labels would become dividing points between the files if + this option were selected. When the timeline is divided by labels, the + effect is re-initialized at every label. Normalize operations take the + peak in the current file and not in the entire timeline. + +-<p>Finally there is an insertion strategy just like in the render dialog. ++ <p>Finally there is an insertion strategy just like in the render dialog. + It should be noted that even though the effect applies only to audio or + video, the insertion strategy applies to all tracks just like a + clipboard operation. + +-<p>When you click <em>OK</em> in the effect dialog, it calls the GUI of the ++ <p>When you click <em>OK</em> 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. + ++<div class="node"> + <p><hr> + Node:<a name="TRANSITIONS">TRANSITIONS</a>, +-Next:<a rel=next accesskey=n href="#LADSPA%20EFFECTS">LADSPA EFFECTS</a>, +-Previous:<a rel=previous accesskey=p href="#RENDERED%20EFFECTS">RENDERED EFFECTS</a>, +-Up:<a rel=up accesskey=u href="#USING%20EFFECTS">USING EFFECTS</a> ++Next:<a rel="next" accesskey="n" href="#LADSPA%20EFFECTS">LADSPA EFFECTS</a>, ++Previous:<a rel="previous" accesskey="p" href="#RENDERED%20EFFECTS">RENDERED EFFECTS</a>, ++Up:<a rel="up" accesskey="u" href="#USING%20EFFECTS">USING EFFECTS</a> + <br> ++</div> + +-<h3>TRANSITIONS</h3> ++<h3 class="section">TRANSITIONS</h3> + +-<p>When one edit ends and another edit begins, the default behaviour is to ++ <p>When one edit ends and another edit begins, the default behaviour is to + have the first edit's output immediately become the output of the + 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. + +-<p>Cinelerra supports audio and video transitions, all of which are listed ++ <p>Cinelerra supports audio and video transitions, all of which are listed + in the resource window. Transitions may only apply to the matching + track type. Transitions under <em>audio transitions</em> can only apply + to audio tracks. Transitions under <em>video transitions</em> can only + apply to video tracks. + +-<p>Load a video file and cut a section from the center so the edit point ++ <p>Load a video file and cut a section from the center so the edit point + is visible on the timeline. Go the resource window and click on the + <em>Video transitions</em> folder. Drag a transition from the transition + list onto the second video edit on the timeline. A box highlights over + where the transition will appear. Releasing it over the second edit + applies the transition between the first and second edit. + +-<p>You can now scrub over the transition with the transport controls and ++ <p>You can now scrub over the transition with the transport controls and + watch the output in the <em>Compositor window</em>. Scrubbing with the + insertion point doesn't normally show transitions because the + transition durations are usually too short. The exact point in time +@@ -2698,7 +2775,7 @@ + second edit. Therefore, the first asset needs to have enough data + after the edit point to fill the transition into the second edit. + +-<p>Once the transition is in place, it can be edited similarly to an ++ <p>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 <em>show</em> option brings up specific + parameters for the transition in question if there are any. The +@@ -2707,7 +2784,7 @@ + transitions until they are changed again. Finally, the <em>detach</em> + option removes the transition from the timeline. + +-<p>Dragging and dropping transitions from the Resource window to the ++ <p>Dragging and dropping transitions from the Resource window to the + Program window can be really slow and tiring. Fortunately, once you + drag a transition from the Resource window, the <em>U</em> and <em>u</em> + keys will paste the same transition. The <em>U</em> key pastes the last +@@ -2715,22 +2792,24 @@ + on all the recordable tracks. If the insertion point or in point is + over an edit, the beginning of the edit is covered by the transition. + +-<p>It should be noted that when playing transitions from the timeline to a ++ <p>It should be noted that when playing transitions from the timeline to a + hardware accelerated video device, the hardware acceleration will + usually be turned off momentarily during the transition and on after + the transition in order to render the transition. Using an + unaccelerated video device for the entire timeline normally removes the + disturbance. + ++<div class="node"> + <p><hr> + Node:<a name="LADSPA%20EFFECTS">LADSPA EFFECTS</a>, +-Previous:<a rel=previous accesskey=p href="#TRANSITIONS">TRANSITIONS</a>, +-Up:<a rel=up accesskey=u href="#USING%20EFFECTS">USING EFFECTS</a> ++Previous:<a rel="previous" accesskey="p" href="#TRANSITIONS">TRANSITIONS</a>, ++Up:<a rel="up" accesskey="u" href="#USING%20EFFECTS">USING EFFECTS</a> + <br> ++</div> + +-<h3>LADSPA EFFECTS</h3> ++<h3 class="section">LADSPA EFFECTS</h3> + +-<p>LADSPA effects are supported in realtime and rendered mode for audio. ++ <p>LADSPA effects are supported in realtime and rendered mode for audio. + The LADSPA plugins you get from the internet vary in quality. Most + can't be tweeked in realtime very easily and work better when + rendered. Some crash and some can only be applied to one track due to +@@ -2740,20 +2819,22 @@ + effects appear in the audio folder as the hammer and screwdriver, to + signify that they are Plugins for Linux Audio Developers. + +-<p>LADSPA Effects are enabled merely by setting the <em>LADSPA_PATH</em> ++ <p>LADSPA Effects are enabled merely by setting the <em>LADSPA_PATH</em> + environment variable to the location of your LADSPA plugins or putting + them in the <em>/usr/lib/cinelerra</em> directory. + ++<div class="node"> + <p><hr> + Node:<a name="SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>, +-Next:<a rel=next accesskey=n href="#COMPOSITING">COMPOSITING</a>, +-Previous:<a rel=previous accesskey=p href="#USING%20EFFECTS">USING EFFECTS</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#COMPOSITING">COMPOSITING</a>, ++Previous:<a rel="previous" accesskey="p" href="#USING%20EFFECTS">USING EFFECTS</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>SETTING PROJECT ATTRIBUTES</h2> ++<h2 class="chapter">SETTING PROJECT ATTRIBUTES</h2> + +-<p>When you play media files in Cinelerra, the media files have a certain ++ <p>When you play media files in Cinelerra, the media files have a certain + number of tracks, a certain frame size, a certain sample size, and so + on and so forth. No matter what the media file has; however, it is + still played back according to the project attributes. If an audio +@@ -2762,7 +2843,7 @@ + attributes, it is composited on a black frame, either cropped or + bordered with black. + +-<p>The project attributes are adjusted in <em>settings->format</em> and in ++ <p>The project attributes are adjusted in <em>settings->format</em> and in + to a more limited extent in <em>file->new</em>. When you adjust project + settings in <em>file->new</em> a new timeline is created with no data. + Every timeline created from this point uses the same settings. When +@@ -2770,13 +2851,13 @@ + recreated with no data but every timeline created from this point uses + the same settings. + +-<p>In addition to the traditional settings for sample rate, frame rate, ++ <p>In addition to the traditional settings for sample rate, frame rate, + frame size, Cinelerra uses some unusual settings like <em>channel + positions, color model, and aspect ratio.</em> + +-<ul> ++ <ul> + +-<li> ++ <li> + 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 +@@ -2787,13 +2868,13 @@ + + <br><p> + <br><p> +-<img src="channelpositions.png" alt="channelpositions.png"> ++ <img src="channelpositions.png" alt="channelpositions.png"> + <br><p> + <br><p> +-<p>But different channels can be positioned very close together to make ++ <p>But different channels can be positioned very close together to make + them have the same output. + +-</p><li> ++ </p><li> + Color model is very important for video playback. 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 +@@ -2803,15 +2884,15 @@ + device. The selection of internal colormodel determines how accurate + and fast the effects are. + +-<p>Cinelerra colormodels are described using a certain packing order of ++ <p>Cinelerra colormodels are described using a certain packing order of + components and a certain number of bits for each component. The + packing order is printed on the left and the bit allocation is printed + on the right. + +-<p><em>RGBA8888</em> uses red, green, blue, and alpha with 8 bits per ++ <p><em>RGBA8888</em> uses red, green, blue, and alpha with 8 bits per + channel. + +-<p>In order to do effects which involve alpha channels, a colormodel with ++ <p>In order to do effects which involve alpha channels, a colormodel with + an alpha channel must be selected. These are RGBA8888, YUVA8888, + RGBA16161616, YUVA16161616. The 4 channel colormodels are notoriously + slower than 3 channel colormodels, with the slowest being +@@ -2820,29 +2901,31 @@ + to do anything, so it's a good idea to try the effect without alpha + channels. + +-<p>The YUV colormodels are usually faster than RGB colormodels when using ++ <p>The YUV colormodels are usually faster than RGB colormodels when using + compressed footage. They also destroy fewer colors than RGB + colormodels. If footage stored as JPEG or MPEG is processed many times + in RGB, the colors will fade while they won't if processed in YUV. + +-</p><li> ++ </p><li> + 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. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="COMPOSITING">COMPOSITING</a>, +-Next:<a rel=next accesskey=n href="#KEYFRAMES">KEYFRAMES</a>, +-Previous:<a rel=previous accesskey=p href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#KEYFRAMES">KEYFRAMES</a>, ++Previous:<a rel="previous" accesskey="p" href="#SETTING%20PROJECT%20ATTRIBUTES">SETTING PROJECT ATTRIBUTES</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>COMPOSITING</h2> ++<h2 class="chapter">COMPOSITING</h2> + +-<p>A large amount of Cinelerra's binary size is directed towards ++ <p>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 +@@ -2850,29 +2933,31 @@ + operation and plays back through the compositing engine only then. + Otherwise, it uses the fastest decoder available in the hardware. + +-<p>Compositing operations are done on the timeline and in the Compositor ++ <p>Compositing operations are done on the timeline and in the Compositor + window. Shortcuts exist in the Resource window for changing project + attributes. Once some video files are on the timeline, the compositor + window is a good place to try compositing. + +-<ul> +-<li><a accesskey=1 href="#THE%20CAMERA%20AND%20PROJECTOR">THE CAMERA AND PROJECTOR</a>: +-<li><a accesskey=2 href="#MASKS">MASKS</a>: +-<li><a accesskey=3 href="#CROPPING">CROPPING</a>: +-<li><a accesskey=4 href="#SAFE%20REGIONS">SAFE REGIONS</a>: +-<li><a accesskey=5 href="#OVERLAY%20MODES">OVERLAY MODES</a>: +-<li><a accesskey=6 href="#TRACK%20AND%20OUTPUT%20SIZES">TRACK AND OUTPUT SIZES</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#THE%20CAMERA%20AND%20PROJECTOR">THE CAMERA AND PROJECTOR</a>: ++<li><a accesskey="2" href="#MASKS">MASKS</a>: ++<li><a accesskey="3" href="#CROPPING">CROPPING</a>: ++<li><a accesskey="4" href="#SAFE%20REGIONS">SAFE REGIONS</a>: ++<li><a accesskey="5" href="#OVERLAY%20MODES">OVERLAY MODES</a>: ++<li><a accesskey="6" href="#TRACK%20AND%20OUTPUT%20SIZES">TRACK AND OUTPUT SIZES</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="THE%20CAMERA%20AND%20PROJECTOR">THE CAMERA AND PROJECTOR</a>, +-Next:<a rel=next accesskey=n href="#MASKS">MASKS</a>, +-Up:<a rel=up accesskey=u href="#COMPOSITING">COMPOSITING</a> ++Next:<a rel="next" accesskey="n" href="#MASKS">MASKS</a>, ++Up:<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a> + <br> ++</div> + +-<h3>THE CAMERA AND PROJECTOR</h3> ++<h3 class="section">THE CAMERA AND PROJECTOR</h3> + +-<p>In the compositor window, the most important functions are the ++ <p>In the compositor window, the most important functions are the + <img src="camera.png" alt="camera.png"> camera button and the <img src="projector.png" alt="projector.png"> projector + button. These control operation of the camera and projector. Inside + Cinelerra's compositing pipeline, the camera determines where in the +@@ -2885,19 +2970,19 @@ + + <br><p> + <br><p> +-<img src="compositing_pipeline.png" alt="compositing_pipeline.png"> ++ <img src="compositing_pipeline.png" alt="compositing_pipeline.png"> + <br><p> + <br><p> +-<p><em>Visual representation of the compositing pipeline</em>. ++ <p><em>Visual representation of the compositing pipeline</em>. + +-<p>When editing the camera and projector in the compositing window, the ++ <p>When editing the camera and projector in the compositing window, the + first track with <em>record</em> 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 <em>shift-click</em> on the record icon of the track. This + solos the track. + +-<p>When the <em>projector</em> button is enabled in the compositor window, ++ <p>When the <em>projector</em> 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. <em>shift-dragging</em> anywhere +@@ -2905,46 +2990,46 @@ + the video. Once you've positioned the video with the projector, you're + ready to master the camera. + +-<p>Select the <img src="camera.png" alt="camera.png"> camera button to enable camera editing mode. ++ <p>Select the <img src="camera.png" alt="camera.png"> 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. + +-<p>For example, when you drag the camera left, the video moves right. ++ <p>For example, when you drag the camera left, the video moves right. + When you drag the camera up, the video moves down. When you shift-drag + the camera, the effect is the same as if you zoomed in or out of the + source. The intention of the camera is to produce still photo panning, + while the intention of the projector is to composite several sources in + the same scene. + +-<p>In the compositing window, there is a popup menu of options for the ++ <p>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. + +-<ul> ++ <ul> + +-<li>Reset Camera causes the camera to return to the center position. ++ <li>Reset Camera causes the camera to return to the center position. + +-<li>Reset Projector causes the projector to return to the center. ++ <li>Reset Projector causes the projector to return to the center. + +-</ul> ++ </ul> + +-<p>The camera and projector have shortcut operations neither in the popup ++ <p>The camera and projector have shortcut operations neither in the popup + menu or represented in video overlays. These are accessed in the + <em>Tool window</em>. Most operations in the Compositor window have a + tool window which is enabled by activating the <img src="toolwindow.png" alt="toolwindow.png"> + question mark. + +-<p>In the case of the camera and projector, the tool window shows x, y, ++ <p>In the case of the camera and projector, the tool window shows x, y, + and z coordinates. By either tumbling or entering text directly, the + camera and projector can be precisely positioned. 9 justification + types are also defined for easy access. A popular justification + operation is upper left projection after image reduction. This is used + when reducing the size of video with aspect ratio adjustment. + +-<p>The translation effect allows simultaneous aspect ratio conversion and ++ <p>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 +@@ -2952,7 +3037,7 @@ + effects, this produces just the cropped center portion of the video in + the output. + +-<p>The translation effect is dropped onto the video track. The input ++ <p>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 +@@ -2960,21 +3045,23 @@ + Instead, we leave <em>out x and out y</em> at 0 and use the projector's + tool window. + +-<p>Merely by selecting <img src="left_justify.png" alt="left_justify.png"> left justify and ++ <p>Merely by selecting <img src="left_justify.png" alt="left_justify.png"> left justify and + <img src="top_justify.png" alt="top_justify.png"> top justify, the projector displays the reduced + image from the top left corner of the temporary in the center of the + output. + ++<div class="node"> + <p><hr> + Node:<a name="MASKS">MASKS</a>, +-Next:<a rel=next accesskey=n href="#CROPPING">CROPPING</a>, +-Previous:<a rel=previous accesskey=p href="#THE%20CAMERA%20AND%20PROJECTOR">THE CAMERA AND PROJECTOR</a>, +-Up:<a rel=up accesskey=u href="#COMPOSITING">COMPOSITING</a> ++Next:<a rel="next" accesskey="n" href="#CROPPING">CROPPING</a>, ++Previous:<a rel="previous" accesskey="p" href="#THE%20CAMERA%20AND%20PROJECTOR">THE CAMERA AND PROJECTOR</a>, ++Up:<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a> + <br> ++</div> + +-<h3>MASKS</h3> ++<h3 class="section">MASKS</h3> + +-<p>Masks select a region of the video for either displaying or hiding. ++ <p>Masks select a region of the video for either displaying or hiding. + Masks are also used in conjunction with another effect to isolate the + effect to a certain region of the frame. A copy of one video track may + be delayed slightly and unmasked in locations where the one copy has +@@ -2984,24 +3071,24 @@ + vanilla track shows through. Removal of boom microphones, airplanes, + and housewives are other mask uses. + +-<p>The order of the compositing pipeline affects what can be done with ++ <p>The order of the compositing pipeline affects what can be done with + masks. Mainly, masks are performed on the temporary after effects and + before the projector. This means multiple tracks can be bounced to a + masked track and projected with the same mask. + +-<p>Our compositing pipeline graph now has a masking stage. There are 8 ++ <p>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. + + <br><p> + <br><p> +-<img src="compositing_pipeline2.png" alt="compositing_pipeline2.png"> ++ <img src="compositing_pipeline2.png" alt="compositing_pipeline2.png"> + <br><p> + <br><p> +-<p><em>Compositing pipeline with masks</em> ++ <p><em>Compositing pipeline with masks</em> + +-<p>To define a mask, go into the Compositor window and enable the ++ <p>To define a mask, go into the Compositor window and enable the + <img src="mask.png" alt="mask.png"> <em>mask</em> 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 +@@ -3009,48 +3096,48 @@ + effect of the mask is going to be. Creating each point of the mask + expands a rubber band curve. + +-<p>Once points are defined, they can be moved by <em>ctrl-dragging</em> in ++ <p>Once points are defined, they can be moved by <em>ctrl-dragging</em> 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 + <em>shift-dragging</em> in the vicinity of the corner. Then + <em>shift-dragging</em> near the in or out point causes the point to + move. + +-<p>Finally, once you have a mask, the mask can be translated in one piece ++ <p>Finally, once you have a mask, the mask can be translated in one piece + by <em>alt-dragging</em> the mask. Mask editing in Cinelerra is + identical to how The Gimp edits masks except in this case the effect of + the mask is always on. + +-<p>The masks have many more parameters which couldn't be represented with ++ <p>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 <img src="toolwindow.png" alt="toolwindow.png"> question mark when the <img src="mask.png" alt="mask.png"> + mask toggle is highlighted brings up the mask options. + +-<p>The <em>mode</em> of the mask determines if the mask removes data or ++ <p>The <em>mode</em> of the mask determines if the mask removes data or + makes data visible. If the mode is subtractive, the mask causes video + to disappear. If the mode is additive, the mask causes video to appear + and everything outside the mask to disappear. + +-<p>The <em>value</em> of the mask determines how extreme the addition or ++ <p>The <em>value</em> of the mask determines how extreme the addition or + subtraction is. In the subtractive mode, higher values subtract more + alpha. In the additive mode, higher values make the region in the mask + brighter while the region outside the mask is always hidden. + +-<p>The mask number determines which one of the 8 possible masks we're ++ <p>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 <em>mask number</em> to cause another mask to be edited. The + previous mask is still active but only the curve overlay for the + currently selected mask is visible. + +-<p>When multiple masks are used, their effects are ORed together. Every ++ <p>When multiple masks are used, their effects are ORed together. Every + mask in a single track uses the same value and mode. + +-<p>The edges of a mask are hard by default but this rarely is desired. ++ <p>The edges of a mask are hard by default but this rarely is desired. + The <em>feather</em> parameter determines how many pixels to feather the + mask. This creates softer edges but takes longer to render. + +-<p>Finally, there are parameters which affect one point on the current ++ <p>Finally, there are parameters which affect one point on the current + mask instead of the whole mask. These are <em>Delete, x, y</em>. The + active point is defined as the last point dragged in the compositor + window. Any point can be activated merely by <em>ctrl-clicking</em> near +@@ -3058,16 +3145,18 @@ + <em>Delete</em> deletes it and <em>x, y</em> allow repositioning by numeric + entry. + ++<div class="node"> + <p><hr> + Node:<a name="CROPPING">CROPPING</a>, +-Next:<a rel=next accesskey=n href="#SAFE%20REGIONS">SAFE REGIONS</a>, +-Previous:<a rel=previous accesskey=p href="#MASKS">MASKS</a>, +-Up:<a rel=up accesskey=u href="#COMPOSITING">COMPOSITING</a> ++Next:<a rel="next" accesskey="n" href="#SAFE%20REGIONS">SAFE REGIONS</a>, ++Previous:<a rel="previous" accesskey="p" href="#MASKS">MASKS</a>, ++Up:<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a> + <br> ++</div> + +-<h3>CROPPING</h3> ++<h3 class="section">CROPPING</h3> + +-<p>Cropping changes the value of the output dimensions and the projector ++ <p>Cropping changes the value of the output dimensions and the projector + to reduce the visible picture area. Enable the <img src="crop.png" alt="crop.png"> crop + toggle and the <img src="toolwindow.png" alt="toolwindow.png"> tool window to perform cropping in + the compositing window. This draws a rectangle over the video. +@@ -3076,79 +3165,85 @@ + window allows text entry of the coordinates. When the rectangle is + positioned, hit the <em>do it</em> button in the tool window. + ++<div class="node"> + <p><hr> + Node:<a name="SAFE%20REGIONS">SAFE REGIONS</a>, +-Next:<a rel=next accesskey=n href="#OVERLAY%20MODES">OVERLAY MODES</a>, +-Previous:<a rel=previous accesskey=p href="#CROPPING">CROPPING</a>, +-Up:<a rel=up accesskey=u href="#COMPOSITING">COMPOSITING</a> ++Next:<a rel="next" accesskey="n" href="#OVERLAY%20MODES">OVERLAY MODES</a>, ++Previous:<a rel="previous" accesskey="p" href="#CROPPING">CROPPING</a>, ++Up:<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a> + <br> ++</div> + +-<h3>SAFE REGIONS</h3> ++<h3 class="section">SAFE REGIONS</h3> + +-<p>On consumer displays the borders of the image are cut off and within ++ <p>On consumer displays the borders of the image are cut off and within + the cutoff point is a region which isn't always square like it is in + the compositor window. The borders are intended for scratch room and + vertical blanking data. You can show where these borders are by + enabling the <img src="titlesafe.png" alt="titlesafe.png"> safe regions toggle. Keep titles inside + the inner rectangle and keep action inside the outer rectangle. + ++<div class="node"> + <p><hr> + Node:<a name="OVERLAY%20MODES">OVERLAY MODES</a>, +-Next:<a rel=next accesskey=n href="#TRACK%20AND%20OUTPUT%20SIZES">TRACK AND OUTPUT SIZES</a>, +-Previous:<a rel=previous accesskey=p href="#SAFE%20REGIONS">SAFE REGIONS</a>, +-Up:<a rel=up accesskey=u href="#COMPOSITING">COMPOSITING</a> ++Next:<a rel="next" accesskey="n" href="#TRACK%20AND%20OUTPUT%20SIZES">TRACK AND OUTPUT SIZES</a>, ++Previous:<a rel="previous" accesskey="p" href="#SAFE%20REGIONS">SAFE REGIONS</a>, ++Up:<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a> + <br> ++</div> + +-<h3>OVERLAY MODES</h3> ++<h3 class="section">OVERLAY MODES</h3> + +-<p>Every track has an overlay mode, accessible by expanding the track. ++ <p>Every track has an overlay mode, accessible by expanding the track. + Select the <img src="expandpatch_checked.png" alt="expandpatch_checked.png"> expand track toggle to view all + the options for a video track. The overlay mode of the track is + <em>normal</em> by default. Select other modes by selecting the + <em>normal</em> button. Overlay modes are processed inside the projector + stage of compositing. The different modes are summarized below. + +-<ul> ++ <ul> + +-<li> ++ <li> + Normal uses a traditional Porter-Diff equation to blend tracks with + alpha. When no alpha exists, the new track replaces the output. + +-<li> ++ <li> + In addition, 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. + +-<li> ++ <li> + In subtraction, the current track is subtracted from the output and the + result is alpha blended onto the output. + +-<li> ++ <li> + 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. + +-<li> ++ <li> + Divide divides the current track by the output and the result is + blended into the output. It usually results in overloaded levels. + +-<li> ++ <li> + Replace does no blending and overwrites the output with the current + track. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="TRACK%20AND%20OUTPUT%20SIZES">TRACK AND OUTPUT SIZES</a>, +-Previous:<a rel=previous accesskey=p href="#OVERLAY%20MODES">OVERLAY MODES</a>, +-Up:<a rel=up accesskey=u href="#COMPOSITING">COMPOSITING</a> ++Previous:<a rel="previous" accesskey="p" href="#OVERLAY%20MODES">OVERLAY MODES</a>, ++Up:<a rel="up" accesskey="u" href="#COMPOSITING">COMPOSITING</a> + <br> ++</div> + +-<h3>TRACK AND OUTPUT SIZES</h3> ++<h3 class="section">TRACK AND OUTPUT SIZES</h3> + +-<p>The size of the temporary and the size of the output in our compositing ++ <p>The size of the temporary and the size of the output in our compositing + pipeline are independant and variable. This fits into everything + covered so far. The camera's viewport is the temporary size. Effects + are processed in the temporary and are affected by the temporary size. +@@ -3157,36 +3252,38 @@ + bordered by blank regions in the output. If the temporary is bigger + than the output, the temporary is cropped. + +-<p>The temporary size is defined as the track size. Each track has a ++ <p>The temporary size is defined as the track size. Each track has a + different size. Right click on a track to bring up the track's menu. + Select <em>Resize Track</em> to resize the track to any arbitrary size. + Alternatively you can select <em>Match output size</em> to make the track + the same size as the output. + +-<p>The output size is set in either <em>New</em> when creating a new project ++ <p>The output size is set in either <em>New</em> when creating a new project + or <em>Settings->Format</em>. In the Resource window there is another + way to change the output size. Right click on a video asset and select + <em>Match project size</em> 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. + ++<div class="node"> + <p><hr> + Node:<a name="KEYFRAMES">KEYFRAMES</a>, +-Next:<a rel=next accesskey=n href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a>, +-Previous:<a rel=previous accesskey=p href="#COMPOSITING">COMPOSITING</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a>, ++Previous:<a rel="previous" accesskey="p" href="#COMPOSITING">COMPOSITING</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>KEYFRAMES</h2> ++<h2 class="chapter">KEYFRAMES</h2> + +-<p>Setting static compositing parameters isn't very useful most of the ++ <p>Setting static compositing parameters isn't very useful most of the + time. Normally you need to move the camera around over time or change + mask positions. Masks need to follow objects. We create dymanic + changes by defining keyframes. A keyframe is a certain point in time + when the settings for one operation change. In Cinelerra, there are + keyframes for almost every compositing parameter and effect parameter. + +-<p>Whenever you adjust any parameter, the value is stored in a keyframe. ++ <p>Whenever you adjust any parameter, the value is stored in a keyframe. + If the value is stored in a keyframe, why doesn't it always change? + The keyframe it is stored in is known as the <em>default keyframe</em>. + The default keyframe applies to the entire duration if no other +@@ -3194,27 +3291,29 @@ + because it always exists. The only way change occurs over time is if + non-default keyframes are created. + +-<p>Display keyframes for any parameter by using the <em>view</em> menu. ++ <p>Display keyframes for any parameter by using the <em>view</em> menu. + When keyframes are selected, they are drawn on the timeline over the + tracks they apply to. + +-<ul> +-<li><a accesskey=1 href="#CURVE%20KEYFRAMES">CURVE KEYFRAMES</a>: +-<li><a accesskey=2 href="#TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a>: +-<li><a accesskey=3 href="#AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a>: +-<li><a accesskey=4 href="#COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a>: +-<li><a accesskey=5 href="#EDITING%20KEYFRAMES">EDITING KEYFRAMES</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#CURVE%20KEYFRAMES">CURVE KEYFRAMES</a>: ++<li><a accesskey="2" href="#TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a>: ++<li><a accesskey="3" href="#AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a>: ++<li><a accesskey="4" href="#COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a>: ++<li><a accesskey="5" href="#EDITING%20KEYFRAMES">EDITING KEYFRAMES</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="CURVE%20KEYFRAMES">CURVE KEYFRAMES</a>, +-Next:<a rel=next accesskey=n href="#TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a>, +-Up:<a rel=up accesskey=u href="#KEYFRAMES">KEYFRAMES</a> ++Next:<a rel="next" accesskey="n" href="#TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a>, ++Up:<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a> + <br> ++</div> + +-<h3>CURVE KEYFRAMES</h3> ++<h3 class="section">CURVE KEYFRAMES</h3> + +-<p>Fade and zoom settings are stored in bezier curves. Go to ++ <p>Fade and zoom settings are stored in bezier curves. Go to + <em>view->fade keyframes</em> or <em>view->...zoom</em> to show curves on + the timeline. It's sometimes easier to pull down the <em>view</em> menu + and then use the keyboard shortcuts listed in the menu to enable or +@@ -3223,7 +3322,7 @@ + timeline until it changes shape. Then merely by clicking and dragging + on the curve you can create a keyframe at the position. + +-<p>After the keyframe is created, click drag on it again to reposition ++ <p>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. <em>ctrl-dragging</em> on a keyframe changes the value of + either the input control or the output control. This affects the +@@ -3231,92 +3330,98 @@ + can be moved horizontally as well as vertically, the horizontal + movement is purely for legibility and isn't used in the curve value. + +-<p>You may remember that The Gimp and the Compositing masks all use ++ <p>You may remember that The Gimp and the Compositing masks all use + <em>shift</em> to select control points so why does the timeline use + <em>ctrl</em>? When you <em>shift-drag</em> on a timeline curve, the + keyframe jumps 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. + ++<div class="node"> + <p><hr> + Node:<a name="TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a>, +-Next:<a rel=next accesskey=n href="#AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a>, +-Previous:<a rel=previous accesskey=p href="#CURVE%20KEYFRAMES">CURVE KEYFRAMES</a>, +-Up:<a rel=up accesskey=u href="#KEYFRAMES">KEYFRAMES</a> ++Next:<a rel="next" accesskey="n" href="#AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a>, ++Previous:<a rel="previous" accesskey="p" href="#CURVE%20KEYFRAMES">CURVE KEYFRAMES</a>, ++Up:<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a> + <br> ++</div> + +-<h3>TOGGLE KEYFRAMES</h3> ++<h3 class="section">TOGGLE KEYFRAMES</h3> + +-<p>Mute is the only toggle keyframe. Mute keyframes determine where the ++ <p>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. + ++<div class="node"> + <p><hr> + Node:<a name="AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a>, +-Next:<a rel=next accesskey=n href="#COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a>, +-Previous:<a rel=previous accesskey=p href="#TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a>, +-Up:<a rel=up accesskey=u href="#KEYFRAMES">KEYFRAMES</a> ++Next:<a rel="next" accesskey="n" href="#COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a>, ++Previous:<a rel="previous" accesskey="p" href="#TOGGLE%20KEYFRAMES">TOGGLE KEYFRAMES</a>, ++Up:<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a> + <br> ++</div> + +-<h3>AUTOMATIC KEYFRAMES</h3> ++<h3 class="section">AUTOMATIC KEYFRAMES</h3> + +-<p>You may have noticed when a few fade curves are set up, moving the ++ <p>You may have noticed when a few fade curves are set up, moving the + insertion point around the curves causes the faders to reflect the + curve value under the insertion point. This isn't just to look cool. + The faders themselves can set keyframes in automatic keyframe mode. + Automatic keyframe mode is usually more useful than dragging curves. + +-<p>Enable automatic keyframe mode by enabling the automatic keyframe ++ <p>Enable automatic keyframe mode by enabling the automatic keyframe + toggle <img src="autokeyframe.png" alt="autokeyframe.png">. 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. + +-<p>It's useful to go into the <em>View</em> menu and make the desired ++ <p>It's useful to go into the <em>View</em> menu and make the desired + parameter visible before performing a change. The location where the + automatic keyframe is generated is under the insertion point. If the + timeline is playing back during a tweek, several automatic keyframes + will be generated as you change the parameter. + +-<p>When automatic keyframe mode is disabled, a similarly strange thing ++ <p>When automatic keyframe mode is disabled, a similarly strange thing + happens. Adjusting a parameter adjusts the keyframe immediately + preceeding the insertion point. If two fade keyframes exist and the + insertion point is between them, changing the fader changes the first + keyframe. + +-<p>There are many parameters which can only be keyframed in automatic ++ <p>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. + +-<p>Effects are only keyframable in automatic mode because of the number of ++ <p>Effects are only keyframable in automatic mode because of the number of + parameters in each individual effect. + +-<p>Camera and projector translation can only be keyframed in automatic ++ <p>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. + ++<div class="node"> + <p><hr> + Node:<a name="COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a>, +-Next:<a rel=next accesskey=n href="#EDITING%20KEYFRAMES">EDITING KEYFRAMES</a>, +-Previous:<a rel=previous accesskey=p href="#AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a>, +-Up:<a rel=up accesskey=u href="#KEYFRAMES">KEYFRAMES</a> ++Next:<a rel="next" accesskey="n" href="#EDITING%20KEYFRAMES">EDITING KEYFRAMES</a>, ++Previous:<a rel="previous" accesskey="p" href="#AUTOMATIC%20KEYFRAMES">AUTOMATIC KEYFRAMES</a>, ++Up:<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a> + <br> ++</div> + +-<h3>COMPOSITOR KEYFRAMES</h3> ++<h3 class="section">COMPOSITOR KEYFRAMES</h3> + +-<p>Camera and projector translation is represented by two parameters: x ++ <p>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. + +-<p>Move the projector slightly in the compositor window to create a ++ <p>Move the projector slightly in the compositor window to create a + keyframe. Then go forward several seconds. Move the projector a long + distance to create another keyframe and emphasize motion. This creates + a second projector box in the compositor, with a line joining the two +@@ -3324,14 +3429,14 @@ + keyframes, more boxes are created. Once all the desired keyframes are + created, disable automatic keyframe mode. + +-<p>Now when scrubbing around with the compositor window's slider, the ++ <p>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. + +-<p>Click-drag when automatic keyframes are off to adjust the preceeding ++ <p>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 +@@ -3339,7 +3444,7 @@ + interpolated. In order to set the second keyframe you'll need to scrub + after the second keyframe. + +-<p>By default the motion path is a straight line, but it can be curved ++ <p>By default the motion path is a straight line, but it can be curved + with control points. <em>Ctrl-drag</em> to set either the in or out + control point of the preceeding keyframe. Once again, we depart from + The Gimp because <em>shift</em> is already used for zoom. After the in +@@ -3348,32 +3453,34 @@ + point. A control point can be out of view entirely yet still + controllable. + +-<p>When editing the camera translation, the behavior of the camera boxes ++ <p>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. + +-<p>The situation becomes more intuitive if you bend the motion path ++ <p>The situation becomes more intuitive if you bend the motion path + between two keyframes and scrub between the two keyframes. The + division between red and green, the current position between the + keyframes, is always centered while the camera boxes move. + ++<div class="node"> + <p><hr> + Node:<a name="EDITING%20KEYFRAMES">EDITING KEYFRAMES</a>, +-Previous:<a rel=previous accesskey=p href="#COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a>, +-Up:<a rel=up accesskey=u href="#KEYFRAMES">KEYFRAMES</a> ++Previous:<a rel="previous" accesskey="p" href="#COMPOSITOR%20KEYFRAMES">COMPOSITOR KEYFRAMES</a>, ++Up:<a rel="up" accesskey="u" href="#KEYFRAMES">KEYFRAMES</a> + <br> ++</div> + +-<h3>EDITING KEYFRAMES</h3> ++<h3 class="section">EDITING KEYFRAMES</h3> + +-<p>Keyframes can be shifted around and moved between tracks on the ++ <p>Keyframes can be shifted around and moved between tracks on the + timeline using similar cut and paste operations to editing media. Only + the keyframes selected in the <em>view</em> menu are affected by keyframe + editing operations, however. + +-<p>The most popular keyframe editing operation is replication of some ++ <p>The most popular keyframe editing operation is replication of some + curve from one track to the other, to make a stereo pair. The first + step is to solo the source track's record <img src="recordpatch_up.png" alt="recordpatch_up.png"> patch + by <em>shift-clicking</em> on it. Then either set in/out points or +@@ -3382,10 +3489,10 @@ + record <img src="recordpatch_up.png" alt="recordpatch_up.png"> patch by <em>shift-clicking</em> on it and + go to <em>keyframes->paste keyframes</em> to paste the clipboard. + +-<p>The media editing commands are mapped to the keyframe editing commands ++ <p>The media editing commands are mapped to the keyframe editing commands + by using the <em>shift</em> key instead of just the keyboard shortcut. + +-<p>This leads to the most complicated part of keyframe editing, the ++ <p>This leads to the most complicated part of keyframe editing, the + default keyframe. Remember that when no keyframes are set at all, + there is still a default keyframe which stores a global parameter for + the entire duration. The default keyframe isn't drawn because it +@@ -3395,108 +3502,112 @@ + default keyframe</em> allow conversion of the default keyframe to a + non-default keyframe. + +-<p><em>Keyframes->copy default keyframe</em> copies the default keyframe to ++ <p><em>Keyframes->copy default keyframe</em> copies the default keyframe to + the clipboard, no matter what region of the timeline is selected. The + <em>keyframes->paste keyframes</em> function may then be used to paste + the clipboard as a non-default keyframe. + +-<p>If you've copied a non-default keyframe, it can be stored as the ++ <p>If you've copied a non-default keyframe, it can be stored as the + default keyframe by calling <em>keyframes->paste default keyframe</em>. + 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. + +-<p>Finally, there is a convenient way to delete keyframes besides ++ <p>Finally, there is a convenient way to delete keyframes besides + selecting a region and calling <em>keyframes->clear keyframes</em>. + Merely click-drag a keyframe before its preceeding keyframe or after + its following keyframe on the track. + ++<div class="node"> + <p><hr> + Node:<a name="CAPTURING%20MEDIA">CAPTURING MEDIA</a>, +-Next:<a rel=next accesskey=n href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a>, +-Previous:<a rel=previous accesskey=p href="#KEYFRAMES">KEYFRAMES</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a>, ++Previous:<a rel="previous" accesskey="p" href="#KEYFRAMES">KEYFRAMES</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>CAPTURING MEDIA</h2> ++<h2 class="chapter">CAPTURING MEDIA</h2> + +-<p>Ideally, all media would be stored on hard drives, CD-ROM, flash, or ++ <p>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. + +-<p>The first step in recording is to configure the input device. In ++ <p>The first step in recording is to configure the input device. In + <em>Settings->preferences</em> are a number of recording parameters + described in configuration See <a href="#RECORDING">RECORDING</a>. These parameters apply to + recording no matter what the project settings are, because the + recording parameters are usually the maximum capability of the + recording hardware while project settings come and go. + +-<p>Go to <em>File->record</em> to record a dumb I/O source. This prompts ++ <p>Go to <em>File->record</em> 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. + +-<p>The record window has discrete sections. While many parameters change ++ <p>The record window has discrete sections. While many parameters change + depending on if the file has audio or video, the discrete sections are + always the same. + +-<ul> ++ <ul> + +-<li> ++ <li> + The output format area describes the format of the output file and the + current position within it. + +-<li> ++ <li> + The edit batch area lets you change parameters in the current batch. + +-<li> ++ <li> + The transport controls start and stop recording different ways. + +-<li> ++ <li> + The batch list displays all the defined batches. + +-<li> ++ <li> + The confirmation area lets you determine how the output files are + imported into the timeline and quit. + +-</ul> ++ </ul> + +-<img src="recording.png" alt="recording.png"> ++ <img src="recording.png" alt="recording.png"> + <br><p> + <br><p> +-<p><em>Recording window areas</em> ++ <p><em>Recording window areas</em> + +-<p>Recording in Cinelerra is organized around batches. A batch ++ <p>Recording in Cinelerra is organized around batches. A batch + essentially defines a distinct output file for the recording. For now + you can ignore the batch concept entirely and record merely by hitting + the record button <img src="record.png" alt="record.png">. + +-<p>The record button opens the current output file if it isn't opened and ++ <p>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 <img src="singleframe.png" alt="singleframe.png"> which records a single + frame. + +-<p>When enough media is recorded, choose an insertion method from the ++ <p>When enough media is recorded, choose an insertion method from the + <em>Insertion Strategy</em> menu and hit <em>close</em>. + +-<ul> +-<li><a accesskey=1 href="#BATCHES">BATCHES</a>: +-<li><a accesskey=2 href="#EDITING%20TUNER%20INFORMATION">EDITING TUNER INFORMATION</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#BATCHES">BATCHES</a>: ++<li><a accesskey="2" href="#EDITING%20TUNER%20INFORMATION">EDITING TUNER INFORMATION</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="BATCHES">BATCHES</a>, +-Next:<a rel=next accesskey=n href="#EDITING%20TUNER%20INFORMATION">EDITING TUNER INFORMATION</a>, +-Up:<a rel=up accesskey=u href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a> ++Next:<a rel="next" accesskey="n" href="#EDITING%20TUNER%20INFORMATION">EDITING TUNER INFORMATION</a>, ++Up:<a rel="up" accesskey="u" href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a> + <br> ++</div> + +-<h3>BATCHES</h3> ++<h3 class="section">BATCHES</h3> + +-<p>Now we come to the concept of batches. Batches try to make the dumb ++ <p>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. +@@ -3506,33 +3617,33 @@ + shows or time lapse movies as anyone who can't afford proper appliances + knows. + +-<p>The record window supports a list of batches and two recording modes: ++ <p>The record window supports a list of batches and two recording modes: + interactive and batch recording. Interactive recording happens when + the record button is pressed. Interactive recording starts immediately + and uses the current batch to determine everything except start time. + By default, the current batch is configured to behave like tape. + +-<p>Batch recording happens when the <em>start</em> button is pressed. In ++ <p>Batch recording happens when the <em>start</em> button is pressed. In + batch recording, the <em>start time</em> is the time the batch starts + recording. + +-<p>First, you'll want to create some batches. Each batch has certain ++ <p>First, you'll want to create some batches. Each batch has certain + parameters and methods of adjustment. + +-<ul> ++ <ul> + +-<li> ++ <li> + <em>On</em> determines whether the batch is included in batch recording + operations. Click the list row under <em>On</em> to enable or disable + batches. + +-<li> ++ <li> + <em>Path</em> 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 <em>edit batch</em> area. + +-<li> ++ <li> + <em>News</em> 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 +@@ -3541,128 +3652,134 @@ + in the same batch, the news should say <em>Open</em>, indicating the file + is already opened and won't be erased in the next record button press. + +-<p>If you change out of the current batch after recording, the file is ++ <p>If you change out of the current batch after recording, the file is + closed. Next time you change into the batch, the file will be erased. + +-</p><li> ++ </p><li> + <em>Start time</em> 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. + +-<li> ++ <li> + <em>Duration</em> is the length of the batch. It only has meaning if the + <em>Mode</em> of the batch is <em>Timed</em>. Once the recording length + reaches <em>duration</em> the recording stops, whether in interactive or + batch mode. + +-<li> ++ <li> + <em>Source</em> has meaning only when the capturing hardware has multiple + sources. Usually the source is a tuner channel or input. When the + current batch finishes and the next batch begins recording, the source + is changed to what the next batch is set to. This way multiple TV + stations can be recorded at different times. + +-</ul> ++ </ul> + +-<p>The record window has a notion of the <em>current batch</em>. The ++ <p>The record window has a notion of the <em>current batch</em>. The + current batch is not the same as the batch which is highlighted in the + batch list. The current batch text is colored red in the batch list. + The highlighted batch is merely displayed in the edit batch section for + editing. + +-<p>By coloring the current batch red, any batch can be edited by ++ <p>By coloring the current batch red, any batch can be edited by + highlighting it, without changing the batch to be recorded. + +-<p>All recording operations take place in the current batch. If there ++ <p>All recording operations take place in the current batch. If there + are multiple batches, highlight the desired batch and hit + <em>activate</em> to make it the current batch. If the <em>start</em> + button is pressed, the current batch flashes to indicate it's waiting + for the start time in batch mode. If the <em>record</em> button is + pressed, the current batch is recorded immediately in interactive mode. + +-<p>In batch and interactive recording modes, when the current batch ++ <p>In batch and interactive recording modes, when the current batch + finishes recording the next batch is activated and performed. All + future recording is done in batch mode. When the first batch finishes, + the next batch flashes until its start time is reached. + +-<p>Interrupt either the batch or the interactive operation by hitting the ++ <p>Interrupt either the batch or the interactive operation by hitting the + stop button. + +-<p>Finally there is the <img src="rewind.png" alt="rewind.png"> rewind button. In either ++ <p>Finally there is the <img src="rewind.png" alt="rewind.png"> 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. + ++<div class="node"> + <p><hr> + Node:<a name="EDITING%20TUNER%20INFORMATION">EDITING TUNER INFORMATION</a>, +-Previous:<a rel=previous accesskey=p href="#BATCHES">BATCHES</a>, +-Up:<a rel=up accesskey=u href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a> ++Previous:<a rel="previous" accesskey="p" href="#BATCHES">BATCHES</a>, ++Up:<a rel="up" accesskey="u" href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a> + <br> ++</div> + +-<h3>EDITING TUNER INFORMATION</h3> ++<h3 class="section">EDITING TUNER INFORMATION</h3> + +-<p>Sometimes in the recording process and the configuration process, ++ <p>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 recording driver, tuner + channels define the source. In the case of the Buz playback driver, + tuner channels define the destination. + +-<p>Defining tuner channels is accomplished by pushing the <img src="channel.png" alt="channel.png"> ++ <p>Defining tuner channels is accomplished by pushing the <img src="channel.png" alt="channel.png"> + channel button. This brings up the channel editing window. In this + window you add, edit, and sort channels. Also, for certain video + drivers, you can adjust the picture quality. + +-<p>The <em>add</em> operation brings up a channel editing box. The title of ++ <p>The <em>add</em> operation brings up a channel editing box. The title of + the channel appears in the channel list. The source of the channel is + the entry in the physical tuner's frequency table corresponding to the + title. + +-<p>Fine tuning in the channel edit dialog adjusts the physical frequency ++ <p>Fine tuning in the channel edit dialog adjusts the physical frequency + slightly if the driver supports it. The norm and frequency table + together define which frequency table is selected for defining + sources. If the device supports multiple inputs, the input menu + selects these. + +-<p>To sort channels, highlight the channel in the list and push <em>move ++ <p>To sort channels, highlight the channel in the list and push <em>move + up</em> or <em>move down</em> to move it. + +-<p>Once channels are defined, the <em>source</em> item in the record window ++ <p>Once channels are defined, the <em>source</em> 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. + ++<div class="node"> + <p><hr> + Node:<a name="IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a>, +-Next:<a rel=next accesskey=n href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a>, +-Previous:<a rel=previous accesskey=p href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> +-<br> +- +-<h2>IMPROVING PERFORMANCE</h2> +- +-<ul> +-<li><a accesskey=1 href="#DISABLING%20SWAP%20SPACE">DISABLING SWAP SPACE</a>: +-<li><a accesskey=2 href="#ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a>: +-<li><a accesskey=3 href="#MAKING%20XFree86%20FASTER">MAKING XFree86 FASTER</a>: +-<li><a accesskey=4 href="#FREEING%20MORE%20SHARED%20MEMORY">FREEING MORE SHARED MEMORY</a>: +-<li><a accesskey=5 href="#SPEEDING%20UP%20THE%20HARD%20DRIVE">SPEEDING UP THE HARD DRIVE</a>: +-<li><a accesskey=6 href="#DISABLING%20CRON">DISABLING CRON</a>: +-<li><a accesskey=7 href="#REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>: +-<li><a accesskey=8 href="#ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a>: +-<li><a accesskey=9 href="#SPEEDING%20UP%20THE%20FILE%20SYSTEM">SPEEDING UP THE FILE SYSTEM</a>: ++Next:<a rel="next" accesskey="n" href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a>, ++Previous:<a rel="previous" accesskey="p" href="#CAPTURING%20MEDIA">CAPTURING MEDIA</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> ++<br> ++</div> ++ ++<h2 class="chapter">IMPROVING PERFORMANCE</h2> ++ ++<ul class="menu"> ++<li><a accesskey="1" href="#DISABLING%20SWAP%20SPACE">DISABLING SWAP SPACE</a>: ++<li><a accesskey="2" href="#ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a>: ++<li><a accesskey="3" href="#MAKING%20XFree86%20FASTER">MAKING XFree86 FASTER</a>: ++<li><a accesskey="4" href="#FREEING%20MORE%20SHARED%20MEMORY">FREEING MORE SHARED MEMORY</a>: ++<li><a accesskey="5" href="#SPEEDING%20UP%20THE%20HARD%20DRIVE">SPEEDING UP THE HARD DRIVE</a>: ++<li><a accesskey="6" href="#DISABLING%20CRON">DISABLING CRON</a>: ++<li><a accesskey="7" href="#REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>: ++<li><a accesskey="8" href="#ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a>: ++<li><a accesskey="9" href="#SPEEDING%20UP%20THE%20FILE%20SYSTEM">SPEEDING UP THE FILE SYSTEM</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="DISABLING%20SWAP%20SPACE">DISABLING SWAP SPACE</a>, +-Next:<a rel=next accesskey=n href="#ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>DISABLING SWAP SPACE</h3> ++<h3 class="section">DISABLING SWAP SPACE</h3> + +-<p>On systems with lots of memory, Cinelerra sometimes runs better without ++ <p>On systems with lots of memory, Cinelerra sometimes runs better without + a swap space. If you have 4 GB of RAM, you're probably better off + 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 +@@ -3671,353 +3788,375 @@ + free pages to swap, in order to cache more disk access. In a 4 GB + system, you start waiting for page swaps after using only 2 GB. + +-<p>The question then is how to make Linux run without a swap space. ++ <p>The question then is how to make Linux run without a swap space. + Theoretically it should be a matter of running + +-<br><pre>swapoff -a +-</pre> ++<pre class="example"> swapoff -a ++ </pre> + +-<p>Unfortunately, without a swap space the <b>kswapd</b> tasklet normally ++ <p>Unfortunately, without a swap space the <b>kswapd</b> tasklet normally + spins at 100%. To eliminate this problem, edit <b>linux/mm/vmscan.c</b>. + In this file, put a line saying <b>return 0;</b> before it says + +-<br><pre> /* +- * Kswapd main loop. +- */ +-</pre> ++<pre class="example"> /* ++ * Kswapd main loop. ++ */ ++ </pre> + +-<p>Then recompile the kernel. ++ <p>Then recompile the kernel. + ++<div class="node"> + <p><hr> + Node:<a name="ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a>, +-Next:<a rel=next accesskey=n href="#MAKING%20XFree86%20FASTER">MAKING XFree86 FASTER</a>, +-Previous:<a rel=previous accesskey=p href="#DISABLING%20SWAP%20SPACE">DISABLING SWAP SPACE</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#MAKING%20XFree86%20FASTER">MAKING XFree86 FASTER</a>, ++Previous:<a rel="previous" accesskey="p" href="#DISABLING%20SWAP%20SPACE">DISABLING SWAP SPACE</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>ENLARGING SOUND BUFFERS</h3> ++<h3 class="section">ENLARGING SOUND BUFFERS</h3> + +-<p>In order to improve realtime performance, the audio buffers for all the ++ <p>In order to improve realtime performance, the audio buffers for all the + Linux sound drivers were limited from 127k 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. + +-<p>This only applies to the OSS version of the Soundblaster Live driver. ++ <p>This only applies to the OSS version of the Soundblaster Live driver. + Since every sound card and every sound driver derivative has a + different implementation you'll need to do some searching for other + sound cards. Edit <b>linux/drivers/sound/emu10k1/audio.c</b> + +-<p>Where is says ++ <p>Where is says + +-<br><pre>if (bufsize >= 0x10000) +-</pre> ++<pre class="example"> if (bufsize >= 0x10000) ++ </pre> + +-<p>change it to say ++ <p>change it to say + +-<br><pre>if (bufsize > 0x40000) +-</pre> ++<pre class="example"> if (bufsize > 0x40000) ++ </pre> + +-<p>In <b>linux/drivers/sound/emu10k1/hwaccess.h</b> ++ <p>In <b>linux/drivers/sound/emu10k1/hwaccess.h</b> + +-<p>Change ++ <p>Change + +-<p><b>#define MAXBUFSIZE 65536</b> ++ <p><b>#define MAXBUFSIZE 65536</b> + +-<p>to ++ <p>to + +-<p><b>#define MAXBUFSIZE 262144</b> ++ <p><b>#define MAXBUFSIZE 262144</b> + +-<p>Finally, in <b>linux/drivers/sound/emu10k1/cardwi.h</b> ++ <p>Finally, in <b>linux/drivers/sound/emu10k1/cardwi.h</b> + +-<p><b>#define WAVEIN_MAXBUFSIZE 65536</b> ++ <p><b>#define WAVEIN_MAXBUFSIZE 65536</b> + +-<p>to ++ <p>to + +-<p><b>#define WAVEIN_MAXBUFSIZE 262144</b> ++ <p><b>#define WAVEIN_MAXBUFSIZE 262144</b> + +-<p>Then recompile the kernel modules. ++ <p>Then recompile the kernel modules. + ++<div class="node"> + <p><hr> + Node:<a name="MAKING%20XFree86%20FASTER">MAKING XFree86 FASTER</a>, +-Next:<a rel=next accesskey=n href="#FREEING%20MORE%20SHARED%20MEMORY">FREEING MORE SHARED MEMORY</a>, +-Previous:<a rel=previous accesskey=p href="#ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#FREEING%20MORE%20SHARED%20MEMORY">FREEING MORE SHARED MEMORY</a>, ++Previous:<a rel="previous" accesskey="p" href="#ENLARGING%20SOUND%20BUFFERS">ENLARGING SOUND BUFFERS</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>MAKING XFree86 FASTER</h3> ++<h3 class="section">MAKING XFree86 FASTER</h3> + +-<p>XFree86 by default can't display Cinelerra's advanced pixmap rendering ++ <p>XFree86 by default can't display Cinelerra's advanced pixmap rendering + very fast. The X server stalls during list box drawing. Fix this by + adding a line to your XF86Config* files. + +-<p>In the <b>Section "Device"</b> area, add a line saying: ++ <p>In the <b>Section "Device"</b> area, add a line saying: + +-<p><b>Option "XaaNoOffscreenPixmaps"</b> ++ <p><b>Option "XaaNoOffscreenPixmaps"</b> + +-<p>and restart the X server. ++ <p>and restart the X server. + ++<div class="node"> + <p><hr> + Node:<a name="FREEING%20MORE%20SHARED%20MEMORY">FREEING MORE SHARED MEMORY</a>, +-Next:<a rel=next accesskey=n href="#SPEEDING%20UP%20THE%20HARD%20DRIVE">SPEEDING UP THE HARD DRIVE</a>, +-Previous:<a rel=previous accesskey=p href="#MAKING%20XFree86%20FASTER">MAKING XFree86 FASTER</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#SPEEDING%20UP%20THE%20HARD%20DRIVE">SPEEDING UP THE HARD DRIVE</a>, ++Previous:<a rel="previous" accesskey="p" href="#MAKING%20XFree86%20FASTER">MAKING XFree86 FASTER</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>FREEING MORE SHARED MEMORY</h3> ++<h3 class="section">FREEING MORE SHARED MEMORY</h3> + +-<p>The Linux kernel only allows 32MB of shared memory to be allocated by ++ <p>The Linux kernel only allows 32MB of shared memory to be allocated by + default. This needs to be increased to do anything useful. Run the + following command: + +-<p><b>echo "0x7fffffff" > /proc/sys/kernel/shmmax</b> ++ <p><b>echo "0x7fffffff" > /proc/sys/kernel/shmmax</b> + ++<div class="node"> + <p><hr> + Node:<a name="SPEEDING%20UP%20THE%20HARD%20DRIVE">SPEEDING UP THE HARD DRIVE</a>, +-Next:<a rel=next accesskey=n href="#DISABLING%20CRON">DISABLING CRON</a>, +-Previous:<a rel=previous accesskey=p href="#FREEING%20MORE%20SHARED%20MEMORY">FREEING MORE SHARED MEMORY</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#DISABLING%20CRON">DISABLING CRON</a>, ++Previous:<a rel="previous" accesskey="p" href="#FREEING%20MORE%20SHARED%20MEMORY">FREEING MORE SHARED MEMORY</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>SPEEDING UP THE HARD DRIVE</h3> ++<h3 class="section">SPEEDING UP THE HARD DRIVE</h3> + +-<p>This is a very popular command sequence among Linux gurus, which is not ++ <p>This is a very popular command sequence among Linux gurus, which is not + done by default on Linux distributions. + +-<p><b>hdparm -c3 -d1 -u1 -k1 /dev/hda</b> ++ <p><b>hdparm -c3 -d1 -u1 -k1 /dev/hda</b> + +-<p><b>-c3</b> puts the hard drive into 32 bit I/O with sync. This normally ++ <p><b>-c3</b> puts the hard drive into 32 bit I/O with sync. This normally + doesn't work due to inept kernel support for most IDE controllers. If + you get lost interrupt or SeekComplete errors, quickly use <b>-c0</b> + instead of <b>-c3</b> in your command. + +-<p><b>-d1</b> enables DMA of course. This frees up the CPU partially during ++ <p><b>-d1</b> enables DMA of course. This frees up the CPU partially during + data transfers. + +-<p><b>-u1</b> allows multiple interrupts to be handled during hard drive ++ <p><b>-u1</b> allows multiple interrupts to be handled during hard drive + transactions. This frees up even more CPU time. + +-<p><b>-k1</b> prevents Linux from resetting your settings in case of a ++ <p><b>-k1</b> prevents Linux from resetting your settings in case of a + glitch. + ++<div class="node"> + <p><hr> + Node:<a name="DISABLING%20CRON">DISABLING CRON</a>, +-Next:<a rel=next accesskey=n href="#REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>, +-Previous:<a rel=previous accesskey=p href="#SPEEDING%20UP%20THE%20HARD%20DRIVE">SPEEDING UP THE HARD DRIVE</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>, ++Previous:<a rel="previous" accesskey="p" href="#SPEEDING%20UP%20THE%20HARD%20DRIVE">SPEEDING UP THE HARD DRIVE</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>DISABLING CRON</h3> ++<h3 class="section">DISABLING CRON</h3> + +-<p>Linux runs some daily operations like compressing man pages. These may ++ <p>Linux runs some daily operations like compressing man pages. These may + be acceptable background tasks while compiling or word processing but + not while playing video. Disable these operations by editing + <b>/etc/rc.d/init.d/anacron</b>. + +-<p>Put <b>exit</b> before the first line not beginning in <b>#</b>. ++ <p>Put <b>exit</b> before the first line not beginning in <b>#</b>. + +-<p>In <b>/etc/rc.d/init.d/crond</b> put <b>exit</b> before the first line not ++ <p>In <b>/etc/rc.d/init.d/crond</b> put <b>exit</b> before the first line not + beginning in <b>#</b>. Then make like Win 2000 and reboot. + +-<p>You can't use the <b>at</b> command anymore, but who uses that command ++ <p>You can't use the <b>at</b> command anymore, but who uses that command + anyways? + ++<div class="node"> + <p><hr> + Node:<a name="REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>, +-Next:<a rel=next accesskey=n href="#ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a>, +-Previous:<a rel=previous accesskey=p href="#DISABLING%20CRON">DISABLING CRON</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a>, ++Previous:<a rel="previous" accesskey="p" href="#DISABLING%20CRON">DISABLING CRON</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>REDUCING USB MOUSE SENSITIVITY</h3> ++<h3 class="section">REDUCING USB MOUSE SENSITIVITY</h3> + +-<p>Gamers like high resolution mice, but this can be painful for precisely ++ <p>Gamers like high resolution mice, but this can be painful for precisely + positioning the mouse on a timeline or video screen. XFree86 once + allowed you to reduce PS/2 mouse sensitivity using commands like + <b>xset m 1 1</b> but you're out of luck with USB mice or KVM's. + +-<p>We have a way to reduce USB mouse sensitivity. Edit ++ <p>We have a way to reduce USB mouse sensitivity. Edit + <b>/usr/src/linux/drivers/input/mousedev.c</b>. + +-<p>After the line saying +- +-<br><pre>struct mousedev_list { +-</pre> +- +-<p>put ++ <p>After the line saying + +-<br><pre>#define DOWNSAMPLE 4 +-int x_accum, y_accum; +-</pre> +- +-<p>Next, the section which says something like: +- +-<br><pre>case EV_REL: +- switch (code) { +- case REL_X: list->dx += value; break; +- case REL_Y: list->dy -= value; break; +- case REL_WHEEL: if (list->mode) list->dz -= value; break; +- } +- break; +-</pre> +- +-<p>must be replaced by +- +-<br><pre> +-case EV_REL: +- switch (code) { +- case REL_X: +- list->x_accum += value; +- list->dx += list->x_accum / DOWNSAMPLE; +- list->x_accum %= DOWNSAMPLE; +- break; +- case REL_Y: +- list->y_accum += value; +- list->dy -= list->y_accum / DOWNSAMPLE; +- list->y_accum %= DOWNSAMPLE; +- break; +- case REL_WHEEL: if (list->mode) list->dz -= value; break; +- } +- break; ++<pre class="example"> struct mousedev_list { ++ </pre> + ++ <p>put + ++<pre class="example"> #define DOWNSAMPLE 4 ++ int x_accum, y_accum; ++ </pre> ++ ++ <p>Next, the section which says something like: ++ ++<pre class="example"> case EV_REL: ++ switch (code) { ++ case REL_X: list->dx += value; break; ++ case REL_Y: list->dy -= value; break; ++ case REL_WHEEL: if (list->mode) list->dz -= value; break; ++ } ++ break; ++ </pre> ++ ++ <p>must be replaced by ++ ++<pre class="example"> ++ case EV_REL: ++ switch (code) { ++ case REL_X: ++ list->x_accum += value; ++ list->dx += list->x_accum / DOWNSAMPLE; ++ list->x_accum %= DOWNSAMPLE; ++ break; ++ case REL_Y: ++ list->y_accum += value; ++ list->dy -= list->y_accum / DOWNSAMPLE; ++ list->y_accum %= DOWNSAMPLE; ++ break; ++ case REL_WHEEL: if (list->mode) list->dz -= value; break; ++ } ++ break; ++ ++ ++ ++ </pre> + +-</pre> +- +-<p>Change the value of <b>DOWNSAMPLE</b> to change the mouse sensitivity. ++ <p>Change the value of <b>DOWNSAMPLE</b> to change the mouse sensitivity. + ++<div class="node"> + <p><hr> + Node:<a name="ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a>, +-Next:<a rel=next accesskey=n href="#SPEEDING%20UP%20THE%20FILE%20SYSTEM">SPEEDING UP THE FILE SYSTEM</a>, +-Previous:<a rel=previous accesskey=p href="#REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Next:<a rel="next" accesskey="n" href="#SPEEDING%20UP%20THE%20FILE%20SYSTEM">SPEEDING UP THE FILE SYSTEM</a>, ++Previous:<a rel="previous" accesskey="p" href="#REDUCING%20USB%20MOUSE%20SENSITIVITY">REDUCING USB MOUSE SENSITIVITY</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>ASSORTED X TWEEKS</h3> ++<h3 class="section">ASSORTED X TWEEKS</h3> + +-<p>Screen blanking is really annoying, unless you're fabulously rich and ++ <p>Screen blanking is really annoying, unless you're fabulously rich and + can afford to leave your monitor on 24 hours a day without power saving + mode. In <b>/etc/X11/xinit/xinitrc</b> put + +-<br><pre>xset s off +-xset s noblank +-</pre> ++<pre class="example"> xset s off ++ xset s noblank ++ </pre> + +-<p>before the first <b>if</b> statement. ++ <p>before the first <b>if</b> statement. + +-<p>How about those windows keys which no Linux distribution even thinks to ++ <p>How about those windows keys which no Linux distribution even thinks to + use. You can make the window keys provide ALT functionality by editing + <b>/etc/X11/Xmodmap</b>. Append the following to it. + +-<br><pre>keycode 115 = Hyper_L +-keycode 116 = Hyper_R +-add mod4 = Hyper_L +-add mod5 = Hyper_R +-</pre> ++<pre class="example"> keycode 115 = Hyper_L ++ keycode 116 = Hyper_R ++ add mod4 = Hyper_L ++ add mod5 = Hyper_R ++ </pre> + +-<p>The actual changes to a window manager to make it recognize window keys ++ <p>The actual changes to a window manager to make it recognize window keys + for ALT are complex. In <b>FVWM</b> at least, you can edit + <b>/etc/X11/fvwm/system.fvwm2rc</b> and put + +-<br><pre>Mouse 0 T A move-and-raise-or-raiselower +-#Mouse 0 W M move +-Mouse 0 W 4 move +-Mouse 0 W 5 move +-Mouse 0 F A resize-or-raiselower +-Mouse 0 S A resize-or-raiselower +-</pre> ++<pre class="example"> Mouse 0 T A move-and-raise-or-raiselower ++ #Mouse 0 W M move ++ Mouse 0 W 4 move ++ Mouse 0 W 5 move ++ Mouse 0 F A resize-or-raiselower ++ Mouse 0 S A resize-or-raiselower ++ </pre> + +-<p>in place of the default section for moving and resizing. Your best ++ <p>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. + ++<div class="node"> + <p><hr> + Node:<a name="SPEEDING%20UP%20THE%20FILE%20SYSTEM">SPEEDING UP THE FILE SYSTEM</a>, +-Previous:<a rel=previous accesskey=p href="#ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a>, +-Up:<a rel=up accesskey=u href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> ++Previous:<a rel="previous" accesskey="p" href="#ASSORTED%20X%20TWEEKS">ASSORTED X TWEEKS</a>, ++Up:<a rel="up" accesskey="u" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a> + <br> ++</div> + +-<h3>SPEEDING UP THE FILE SYSTEM</h3> ++<h3 class="section">SPEEDING UP THE FILE SYSTEM</h3> + +-<p>You'll often store video on an expensive, gigantic disk array separate ++ <p>You'll often store video on an expensive, gigantic disk array separate + from your boot disk. You'll thus have to manually install an EXT + filesystem on this disk array, using the <b>mke2fs</b> command. By far + the fastest file system is + +-<br><pre> +-mke2fs -i 65536 -b 4096 my_device +-tune2fs -r0 -c10000 my_device +- +-</pre> ++<pre class="example"> ++ mke2fs -i 65536 -b 4096 my_device ++ tune2fs -r0 -c10000 my_device ++ ++ </pre> + +-<p>This has no journaling, reserves as few blocks as possible for ++ <p>This has no journaling, reserves as few blocks as possible for + filenames, and accesses the largest amount of data per block possible. + A slightly slower file system, which is easier to recover after power + failures is + +-<br><pre> +-mke2fs -j -i 65536 -b 4096 my_device +-tune2fs -r0 -c10000 my_device +- +-</pre> ++<pre class="example"> ++ mke2fs -j -i 65536 -b 4096 my_device ++ tune2fs -r0 -c10000 my_device ++ ++ </pre> + +-<p>This adds a journal which slows down the writes but makes us immune to ++ <p>This adds a journal which slows down the writes but makes us immune to + power failures. + ++<div class="node"> + <p><hr> + Node:<a name="EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a>, +-Next:<a rel=next accesskey=n href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a>, +-Previous:<a rel=previous accesskey=p href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a>, ++Previous:<a rel="previous" accesskey="p" href="#IMPROVING%20PERFORMANCE">IMPROVING PERFORMANCE</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>EFFECT DESCRIPTIONS</h2> ++<h2 class="chapter">EFFECT DESCRIPTIONS</h2> + +-<p>Most effects in Cinelerra can be figured out just by using them and ++ <p>Most effects in Cinelerra can be figured out just by using them and + tweeking. Here are brief descriptions of effects which you might not + utilize fully by mere experimentation. + +-<ul> +-<li><a accesskey=1 href="#CHROMA%20KEY">CHROMA KEY</a>: +-<li><a accesskey=2 href="#HISTOGRAM">HISTOGRAM</a>: +-<li><a accesskey=3 href="#TIME%20AVERAGE">TIME AVERAGE</a>: +-<li><a accesskey=4 href="#VIDEO%20SCOPE">VIDEO SCOPE</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#CHROMA%20KEY">CHROMA KEY</a>: ++<li><a accesskey="2" href="#HISTOGRAM">HISTOGRAM</a>: ++<li><a accesskey="3" href="#TIME%20AVERAGE">TIME AVERAGE</a>: ++<li><a accesskey="4" href="#VIDEO%20SCOPE">VIDEO SCOPE</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="CHROMA%20KEY">CHROMA KEY</a>, +-Next:<a rel=next accesskey=n href="#HISTOGRAM">HISTOGRAM</a>, +-Up:<a rel=up accesskey=u href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> ++Next:<a rel="next" accesskey="n" href="#HISTOGRAM">HISTOGRAM</a>, ++Up:<a rel="up" accesskey="u" href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> + <br> ++</div> + +-<h3>CHROMA KEY</h3> ++<h3 class="section">CHROMA KEY</h3> + +-<p>This effect replaces the selected color or intensity with black if ++ <p>This effect replaces the selected color or intensity with black if + there is no alpha channel and replaces it with transparency if there is + an alpha channel. The selection of color model is important. + +-<p>Chroma key uses either the value or the hue to determine what is ++ <p>Chroma key uses either the value or the hue to determine what is + erased. If this parameter is within a certain threshold it's erased. + It's not a simple on/off switch, however. As the selected parameter + approaches the edge of the threshold, it gradually gets erased if the + slope is low or is completely erased if the slope is high. + +-<p>The slope tries to soften the edges of the chroma key but it doesn't ++ <p>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. + ++<div class="node"> + <p><hr> + Node:<a name="HISTOGRAM">HISTOGRAM</a>, +-Next:<a rel=next accesskey=n href="#TIME%20AVERAGE">TIME AVERAGE</a>, +-Previous:<a rel=previous accesskey=p href="#CHROMA%20KEY">CHROMA KEY</a>, +-Up:<a rel=up accesskey=u href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> ++Next:<a rel="next" accesskey="n" href="#TIME%20AVERAGE">TIME AVERAGE</a>, ++Previous:<a rel="previous" accesskey="p" href="#CHROMA%20KEY">CHROMA KEY</a>, ++Up:<a rel="up" accesskey="u" href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> + <br> ++</div> + +-<h3>HISTOGRAM</h3> ++<h3 class="section">HISTOGRAM</h3> + +-<p>This shows the number of occurances of each value of a certain color ++ <p>This shows the number of occurances of each value of a certain color + channel. It is always performed in 16 bit RGB regardless of the + project colorspace. Use the upper gradient to determine the range of + input intensities to be expanded to the output. Use the lower gradient +@@ -4027,321 +4166,333 @@ + automatic mode and determines how sensitive to the upper and lower + boundaries of the histogram the automatic gain should be. + ++<div class="node"> + <p><hr> + Node:<a name="TIME%20AVERAGE">TIME AVERAGE</a>, +-Next:<a rel=next accesskey=n href="#VIDEO%20SCOPE">VIDEO SCOPE</a>, +-Previous:<a rel=previous accesskey=p href="#HISTOGRAM">HISTOGRAM</a>, +-Up:<a rel=up accesskey=u href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> ++Next:<a rel="next" accesskey="n" href="#VIDEO%20SCOPE">VIDEO SCOPE</a>, ++Previous:<a rel="previous" accesskey="p" href="#HISTOGRAM">HISTOGRAM</a>, ++Up:<a rel="up" accesskey="u" href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> + <br> ++</div> + +-<h3>TIME AVERAGE</h3> ++<h3 class="section">TIME AVERAGE</h3> + +-<p>Time average is one effect which has many uses besides creating nifty ++ <p>Time average is one effect which has many uses besides creating nifty + trail patterns of moving objects. It's main use is reducing noise in + 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 16 bit colormodels, time + average can increase the dynamic range of lousy cameras. + ++<div class="node"> + <p><hr> + Node:<a name="VIDEO%20SCOPE">VIDEO SCOPE</a>, +-Previous:<a rel=previous accesskey=p href="#TIME%20AVERAGE">TIME AVERAGE</a>, +-Up:<a rel=up accesskey=u href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> ++Previous:<a rel="previous" accesskey="p" href="#TIME%20AVERAGE">TIME AVERAGE</a>, ++Up:<a rel="up" accesskey="u" href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a> + <br> ++</div> + +-<h3>VIDEO SCOPE</h3> ++<h3 class="section">VIDEO SCOPE</h3> + +-<p>The video scope plots two views of the image. One view plots the ++ <p>The video scope plots two views of the image. One view plots the + intensity of each pixel against horizontal position. They call this + the WAVEFORM. Another view translates hue to angle and saturation to + radius for each pixel. They call this the VECTORSCOPE. + +-<p>The vectorscope is actually very useful for determining if an image is ++ <p>The vectorscope is actually very useful for determining if an image is + saturated. When adjusting saturation, it's important to watch the + vectorscope to make sure pixels don't extend past the 100 radius. + +-<p>The waveform allows you to make sure image data extends from complete ++ <p>The waveform allows you to make sure image data extends from complete + black to complete white while adjusting the brightness/contrast. + ++<div class="node"> + <p><hr> + Node:<a name="PLUGIN%20AUTHORING">PLUGIN AUTHORING</a>, +-Next:<a rel=next accesskey=n href="#RELEASE%20NOTES">RELEASE NOTES</a>, +-Previous:<a rel=previous accesskey=p href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Next:<a rel="next" accesskey="n" href="#RELEASE%20NOTES">RELEASE NOTES</a>, ++Previous:<a rel="previous" accesskey="p" href="#EFFECT%20DESCRIPTIONS">EFFECT DESCRIPTIONS</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>PLUGIN AUTHORING</h2> ++<h2 class="chapter">PLUGIN AUTHORING</h2> + +-<p>The plugin API in Cinelerra dates back to 1997, before the LADSPA and ++ <p>The plugin API in Cinelerra dates back to 1997, before the LADSPA and + before VST became popular. It's fundamentally the same as it was in + 1997, with minor modifications to handle keyframes and GUI feedback. + Unfortunately, the GUI is not abstracted from the programmer. This + allows the programmer to use whatever toolkit they want and allows more + flexibility in appearance but it costs more. + +-<p>There are several types of plugins, each with a common procedure ++ <p>There are several types of plugins, each with a common procedure + of implementation and specific changes for that particular type. The + easiest way to implement a plugin is to take the simplest out of the + group and rename the symbols. + +-<ul> +-<li><a accesskey=1 href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a>: +-<li><a accesskey=2 href="#REALTIME%20PLUGINS">REALTIME PLUGINS</a>: +-<li><a accesskey=3 href="#NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a>: +-<li><a accesskey=4 href="#AUDIO%20PLUGINS">AUDIO PLUGINS</a>: +-<li><a accesskey=5 href="#VIDEO%20PLUGINS">VIDEO PLUGINS</a>: +-<li><a accesskey=6 href="#TRANSITION%20PLUGINS">TRANSITION PLUGINS</a>: +-<li><a accesskey=7 href="#PLUGIN%20GUI'S%20WHICH%20UPDATE%20DURING%20PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a>: ++<li><a accesskey="2" href="#REALTIME%20PLUGINS">REALTIME PLUGINS</a>: ++<li><a accesskey="3" href="#NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a>: ++<li><a accesskey="4" href="#AUDIO%20PLUGINS">AUDIO PLUGINS</a>: ++<li><a accesskey="5" href="#VIDEO%20PLUGINS">VIDEO PLUGINS</a>: ++<li><a accesskey="6" href="#TRANSITION%20PLUGINS">TRANSITION PLUGINS</a>: ++<li><a accesskey="7" href="#PLUGIN%20GUI'S%20WHICH%20UPDATE%20DURING%20PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="COMMON%20PROCEDURES">COMMON PROCEDURES</a>, +-Next:<a rel=next accesskey=n href="#REALTIME%20PLUGINS">REALTIME PLUGINS</a>, +-Up:<a rel=up accesskey=u href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++Next:<a rel="next" accesskey="n" href="#REALTIME%20PLUGINS">REALTIME PLUGINS</a>, ++Up:<a rel="up" accesskey="u" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <br> ++</div> + +-<h3>COMMON PROCEDURES</h3> ++<h3 class="section">COMMON PROCEDURES</h3> + +-<p>All plugins inherit from a derivative of PluginClient. This derivative ++ <p>All plugins inherit from a derivative of PluginClient. This derivative + implements most of the required methods in PluginClient, but users must + still define methods for PluginClient. The most commonly used methods + are already implemented in macros. + +-<p>The files they include depend on the plugin type. Audio plugins ++ <p>The files they include depend on the plugin type. Audio plugins + include <b>pluginaclient.h</b> and video plugins include + <b>pluginvclient.h</b>. They inherit <b>PluginAClient</b> and + <b>PluginVClient</b> respectively. + +-<p>Another thing all plugins do is define at least three objects: ++ <p>Another thing all plugins do is define at least three objects: + +-<ul> ++ <ul> + +-<li> ++ <li> + 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. + +-<li> ++ <li> + User interface object - This is defined according to the programmer's + discretion. It can either use Cinelerra's toolkit or another toolkit. + It shows data on the screen and collects parameters from the user. + +-<p>Using Cinelerra's toolkit, the only user interface object a developer ++ <p>Using Cinelerra's toolkit, the only user interface object a developer + needs to worry about is the Window. The window has pointers to a + number of widgets, a few initialization methods, and a back pointer to + the plugin's processing object. The documentation refers to usage of + Cinelerra's toolkit. + +-<p>Depending on the user interface toolkit, a user interface thread may be ++ <p>Depending on the user interface toolkit, a user interface thread may be + created to run the user interface asynchronous of everything else. + Synchronizing the user interface to changes in keyframes is the most + complicated aspect of the plugin, so the user interface thread and + object are heavily supported by macros if you use Cinelerra's toolkit. + +-</p><li> ++ </p><li> + Configuration object - This stores the user parameters and always needs + interpolation, copying, and comparison functions. The plugin client + automatically calls configuration methods to interpolate keyframes. + +-</ul> ++ </ul> + +-<ul> +-<li><a accesskey=1 href="#THE%20PROCESSING%20OBJECT">THE PROCESSING OBJECT</a>: +-<li><a accesskey=2 href="#THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a>: +-<li><a accesskey=3 href="#THE%20USER%20INTERFACE%20OBJECT">THE USER INTERFACE OBJECT</a>: ++<ul class="menu"> ++<li><a accesskey="1" href="#THE%20PROCESSING%20OBJECT">THE PROCESSING OBJECT</a>: ++<li><a accesskey="2" href="#THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a>: ++<li><a accesskey="3" href="#THE%20USER%20INTERFACE%20OBJECT">THE USER INTERFACE OBJECT</a>: + </ul> + ++<div class="node"> + <p><hr> + Node:<a name="THE%20PROCESSING%20OBJECT">THE PROCESSING OBJECT</a>, +-Next:<a rel=next accesskey=n href="#THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a>, +-Up:<a rel=up accesskey=u href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a> ++Next:<a rel="next" accesskey="n" href="#THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a>, ++Up:<a rel="up" accesskey="u" href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a> + <br> ++</div> + +-<h4>THE PROCESSING OBJECT</h4> ++<h4 class="subsection">THE PROCESSING OBJECT</h4> + +-<p>The processing object should inherit from the intended PluginClient ++ <p>The processing object should inherit from the intended PluginClient + derivative. Its constructor should take a PluginServer argument. + +-<br><pre>MyPlugin(PluginServer *server); +-</pre> ++<pre class="example"> MyPlugin(PluginServer *server); ++ </pre> + +-<p>In the implementation, the plugin must contain a registration line with ++ <p>In the implementation, the plugin must contain a registration line with + the name of the processing object like + +-<br><pre>REGISTER_PLUGIN(MyPlugin) +-</pre> ++<pre class="example"> REGISTER_PLUGIN(MyPlugin) ++ </pre> + +-<p>The constructor should contain ++ <p>The constructor should contain + +-<br><pre>PLUGIN_CONSTRUCTOR_MACRO +-</pre> ++<pre class="example"> PLUGIN_CONSTRUCTOR_MACRO ++ </pre> + +-<p>to initialize the most common variables. ++ <p>to initialize the most common variables. + +-<p>The processing object should have a destructor containing ++ <p>The processing object should have a destructor containing + +-<br><pre>PLUGIN_DESTRUCTOR_MACRO +-</pre> ++<pre class="example"> PLUGIN_DESTRUCTOR_MACRO ++ </pre> + +-<p>to delete the most common variables. ++ <p>to delete the most common variables. + +-<p>Another function which is useful but not mandatory is ++ <p>Another function which is useful but not mandatory is + +-<br><pre>int is_multichannel(); +-</pre> ++<pre class="example"> int is_multichannel(); ++ </pre> + +-<p>It should return 1 if one instance of the plugin handles multiple ++ <p>It should return 1 if one instance of the plugin handles multiple + channels simultaneously or 0 if one instance of the plugin only handles + one channel. The default is 0 if it is omitted. Multichannel plugins + should refer to the value of <b>PluginClient::total_in_buffers</b> to + determine the number of channels. + +-<p>To simplify the implementation of realtime plugins, a macro for ++ <p>To simplify the implementation of realtime plugins, a macro for + commonly used members should be put in the class header, taking the + configuration object and user interface thread object as arguments. + This is only useful for realtime plugins. Fortunately, nonrealtime + plugins are simpler. + +-<br><pre>PLUGIN_CLASS_MEMBERS(config_name, thread_name) +-</pre> ++<pre class="example"> PLUGIN_CLASS_MEMBERS(config_name, thread_name) ++ </pre> + +-<p>Many other members may be defined in the processing object, depending ++ <p>Many other members may be defined in the processing object, depending + on the plugin type. The commonly used members in PLUGIN_CLASS_MEMBERS + are described below. Not all these members are used in nonrealtime + plugins. + +-<ul> ++ <ul> + +-<li>int load_configuration(); ++ <li>int load_configuration(); + +-<p>Loads the configuration based on surrounding keyframes and current ++ <p>Loads the configuration based on surrounding keyframes and current + position. The class definition should contain + +-<br><pre>LOAD_CONFIGURATION_MACRO(plugin_class, config_class) +-</pre> ++ <pre class="example"> LOAD_CONFIGURATION_MACRO(plugin_class, config_class) ++ </pre> + +-<p>to implement load_configuration. This stores whatever the current ++ <p>to implement load_configuration. This stores whatever the current + configuration is inside the plugin's configuration object. The + plugin's configuration object is always called <b>config</b> when using + PLUGIN_CLASS_MEMBERS. + +-</p><li>VFrame* new_picon(); ++ </p><li>VFrame* new_picon(); + +-<p>Creates a picon for display in the resource window. Use ++ <p>Creates a picon for display in the resource window. Use + +-<br><pre>#include "picon_png.h" +-NEW_PICON_MACRO(plugin_class) +-</pre> ++ <pre class="example"> #include "picon_png.h" ++ NEW_PICON_MACRO(plugin_class) ++ </pre> + +-<p>to implement new_picon. In addition, the user should create a ++ <p>to implement new_picon. In addition, the user should create a + <em>picon_png.h</em> header file from a PNG image using <em>pngtoh</em>. + <em>pngtoh</em> is in <em>guicast</em> and compiled using a sequence like + +-<br><pre>gcc -o pngtoh pngtoh.c +-</pre> ++ <pre class="example"> gcc -o pngtoh pngtoh.c ++ </pre> + +-<p>The source PNG image should be called picon.png and can be any format ++ <p>The source PNG image should be called picon.png and can be any format + supported by PNG. + +-</p><li>char* plugin_title(); ++ </p><li>char* plugin_title(); + +-<p>Returns a text string identifying the plugin in the resource window. ++ <p>Returns a text string identifying the plugin in the resource window. + The string has to be unique. + +-</p><li>void update_gui(); ++ </p><li>void update_gui(); + +-<p>Should first load the configuration and then redraw the GUI with the ++ <p>Should first load the configuration and then redraw the GUI with the + new parameters. All the plugins using GuiCast have a format like + +-<br><pre>void MyPlugin::update_gui() +-{ +- if(thread) +- { +- load_configuration(); +- thread->window->lock_window(); +-// update widgets here +- thread->window->unlock_window(); +- } +-} +-</pre> ++ <pre class="example"> void MyPlugin::update_gui() ++ { ++ if(thread) ++ { ++ load_configuration(); ++ thread->window->lock_window(); ++ // update widgets here ++ thread->window->unlock_window(); ++ } ++ } ++ </pre> + +-<p>to handle concurrency and conditions of no GUI. ++ <p>to handle concurrency and conditions of no GUI. + +-</p><li>int show_gui(); ++ </p><li>int show_gui(); + +-<p>Instantiate the GUI and switch the plugin to GUI mode. This is implemented with ++ <p>Instantiate the GUI and switch the plugin to GUI mode. This is implemented with + +-<br><pre>SHOW_GUI_MACRO(plugin_class, thread_class) +-</pre> ++ <pre class="example"> SHOW_GUI_MACRO(plugin_class, thread_class) ++ </pre> + +-</p><li>int set_string(); ++ </p><li>int set_string(); + +-<p>Changes the title of the GUI window to a certain string. This is implemented with ++ <p>Changes the title of the GUI window to a certain string. This is implemented with + +-<br><pre>SET_STRING_MACRO(plugin_class) +-</pre> ++ <pre class="example"> SET_STRING_MACRO(plugin_class) ++ </pre> + +-</p><li>void raise_window(); ++ </p><li>void raise_window(); + +-<p>Raises the GUI window to the top of the stack. This is implemented with ++ <p>Raises the GUI window to the top of the stack. This is implemented with + +-<br><pre>RAISE_WINDOW_MACRO(plugin_class) +-</pre> ++ <pre class="example"> RAISE_WINDOW_MACRO(plugin_class) ++ </pre> + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a>, +-Next:<a rel=next accesskey=n href="#THE%20USER%20INTERFACE%20OBJECT">THE USER INTERFACE OBJECT</a>, +-Previous:<a rel=previous accesskey=p href="#THE%20PROCESSING%20OBJECT">THE PROCESSING OBJECT</a>, +-Up:<a rel=up accesskey=u href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a> ++Next:<a rel="next" accesskey="n" href="#THE%20USER%20INTERFACE%20OBJECT">THE USER INTERFACE OBJECT</a>, ++Previous:<a rel="previous" accesskey="p" href="#THE%20PROCESSING%20OBJECT">THE PROCESSING OBJECT</a>, ++Up:<a rel="up" accesskey="u" href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a> + <br> ++</div> + +-<h4>THE CONFIGURATION OBJECT</h4> ++<h4 class="subsection">THE CONFIGURATION OBJECT</h4> + +-<p>The configuration object is critical for GUI updates, signal ++ <p>The configuration object is critical for GUI updates, signal + processing, and default settings in realtime plugins. Be aware it is + not used in nonrealtime plugins. The configuration object inherits + from nothing and has no dependancies. It's merely a class containing + three functions and variables specific to the plugin's parameters. + +-<p>Usually the configuration object starts with the name of the plugin ++ <p>Usually the configuration object starts with the name of the plugin + followed by Config. + +-<br><pre>class MyPluginConfig +-{ +-public: +- MyPluginConfig(); +-</pre> ++<pre class="example"> class MyPluginConfig ++ { ++ public: ++ MyPluginConfig(); ++ </pre> + +-<p>Following the name of the configuration class, we put the three ++ <p>Following the name of the configuration class, we put the three + required functions and the configuration variables. + +-<br><pre> int equivalent(MyPluginConfig &that); +- void copy_from(MyPluginConfig &that); +- void interpolate(MyPluginConfig &prev, +- MyPluginConfig &next, +- long prev_position, +- long next_position, +- long current_position); +- +- +- +- float parameter1; +- float parameter2; +- int parameter3; +-}; ++<pre class="example"> int equivalent(MyPluginConfig &that); ++ void copy_from(MyPluginConfig &that); ++ void interpolate(MyPluginConfig &prev, ++ MyPluginConfig &next, ++ long prev_position, ++ long next_position, ++ long current_position); ++ ++ ++ ++ float parameter1; ++ float parameter2; ++ int parameter3; ++ }; ++ ++ </pre> + +-</pre> +- +-<p>Now you must define the three functions. <b>Equivalent</b> is called by ++ <p>Now you must define the three functions. <b>Equivalent</b> is called by + LOAD_CONFIGURATION_MACRO to get the return value. That is all it's + used for and if you don't care about load_configuration's return value, + you can leave this function empty. It normally returns 1 if the + argument's variables have the same values as the local variables. + +-<p>Then there's <b>copy_from</b> which transfers the configuration values ++ <p>Then there's <b>copy_from</b> which transfers the configuration values + from the argument to the local variables. This is once again used in + LOAD_CONFIGURATION_MACRO to store configurations in temporaries. Once + LOAD_CONFIGURATION_MACRO has replicated the configuration, it loads a +@@ -4349,34 +4500,34 @@ + get the current configuration. The interpolation function performs the + interpolation and stores the result in the local variables. + +-<p>Normally the interpolate function calculates a previous and next ++ <p>Normally the interpolate function calculates a previous and next + fraction, using the arguments. + +-<br><pre>void MyPluginConfig::interpolate(MyPluginConfig &prev, +- MyPluginConfig &next, +- long prev_position, +- long next_position, +- long current_position) +-{ +- double next_scale = (double)(current_position - prev_position) / (next_position - prev_position); +- double prev_scale = (double)(next_position - current_position) / (next_position - prev_position); +-</pre> ++<pre class="example"> void MyPluginConfig::interpolate(MyPluginConfig &prev, ++ MyPluginConfig &next, ++ long prev_position, ++ long next_position, ++ long current_position) ++ { ++ double next_scale = (double)(current_position - prev_position) / (next_position - prev_position); ++ double prev_scale = (double)(next_position - current_position) / (next_position - prev_position); ++ </pre> + +-<p>Then the scales are applied to the previous and next configuration ++ <p>Then the scales are applied to the previous and next configuration + object to yield the current values. + +-<br><pre> +- 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); +-} +- +-</pre> ++<pre class="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); ++ } ++ ++ </pre> + +-<p>Alternatively you can copy the values from the previous configuration ++ <p>Alternatively you can copy the values from the previous configuration + argument for no interpolation. + +-<p>This usage is the same in audio and video plugins. In video playback, ++ <p>This usage 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 +@@ -4384,7 +4535,7 @@ + regions on the timeline but it may not be accurate enough for really + smooth rendering of the effect. + +-<p>For really smooth rendering of audio, you can still use ++ <p>For really smooth rendering of audio, you can still use + load_configuration when updating the GUI. For process_realtime; + however, ignore load_configuration and write your own interpolation + routine which loads all the keyframes in a console fragment and +@@ -4392,67 +4543,69 @@ + debug, yielding improvement which may not be audible. Then of course, + every century has its set of wierdos. + +-<p>An easier way to get smoother interpolation is to reduce the console ++ <p>An easier way to get smoother interpolation is to reduce the console + fragment to 1 sample. This would have to be rendered and played back + in a separate program of course. The Linux sound driver can't play + fragments of 1 sample. + ++<div class="node"> + <p><hr> + Node:<a name="THE%20USER%20INTERFACE%20OBJECT">THE USER INTERFACE OBJECT</a>, +-Previous:<a rel=previous accesskey=p href="#THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a>, +-Up:<a rel=up accesskey=u href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a> ++Previous:<a rel="previous" accesskey="p" href="#THE%20CONFIGURATION%20OBJECT">THE CONFIGURATION OBJECT</a>, ++Up:<a rel="up" accesskey="u" href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a> + <br> ++</div> + +-<h4>THE USER INTERFACE OBJECT</h4> ++<h4 class="subsection">THE USER INTERFACE OBJECT</h4> + +-<p>The user interface object at the very least consists of a pointer to a ++ <p>The user interface object at the very least consists of a pointer to a + window and pointers to a set of widgets. Using Cinelerra's toolkit, it + consists of a <b>BCWindow</b> derivative and a <b>Thread</b> derivative. The + Thread derivative is declared in the plugin header using + +-<br><pre>PLUGIN_THREAD_HEADER(plugin_class, thread_class, window_class) +-</pre> ++<pre class="example"> PLUGIN_THREAD_HEADER(plugin_class, thread_class, window_class) ++ </pre> + +-<p>Then it is defined using ++ <p>Then it is defined using + +-<br><pre>PLUGIN_THREAD_OBJECT(plugin_class, thread_class, window_class) +-</pre> ++<pre class="example"> PLUGIN_THREAD_OBJECT(plugin_class, thread_class, window_class) ++ </pre> + +-<p>This in combination with the SHOW_GUI macro does all the work in ++ <p>This in combination with the SHOW_GUI macro does all the work in + instantiating the Window class. This is used in realtime plugins but + not in nonrealtime plugins. Nonrealtime plugins create and destroy + their GUI in <b>get_parameters</b> and there's no thread. + +-<p>Now the window class must be declared in the plugin header. It's ++ <p>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. + +-<br><pre> +-#include "guicast.h" +- +-class MyPluginWindow : public BC_Window +-{ +-public: +- MyPluginWindow(MyPluginMain *plugin, int x, int y); +- +-</pre> +- +-<p>This becomes a window on the screen, positioned at x and y. ++<pre class="example"> ++ #include "guicast.h" ++ ++ class MyPluginWindow : public BC_Window ++ { ++ public: ++ MyPluginWindow(MyPluginMain *plugin, int x, int y); ++ ++ </pre> ++ ++ <p>This becomes a window on the screen, positioned at x and y. ++ ++ <p>It needs two methods ++ ++<pre class="example"> int create_objects(); ++ int close_event(); ++ </pre> + +-<p>It needs two methods ++ <p>and a back pointer to the plugin + +-<br><pre> int create_objects(); +- int close_event(); +-</pre> ++<pre class="example"> MyPlugin *plugin; ++ </pre> + +-<p>and a back pointer to the plugin +- +-<br><pre> MyPlugin *plugin; +-</pre> +- +-<p>The constructor's definition should contain extents and flags causing ++ <p>The constructor's definition should contain extents and flags causing + the window to be hidden when first created. The create_objects member + puts widgets in the window according to GuiCast's syntax. A pointer to + each widget which is to be synchronized to a keyframe is stored in the +@@ -4461,353 +4614,365 @@ + a GuiCast widget and they override functions in GuiCast to handle + events. Finally create_objects calls + +-<br><pre> show_window(); +- flush(); +-</pre> ++<pre class="example"> show_window(); ++ flush(); ++ </pre> + +-<p>to make the window appear all at once. ++ <p>to make the window appear all at once. + +-<p>The close_event member should be implemented using ++ <p>The close_event member should be implemented using + +-<br><pre>WINDOW_CLOSE_EVENT(window_class) +-</pre> ++<pre class="example"> WINDOW_CLOSE_EVENT(window_class) ++ </pre> + +-<p>Every widget in the GUI needs to detect when its value changes. In ++ <p>Every widget in the GUI needs to detect when its value changes. In + GuiCast the <b>handle_event</b> method is called whenever the value + changes. In <b>handle_event</b>, the widget then needs to call + <b>plugin->send_configure_change()</b> to propogate the change to rendering. + ++<div class="node"> + <p><hr> + Node:<a name="REALTIME%20PLUGINS">REALTIME PLUGINS</a>, +-Next:<a rel=next accesskey=n href="#NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a>, +-Previous:<a rel=previous accesskey=p href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a>, +-Up:<a rel=up accesskey=u href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++Next:<a rel="next" accesskey="n" href="#NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a>, ++Previous:<a rel="previous" accesskey="p" href="#COMMON%20PROCEDURES">COMMON PROCEDURES</a>, ++Up:<a rel="up" accesskey="u" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <br> ++</div> + +-<h3>REALTIME PLUGINS</h3> ++<h3 class="section">REALTIME PLUGINS</h3> + +-<p>Realtime plugins should use PLUGIN_CLASS_MEMBERS to define the basic ++ <p>Realtime plugins should use PLUGIN_CLASS_MEMBERS to define the basic + set of members in their headers. All realtime plugins must define an + +-<br><pre>int is_realtime() +-</pre> ++<pre class="example"> int is_realtime() ++ </pre> + +-<p>member returning 1. This causes a number of realtime methods to be ++ <p>member returning 1. This causes a number of realtime methods to be + called during playback and the plugin to be droppable on the timeline. + +-<p>Realtime plugins must define a member called ++ <p>Realtime plugins must define a member called + +-<br><pre>process_realtime +-</pre> ++<pre class="example"> process_realtime ++ </pre> + +-<p>to be called during every audio fragment and video frame. It has an ++ <p>to be called during every audio fragment and video frame. It has an + input and an output argument and for audio, a size argument. The + process_realtime function should start by calling + <b>load_configuration</b>. The LOAD_CONFIGURATION_MACRO returns 1 if the + configuration changed. Then process_realtime should move the data from + the input to the output with processing. + +-<p>Additional members are implemented to maintain configuration in ++ <p>Additional members are implemented to maintain configuration in + realtime plugins. Some of these are also needed in nonrealtime + plugins. + +-<ul> ++ <ul> + <li>void read_data(KeyFrame *keyframe); + +-<p>Loads data from a keyframe into the plugin's configuration. Inside the ++ <p>Loads data from a keyframe into the plugin's configuration. Inside the + keyframe is an XML string. It's most easily parsed by creating a + <em>FileXML</em> object. See an existing plugin to see how the read_data + function is implemented. + +-<p>Read data loads data out of the XML object and stores values in the ++ <p>Read data loads data out of the XML object and stores values in the + plugin's configuration object. + +-</p><li>void save_data(KeyFrame *keyframe); ++ </p><li>void save_data(KeyFrame *keyframe); + +-<p>Saves data from the plugin's configuration to a keyframe. Inside the ++ <p>Saves data from the plugin's configuration to a keyframe. Inside the + keyframe you'll put an XML string which is normally created by a + FileXML object. See an existing plugin to see how the save_data + function is implemented. + +-<p>Save data saves data from the plugin's configuration object into the ++ <p>Save data saves data from the plugin's configuration object into the + XML object. + +-</p><li>int load_defaults(); ++ </p><li>int load_defaults(); + +-<p>Another way the plugin gets parameters is from a defaults file. The ++ <p>Another way the plugin gets parameters is from a defaults file. The + load and save defaults routines use a Defaults object to parse the + defaults file. The defaults object is created in <b>load_defaults</b> and + destroyed in the plugin's destructor. See an existing plugin to see + how the Defaults object is used. + +-</p><li>int save_defaults(); ++ </p><li>int save_defaults(); + +-<p>Saves the configuration in the defaults object. ++ <p>Saves the configuration in the defaults object. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a>, +-Next:<a rel=next accesskey=n href="#AUDIO%20PLUGINS">AUDIO PLUGINS</a>, +-Previous:<a rel=previous accesskey=p href="#REALTIME%20PLUGINS">REALTIME PLUGINS</a>, +-Up:<a rel=up accesskey=u href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++Next:<a rel="next" accesskey="n" href="#AUDIO%20PLUGINS">AUDIO PLUGINS</a>, ++Previous:<a rel="previous" accesskey="p" href="#REALTIME%20PLUGINS">REALTIME PLUGINS</a>, ++Up:<a rel="up" accesskey="u" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <br> ++</div> + +-<h3>NONREALTIME PLUGINS</h3> ++<h3 class="section">NONREALTIME PLUGINS</h3> + +-<p>Like realtime plugins, <b>load_defaults</b> and <b>save_defaults</b> must be ++ <p>Like realtime plugins, <b>load_defaults</b> and <b>save_defaults</b> must be + implemented. In nonrealtime plugins, these are not just used for + default parameters but to transfer values from the user interface to + the signal processor. There doesn't need to be a configuration class + in nonrealtime plugins. + +-<p>Unlike realtime plugins, the LOAD_CONFIGURATION_MACRO can't be used in ++ <p>Unlike realtime plugins, the LOAD_CONFIGURATION_MACRO can't be used in + the plugin header. Instead, the following methods must be defined. + +-<p>The nonrealtime plugin should contain a pointer to a defaults object. +- +-<br><pre> +-Defaults *defaults; ++ <p>The nonrealtime plugin should contain a pointer to a defaults object. + +-</pre> ++<pre class="example"> ++ Defaults *defaults; ++ ++ </pre> + +-<p>It should also have a pointer to a MainProgressBar. ++ <p>It should also have a pointer to a MainProgressBar. + +-<br><pre> +-MainProgressBar *progress; +-</pre> ++<pre class="example"> ++ MainProgressBar *progress; ++ </pre> + +-<p>The progress pointer allows nonrealtime plugins to display their ++ <p>The progress pointer allows nonrealtime plugins to display their + progress in Cinelerra's main window. + +-<p>The constructor for a nonrealtime plugin can't use ++ <p>The constructor for a nonrealtime plugin can't use + PLUGIN_CONSTRUCTOR_MACRO but must call <b>load_defaults</b> directly. + +-<p>The destructor, likewise, must call <b>save_defaults</b> and <b>delete ++ <p>The destructor, likewise, must call <b>save_defaults</b> and <b>delete + defaults</b> directly instead of PLUGIN_DESTRUCTOR_MACRO. + +-<ul> ++ <ul> + +-<li>VFrame* new_picon(); ++ <li>VFrame* new_picon(); + +-<p>char* plugin_title(); ++ <p>char* plugin_title(); + +-<p>The usage of these is the same as realtime plugins. ++ <p>The usage of these is the same as realtime plugins. + +-</p><li>int is_realtime(); ++ </p><li>int is_realtime(); + +-<p>This function must return 0 to indicate a nonrealtime plugin. ++ <p>This function must return 0 to indicate a nonrealtime plugin. + +-</p><li> ++ </p><li> + int get_parameters(); + +-<p>Here, the user should create a GUI, wait for the user to hit an OK ++ <p>Here, the user should create a GUI, wait for the user to hit an OK + button or a cancel button, and store the parameters in plugin + variables. This routine must return 0 for success and 1 for failure. + This way the user can cancel the effect from the GUI. + +-<p>Unlike the realtime plugin, this GUI need not run asynchronously of the ++ <p>Unlike the realtime plugin, this GUI need not run asynchronously of the + plugin. It should block the get_parameters function until the user + selects OK or Cancel. + +-</p><li>int load_defaults(); ++ </p><li>int load_defaults(); + +-<p>This should create a defaults object and load parameters from the ++ <p>This should create a defaults object and load parameters from the + defaults object into plugin variables. + +-</p><li>int save_defaults(); ++ </p><li>int save_defaults(); + +-<p>This should save plugin variables to the defaults object. ++ <p>This should save plugin variables to the defaults object. + +-</p><li>int start_loop(); ++ </p><li>int start_loop(); + +-<p>If <b>get_parameters</b> returned 0 for success, this is called once to ++ <p>If <b>get_parameters</b> returned 0 for success, this is called once to + give the plugin a chance to initialize processing. The plugin should + instantiate the progress object with a line like + +-<br><pre> +-progress = start_progress("MyPlugin progress...", +- PluginClient::end - PluginClient::start); +- +-</pre> ++ <pre class="example"> ++ progress = start_progress("MyPlugin progress...", ++ PluginClient::end - PluginClient::start); ++ ++ </pre> + +-<p>The usage of <b>start_progress</b> depends on whether the plugin is ++ <p>The usage of <b>start_progress</b> depends on whether the plugin is + multichannel or single channel. If it's multichannel you always call + start_progress. If it's single channel, you first need to know whether + the progress bar has already started in another instance of the plugin. + +-<p>If <b>PluginClient::interactive</b> is 1, you need to start the progress ++ <p>If <b>PluginClient::interactive</b> is 1, you need to start the progress + bar. If it's 0, the progress bar has already been started. + +-<p>The PluginClient defines <b>end</b> and <b>start</b> for the timeline range ++ <p>The PluginClient defines <b>end</b> and <b>start</b> for the timeline range + to be processed. The units are either samples or frames. + +-</p><li>int process_loop ++ </p><li>int process_loop + +-<p>This is called repeatedly until the timeline range is processed. It ++ <p>This is called repeatedly until the timeline range is processed. It + takes either a samples or frames buffer and a reference to + write_length. The arguments are a location and length for the output + if it's audio. + +-<p>The plugin must use <b>read_samples</b> or <b>read_frame</b> to read the ++ <p>The plugin must use <b>read_samples</b> or <b>read_frame</b> to read the + input. These functions take a buffer and a position relative to the + start of the timeline. Then it must process it and put the output in + the arguments to process_loop. write_length should contain the number + of samples generated if it's audio. + +-<p>Finally, process_loop must test <b>PluginClient::interactive</b> and ++ <p>Finally, process_loop must test <b>PluginClient::interactive</b> and + update the progress bar if it's 1. + +-<br><pre>progress->update(total_written); +-</pre> ++ <pre class="example"> progress->update(total_written); ++ </pre> + +-<p>returns 1 or 0 if the progress bar was cancelled. If it's 1, ++ <p>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</b> should return 1 when the + entire timeline range is processed. + +-</p><li>int stop_loop(); ++ </p><li>int stop_loop(); + +-<p>This is called after process_loop processes its last buffer. ++ <p>This is called after process_loop processes its last buffer. + +-<p>If PluginClient::is_interactive is 1, this should call ++ <p>If PluginClient::is_interactive is 1, this should call + <b>stop_progress</b> in the progress bar pointer and delete the pointer. + Then it should delete any objects it created for processing in + <b>start_loop</b>. + +-</ul> ++ </ul> + ++<div class="node"> + <p><hr> + Node:<a name="AUDIO%20PLUGINS">AUDIO PLUGINS</a>, +-Next:<a rel=next accesskey=n href="#VIDEO%20PLUGINS">VIDEO PLUGINS</a>, +-Previous:<a rel=previous accesskey=p href="#NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a>, +-Up:<a rel=up accesskey=u href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++Next:<a rel="next" accesskey="n" href="#VIDEO%20PLUGINS">VIDEO PLUGINS</a>, ++Previous:<a rel="previous" accesskey="p" href="#NONREALTIME%20PLUGINS">NONREALTIME PLUGINS</a>, ++Up:<a rel="up" accesskey="u" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <br> ++</div> + +-<h3>AUDIO PLUGINS</h3> ++<h3 class="section">AUDIO PLUGINS</h3> + +-<p>The simplest audio plugin is Gain. The processing object should ++ <p>The simplest audio plugin is Gain. The processing object should + include <b>pluginaclient.h</b> and inherit from <b>PluginAClient</b>. Realtime audio plugins need to + define + +-<br><pre>int process_realtime(long size, +- double **input_ptr, +- double **output_ptr); +-</pre> +- +-<p>if it's multichannel or +- +-<br><pre>int process_realtime(long size, +- double *input_ptr, +- double *output_ptr); +-</pre> ++<pre class="example"> int process_realtime(long size, ++ double **input_ptr, ++ double **output_ptr); ++ </pre> ++ ++ <p>if it's multichannel or ++ ++<pre class="example"> int process_realtime(long size, ++ double *input_ptr, ++ double *output_ptr); ++ </pre> + +-<p>if it's single channel. These should return the number of samples ++ <p>if it's single channel. These should return the number of samples + generated. In the future, the number of samples return value will + synchronize plugins which delay audio. + +-<p>Nonrealtime audio plugins need to define ++ <p>Nonrealtime audio plugins need to define + +-<br><pre>int process_loop(double *buffer, long &write_length); +-</pre> ++<pre class="example"> int process_loop(double *buffer, long &write_length); ++ </pre> + +-<p>for single channel or ++ <p>for single channel or + +-<br><pre>int process_loop(double **buffers, long &write_length); +-</pre> ++<pre class="example"> int process_loop(double **buffers, long &write_length); ++ </pre> + +-<p>for multi channel. ++ <p>for multi channel. + ++<div class="node"> + <p><hr> + Node:<a name="VIDEO%20PLUGINS">VIDEO PLUGINS</a>, +-Next:<a rel=next accesskey=n href="#TRANSITION%20PLUGINS">TRANSITION PLUGINS</a>, +-Previous:<a rel=previous accesskey=p href="#AUDIO%20PLUGINS">AUDIO PLUGINS</a>, +-Up:<a rel=up accesskey=u href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++Next:<a rel="next" accesskey="n" href="#TRANSITION%20PLUGINS">TRANSITION PLUGINS</a>, ++Previous:<a rel="previous" accesskey="p" href="#AUDIO%20PLUGINS">AUDIO PLUGINS</a>, ++Up:<a rel="up" accesskey="u" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <br> ++</div> + +-<h3>VIDEO PLUGINS</h3> ++<h3 class="section">VIDEO PLUGINS</h3> + +-<p>The simplest video plugin is Flip. The processing object should ++ <p>The simplest video plugin is Flip. The processing object should + include <b>pluginvclient.h</b> and inherit from <b>PluginVClient</b>. + Realtime video plugins need to define + +-<br><pre>int process_realtime(VFrame **input, +- VFrame **output); +-</pre> ++<pre class="example"> int process_realtime(VFrame **input, ++ VFrame **output); ++ </pre> + +-<p>if it's multichannel or ++ <p>if it's multichannel or + +-<br><pre>int process_realtime(VFrame *input, +- VFrame *output); +-</pre> ++<pre class="example"> int process_realtime(VFrame *input, ++ VFrame *output); ++ </pre> + +-<p>if it's single channel. They only get one frame per call but should ++ <p>if it's single channel. They only get one frame per call but should + return the number of frames generated anyway. In the future, the + number of frames return value will synchronize plugins which delay + video. + +-<p>The nonrealtime video plugins need to define ++ <p>The nonrealtime video plugins need to define + +-<br><pre>int process_loop(VFrame *buffer); +-</pre> ++<pre class="example"> int process_loop(VFrame *buffer); ++ </pre> + +-<p>for single channel or ++ <p>for single channel or + +-<br><pre>int process_loop(VFrame **buffers); +-</pre> ++<pre class="example"> int process_loop(VFrame **buffers); ++ </pre> + +-<p>for multi channel. They're always assumed to have a write length of 1 ++ <p>for multi channel. They're always assumed to have a write length of 1 + when they return 0. + ++<div class="node"> + <p><hr> + Node:<a name="TRANSITION%20PLUGINS">TRANSITION PLUGINS</a>, +-Next:<a rel=next accesskey=n href="#PLUGIN%20GUI'S%20WHICH%20UPDATE%20DURING%20PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>, +-Previous:<a rel=previous accesskey=p href="#VIDEO%20PLUGINS">VIDEO PLUGINS</a>, +-Up:<a rel=up accesskey=u href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++Next:<a rel="next" accesskey="n" href="#PLUGIN%20GUI'S%20WHICH%20UPDATE%20DURING%20PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>, ++Previous:<a rel="previous" accesskey="p" href="#VIDEO%20PLUGINS">VIDEO PLUGINS</a>, ++Up:<a rel="up" accesskey="u" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <br> ++</div> + +-<h3>TRANSITION PLUGINS</h3> ++<h3 class="section">TRANSITION PLUGINS</h3> + +-<p>The simplest video transition is <b>dissolve</b> and the simplest audio ++ <p>The simplest video transition is <b>dissolve</b> and the simplest audio + transition is <b>crossfade</b>. These work identical to the single + channel, realtime audio and video plugins. The only difference is the + addition of an <b>is_transition</b> method to the processing object. + <b>is_transition</b> should return 1. + +-<p>Routines exist for determining where you are relative to the ++ <p>Routines exist for determining where you are relative to the + transition's start and end. + +-<ul> ++ <ul> + +-<li><b>PluginClient::get_source_position()</b> - returns an integer ++ <li><b>PluginClient::get_source_position()</b> - returns an integer + position since the start of the transition + +-<li><b>PluginClient::get_total_len()</b> - returns the integer length of ++ <li><b>PluginClient::get_total_len()</b> - returns the integer length of + the transition. The units are either samples or frames. + +-</ul> ++ </ul> + +-<p>Users should divide source position by total length to get the fraction ++ <p>Users should divide source position by total length to get the fraction + of the transition the current <b>process_realtime</b> function starts + at. + +-<p>Secondly, the meaning of the input and output arguments to ++ <p>Secondly, the meaning of the input and output arguments to + <b>process_realtime</b> is different for transitions than for realtime + plugins. + +-<p>The first argument to process_realtime is the data for the next edit. ++ <p>The first argument to process_realtime is the data for the next edit. + The second argument to process_realtime is the data for the previous + edit. Eventually the second argument becomes the output. + ++<div class="node"> + <p><hr> + Node:<a name="PLUGIN%20GUI'S%20WHICH%20UPDATE%20DURING%20PLAYBACK">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</a>, +-Previous:<a rel=previous accesskey=p href="#TRANSITION%20PLUGINS">TRANSITION PLUGINS</a>, +-Up:<a rel=up accesskey=u href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> ++Previous:<a rel="previous" accesskey="p" href="#TRANSITION%20PLUGINS">TRANSITION PLUGINS</a>, ++Up:<a rel="up" accesskey="u" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a> + <br> ++</div> + +-<h3>PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</h3> ++<h3 class="section">PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK</h3> + +-<p>Effects like <b>Histogram</b> and <b>VideoScope</b> need to update the GUI ++ <p>Effects like <b>Histogram</b> and <b>VideoScope</b> need to update the GUI + during playback to display information about the signal. This is + achieved with the <b>send_render_gui</b> and <b>render_gui</b> methods. + Normally in process_realtime, when the processing object wants to +@@ -4815,167 +4980,169 @@ + called in process_realtime. Send_render_gui goes through a search and + eventually calls <b>render_gui</b> in the GUI instance of the plugin. + +-<p>Render_gui should have a sequence like ++ <p>Render_gui should have a sequence like + +-<br><pre>void MyPlugin::render_gui(void *data) +-{ +- if(thread) +- { +- thread->window->lock_window(); ++<pre class="example"> void MyPlugin::render_gui(void *data) ++ { ++ if(thread) ++ { ++ thread->window->lock_window(); ++ ++ // update GUI here ++ ++ thread->window->unlock_window(); ++ } ++ } ++ ++ </pre> + +-// update GUI here +- +- thread->window->unlock_window(); +- } +-} +- +-</pre> +- +-<p>The sequence uses one argument, a void pointer to transfer information ++ <p>The sequence uses one argument, a void pointer to transfer information + from the renderer to the GUI. The user should typecast this pointer + into something useful. + ++<div class="node"> + <p><hr> + Node:<a name="RELEASE%20NOTES">RELEASE NOTES</a>, +-Previous:<a rel=previous accesskey=p href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a>, +-Up:<a rel=up accesskey=u href="#Top">Top</a> ++Previous:<a rel="previous" accesskey="p" href="#PLUGIN%20AUTHORING">PLUGIN AUTHORING</a>, ++Up:<a rel="up" accesskey="u" href="#Top">Top</a> + <br> ++</div> + +-<h2>RELEASE NOTES</h2> ++<h2 class="chapter">RELEASE NOTES</h2> + +-<ul> ++ <ul> + +-<p><b>1.0.0</b> ++ <p><b>1.0.0</b> + +-<p>First release since Broadcast 2000 migration. ++ <p>First release since Broadcast 2000 migration. + +-<p><b>1.1.0</b> ++ <p><b>1.1.0</b> + +-<p>Titler fonts installed by rpm. ++ <p>Titler fonts installed by rpm. + +-<p>XMovie decodes ac3 according to redesigned liba52 channel mappings. ++ <p>XMovie decodes ac3 according to redesigned liba52 channel mappings. + +-<p>Quicktime MPEG4 parameters debugged. ++ <p>Quicktime MPEG4 parameters debugged. + +-<p>Background rendering over a renderfarm. ++ <p>Background rendering over a renderfarm. + +-<p>Renderfarm clients automatically reduced to idle priority. ++ <p>Renderfarm clients automatically reduced to idle priority. + +-<p>Better MJPA decoding on single processors. ++ <p>Better MJPA decoding on single processors. + +-<p>Better title functionality in 16 bit colormodels. ++ <p>Better title functionality in 16 bit colormodels. + +-<p>Undo for effect keyframes. ++ <p>Undo for effect keyframes. + +-<p>Effect GUI's cleared during undo for effect attachment. ++ <p>Effect GUI's cleared during undo for effect attachment. + +-<p>Fewer lockups on startup. ++ <p>Fewer lockups on startup. + +-<p>Proper keyframe interpolation in scale effect. ++ <p>Proper keyframe interpolation in scale effect. + +-<p>Stamp timecode in titler. ++ <p>Stamp timecode in titler. + +-<p>Memory leaks in rendering stages removed. ++ <p>Memory leaks in rendering stages removed. + +-<p>Removed legacy plugin server code. ++ <p>Removed legacy plugin server code. + +-<p>Option to generate sequence header in every GOP for MPEG2. ++ <p>Option to generate sequence header in every GOP for MPEG2. + +-<p>LADSPA support. ++ <p>LADSPA support. + +-<p>Listbox doesn't enter drag_icon state when dragging column division. ++ <p>Listbox doesn't enter drag_icon state when dragging column division. + +-<p>Effect rendering bug fixed. ++ <p>Effect rendering bug fixed. + +-<p>64 bit mpeg transport stream seeking beyond 2 gigs. ++ <p>64 bit mpeg transport stream seeking beyond 2 gigs. + +-<p>More accurate mask drawing when projector is zoomed. ++ <p>More accurate mask drawing when projector is zoomed. + +-<p>Clear labels updates CWindow ++ <p>Clear labels updates CWindow + +-<p>More accurate YUV/RGB conversions. ++ <p>More accurate YUV/RGB conversions. + +-<p>Import partial tgas ++ <p>Import partial tgas + +-<p>Copy keyframes doesn't copy default keyframe. ++ <p>Copy keyframes doesn't copy default keyframe. + +-<p>Track highlighting offset by vertical scroll. ++ <p>Track highlighting offset by vertical scroll. + +-<p>Multiple video scope, spectrogram, and histogram displays may be opened. ++ <p>Multiple video scope, spectrogram, and histogram displays may be opened. + +-<p>HutSaturation in YUV colorspaces. ++ <p>HutSaturation in YUV colorspaces. + +-<p>Undo for masks. ++ <p>Undo for masks. + +-<p>Shared synthesis effects cause the sharing tracks to ++ <p>Shared synthesis effects cause the sharing tracks to + play back instead of just the owning track. + +-<p>Quicktime recovery utility improved. ++ <p>Quicktime recovery utility improved. + +-<p>Single frame recording with multiple batches doesn't crash. ++ <p>Single frame recording with multiple batches doesn't crash. + +-<p>DV encoding. ++ <p>DV encoding. + +-<p>New video effects: ++ <p>New video effects: + gradient, downsample video, radial blur, linear blur, zoom blur, + histogram, perspective. + +-<p>New audio effect: ++ <p>New audio effect: + Sound level + +-<p><b>1.1.5</b> ++ <p><b>1.1.5</b> + +-<p>More options for the ffmpeg/MPEG-4 codecs. ++ <p>More options for the ffmpeg/MPEG-4 codecs. + +-<p>Histogram works on SMP. ++ <p>Histogram works on SMP. + +-<p>Better 16 bit alpha blending. ++ <p>Better 16 bit alpha blending. + +-<p>BRender path updates from preferences. ++ <p>BRender path updates from preferences. + +-<p>Separate preroll for background rendering and rendering. ++ <p>Separate preroll for background rendering and rendering. + +-<p>Deinterlace by averaging lines 0 and 2 or 1 and 3 to get intervening lines. ++ <p>Deinterlace by averaging lines 0 and 2 or 1 and 3 to get intervening lines. + +-<p>Adaptive deinterlace. ++ <p>Adaptive deinterlace. + +-<p>Frame per second statistics in renderfarm are more reliable. ++ <p>Frame per second statistics in renderfarm are more reliable. + +-<p>Select and slide in the patchbay. ++ <p>Select and slide in the patchbay. + +-<p>Video scope can be resized. ++ <p>Video scope can be resized. + +-<p>Effect keyframes pasted in right positions more often. ++ <p>Effect keyframes pasted in right positions more often. + +-<p>Selective denoising of video based on color channel. ++ <p>Selective denoising of video based on color channel. + +-<p>More mouse wheel bindings in MainWindow and ListBox. ++ <p>More mouse wheel bindings in MainWindow and ListBox. + +-<p>Ctrl-w closes effect windows. ++ <p>Ctrl-w closes effect windows. + +-<p>Perspective doesn't crash when switching from stretch to sheer. ++ <p>Perspective doesn't crash when switching from stretch to sheer. + +-<p>Better text list searching and keyboard navigation. ++ <p>Better text list searching and keyboard navigation. + +-<p>Better Vorbis decoding after a pause. ++ <p>Better Vorbis decoding after a pause. + +-<p>Close recording without recording anything doesn't crash. ++ <p>Close recording without recording anything doesn't crash. + +-<p>Save backup now option. ++ <p>Save backup now option. + +-<p>OpenGL not required anymore. ++ <p>OpenGL not required anymore. + +-<p>Time format changes update the selection textboxes more often. ++ <p>Time format changes update the selection textboxes more often. + +-<p>MPEG-4 deblocking option in XMovie and Cinelerra. ++ <p>MPEG-4 deblocking option in XMovie and Cinelerra. + +-<p>Resize in Record GUI doesn't screw it up. ++ <p>Resize in Record GUI doesn't screw it up. + +-<p>Better export of YUVA16161616 to Component Y'CbCr 10-bit 4:4:4. ++ <p>Better export of YUVA16161616 to Component Y'CbCr 10-bit 4:4:4. + +-<p>Better import of Component Y'CbCr 10-bit 4:4:4 to RGB colorspaces. ++ <p>Better import of Component Y'CbCr 10-bit 4:4:4 to RGB colorspaces. + +-</ul> ++ </ul> + +-</body></html> ++ </body></html> + +Files cinelerra-1.1.5.orig/freetype-2.0.4/objs/.libs/libfreetype.so.6 and cinelerra-1.1.5/freetype-2.0.4/objs/.libs/libfreetype.so.6 differ +Files cinelerra-1.1.5.orig/freetype-2.0.4/objs/.libs/libfreetype.so.6.1.0 and cinelerra-1.1.5/freetype-2.0.4/objs/.libs/libfreetype.so.6.1.0 differ +diff -ruN cinelerra-1.1.5.orig/guicast/bctheme.C cinelerra-1.1.5/guicast/bctheme.C +--- cinelerra-1.1.5.orig/guicast/bctheme.C 2002-12-21 04:01:43.000000000 +0100 ++++ cinelerra-1.1.5/guicast/bctheme.C 2003-05-04 08:50:11.000000000 +0200 +@@ -86,7 +86,7 @@ + } + + +-void BC_Theme::overlay(VFrame *dst, VFrame *src, int in_x1 = -1, int in_x2 = -1) ++void BC_Theme::overlay(VFrame *dst, VFrame *src, int in_x1, int in_x2) + { + int w; + int h; +diff -ruN cinelerra-1.1.5.orig/libmpeg3/Makefile cinelerra-1.1.5/libmpeg3/Makefile +--- cinelerra-1.1.5.orig/libmpeg3/Makefile 2002-06-21 14:35:24.000000000 +0200 ++++ cinelerra-1.1.5/libmpeg3/Makefile 2003-05-04 08:50:11.000000000 +0200 +@@ -25,7 +25,7 @@ + ifeq ($(OBJDIR), i686) + USE_MMX = 1 + ifneq ($(HAVE_CFLAGS), yes) +- CFLAGS := -O2 -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -I/usr/local/include ++ CFLAGS := -O2 -fomit-frame-pointer -falign-loops=2 -falign-jumps=2 -falign-functions=2 -I/usr/include + endif + CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE + endif +@@ -49,8 +49,7 @@ + + CFLAGS += \ + -I. \ +- -I$(A52DIR)/include \ +- -I$(A52DIR)/liba52 ++ -I/usr/include/a52dec + + #CFLAGS += -g + +@@ -122,7 +121,7 @@ + $(OBJDIR)/audio \ + $(OBJDIR)/video + +-include Makefile.a52 ++##include Makefile.a52 + + DIRS += $(A52DIRS) + +@@ -133,7 +132,7 @@ + #$(OBJDIR)/mpeg3split + + +-LIBS = -lm -lpthread ++LIBS = -lm -lpthread -la52 + + $(shell if ! test -d $(OBJDIR) \; then mkdir -p $(OBJDIR) \; fi ) + +@@ -188,7 +187,7 @@ + cat *.c *.h audio/*.c audio/*.h video/*.c video/*.h | wc + + $(OBJS): +- $(CC) -c `cat $(OBJDIR)/c_flags` $(subst $(OBJDIR)/,, $*.c) -o $*.o ++ $(CC) -c $(CFLAGS) $(subst $(OBJDIR)/,, $*.c) -o $*.o + $(ASMOBJS): + $(CC) -c `cat $(OBJDIR)/c_flags` $(subst $(OBJDIR)/,, $*.S) -o $*.o + $(NASMOBJS): +diff -ruN cinelerra-1.1.5.orig/libmpeg3/Makefile.a52 cinelerra-1.1.5/libmpeg3/Makefile.a52 +--- cinelerra-1.1.5.orig/libmpeg3/Makefile.a52 2002-06-21 14:35:24.000000000 +0200 ++++ cinelerra-1.1.5/libmpeg3/Makefile.a52 1970-01-01 01:00:00.000000000 +0100 +@@ -1,39 +0,0 @@ +-A52DIR := $(shell expr a52dec* ) +- +-A52DIRS := \ +- $(OBJDIR)/$(A52DIR)/liba52/ \ +- $(OBJDIR)/$(A52DIR)/libao/ \ +- $(OBJDIR)/$(A52DIR)/src/ \ +- $(OBJDIR)/$(A52DIR)/test/ +- +- +-A52OBJS := \ +- $(OBJDIR)/$(A52DIR)/liba52/bit_allocate.o \ +- $(OBJDIR)/$(A52DIR)/liba52/bitstream.o \ +- $(OBJDIR)/$(A52DIR)/liba52/downmix.o \ +- $(OBJDIR)/$(A52DIR)/liba52/imdct.o \ +- $(OBJDIR)/$(A52DIR)/liba52/parse.o \ +- $(OBJDIR)/$(A52DIR)/libao/audio_out_float.o \ +- $(OBJDIR)/$(A52DIR)/libao/audio_out_null.o \ +- $(OBJDIR)/$(A52DIR)/libao/audio_out.o \ +- $(OBJDIR)/$(A52DIR)/libao/audio_out_oss.o \ +- $(OBJDIR)/$(A52DIR)/libao/audio_out_solaris.o \ +- $(OBJDIR)/$(A52DIR)/libao/audio_out_wav.o \ +- $(OBJDIR)/$(A52DIR)/libao/float2s16.o \ +- $(OBJDIR)/$(A52DIR)/src/a52dec.o \ +- $(OBJDIR)/$(A52DIR)/src/extract_a52.o \ +- $(OBJDIR)/$(A52DIR)/src/getopt.o \ +- $(OBJDIR)/$(A52DIR)/test/compare.o +- +-A52CFLAGS = \ +- $(CFLAGS) \ +- -DHAVE_CONFIG_H \ +- -I$(A52DIR)/ \ +- -I$(A52DIR)/include \ +- -I$(A52DIR)/liba52 \ +- -I$(A52DIR)/libao \ +- -I$(A52DIR)/src +- +- +- +- +diff -ruN cinelerra-1.1.5.orig/libmpeg3/audio/Makefile cinelerra-1.1.5/libmpeg3/audio/Makefile +--- cinelerra-1.1.5.orig/libmpeg3/audio/Makefile 2002-06-21 14:35:24.000000000 +0200 ++++ cinelerra-1.1.5/libmpeg3/audio/Makefile 2003-05-04 08:50:11.000000000 +0200 +@@ -1,4 +1,4 @@ +-include ../global_config ++include ../../global_config + export CFLAGS + + OBJS = \ +diff -ruN cinelerra-1.1.5.orig/libmpeg3/mpeg3private.h cinelerra-1.1.5/libmpeg3/mpeg3private.h +--- cinelerra-1.1.5.orig/libmpeg3/mpeg3private.h 2002-10-18 03:38:19.000000000 +0200 ++++ cinelerra-1.1.5/libmpeg3/mpeg3private.h 2003-05-04 08:50:11.000000000 +0200 +@@ -3,7 +3,7 @@ + + #include <stdint.h> + #include <stdio.h> +- ++#include <pthread.h> + + + +diff -ruN cinelerra-1.1.5.orig/mplexlo/Makefile cinelerra-1.1.5/mplexlo/Makefile +--- cinelerra-1.1.5.orig/mplexlo/Makefile 2002-07-13 04:19:23.000000000 +0200 ++++ cinelerra-1.1.5/mplexlo/Makefile 2003-05-04 08:50:12.000000000 +0200 +@@ -7,7 +7,7 @@ + OUTPUT := $(OBJDIR)/mplexlo + + $(OUTPUT): $(OBJS) +- $(CC) -o $(OUTPUT) $(OBJS) ../libmpeg3/$(OBJDIR)/libmpeg3.a -lpthread -lm ++ $(CC) -o $(OUTPUT) $(OBJS) ../libmpeg3/$(OBJDIR)/libmpeg3.a -lpthread -lm -la52 + + $(OBJS): + $(CC) -c $(CFLAGS) $(subst $(OBJDIR)/,, $*.c) -o $*.o +diff -ruN cinelerra-1.1.5.orig/quicktime/Makefile cinelerra-1.1.5/quicktime/Makefile +--- cinelerra-1.1.5.orig/quicktime/Makefile 2003-02-05 07:40:02.000000000 +0100 ++++ cinelerra-1.1.5/quicktime/Makefile 2003-05-04 08:50:12.000000000 +0200 +@@ -23,7 +23,7 @@ + endif + + ifeq ($(OBJDIR), i686) +- CFLAGS = -O3 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -I/usr/local/include ++ CFLAGS = -O3 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -falign-loops=2 -falign-jumps=2 -falign-functions=2 -I/usr/include + endif + + +diff -ruN cinelerra-1.1.5.orig/quicktime/Makefile.dv cinelerra-1.1.5/quicktime/Makefile.dv +--- cinelerra-1.1.5.orig/quicktime/Makefile.dv 2002-11-11 06:19:11.000000000 +0100 ++++ cinelerra-1.1.5/quicktime/Makefile.dv 2003-05-04 08:50:12.000000000 +0200 +@@ -1,4 +1,4 @@ +-DV_DIR := $(shell expr libdv-0.98 ) ++DV_DIR := libdv-0.98 + + DV_OBJS := \ + $(OBJDIR)/$(DV_DIR)/libdv/audio.o \ +diff -ruN cinelerra-1.1.5.orig/quicktime/libdv-0.98/libdv/asmoff.h cinelerra-1.1.5/quicktime/libdv-0.98/libdv/asmoff.h +--- cinelerra-1.1.5.orig/quicktime/libdv-0.98/libdv/asmoff.h 2003-02-10 07:03:40.000000000 +0100 ++++ cinelerra-1.1.5/quicktime/libdv-0.98/libdv/asmoff.h 2003-05-04 08:50:14.000000000 +0200 +@@ -1,14 +1,14 @@ + #define dv_videosegment_t_i 0 + #define dv_videosegment_t_k 4 + #define dv_videosegment_t_bs 8 +-#define dv_videosegment_t_mb 12 +-#define dv_videosegment_t_isPAL 4992 +-#define dv_macroblock_t_size 996 +-#define dv_macroblock_t_b 20 +-#define dv_macroblock_t_eob_count 992 +-#define dv_macroblock_t_vlc_error 988 +-#define dv_macroblock_t_qno 980 +-#define dv_macroblock_t_sta 984 ++#define dv_videosegment_t_mb 16 ++#define dv_videosegment_t_isPAL 5016 ++#define dv_macroblock_t_size 1000 ++#define dv_macroblock_t_b 24 ++#define dv_macroblock_t_eob_count 996 ++#define dv_macroblock_t_vlc_error 992 ++#define dv_macroblock_t_qno 984 ++#define dv_macroblock_t_sta 988 + #define dv_macroblock_t_i 0 + #define dv_macroblock_t_j 4 + #define dv_macroblock_t_k 8 +diff -ruN cinelerra-1.1.5.orig/quicktime/libdv-0.98/libdv/mmx.h cinelerra-1.1.5/quicktime/libdv-0.98/libdv/mmx.h +--- cinelerra-1.1.5.orig/quicktime/libdv-0.98/libdv/mmx.h 2002-11-08 14:44:37.000000000 +0100 ++++ cinelerra-1.1.5/quicktime/libdv-0.98/libdv/mmx.h 2003-05-04 08:50:14.000000000 +0200 +@@ -223,7 +223,7 @@ + + /* Function to test if mmx instructions are supported... + */ +-inline extern int ++inline static int + mmx_ok(void) + { + /* Returns 1 if MMX instructions are supported, 0 otherwise */ +diff -ruN cinelerra-1.1.5.orig/quicktime/libdv-0.98/libdv/vlc.h cinelerra-1.1.5/quicktime/libdv-0.98/libdv/vlc.h +--- cinelerra-1.1.5.orig/quicktime/libdv-0.98/libdv/vlc.h 2002-11-08 14:44:37.000000000 +0100 ++++ cinelerra-1.1.5/quicktime/libdv-0.98/libdv/vlc.h 2003-05-04 08:50:14.000000000 +0200 +@@ -69,7 +69,7 @@ + extern void dv_decode_vlc(int bits,int maxbits, dv_vlc_t *result); + extern void __dv_decode_vlc(int bits, dv_vlc_t *result); + +-extern __inline__ void dv_peek_vlc(bitstream_t *bs,int maxbits, dv_vlc_t *result) { ++static __inline__ void dv_peek_vlc(bitstream_t *bs,int maxbits, dv_vlc_t *result) { + if(maxbits < 16) + dv_decode_vlc(bitstream_show(bs,16),maxbits,result); + else diff --git a/media-video/cinelerra/files/digest-cinelerra-1.1.5 b/media-video/cinelerra/files/digest-cinelerra-1.1.5 new file mode 100644 index 000000000000..2132fa680b8d --- /dev/null +++ b/media-video/cinelerra/files/digest-cinelerra-1.1.5 @@ -0,0 +1 @@ +MD5 0c9082049bd7b05a80fe604493d8da02 cinelerra-1.1.5-src.tar.bz2 19098210 |