r668: Configure.in and autogen.sh cleanup based on ideas by giskard.
[cinelerra_cv.git] / doc / cinelerra.texi
blob174201fb62b81f0befb4da4d00b0ae9d149df800
1 \input texinfo   @c -*-texinfo-*-
5 @setfilename cinelerra.info
6 @settitle Secrets of Cinelerra
9 @titlepage
10 @center @title Secrets of Cinelerra
11 @subtitle Version 1.0.0
12 @author Heroine Virtual Ltd.
13 @page
14 Copyright @copyright{} 2002 Heroine Virtual Ltd.
15 @end titlepage
19 @node TOP
20 @top
22 @contents
25 @menu
26 * ABOUT CINELERRA::          Cinelerra in brief.
27 * INSTALLATION::             Making Cinelerra work on your system.
28 * CONFIGURATION::            Adjusting the behavior of Cinelerra.
29 * THE MAIN WINDOWS::         The most often used user interface.
30 * LOADING AND SAVING FILES:: Moving media between disk and Cinelerra.
31 * NAVIGATING THE PROJECT::   Moving around the media.
32 * EDITING::                  Moving the media in time.
33 * USING EFFECTS::            Altering the media.
34 * SETTING PROJECT ATTRIBUTES:: Changing the way the media is displayed.
35 * COMPOSITING::              Overlaying different sources of video.
36 * KEYFRAMES::                Making effects change over time.
37 * CAPTURING MEDIA::          Moving media from the real world to disk.
38 * IMPROVING PERFORMANCE::    Making Cinelerra run better on Linux.
39 * TROUBLESHOOTING::          Problems with Cinelerra.
40 * SECRETS OF CINELERRA::     Unusual applications of Cinelerra to common problems.
41 * EFFECT DESCRIPTIONS::      How to use the more complicated effects.
42 * PLUGIN AUTHORING::         How to write new effects.
43 * RELEASE NOTES::            Changes in the most recent versions of Cinelerra.
44 @end menu
54 @node ABOUT CINELERRA
55 @chapter ABOUT CINELERRA
57 For years some people have wanted a way to edit their audio and video
58 in one place as fluidly as writing text.  Cinelerra tries to be a
59 single location for all audio and video editing needs.  All the
60 recording, editing, and playback are handled here.  It can be used as
61 an audio player.  It can be used to record audio or video.  It can even
62 be used as a photo retoucher.
64 There are two types of moviegoers: producers who create new content,
65 going back over their content at future points for further refinement,
66 and consumers who want to acquire the content and watch it.  Cinelerra
67 is not intended for consumers.  Cinelerra has many features for
68 uncompressed content, high resolution processing, and compositing, with
69 very few shortcuts.  Producers need these features because of the need
70 to retouch many generations of footage with alterations to the format,
71 which makes Cinelerra very complex. There are many more standard tools
72 for consumers like MainActor, Kino, or Moxy, which you should consider
73 before using Cinelerra.
75 In 1996 our first editor came out: Broadcast 1.0.  It was just a window
76 with a waveform in it, it could cut and paste stereo audio waveforms on
77 a UNIX box, except unlike other audio editors it could handle files up
78 to 2 gigabytes with only 64 megs of RAM.  That was a feature normally
79 only accessible to the highest end professional audio houses.
81 In 1997 Broadcast 1.0 was replaced by Broadcast 2.0.  This time the
82 window had a menubar, patchbay, console, and transport control. 
83 Broadcast 2.0 still only handled audio but this time it handled
84 unlimited tracks, and it could perform effects on audio and save the
85 resulting waveform to disk.  More notably a few effects could be
86 performed as the audio was playing back, in realtime.  A user could mix
87 unlimited numbers of tracks, adjust fade, pan, and EQ, and hear the
88 result instantly.   Amazingly this real time tweeking is still
89 unavailable on most audio programs.
91 But Broadcast 2.0 still didn't handle video and it wasn't very graceful
92 at audio either.  In 1999 video broke into the story with Broadcast
93 2000.  This iteration of the Broadcast series could do wonders with
94 audio and offered a pretty good video feature set.  It could edit video
95 files up to 64 terabytes.  It could do everything Broadcast 2.1 did
96 with audio except now all effects for video and audio could be chained
97 and performed on the fly, with instant feedback as a user tweeked
98 parameters during playback.  Broadcast 2000 made it very easy to do a
99 lot of processing and editing on video and audio that would otherwise
100 involve many hours setting up command line sequences and writing to
101 disk. For a time it seemed as if the original dream of immersive movie
102 making for everyone regardless of income level had arrived.
104 Later on Broadcast 2000 began to come short.  Its audio and video was
105 graceful if you knew how to use it efficiently, but quality issues and
106 new user interface techniques were emerging.  Broadcast 2000 kept the
107 audio interface from its ancestors, which didn't apply well to video. 
108 Users likewise were maturing.  No longer would it be sufficient to just
109 edit video on a UNIX box.  Most users expected on UNIX the same thing
110 they got in Win or Mac. In mid 2000 designs for a Broadcast 2000
111 replacement were drafted.  The Broadcast name was officially retired
112 from the series and the software would now be called Cinelerra. 
113 Cinelerra would allow users to configure certain effects in much less
114 time than required with Broadcast 2000.  It would begin to emulate some
115 of the features found in Win and Mac software while not attempting to
116 become a clone.  It's interface would be designed for video from the
117 ground up, while supplementing that with the Broadcast audio
118 interface.  As always, quality improvements would happen.
127 @menu
128 * ABOUT THIS MANUAL::
129 @end menu
131 @node ABOUT THIS MANUAL
132 @section ABOUT THIS MANUAL
134 Like the operating system and compiler for a piece of software, the
135 document writing format is the most important thing in choosing our
136 document format.  A piece of software which compiles on GCC and Linux
137 will be usable as long as there are C compilers.  Documents written in
138 Texinfo will be readable as long as there's a C compiler.
140 After many years of searching for the perfect documentation format
141 we've arrived at TexInfo.  This format can be converted to HTML,
142 printed, automatically indexed, but most importantly is not bound to
143 any commercial word processor.
145 There are no screenshots in this manual.  Screenshots become obsolete
146 quickly and as a result confuse the users.  What looks one way in a
147 screenshot will always look different in the real program because the
148 real program and the manual are always evolving, never perfectly
149 synchronized.  It is true that manuals should have screenshots, but our
150 objective in omitting screenshots is to keep the software costs minimal
151 so you don't have to pay for it.  That includes additional labor to
152 synchronize the manual with the software.
154 In addition to telling you the basic editing features of Cinelerra this
155 manual covers tricks that won't be described anywhere else.  We're
156 going to try to come up with certain things you can do with Cinelerra
157 that you wouldn't think of on your own.
175 @node INSTALLATION
176 @chapter INSTALLATION
179 The Cinelerra package contains Cinelerra and most of the libraries
180 needed to run it.  We try to include all the dependancies because of
181 the difficulty in tracking down the right versions.  Also included are
182 some utilities for handling files.  The following are the general
183 contents of all Cinelerra packages.
185 @itemize
187 @item
189 @b{Foreign language translations} - These go into /usr/share/locale.
191 @item
193 @b{Cinelerra executable} - This goes into /usr/bin
195 @item
197 @b{Cinelerra plugins} - These go into /usr/lib/cinelerra
199 @item
201 @b{soundtest} - Utility for determining sound card buffer size.
203 @item
205 @b{mplexhi} - Multiplexing of MPEG elementary streams with standards conformance.
207 @item
209 @b{mplexlo} - Multiplexing of MPEG elementary streams without standards
210 conformance but more efficiently.
212 @item
214 @b{mpeg3toc} - Utility for indexing and reading MPEG files.
216 @end itemize
220 @menu
221 * INSTALLING AN RPM::
222 * COMPILING FROM SCRATCH::
223 @end menu
232 @node INSTALLING AN RPM
233 @section INSTALLING AN RPM
235 Cinelerra is best installed by downloading an RPM and running
237 @example
238 rpm -U --force --nodeps hvirtual*.rpm
239 @end example
241 on a RedHat system.
243 On systems which don't support RPM look for a utility called
244 @emph{rpm2cpio}.  Download a Cinelerra RPM and from the /
245 directory run
247 @example
248 rpm2cpio hvirtual*.rpm | cpio -i --make-directories
249 @end example
259 @node COMPILING FROM SCRATCH
260 @section COMPILING FROM SCRATCH
262 It should be noted that the compiler used in building Cinelerra
263 binaries is the free GNU compiler and very conservative optimization
264 flags.  You can try different compilers and optimization flags by
265 compiling the source but this is hard.
267 The compilation is verified on a vanilla RedHat 9.0 installation,
268 workstation mode.  RedHat 9.0 doesn't install @b{nasm}.  This has to be
269 installed manually for compilation to succeed. Compiling the source is
270 hard and there's no warranty if the source code fails to compile, but
271 the method for compiling starts by downloading the source code and
272 decompressing.
274 @example
275 tar jxf cinelerra*.tar.bz2
276 @end example
279 Enter the hvirtual directory
281 @example
282 cd cinelerra
283 @end example
285 and set the CFLAGS environment variable.  The flags for the GCC
286 compiler are constantly changing.  These are our most recent flags. 
287 For Pentium II use:
289 @example
290 export CFLAGS='-O3 -march=i686 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -falign-loops=2 -falign-jumps=2 -falign-functions=2'
291 @end example
293 For Pentium I and old AMD's use:
295 @example
296 export CFLAGS='-O3 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -falign-loops=2 -falign-jumps=2 -falign-functions=2'
297 @end example
299 For new AMD's use:
301 @example
302 export CFLAGS='-O3 -march=athlon -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -falign-loops=2 -falign-jumps=2 -falign-functions=2'
303 @end example
306 Then run
308 @example
309 ./configure
310 @end example
312 This checks the build environment for the right tools and should give
313 you an error if a tool is missing.  Once that succeeds run
315 @example
316 make
317 @end example
319 The make procedure should run through all the directories and put
320 binaries in the @emph{i686} directories.  When we originally supported
321 Alpha it was convenient to compile Alpha and i686 binaries
322 simultaneously, in different directories, so all the binaries are put in
323 subdirectories.
325 Once finished run
327 @example
328 make install
329 @end example
331 to install the binaries.  The output is put in the following directories:
333 @itemize
334 @item
335 Executables -> /usr/bin
336 @item
337 Plugins  -> /usr/lib/cinelerra
338 @item
339 Translations  -> /usr/share/locale/*/LC_MESSAGES/cinelerra.mo
340 @end itemize
342 The main binaries are /usr/bin/cinelerra and several utilities for
343 reading MPEG transport streams.
345 Run Cinelerra by running
348 @example
349 /usr/bin/cinelerra
350 @end example
367 @node CONFIGURATION
368 @chapter CONFIGURATION
371 Because of the variety of uses, Cinelerra cannot be run optimally
372 without some intimate configuration for your specific needs. Very few
373 parameters are adjustible at compile time.  Runtime configuration is
374 the only option for most configuration because of the multitude of
375 parameters.
377 Go to @emph{settings->preferences} and run through the options.
380 @menu
381 * ENVIRONMENT VARIABLES::  These environment variables are recognized by Cinelerra
382 * PLAYBACK::               Configuring parameters related to playback.
383 * RECORDING::              Configuring parameters related to recording.
384 * PERFORMANCE::            Configuring parameters related to how fast things go.
385 * INTERFACE::              Configuring the user interface.
386 * ABOUT::                  Viewing information about the program.
387 @end menu
390 @node ENVIRONMENT VARIABLES
391 @section ENVIRONMENT VARIABLES
393 In UNIX derivatives, environment variables are global variables in the
394 shell which all applications can read.  They are set with a command
395 like @b{set VARIABLE=value}.  All the environment variables can be
396 viewed with a command like @b{env}.  Cinelerra recognizes the following
397 environment variables:
399 @itemize
401 @item @b{LADSPA_PATH} - A colon separated list of directories to search
402 for LADSPA plugins.  These are not native Cinelerra plugins. 
403 @xref{LADSPA EFFECTS}.
405 @item @b{GLOBAL_PLUGIN_DIR} - The directory Cinelerra should look for
406 native plugins in.  The default is /usr/lib/cinelerra but you may need an
407 alternate directory if you're sharing the same executable directory
408 among many machines via NFS.  Plugins of different binary formats need
409 to be in different directories.
412 @end itemize
414 @node PLAYBACK
415 @section PLAYBACK
419 @menu
420 * AUDIO OUT::
421 * VIDEO OUT::
422 @end menu
426 @node AUDIO OUT
427 @subsection AUDIO OUT
429 These determine what happens when you play sound from the timeline.
431 @itemize 
433 @item
434 SAMPLES TO READ FROM DISK
436 Cinelerra uses a pipeline for rendering audio. The first stage is
437 reading large chunks of audio from disk, the samples to read from
438 disk.  This is followed by processing small fragments in a virtual
439 console.
441 @item
442 SAMPLES TO SEND TO CONSOLE:
444 The second stage is rendering small fragments through the virtual
445 console to the sound driver. A larger value here causes more latency
446 when you change mixing parameters but gives more reliable playback.
448 Some sound drivers don't allow changing of the console fragment so
449 latency is unchanged no matter what this value is.
451 @item
453 VIEW FOLLOWS PLAYBACK
455 Causes the timeline window to scroll when the playback cursor moves out
456 of view.  This can bog down the X Server.
458 @item
459 USE SOFTWARE FOR POSITIONING INFORMATION
461 Most soundcards and sound drivers don't give reliable information on
462 the number of samples the card has played. When playing video you need
463 this information for synchronization. This option causes the sound
464 driver to be ignored and a software timer to be used for
465 synchronization.
467 @item
468 AUDIO PLAYBACK IN REALTIME:
470 Back in the days when 150Mhz was the maximum, this allowed
471 uninterrupted playback on heavy loads. Now you'll probably only need it
472 for playing video and audio when the load is to high for uninterrupted
473 audio.
475 @item
476 AUDIO DRIVER
478 There are many sound drivers for Linux.  This allows selecting one and
479 setting parameters specific to it.  Some of the common parameters for a
480 sound driver are
482 @itemize
484 @item
485 DEVICE PATH
487 Usually a file in the @emph{/dev/} directory which controls the
488 device.
490 @item
492 BITS
494 The number of bits of precision Cinelerra should set the device for. 
495 This sometimes has a figuritive meaning.  Some sound drivers need to be
496 set to 32 bits to perform 24 bit playback and won't play anything when
497 set to 24 bits.  Some sound drivers need to be set to 24 bits for 24
498 bit playback.
500 @item
502 CHANNELS
504 The number of channels Cinelerra should set the device for.  Regardless
505 of the number of channels in the project, the number of channels set
506 here will be written to the device.  When this is set to 2 and the
507 project has 1 channel you'll hear sound through the left speaker and
508 not centered as expected for a monaural project.  When this is set to 1
509 and the project has 2 channels you'll hear the left channel centered
510 and not 2 channels mixed together.
512 @end itemize
513 @end itemize
522 @node VIDEO OUT
523 @subsection VIDEO OUT
525 These determine what happens when you play video from the timeline.
527 @itemize
529 @item
531 FRAMERATE ACHIEVED
533 The number of frames per second being
534 displayed during playback.
536 @item
538 SCALING EQUATION
540 The algorithm used in all video resizing in
541 the virtual console.  This doesn't affect scaling to the size of the
542 compositor window.
544 @itemize
546 @item
547 NEAREST NEIGHBOR ENLARGE AND REDUCE
549 lowest but fastest
550 quality.  Produces jagged edges and uneven motion.
553 @item
555 BICUBIC ENLARGE AND BILINEAR REDUCE
557 highest but slowest
558 quality.  For enlarging a bicubic interpolation is used, which blurs
559 slightly but doesn't reveal stair steps.  For reduction a bilinear
560 interpolation is used, which produces very sharp images and reduces
561 noise.  The bilinear reduced images can be sharpened with a sharpen
562 effect with less noise than a normal sized image.
564 @item
566 BILINEAR ENLARGE AND BILINEAR REDUCE
568 when slight enlargement
569 is needed a bilinear enlargement looks better than a bicubic
570 enlargement.
572 @end itemize
575 @item
577 PRELOAD BUFFER FOR QUICKTIME
579 The Quicktime/AVI decoder can
580 handle CDROM sources better when this is around 1000000.  This reduces
581 the amount of seeking.  For normal use this should be 0.
583 @item
585 MPEG-4 DEBLOCKING
587 For assets which are compressed in OpenDivx and Quicktime, this enables
588 deblocking.  This greatly improves the picture quality during decoding
589 while slowing it down.
591 @item
593 VIDEO DRIVER
595 Normally video on the timeline goes to the
596 compositor window during continuous playback and when the insertion
597 point is repositioned.  Instead of sending video to the Compositor
598 window the video driver can be set to send video to another output
599 device during continuous playback.  This doesn't affect where video
600 goes when the insertion point is repositioned, however.
602 Various parameters are given for Video Driver depending on the driver.
604 @itemize
606 @item
608 DISPLAY
610 The is intended for dual monitor
611 displays.  Depending on the value of Display, the Compositor window
612 will appear on a different monitor from the rest of the windows.
614 @item
616 DEVICE PATH
618 Usually a file in the @emph{/dev/} directory
619 which controls the device.
621 @item
623 SWAP FIELDS
625 Make the even lines odd and the odd lines even
626 when sending to the device.  On an NTSC or 1080i monitor the fields may
627 need to be swapped to prevent jittery motion.
629 @item
631 OUTPUT CHANNEL
633 Devices with multiple outputs may need a
634 specific connector to send video on.
636 @item
638 PORT
640 The IEEE1394 standard specifies something known as the
641 @emph{port}.  This is probably the firewire card number in the system
642 to use.
644 @item
646 CHANNEL
648 The IEEE1394 standard specifies something known as the
649 @emph{channel}.  For DV cameras it's always @emph{63}.
651 @end itemize
653 @end itemize
659 @node RECORDING
660 @section RECORDING
662 @menu
663 * AUDIO IN::
664 * VIDEO IN::
665 @end menu
667 @node AUDIO IN
668 @subsection AUDIO IN
670 These determine what happens when you record audio.
672 @itemize
673 @item
675 RECORD DRIVER
677 This is used for recording audio in the Record window.  It may be
678 shared with the Record Driver for video if the audio and video are
679 wrapped in the same stream.  It takes variable parameters depending on
680 the driver.  The parameters have the same meaning as they do for
681 playback.
683 @itemize
684 @item
686 DEVICE PATH
688 Usually a file in the @emph{/dev/} directory which controls the
689 device.
691 @item
693 BITS
695 The number of bits of precision Cinelerra should set the device for. 
696 This sometimes has a figuritive meaning.  Some sound drivers need to be
697 set to 32 bits to perform 24 bit recording and won't record anything
698 when set to 24 bits.  Some sound drivers need to be set to 24 bits for
699 24 bit recording.
701 @item
702 CHANNELS
704 The number of channels Cinelerra should set the device for.  Regardless
705 of the number of channels in the record operation, the number of
706 channels set here will be read from the device.  When this is set to 2
707 and the record operation has 1 channel you'll record the left speaker
708 and not a mix of the left and right speakers as expected for a monaural
709 project.  When this is set to 1 and the project has 2 channels you'll
710 record the left and right channels mixed into the left speaker and not
711 1 channel spead across two speakers.
713 @end itemize
715 @item
717 SAMPLES TO WRITE AT A TIME
719 Audio is first read in small fragments from the device.  Many small
720 fragments are combined into a large fragment before writing to disk. 
721 The disk writing process is done in a different thread.  The value here
722 determines how large the combination of fragments is for each disk
723 write.
725 @item
727 SAMPLE RATE FOR RECORDING
729 Regardless of what the project settings are.  This is the sample rate
730 used for recording.  This should be the highest the audio device
731 supports.
733 @end itemize
735 @node VIDEO IN
736 @subsection VIDEO IN
738 These determine what happens when you record video.
740 @itemize
741 @item
743 RECORD DRIVER
745 This is used for recording video in the Record window.  It may be
746 shared with the Record Driver for audio if the audio and video are
747 wrapped in the same stream.  It takes variable parameters depending on
748 the driver.  The parameters have the same meaning as they do for
749 playback.
751 @item
753 FRAMES TO RECORD TO DISK AT A TIME
755 Frames are recorded in a pipeline.  First frames are buffered in the
756 device.  Then they're read into a larger buffer for writing to disk. 
757 The disk writing is done in a different thread as the device reading. 
758 For certain codecs the disk writing uses multiple processors.  This
759 value determines how many frames are written to disk at a time.
761 @item
763 FRAMES TO BUFFER IN DEVICE
765 The number of frames to store in the device before reading.  This
766 determines how much latency there can be in the system before frames
767 are dropped.
769 @item
770 USE SOFTWARE FOR POSITIONING INFORMATION
772 Video uses audio for
775 synchronization but most soundcards don't give accurate position
776 information.  This calculates an estimation of audio position in
777 software instead of the hardware for synchronization.
779 @item
781 SYNC DRIVES AUTOMATICALLY
783 For high bitrate recording the drives may be fast enough to store the
784 data but Linux may wait several minutes and stall as it writes several
785 minutes of data at a time.  This forces Linux to flush its buffers
786 every second instead of every few minutes and produce slightly better
787 realtime behavior.
789 @item
791 SIZE OF CAPTURED FRAME
793 This is the size of the frames recorded.  It is independant of the
794 project frame size because most video devices only record a fixed frame
795 size.  If the frame size given here isn't supported by the device it
796 might crash Cinelerra.
798 @item
799 FRAME RATE FOR RECORDING
801 The frame rate recorded is different from the project settings.  This
802 sets the recorded frame rate.
804 @end itemize
813 @node PERFORMANCE
814 @section PERFORMANCE
817 You'll spend most of your time configuring this section.  The main
818 focus of performance is rendering parameters not available in the
819 rendering dialog.  
825 @itemize 
827 @item
828 CACHE ITEMS
832 To speed up rendering, several assets are kept open simultaneously.
833 This determines how many are kept open.  A number too large may exhaust
834 your memory pretty fast and result in a crash.  A number too small may
835 result in slow playback as assets need to be reopened more frequently.
838 @item
840 SECONDS TO PREROLL RENDERS
842 Some effects need a certain amount of time to settle in.  This sets a
843 number of seconds to render without writing to disk before the selected
844 region is rendered.  When using the renderfarm you'll sometimes need to
845 preroll to get seemless transitions between the jobs.  Every job in a
846 renderfarm is prerolled by this value.  This does not affect background
847 rendering, however.  Background rendering uses a different preroll
848 value.
850 @item
852 FORCE SINGLE PROCESSOR USE
854 Cinelerra tries to use all processors on the system by default but
855 sometimes you'll only want to use one processor, like in a renderfarm
856 client.  This forces only one processer to be used.  The operating
857 system, however, usually uses the second processor anyway for disk
858 access so this option is really a 1.25 processor mode.  The value of
859 this parameter is used in renderfarm clients.
861 @end itemize
864 @menu
865 * BACKGROUND RENDERING::
866 * RENDERFARM::
867 @end menu
870 @node BACKGROUND RENDERING
871 @subsection BACKGROUND RENDERING
873 Background rendering was originally concieved to allow HDTV effects to
874 be displayed in realtime.  Background rendering causes temporary output
875 to constantly be rendered while the timeline is being modified.  The
876 temporary output is played during playack whenever possible.  It's very
877 useful for transitions and previewing effects which are too slow to
878 display in a reasonable amount of time.  If renderfarm is enabled, the
879 renderfarm is used for background rendering, giving you the potential
880 for realtime effects if enough network bandwidth and CPU nodes exist.
882 @itemize
888 @item
889 FRAMES PER BACKGROUND RENDERING JOB
891 This only works if renderfarm is being used, otherwise background
892 rendering creates a single job for the entire timeline.  The number of
893 frames specified here is scaled to the relative CPU speed of rendering
894 nodes and used in a single renderfarm job.  The optimum number is 10 -
895 30 since network bandwidth is used to initialize each job.
899 @item
900 FRAMES TO PREROLL BACKGROUND
902 This is the number of frames to render ahead of each background
903 rendering job.  Background rendering is degraded when preroll is used
904 since the jobs are small.  When using background rendering, this number
905 is ideally 0.  Some effects may require 3 frames of preroll.
911 @item
912 OUTPUT FOR BACKGROUND RENDERING
914 Background rendering generates a sequence of image files in a certain
915 directory.  This parameter determines the filename prefix of the image
916 files.  It should be on a fast disk, accessible to every node in the
917 renderfarm by the same path.  Since hundreds of thousands of image
918 files are usually created, @emph{ls} commands won't work in the
919 background rendering directory.  The @image{magnify} browse button for
920 this option normally won't work either, but the @image{wrench}
921 configuration button for this option works.
923 @item
924 FILE FORMAT
926 The file format for background rendering has to be a sequence of
927 images. The format of the image sequence determines the quality and
928 speed of playback.  JPEG is good most of the time.
931 @end itemize
933 @node RENDERFARM
934 @subsection RENDERFARM
936 To use the renderfarm set these options.  Ignore them for a standalone
937 system
939 @itemize
941 @item
943 USE RENDER FARM FOR RENDERING
945 When selected, all the
946 @emph{file->render} operations use the renderfarm.
948 @item
950 NODES
952 Displays all the nodes on the renderfarm and which ones are active. 
954 Nodes are added by entering the host name of the node, verifying the
955 value of @emph{port} and hitting @emph{add node}.
957 Computer freaks may be better off editing the
958 @emph{~/.bcast/.Cinelerra_rc} file than this if they have hundreds of
959 nodes.  Remember that .Cinelerra_rc is overwritten whenever a copy of
960 Cinelerra exits.
962 Select the @emph{ON} column to activate and deactivate nodes once they
963 are created.
965 Nodes may be edited by highlighting a row and hitting @emph{apply changes}.
967 @item
969 HOSTNAME
971 Edit the hostname of an existing node or enter the hostname of a new
972 node here.
974 @item
976 PORT
978 Edit the port of an existing node or enter the port of a new node here.
980 @item
982 REPLACE NODE
984 When editing an existing node, hit this to commit the changes to
985 @emph{HOSTNAME} and @emph{PORT}.  The changes won't be committed if you
986 don't hit this button.
988 @item
990 ADD NODE
992 Create a new node with the @emph{HOSTNAME} and @emph{PORT} settings.
994 @item
996 DELETE NODE
998 Deletes whatever node is highlighted in the @emph{NODES} list.
1000 @item
1002 SORT NODES
1004 Sorts the @emph{NODES} list based on the hostname.
1006 @item
1008 RESET RATES
1010 This sets the framerate for all the nodes to 0.  Frame rates are used
1011 to scale job sizes based on CPU speed of the node.  Frame rates are
1012 only calculated when renderfarm is enabled.
1015 @item
1017 USE VIRTUAL FILESYSTEM
1019 Normally the directory on the master node containing the source and
1020 destination assets is mounted on the clients.  The assets on the
1021 clients should be visible in the same locations as they are on the
1022 master node.  This can be hard to set up and requires root access.
1024 A user level version of NFS was built into Cinelerra and called the
1025 Virtual File System.  This transparently redirects all file I/O over
1026 the network without requiring a replication of the master node's
1027 directory structure or root access on the client.  The client sees the
1028 exact directory structure on the master node but in reality is sending
1029 network packets to access it.
1031 There is a penalty for doing this though, since Virtual Filesystem
1032 isn't as refined as NFS.  Operations that access one byte at a time are
1033 really slow.
1035 Certain file format parsers are extemely slow over the Virtual
1036 Filesystem because they access very small amounts of data at a time. 
1037 The PCM audio formats do this.  These are best rendered using NFS.
1039 Unless you need to run rendering clients without root access or have a
1040 lot of assets in different directories,  use NFS instead.
1045 @item
1047 TOTAL JOBS TO CREATE
1049 Determines the number of jobs to dispatch to the renderfarm.  The more
1050 jobs you create, the more finely balanced the renderfarm becomes.
1052 Determine the total jobs to create by multiplying the number of nodes
1053 including the master node by some number.  Multiply them by 1 to have
1054 one job dispatched for every node.  Multiply them by 3 to have 3 jobs
1055 dispatched for every node.  If you have 10 slave nodes and one master
1056 node, specify 33 to have a well balanced renderfarm.
1058 @end itemize
1064 @node INTERFACE
1065 @section INTERFACE
1067 These parameters affect purely how the user interface works.
1069 @itemize
1071 @item
1073 INDEX FILES GO HERE
1075 Back in the days when 4 MB/sec was unearthly speed for a hard drive,
1076 index files were introduced to speed up drawing the audio tracks.  This
1077 option determines where index files are placed on the hard drive.
1080 @item
1082 SIZE OF INDEX FILE
1084 Determines the size of an index file. Larger index sizes allow smaller
1085 files to be drawn faster while slowing down the drawing of large files.
1086 Smaller index sizes allow large files to be drawn faster while slowing
1087 down small files.
1089 @item
1091 NUMBER OF INDEX FILES TO KEEP
1093 To keep the index directory from becoming unruly, old index files are
1094 deleted. This determines the maximum number of index files to keep in
1095 the directory.
1097 @item
1099 DELETE ALL INDEXES
1101 When you change the index size or you want to clean out excessive index
1102 files, this deletes all the index files.
1104 @item
1105 USE HOURS:MINUTES:SECONDS.XXX
1107 Various representations of time are given.  Select the most convenient
1108 one.  The time representation can also be changed by @emph{CTRL}
1109 clicking on the time ruler.
1111 @item
1112 USE THUMBNAILS
1114 The Resource Window displays thumbnails of assets by default.  This can
1115 take a long time to set up.  This option disables the thumbnails.
1117 @item
1118 CLICKING IN/OUT POINTS DOES WHAT
1120 Cinelerra not only allows you to perform editing by dragging in/out
1121 points but also defines three seperate operations which occur when you
1122 drag an in/out point. For each mouse button you select the behavior in
1123 this window. The usage of each editing mode is described in editing.
1125 @item
1126 MIN DB FOR METER
1128 Some sound sources have a lower noise threshold than others. 
1129 Everything below the noise threshold is meaningless.  This option sets
1130 the meters to clip below a certain level.  Consumer soundcards usually
1131 bottom out at -65.  Professional soundcards bottom out at -90.
1133 @item
1134 FORMAT FOR METER
1136 This option allows you to select the format for all the VU meters. If
1137 you're a CS major select percentage and if you're a EE major select DB.
1138 With that, be aware all levels in Cinelerra are input as DB.
1140 @item
1141 THEME
1143 Cinelerra supports variable themes.  Select one here and restart
1144 Cinelerra to see it.
1146 @end itemize
1150 @node ABOUT
1151 @section ABOUT
1153 This section gives you information about the copyright, the time of the
1154 current build, the lack of a warranty, and the versions of some of the
1155 libraries.  Be sure to agree to the terms of the lack of the warranty.
1161 @node THE MAIN WINDOWS
1162 @chapter THE MAIN WINDOWS
1164 When Cinelerra first starts, you'll get four main windows.  Hitting
1165 @emph{CTRL-w} in any window closes it.
1167 @itemize
1169 @item
1170 Viewer
1172 In here you'll scrub around source media and clips, selecting regions
1173 to paste into the project.  Operations done in the viewer affect a
1174 temporary EDL or a clip but not the timeline.
1176 @item
1177 Compositor
1179 This window displays the output of the timeline.  It's the interface
1180 for most compositing operations or operations that affect the
1181 appearance of the timeline output.  Operations done in the Compositor
1182 affect the timeline but don't affect clips.
1184 @item
1185 Program
1187 This contains the timeline and the entry point for all menu driven
1188 operations.  The timeline consists of a vertical stack of tracks with
1189 horizontal representation of time.  This defines the output of
1190 rendering operations and what is saved when you save files.
1192 @item
1193 Resources
1195 Effects, transitions, clips, and assets are accessed here.  Most of the
1196 resources are inserted into the project by dragging them out of the
1197 resource window.  Management of resource allocation is also performed
1198 here.
1200 @end itemize
1202 Under the @emph{Window} menu you'll find options affecting the main
1203 windows.  @emph{default positions} repositions all the windows to a 4
1204 screen editing configuration.  On dual headed displays, the
1205 @emph{default positions} operation fills only one monitor with windows.
1207 An additional window, the @emph{levels window} can be brought up from
1208 the @emph{Window} menu.  The @emph{levels} window displays the output
1209 audio levels after all mixing is done.
1219 @node LOADING AND SAVING FILES
1220 @chapter LOADING AND SAVING FILES
1223 @menu
1224 * LOADING FILES::              Loading all types of files
1225 * LOADING THE BACKUP::         Recovering the session from before a crash
1226 * SAVING FILES::               Saving edit decision lists
1227 * RENDERING FILES::            Saving media files
1228 @end menu
1236 @node LOADING FILES
1237 @section LOADING FILES
1239 All data that you work with in Cinelerra is acquired either by
1240 @emph{recording from a device} or by @emph{loading from disk}.  This
1241 section describes loading.
1243 The loading and playing of files is just as you would expect. Just go
1244 to @emph{file->Load}, select a file for loading, and hit @emph{ok}. Hit
1245 the forward play button and it should start playing, regardless of
1246 whether a progress bar has popped up.
1248 Another way to load files is to pass the filenames as arguments on the
1249 command line.  This creates new tracks for every file and starts the
1250 program with all the arguments loaded.
1252 If the file is a still image, the project's attributes are not changed
1253 and the first frame of the track becomes the image.  If the file has
1254 audio, Cinelerra may build an index file for it to speed up drawing. 
1255 You can edit and play the file while the index file is being built.
1257 @menu
1258 * SUPPORTED FILE FORMATS::
1259 * INSERTION STRATEGY::
1260 * LOADING MULTIPLE FILES::
1261 @end menu
1269 @node SUPPORTED FILE FORMATS
1270 @subsection SUPPORTED FILE FORMATS
1272 The format of the file affects what Cinelerra does with it.  Some
1273 formats replace all the project settings.  Some just insert data with
1274 existing project settings.  If your project sample rate is 48khz and
1275 you load a sound file with 96khz, you'll still be playing it at
1276 48khz.   XML files, however, replace the project settings.  If you load
1277 an XML file at 96khz and the current project sample rate is 48khz,
1278 you'll change it to 96khz.  Supported file formats are currently:
1280 @itemize
1281 @item
1283 @item
1285 @item
1286 AIFF
1287 @item
1288 Uncompresed Quicktime
1290 Quicktime is not the standard for UNIX but we use it because it's well
1291 documented.  All of the Quicktime movies on the internet are
1292 compressed.  Cinelerra doesn't support compressed Quicktime movies. 
1293 Most of the Quicktime footage dealt with in Cinelerra is generated by
1294 Cinelerra either recording from a device or rendering.  The best
1295 Quicktime settings to use are JPEG video and twos audio.
1297 @item
1298 JPEG, PNG, TIFF, TGA sequences
1300 Cinelerra generates a special table of contents file when you render an
1301 image sequence.  You can either select every image file to load or
1302 select the table of contents when the rendering is done.  Selecting the
1303 table of contents is faster and doesn't fill up the resource window
1304 with thousands of images.
1306 @item
1307 JPEG, PNG, TIFF, TGA still images
1309 When loaded, the image takes up one frame in length and doesn't change
1310 the project attributes.
1312 @item
1313 AVI with mp3 audio and MPEG-4 video
1316 @item
1317 MPEG 1, 2 video
1319 You need to run @emph{mpeg3toc} to generate a table of contents for
1320 these, then load the table of contents.  Mpeg3toc needs the absolute
1321 path of the MPEG file.  If you want to edit a DVD, find the
1322 corresponding @emph{ifo} file for the program of interest and run 
1324 @example
1325 mpeg3toc /cdrom/video_ts/vts_01_0.ifo dvd.toc
1326 @end example
1328 or something similar.  Then load @emph{dvd.toc}.  This allows frame
1329 accurate editing where none would be possible otherwise.
1331 @item
1332 MPEG program streams and transport streams
1334 You need to run @emph{mpeg3toc} on these just like MPEG 1,2 video. 
1335 Program and transport streams are structured into multiple tracks. 
1336 Each track can be video or audio.  Each audio track can have 1-6
1337 channels.  Cinelerra converts each channel of audio into a track, so
1338 for MPEG streams with multiple tracks, the tracks will be flattened.
1340 @item
1341 MPEG audio layer II, III
1343 These can be loaded directly with no table of contents.  Variable
1344 bitrate streams may need a table of contents but are playable without
1347 @item
1348 AC3 audio
1350 @item
1353 These are generated by Cinelerra for storing edit lists.  They change
1354 project attributes when loaded.
1356 @end itemize
1365 @node INSERTION STRATEGY
1366 @subsection INSERTION STRATEGY
1368 Usually three things happen when you load a file.  First the existing
1369 project is cleared from the screen, second the project's attributes are
1370 changed to match the file's, and finally the new file's tracks are
1371 created in the timeline.
1373 But Cinelerra lets you change what happens when you load a file.
1375 In the file selection box go to the @emph{Insertion strategy} box and
1376 select it.  Each of these options loads the file a different way.
1378 @itemize
1381 @item
1382 Replace current project
1384 All tracks in the current project are deleted and new tracks are
1385 created to match the source.  Project attributes are only changed when
1386 loading XML.  If multiple files are selected it adds new tracks for
1387 every file.
1389 @item
1390 Replace current project and concatenate tracks
1392 Same as replace current project except if multiple files are selected
1393 it concatenates the tracks of every file after the first.
1395 @item
1396 Append in new tracks
1398 The current project is not deleted and new tracks are created for the
1399 source.
1401 @item
1402 Concatenate to existing tracks
1404 The current project is not deleted and new files are concatenated to
1405 the existing tracks.
1407 @item
1408 Paste at insertion point
1410 The file is pasted in like a normal paste operation.
1412 @item
1413 Create new resources only
1415 The timeline is unchanged and new resources are created in the Resource
1416 Window.
1418 @end itemize
1421 The insertion strategy is a recurring option in many of Cinelerra's
1422 functions.  In each place the options do the same thing.  With these
1423 options you can almost do all your editing by loading files.
1425 If you load files by passing command line arguments to Cinelerra, the
1426 files are loaded with @emph{Replace current project} rules.
1432 @node LOADING MULTIPLE FILES
1433 @subsection LOADING MULTIPLE FILES
1435 In the file selection box go to the list of files.  Select a file.  Go
1436 to another file and select it while holding down @emph{CTRL}.  This
1437 selects one additional file.  Go to another file and select it while
1438 holding down @emph{SHIFT}.  This selects every intervening file.  This
1439 behavior is available in most every list box.
1441 Select a bunch of mp3 files and @emph{Replace current project and
1442 concatenate tracks} in the insertion strategy to create a song
1443 playlist.
1448 @node LOADING THE BACKUP
1449 @section LOADING THE BACKUP
1451 There is one special XML file on disk at all times.  After every
1452 editing operation Cinelerra saves the current project to a backup in
1453 @emph{$HOME/.bcast/backup.xml}.  In the event of a crash go to
1454 @emph{file->load backup} to load the backup.  It is important after a
1455 crash to reboot Cinelerra without performing any editing operations. 
1456 Loading the backup should be the first operation or you'll overwrite
1457 the backup.
1460 @node SAVING FILES
1461 @section SAVING FILES
1463 When Cinelerra saves a file it saves an edit decision list of the
1464 current project but doesn't save any media.  Go to @emph{File->save
1465 as...}.  Select a file to overwrite or enter a new file.  Cinelerra
1466 automatically concatenates @emph{.xml} to the filename if no
1467 @emph{.xml} extension is given.
1469 The saved file contains all the project settings and locations of every
1470 edit but instead of media it contains pointers to the original media
1471 files on disk.
1473 For each media file the XML file stores either an absolute path or just
1474 the relative path.  If the media is in the same directory as the XML
1475 file a relative path is saved.  If it's in a different directory an
1476 absolute path is saved.
1478 In order to move XML files around without breaking the media linkages
1479 you either need to keep the media in the same directory as XML file
1480 forever or save the XML file in a different directory than the media
1481 and not move the media ever again.
1483 If you want to create an audio playlist and burn it on CD-ROM, save the
1484 XML file in the same directory as the audio files and burn the entire
1485 directory.  This keeps the media paths relative.
1487 XML files are useful for saving the current state before going to sleep
1488 and saving audio playlists but they're limited in that they're specific
1489 to Cinelerra.  You can't play XML files in a dedicated movie player. 
1490 Realtime effects in an XML file have to be resynthesized every time you
1491 play it back.  The XML file also requires you to maintain copies of all
1492 the source assets on hard drives, which can take up space and cost a
1493 lot of electricity to spin.  For a more persistent storage of the
1494 output there's rendering.
1501 @node RENDERING FILES
1502 @section RENDERING FILES
1504 Rendering takes a section of the timeline, performs all the editing,
1505 effects and compositing, and stores it in a pure movie file.  You can
1506 then delete all the source assets, play the rendered file in a movie
1507 player, or bring it back into Cinelerra for more editing.  It's very
1508 difficult to retouch any editing decisions in the pure movie file,
1509 however, so keep the original assets and XML file around several days
1510 after you render it.
1512 All rendering operations are based on a region of the timeling to be
1513 rendered.  You need to define this region of the timeline.  The
1514 navigation section describes methods of defining regions. 
1515 @xref{NAVIGATING THE PROJECT}.  The rendering functions define the
1516 region based on a set of rules.  When a region is highlighted or in/out
1517 points are set, the affected region is rendered.  When no region is
1518 highlighted, everything after the insertion point is rendered.  Merely
1519 by positioning the insertion point at the beginning of a track and
1520 unsetting all in/out points, the entire track is rendered.
1524 @menu
1525 * SINGLE FILE RENDERING::      Rendering a single file
1526 * BATCH RENDERING::            Rendering several files unattended
1527 * THE RENDER FARM::            Rendering using many computers
1528 @end menu
1532 @node SINGLE FILE RENDERING
1533 @subsection SINGLE FILE RENDERING
1535 The fastest way to get media to disk is to use the single file
1536 rendering function.
1538 Go to @b{File->render} to bring up the render dialog.  Select the
1539 magnifying glass @image{magnify} to bring up a file selection dialog.  This determines
1540 the filename to write the rendered file to and the encoding parameters.
1542 In the render dialog select a format from the @b{File Format} menu. 
1543 The format of the file determines whether you can render audio or video
1544 or both.  Select the @b{Render audio tracks} toggle to generate
1545 audio tracks and @b{Render video tracks} to generate video tracks.
1548 Select the wrench @image{wrench} next to each toggle to set compression
1549 parameters.  If the file format can't store audio or video the
1550 compression parameters will be blank.  If @b{Render audio tracks} or
1551 @b{Render video tracks} is selected and the file format doesn't
1552 support it, trying to render will pop up an error.
1554 The @b{Create new file at each label} option causes a new file to be
1555 created when every label in the timeline is encountered.  This is
1556 useful for dividing long audio recordings into individual tracks.  When
1557 using the renderfarm, @b{Create new file at each label} causes one
1558 renderfarm job to be created at every label instead of using the
1559 internal load balancing algorithm to space jobs.
1561 When @b{Create new file at each label} is selected, a new filename
1562 is created for every output file.  If the filename given in the render
1563 dialog has a 2 digit number in it, the 2 digit number is overwritten
1564 with a different incremental number for every output file.  If no 2
1565 digit number is given, Cinelerra automatically concatenates a number to
1566 the end of the given filename for every output file.
1568 In the filename @b{/hmov/track01.wav} the @b{01} would be
1569 overwritten for every output file.  The filename
1570 @b{/hmov/track.wav}; however, would become @b{/hmov/track.wav001}
1571 and so on and so forth.  Filename regeneration is only used when either
1572 renderfarm mode is active or creating new files for every label is
1573 active.
1575 Finally the render dialog lets you select an insertion mode.  The
1576 insertion modes are the same as with loading files.  In this case if
1577 you select @b{insert nothing} the file will be written out to disk
1578 without changing the current project.  For other insertion strategies
1579 be sure to prepare the timeline to have the output inserted at the
1580 right position before the rendering operation is finished. 
1581 @xref{EDITING}.  Editing describes how to cause output to be inserted
1582 at the right position.
1584 It should be noted that even if you only have audio or only have video
1585 rendered, a @b{paste} insertion strategy will behave like a normal
1586 paste operation, erasing any selected region of the timeline and
1587 pasting just the data that was rendered.  If you render only audio and
1588 have some video tracks armed, the video tracks will get truncated while
1589 the audio output is pasted into the audio tracks.
1593 @node BATCH RENDERING
1594 @subsection BATCH RENDERING
1598 If you want to render many projects to media files without having to
1599 repeatedly attend to the @b{Render} dialog, @b{batch rendering} is the
1600 function to use.  In this function, you specify many EDL files to
1601 render and the unique output files for each.  Then Cinelerra loads each
1602 EDL file and renders it automatically, without any user intervention. 
1603 Each EDL file and its output to be rendered is called a @b{batch}. 
1604 This allows a huge amount of media to be processed and greatly
1605 increases the value of an expensive computer.
1607 The first thing to do when preparing to do batch rendering is define
1608 projects to be rendered.  The batch renderer requires a separate EDL
1609 file for every batch to be rendered.  Set up a project and define the
1610 region to be rendered either by highlighting it, setting in/out points
1611 around it, or positioning the insertion point before it.  Then save the
1612 project as an EDL.  Define as many projects as needed this way.  The
1613 batch renderer takes the active region from the EDL file for rendering.
1615 With all the EDL files prepared with active regions, go to
1616 @b{File->batch render}.  This brings up the batch rendering dialog. 
1617 The interface for batch rendering is a bit more complex than for single
1618 file rendering.
1621 A list of batches must be defined before starting a batch rendering
1622 operation.  The table of batches appears on the bottom of the batch
1623 render dialog and is called @b{batches to render}.  Above this are
1624 the configuration parameters for a single batch.
1626 Set the @b{output path}, @b{file format}, @b{Audio}, @b{Video}, and
1627 @b{Create new file at each label} parameters as if it was a single
1628 file.  These parameters apply to only one batch.  In addition to the
1629 standard rendering parameters, you must select the source EDL to use in
1630 the batch.  Do this by setting the @b{EDL path}.
1632 If the @b{batches to render} list is empty or nothing is highlighted,
1633 click @b{New} to create a new batch.  The new batch will contain all
1634 the parameters you just set.
1636 Repeatedly press the @b{New} button to create more batches with the
1637 same parameters.  Highlight any batch and edit the configuration on the
1638 top of the batch render window.  The highlighted batch is always
1639 synchronized to the information displayed.
1641 Click and drag batches to change the order in which they're rendered. 
1642 Hit @b{delete} to permanently remove the highlighted batch.
1644 In the list box is a column which enables or disables the batch.  This
1645 way batches can be skipped without being deleted.  Click on the
1646 @b{Enabled} column in the list box to enable or disable a batch.  If it
1647 is checked, the batch is rendered.  If it is blank, the batch is
1648 skipped.
1650 The other columns in the batch list are informative.
1652 @itemize
1654 @item
1655 @b{Output} The output path of the batch.
1656 @item
1657 @b{EDL} The source EDL of the batch.
1658 @item
1659 @b{Elapsed} The amount of time taken to render the batch if it is finished.
1661 @end itemize
1663 To start rendering from the first enabled batch, hit @b{Start}.
1665 Once rendering, the main window shows the progress of the batch.  Once
1666 the batch finishes, the elapsed column in the batch list is updated and
1667 the next batch is rendered until all the enabled batches are finished.
1668 The currently rendering batch is always highlighted red.
1671 To stop rendering before the batches are finished without closing the
1672 batch render dialog, hit @b{Stop}.
1674 To stop rendering before the batches are finished and close the batch
1675 render dialog, hit @b{Cancel}.
1677 To exit the batch render dialog whether or not anything is being
1678 rendered, hit @b{Cancel}.
1686 @node THE RENDER FARM
1687 @subsection THE RENDER FARM
1689 When bicubic interpolation and HDTV was first done on Cinelerra, the
1690 time needed to produce the simplest output became unbearable even on
1691 the fastest dual 1.7Ghz Xeon of the time.  Renderfarm support even in
1692 the simplest form brings HDTV times back in line with SD while making
1693 SD faster than realtime.
1695 While the renderfarm interface isn't spectacular, it's simple enough to
1696 use inside an editing suite with less than a dozen nodes without going
1697 through the same amount of hassle you would with a several hundred node
1698 farm.  Renderfarm is invoked transparently for all file->render
1699 operations when it is enabled in the preferences.
1701 It should be noted that @b{Create new file at each label} causes a
1702 new renderfarm job to be created at each label instead of the default
1703 load balancing.  If this option is selected when no labels exist, only
1704 one job will be created.
1706 A Cinelerra renderfarm is organized into a master node and any number
1707 of slave nodes.  The master node is the computer which is running the
1708 GUI.  The slave nodes are anywhere else on the network and are run from
1709 the command line.
1711 Cinelerra divides the selected region of the timeline into a certain
1712 number of jobs which are then dispatched to the different nodes
1713 depending on the load balance.  The nodes process the jobs and write
1714 their output to individual files on the filesystem.  The output files
1715 are not concatenated.  It's important for all the nodes and the master
1716 node to use the same filesystem for assets, mounted over the network.
1718 Since most of the time you'll want to bring in the rendered output and
1719 fine tune it on the timeline, the jobs are left in individual files. 
1720 You can load these using @b{concatenate mode} and render them again
1721 with renderfarm disabled.  If the track and output dimensions equal the
1722 asset dimensions, Cinelerra will do a direct copy of all the jobs into
1723 a single file.  Note that direct copying doesn't work for MPEG Video. 
1724 MPEG has the distinction that you can concatenate the subfiles with the
1725 UNIX cat utility.
1727 Configuration of the renderfarm is described in the configuration
1728 chapter @xref{RENDERFARM}.  The slave nodes traditionally read and
1729 write data to a common filesystem over a network, thus they don't need
1730 hard drives.
1732 Ideally all the nodes on the renderfarm have similar CPU performance. 
1733 Cinelerra load balances on a first come first serve basis.  If the last
1734 segment is dispatched to the slowest node, all the fastest nodes may
1735 end up waiting for the slowest node to finish while they themselves
1736 could have rendered it faster.
1745 @node NAVIGATING THE PROJECT
1746 @chapter NAVIGATING THE PROJECT
1748 The thing you want to do most of the time is get to a certain time and
1749 place in the media.  Internally the media is organized into tracks. 
1750 Each track extends across time.  Navigation involves both getting to a
1751 track and getting to a certain time in the track.
1755 @menu
1756 * NAVIGATING THE PROGRAM WINDOW::
1757 * NAVIGATING THE VIEWER AND COMPOSITOR::
1758 * NAVIGATING THE RESOURCES::
1759 * USING THE TRANSPORT CONTROLS::
1760 * USING BACKGROUND RENDERING::
1761 @end menu
1765 @node NAVIGATING THE PROGRAM WINDOW
1766 @section NAVIGATING THE PROGRAM WINDOW
1768 The program window contains many features for navigation and displays
1769 the timeline as it is structured in memory: tracks stacked vertically
1770 and extending across time.  The horizontal scroll bar allows you to
1771 scan across time.  The vertical scroll bar allows you to scan across
1772 tracks.
1774 Below the timeline you'll find the zoom panel.  The zoom panel contains
1775 values for @emph{sample zoom}, @emph{amplitude}, and @emph{track
1776 zoom}.  These values in addition to the scrollbars are all that's
1777 needed to position the timeline, but at the heart of the batch
1778 rendering dialog are the same parameters you found in single file
1779 rendering.
1788 @sp 1
1790 @image{zoompanel}
1793 Changing the @emph{sample zoom} causes the amount of time visible to
1794 change.  @emph{If your mouse has a wheel and it works in X11 go over
1795 the tumblers and use the wheel to zoom in and out.}
1797 The @emph{amplitude} only affects audio.  It determines how big the
1798 waveform is if the waveform is drawn.
1800 The @emph{track zoom} affects all tracks.  It determines the height of
1801 each track.  If you change the track zoom the amplitude zoom
1802 compensates so  audio waveforms look proportional.
1804 In addition to the graphical tools, you'll probably more often use the
1805 keyboard to navigate.  Use @emph{PAGE UP} and @emph{PAGE DOWN} to
1806 scroll up and down the tracks.
1808 Use the @emph{LEFT} and @emph{RIGHT} arrows to move across time in
1809 small increments.  You'll often need to scroll beyond the end of the
1810 timeline but scrollbars won't let you do it.  Instead use the
1811 @emph{RIGHT} arrow to scroll past the end of timeline.
1813 Use the @emph{HOME} and @emph{END} keys to instantly go to the
1814 beginning or end of the timeline.  In @emph{I-beam} mode, hold down
1815 shift while pressing @emph{HOME} or @emph{END} to select the region of
1816 the timeline between the insertion point and the key pressed.
1818 Use the @emph{UP} and @emph{DOWN} arrows to change the sample zoom by a
1819 power of 2.
1821 @emph{CTRL-UP} and @emph{CTRL-DOWN} cause the amplitude zoom to change.
1823 @emph{CTRL-PGUP} and @emph{CTRL-PGDOWN} cause the track zoom to change.
1826 @menu
1827 * THE INSERTION POINT::
1828 * THE IN/OUT POINTS::
1829 * USING LABELS IN THE PROGRAM WINDOW::
1830 @end menu
1844 @node THE INSERTION POINT
1845 @subsection THE INSERTION POINT
1847 By default you'll see a flashing insertion point in the program window
1848 the first time you boot it up.  This is where new media is pasted onto
1849 the timeline.  It's also the starting point of all playback
1850 operations.  When rendering it defines the region of the timeline to be
1851 rendered.
1853 The insertion point is normally moved by clicking inside the timebar. 
1854 Any region of the timebar not obscured by labels and in/out points is a
1855 hotspot for repositioning the insertion point.
1857 @sp 1
1858 @image{main_timebar,,,,}
1859 @emph{The main timebar}
1861 The insertion point also can be moved by clicking in the timeline
1862 itself, but not always.  The insertion point has two modes of
1863 operation: 
1865 @itemize
1866 @item
1867 drag and drop mode 
1869 @item
1870 cut and paste mode
1872 @end itemize
1874 The mode of operation is determined by selecting the arrow or the
1875 i-beam in the buttonbar.
1877 @sp 1
1878 @image{editing_mode,,,,}
1879 @emph{The editing mode buttons}
1881 If the arrow is highlighted it enables @emph{drag and drop} mode.  In
1882 drag and drop mode, clicking in the timeline doesn't reposition the
1883 insertion point.  Instead it selects an entire edit.  Dragging in the
1884 timeline repositions the edit, snapping it to other edit boundaries. 
1885 This is normally useful for reordering audio playlists and moving
1886 effects around.
1888 If the i-beam is highlighted it enables @emph{cut and paste mode}.  In
1889 cut and paste mode clicking in the timeline repositions the insertion
1890 point.  Dragging in the timeline highlights a region.  The highlighted
1891 region becomes the playback range during the next playback operation,
1892 the rendered range during the next render operation, and the region
1893 affected by cut and paste operations.
1895 @emph{Shift-clicking} in the timeline extends the highlighted region.
1897 @emph{Double-clicking} in the timeline selects the entire edit the
1898 cursor is over.
1900 It should be noted that when moving the insertion point and selecting
1901 regions, the positions are either aligned to frames or aligned to
1902 samples.  When editing video you'll want to align to frames.  When
1903 editing audio you'll want to align to samples.  This is set in
1904 @emph{settings->align cursor on frames}.
1906 If the highlighted region is the region affected by cut and paste
1907 operations, how do I cut and paste in @emph{drag and drop} mode?  In
1908 this case you need to set @emph{in/out points} to define an affected region.
1914 @node THE IN/OUT POINTS
1915 @subsection THE IN/OUT POINTS
1917 In both editing modes you can set in/out points.  The in/out points
1918 define the affected region.  In drag and drop mode they are the only
1919 way to define an affected region.  In both cut and paste mode and drag
1920 and drop mode they override the highlighted area.  If a highlighted
1921 area and in/out points are set, the highlighted area affects playback
1922 while the in/out points affect editing operations.  To avoid confusion
1923 it's best to use either highlighting or in/out points but not both
1924 simultaneously.
1926 To set in/out points go to the timebar and position the insertion point
1927 somewhere.  Hit the @image{in_point_button} @emph{in point button}.  Go
1928 to a position after the in point and hit the @image{out_point_button}
1929 @emph{out point button}.
1931 @sp 1
1932 @image{inout_points} @emph{Timebar with in/out points set}.
1934 Select either the in point or the out point and the insertion point
1935 jumps to that location.  After selecting an in point, if you hit the
1936 @emph{in point button} the in point will be deleted.  After selecting
1937 an out point, if you hit the @emph{out point button} the out point will
1938 be deleted.
1940 If you select a region somewhere else while in/out points already
1941 exist, the existing points will be repositioned when you hit the in/out
1942 buttons.
1944 @emph{Shift-clicking} on an in/out point extends the highlighted region
1945 to that point.
1947 Instead of using the button bar you can use the @emph{[} and @emph{]}
1948 keys to toggle in/out points.
1950 The insertion point and the in/out points allow you to define an
1951 affected region but they don't let you jump to exact points on the
1952 timeline very easily.  For this purpose there are labels.
1958 @node USING LABELS IN THE PROGRAM WINDOW
1959 @subsection USING LABELS IN THE PROGRAM WINDOW
1961 Labels are an easy way to set exact locations on the timeline you want
1962 to jump to.  When you position the insertion point somewhere and hit
1963 the @image{label_button} @emph{label button} a new label appears on the
1964 timeline.  
1966 @sp 1
1967 @image{timebar_label} @emph{Timebar with a label on it}
1969 No matter what the zoom settings are, clicking on the label positions
1970 the insertion point exactly where you set it.  Hitting the label button
1971 again when a label is selected deletes it.
1973 @emph{Shift-clicking} on a label extends the highlighted region.
1975 @emph{Double-clicking} between two labels highlights the region between
1976 the labels.
1978 Hitting the @emph{l} key has the same effect as the label button.
1980 If you hit the label button when a region is highlighted, two labels
1981 are toggled at each end of the highlighted region.  If one end already
1982 has a label, then the existing label is deleted and a label is created
1983 at the opposite end.
1985 Labels can reposition the insertion point when they are selected but
1986 they can also be traversed with the @image{label_traversal} @emph{label
1987 traversal} buttons.  When a label is out of view, the label traversal
1988 buttons reposition the timeline so the label is visible.  There are
1989 keyboard shortcuts for label traversal, too.
1991 @emph{CTRL-LEFT} repositions the insertion point on the previous label.
1993 @emph{CTRL-RIGHT} repositions the insertion point on the next label.
1995 With label traversal you can quickly seek back and forth on the
1996 timeline but you can also select regions.
1998 @emph{SHIFT-CTRL-LEFT} extends the highlighted region to the previous
1999 label.
2001 @emph{SHIFT-CTRL-RIGHT} extends the highlighted region to the next label.
2003 Manually hitting the label button or @emph{l} key over and over again
2004 to delete a series of labels can get tedious.  For deleting a set of
2005 labels, first highlight a region and second use the @emph{Edit->Clear
2006 labels} function.  If in/out points exist, the labels between the
2007 in/out points are cleared and the highlighted region ignored.
2016 @node NAVIGATING THE VIEWER AND COMPOSITOR
2017 @section NAVIGATING THE VIEWER AND COMPOSITOR
2019 The navigation features of the Viewer and Compositor behave very
2020 similarly.  Each has a timebar and slider below the video output.  The
2021 timebar and slider are critical for navigation.
2023 @sp 1
2025 @image{timebarslider,,,,}
2027 The timebar represents the entire time covered by the program.  When
2028 you define labels and in/out points it defines those, too.  Finally the
2029 timebar defines a region known as the @emph{preview region}.
2031 The @emph{preview region} is the region of the timeline which the
2032 slider effects.  The slider only covers the time covered by the preview
2033 region.  By using a preview region inside the entire program and using
2034 the slider inside the preview region you can quickly and precisely seek
2035 in the compositor and viewer.
2037 When you replace the current project with a file the preview region
2038 automatically resizes to cover the entire file.  When you append data
2039 or change the size of the current project, the preview region stays the
2040 same size and shrinks.  Therefore, you need to resize the preview
2041 region.
2043 Load a file and then slide around it using the compositor slider.  The
2044 insertion point in the main window follows the compositor.  Move the
2045 pointer over the compositor's timebar until it turns into a left resize
2046 pointer.  The click and drag right.  The preview region should have
2047 changed and the slider resized proportionally.
2049 Go to the right of the timebar until a right resize pointer appears. 
2050 Drag left so the preview region shrinks.
2052 Go to the center of the preview region in the timebar and drag it
2053 around to convince yourself if can be moved.
2056 @sp 1
2058 @image{previewregion,,,,}
2060 @emph{Preview region in compositor}
2062 If you go to the slider and slide it around with the preview region
2063 shrunk, you'll see the slider only affects the preview region.  The
2064 timebar and slider in the viewer window work exactly the same.
2066 Labels and in/out points are fully supported in the viewer and
2067 compositor.  The only difference between the viewer and compositor is
2068 the compositor reflects the state of the program while the viewer
2069 reflects the state of a clip but not the program.
2071 When you hit the @emph{label button} in the compositor, the label
2072 appears both in the compositor timebar and the program timebar.
2074 When you select a label or in/out point in the compositor, the program
2075 window jumps to that position.
2077 @sp 1
2078 @image{viewer_labels} @emph{Labels and in/out points in the viewer}.
2080 In the viewer and compositor, labels and in/out points are displayed in
2081 the timebar.  Instead of displaying just a region of the program, the
2082 timebar displays the entire program here.
2086 Like the Program window, the Compositor has a zoom capability.  First,
2087 the pulldown menu on the bottom of the compositor window has a number
2088 of zoom options.  When set to @emph{Auto} the video is zoomed to match
2089 the compositor window size as closely as possible.  When set to any
2090 other percentage, the video is zoomed a power of 2 and scrollbars can
2091 be used to scroll around the output.  When the video is zoomed bigger
2092 than the window size, not only do scrollbars scan around it but
2093 @emph{middle mouse button} dragging in the video output scans around
2094 it.  This is exactly when The Gimp does.
2096 Furthermore, the zoom @image{magnify} toggle causes the Compositor
2097 window to enter zoom mode.  In zoom mode, clicking in the video output
2098 zooms in while @emph{ctrl-clicking} in the video output zooms out.  If
2099 you have a wheel mouse, rotating the wheel zooms in or out too.
2101 Zooming in or out with the zoom tool does not change the rendered
2102 output, mind you.  It's merely for scrutinizing video or fitting it in
2103 the desktop.
2110 @node NAVIGATING THE RESOURCES
2111 @section NAVIGATING THE RESOURCES
2113 The resource window is divided into two areas.  One area lists folders
2114 and another area lists folder contents.  Going into the folder list and
2115 clicking on a folder updates the contents area with the contents of
2116 that folder.
2118 The folder and contents can be displayed as icons or text.
2120 @emph{Right clicking} in the folder or contents area brings up a menu
2121 containing formatting options.  Select @emph{Display text} to display a
2122 text listing.  Select @emph{Sort items} to sort the contents of the
2123 folder alphabetically.
2132 @node USING THE TRANSPORT CONTROLS
2133 @section USING THE TRANSPORT CONTROLS
2135 Transport controls are just as useful in navigation as they are in
2136 playing back footage, hence they are described here.  Each of the
2137 Viewer, Compositor, and Program windows has a transport panel.
2139 @sp 1
2140 @image{transport_panel} @emph{The transport panel}.
2142 The transport panel is controlled by the keyboard as well as the
2143 graphical interface.  For each of the operations it performs, the
2144 starting position is the position of the insertion point or slider. 
2145 The ending position is either the end or start of the timeline or the
2146 end or start of the selected region if there is one.
2148 The orientation of the end or start depends on the direction of
2149 playback.  If it's forward the end position is the end of the selected
2150 region.  If it's backward the end position is the start of the selected
2151 region.
2153 The insertion point moves to track playback.  When playback stops it
2154 leaves the insertion point where it stopped.  Thus, by playing back you
2155 change the position of the insertion point.
2157 The keyboard interface is usually the fastest and has more speeds.  The
2158 transport keys are arranged in a @emph{T} on the number pad.
2160 @itemize
2162 @item
2163 @emph{+} Fast reverse
2164 @item
2165 @emph{6} Normal reverse
2166 @item
2167 @emph{5} Slow reverse
2168 @item
2169 @emph{4} Frame reverse
2170 @item
2171 @emph{1} Frame forward
2172 @item
2173 @emph{2} Slow forward
2174 @item
2175 @emph{3} Normal forward
2176 @item
2177 @emph{Enter} Fast forward
2178 @item
2179 @emph{0} Stop
2180 @item
2181 @emph{Spacebar} Normal forward
2182 @end itemize
2184 Hitting any key on the keyboard twice pauses it.
2186 When using frame advance functions the behavior may seem odd.  If you
2187 frame advance forward and then frame advance backward, the displayed
2188 frame doesn't change.  This is because the playback position isn't the
2189 frame but the time between two frames.  The rendered frame is the area
2190 that the playback position crosses.  When you increment the time
2191 between two frames by one and decrement it by one, you cross the same
2192 frame both times and so the same frame is displayed.
2197 @node USING BACKGROUND RENDERING
2198 @section USING BACKGROUND RENDERING
2202 Background rendering allows impossibly slow effects to play back in
2203 realtime shortly after the effect is pasted in the timeline.  It
2204 continuously renders temporary output.  When renderfarm is enabled,
2205 background rendering uses the renderfarm continuously.  This way, any
2206 size video can be seen in realtime merely by creating a fast enough
2207 network with enough nodes.
2209 Background rendering is enabled in settings->preferences->performance. 
2210 It has one interactive function: @emph{settings->set background render}.  This
2211 sets the point where background rendering begins to where the in point
2212 is.  If any video exists, a red bar appears in the time bar showing
2213 what has been background rendered.
2215 It's often useful to insert an effect or a transition and then select
2216 settings->set background render right before the effect to preview it
2217 in full framerates.
2221 @node EDITING
2222 @chapter EDITING
2225 Editing comprises both the time domain and the track domain.  Since the
2226 timeline consists of a stack of tracks, you need to worry about how to
2227 sort and create tracks in addition to what time certain media appears
2228 on a track.
2230 In the time domain, Cinelerra offers many ways to approach the editing
2231 process.  The three main methods are two screen editing, drag and drop
2232 editing, and cut and paste editing.
2234 There are several concepts Cinelerra uses when editing which apply to
2235 all the methods.  The @b{timeline} is where all editing decisions are
2236 represented.  This is a stack of tracks in the center of the main
2237 window.  It can be scrolled up, down, left and right with the
2238 scrollbars on the right and bottom of it.  It can also be scrolled up
2239 and down with a mouse wheel.
2241 The @b{active region} is the range of time which is affected by editing
2242 commands on the timeline.  The active region is determined first by the
2243 presence of in/out points in the timeline.  If those don't exist the
2244 highlighted region is used.  If no highlighted region exists the
2245 insertion point is used as the start of the active region.  Some
2246 commands treat all the space to the right of the insertion point as
2247 active, like @b{Render}, while others treat the active length as 0 if no
2248 end point for the active region is defined.
2250 Finally, editing decisions never affect source material.  This is
2251 @b{non destructive editing} and it became popular with audio because it
2252 was much faster than if you had to copy all the media affected by an
2253 edit.  Editing only affects pointers to source material, so if you want
2254 to have a media file at the end of your editing session which
2255 represents the editing decisions, you need to @emph{render} it.
2256 @xref{RENDERING FILES}.
2258 Every track on the timeline has a set of attributes on
2259 the left, the most important of which is the @emph{arm track}
2260 attribute.
2264 @menu
2265 * THE PATCHBAY::           Enabling different features on different tracks
2266 * NUDGING TRACKS::         Moving entire tracks horizontally
2267 * MANIPULATING TRACKS::    Moving whole tracks around
2268 * TWO SCREEN EDITING::     Using two video windows to edit
2269 * DRAG AND DROP EDITING::  Dragging objects to edit
2270 * CUT AND PASTE EDITING::  Editing media like text
2271 * TRIMMING::               Changing in and out points
2272 @end menu
2275 @node THE PATCHBAY
2276 @section THE PATCHBAY
2279 On the left of the timeline is a region affectionately known as the
2280 patchbay.  The patchbay enables features specific to each track.  All
2281 tracks have a text area for naming the track.
2283 All tracks have an @b{expander} @image{expandpatch_checked} for viewing
2284 more options and for viewing the effects on the track.  Click on the
2285 expander to expand or collapse the track.  If it's pointing sideways,
2286 the track is collapsed.  If it's pointing down, the track is expanded. 
2287 The effects appear below the media for the track if they exist.
2289 All tracks have the following row of toggles for several features.
2291 @sp 1
2292 @image{track_attributes}
2293 @emph{Track attributes}
2296 If the toggle is colored, it is enabled.  If the toggle is the
2297 background color of most of the windows, it is disabled.  Click on the
2298 toggle to enable or disable the feature.  Several mouse operations
2299 speed up the configuration of several tracks at a time.
2301 Click on an attribute and drag across adjacent tracks to toggle the
2302 same attribute in those tracks.
2304 Hold down @b{shift} while clicking a track's attribute to toggle the
2305 attribute in all the tracks.
2307 Hold down @b{shift} while clicking an attribute.  Click until all the
2308 tracks except the selected one are disabled.  Then drag the cursor over
2309 the adjacent track to enable the attribute in the adjacent track.
2312 The other attributes affect the output of the track.
2314 @itemize
2316 @item
2318 @b{Play track} determines whether the track is rendered or not.  If
2319 it's off, the track is not rendered.  However, if the track is chained
2320 to any other tracks, the other tracks perform all the effects in the
2321 chained track, regardless of play status.
2322 @sp 1
2324 @item
2326 @b{Arm track} determines whether the track is armed or not.   Only the
2327 @emph{armed tracks} are affected by editing operations.  Make sure you
2328 have enough armed destination tracks when you paste or splice material
2329 or some tracks in the material will get left out.
2331 In addition to restricting editing operations, the armed tracks in
2332 combination with the active region determine where material is inserted
2333 when loading files.  If the files are loaded with one of the insertion
2334 strategies which doesn't delete the existing project, the armed tracks
2335 will be used as destination tracks.
2337 @item
2339 @b{Gang fader} causes the fader to track the movement of whatever other
2340 fader you're adjusting.  A fader is only ganged if the @b{arm track} is
2341 also on.  This is normally used to adjust audio levels on all the
2342 tracks simultaneously.
2343 @sp 1
2345 @item
2347 @b{Draw media} determines if picons or waveforms are drawn on the
2348 track.  By default, some file formats load with this off while other
2349 file formats load with it on.  This depends on whether the file format
2350 takes a long time to draw on the timeline.  Merely set it to on if you
2351 want to see picons for any file format.
2352 @sp 1
2354 @item
2356 @b{Mute track} causes the output to be thrown away once the track is
2357 completely rendered.  This happens whether or not @b{play track} is
2358 on.  If the track is part of an effect chain, the output of the effect
2359 chain track is overlayed on the final output even though it's routed
2360 back to another track.  Mute track is used to keep the effect chain
2361 track from overlapping the output of the source track.
2362 @sp 1
2364 @item
2366 @b{Fader} All tracks have a fader, but the units of each fader depend
2367 on whether it's audio or video.  Click and drag the fader to fade the
2368 track in and out.  If it is ganged to other tracks of the same media
2369 type, with the @b{arm} option enabled, the other faders should follow.
2371 Hold down @b{shift} and drag a fader to center it on 0.
2373 @end itemize
2377 @node NUDGING TRACKS
2378 @section NUDGING TRACKS
2380 Each track has a nudge textbox in the patchbay under the fader and on
2381 the right.  You may have to expand the track to see it.  The nudge is
2382 the amount the track is shifted left or right during playback.  The
2383 track is not displayed shifted on the timeline, but it is shifted when
2384 it's played back.  This is useful for synchronizing audio with video,
2385 creating fake stereo, or compensating for an effect which shifts time,
2386 all without tampering with any edits.
2388 Merely enter in the amount of time to shift by to instantly shift the
2389 track.  Negative numbers make the track play later.  Positive numbers
2390 make the track play sooner.  The nudge units are either @b{seconds} or
2391 the native units for the track.  Select the units by @b{right clicking}
2392 on the nudge textbox and using the context sensitive menu.
2398 @node MANIPULATING TRACKS
2399 @section MANIPULATING TRACKS
2401 Tracks in Cinelerra either contain audio or video.  There is no special
2402 designation for tracks other than the type of media they contain.  When
2403 you create a new project, it contains a certain mumber of default
2404 tracks.  You can still add or delete tracks from a number of menus. 
2405 The @emph{Tracks} menu contains a number of options for dealing with
2406 multiple tracks simultaneously.  Each track itself has a popup menu
2407 which affects one track.
2409 Bring up the popup menu by moving over a track and right clicking.  The
2410 popup menu affects the track whether it's armed or not.
2412 @emph{Move up} and @emph{move down} moves the one track up or down in
2413 the stack.  @emph{Delete track} deletes the track.
2415 Operations in the @emph{Tracks} menu affect only tracks which are
2416 armed.
2418 @emph{Move tracks up} and @emph{Move tracks down} shift all the armed
2419 tracks up or down the stack.
2421 @emph{Delete tracks} deletes the armed tracks.
2423 @emph{Delete last track} deletes the last track, whether it's armed or
2424 not.  Holding down the @emph{d} key quickly deletes all the tracks.
2426 @emph{Concatenate tracks} is more complicated.  It takes every
2427 @emph{playable} track and concatenates it to the end of the first
2428 @emph{armed tracks}.  If there are two armed tracks followed by two
2429 playable tracks, the concatenate operation puts the two playable tracks
2430 after the two armed tracks.  If there are three playable tracks
2431 instead, two tracks are put after the armed tracks and a third track is
2432 put on the end of the first armed track.  The destination track wraps
2433 around until all the playable tracks are concatenated.
2435 Finally, you'll want to create new tracks.  The @emph{Audio} and
2436 @emph{Video} menus each contain an option to add a track of their
2437 specific type.  In the case of audio, the new track is put on the
2438 bottom of the timeline and the output channel of the audio track is
2439 incremented by one.  In the case of video, the new track is put on the
2440 top of the timeline.  This way, video has a natural compositing order. 
2441 New video tracks are overlayed on top of old tracks.
2451 @node TWO SCREEN EDITING
2452 @section TWO SCREEN EDITING
2454 This is the fastest way to construct a program out of movie files.  The
2455 idea consists of viewing a movie file in one window and viewing the
2456 program in another window.  Sections of the movie file are defined in
2457 one window and transferred to the end of the program in the other
2458 window.
2460 The way to begin a two screen editing session is to load some
2461 resources.  In @emph{file->load} load some movies with the insertion
2462 mode @emph{create new resources}.  You want the timeline to stay
2463 unchanged while new resources are brought in.  Go to the Resource
2464 Window and select the @emph{media} folder.  The newly loaded resources
2465 should appear.  Drag a resource from the media side of the window over
2466 the Viewer window.
2468 There should be enough armed tracks on the timeline to put the sections
2469 of source material that you want.  If there aren't, create new tracks
2470 or arm more tracks.
2472 In the viewer window seek to the starting point of a clip you want to
2473 use.  Use either the @emph{slider} or the @emph{transport controls}. 
2474 Use the @emph{preview region} to narrow down the search.  Set the
2475 starting point with the @image{in_point_button} @emph{in point button}.
2477 Seek to the ending point of the clip you want to use.  Set the ending
2478 point with the @image{out_point_button} @emph{out point button}.  The
2479 two points should now appear on the timebar and define a clip.
2481 There are several things you can do with the clip now.
2483 @itemize
2485 @item
2487 Splice @image{splice_button} inserts the clip in the timeline, pushing
2488 everything back.  If an @emph{in point} or @emph{out point} exists on
2489 the timeline it's inserted there, otherwise it's inserted after the
2490 insertion point.  After that, the insertion point moves to the end of
2491 the clip.  If there is no in/out point, the insertion point will be
2492 used as the next splice location.  This way you can continuously build
2493 up the program by splicing.
2495 @item
2497 Overwrite @image{overwrite_button} overwrites the region of the
2498 timeline with the clip.  If an @emph{in point} or @emph{out point}
2499 exists on the timeline it's overwritten there, otherwise it's
2500 overwritten after the insertion point.  If a region is highlighted or
2501 both in and out points exist the difference between the active region
2502 and the clip length is deleted.
2506 @item
2508 Create a clip @image{toclip_button} generates a new clip for the
2509 resource window containing the affected region but doesn't change the
2510 timeline.  Every clip has a title and a description.  These are
2511 optional.
2513 @item
2515 Copy behaves the same as in cut and paste editing.
2517 @end itemize
2519 Two screen editing can be done purely by keybard shortcuts.  When you
2520 move the pointer over any button a tooltip should appear, showing what
2521 key is bound to that button.  In the Viewer window, the number pad keys
2522 control the transport and the @emph{[ ] v} keys perform in/out points
2523 and splicing.
2535 @node DRAG AND DROP EDITING
2536 @section DRAG AND DROP EDITING
2538 The answer is yes, you can you create a bunch of clips and drag them on
2539 the timeline.  You can also drag edits around the timeline.
2541 Load some files using @emph{file->load}.  Set the insertion mode to
2542 @emph{Create new resources}.  This loads the files into the Resource
2543 Window.  Create some audio and video tracks on the timeline using the
2544 video and audio menus.
2546 Open the @emph{Media} folder in the resource window.  Drag a media file
2547 from the resource window to the timeline.  If the media has video, drag
2548 it onto a video track.  If the media is pure audio, drag it onto an
2549 audio track.
2551 Cinelerra fills out the audio and video tracks below the dragging
2552 cursor with data from the file.  This affects what tracks you should
2553 create initially and which track to drag the media onto.  If the media
2554 has one video track and two audio tracks, you'll need one video track
2555 and two audio tracks on the timeline and the media should be dragged
2556 over the first video track.  If the media has audio only you'll need
2557 one audio track on the timeline for every audio track in the media and
2558 the media should be dragged over the first audio track.
2560 When dragging, the media snaps to the start of track if the track is
2561 empty.  If there are edits on the track, the media snaps to the nearest
2562 edit boundary.
2564 You can also drag multiple files from the resource window.  Either draw
2565 a box around the files, use SHIFT, or use CTRL when selecting files. 
2566 When you drop the files in the timeline, they are concatenated.  The
2567 behavior of SHIFT and CTRL changes depending on if the resources are in
2568 text or icons.
2570 To display the resources as text or icons, right click inside the media
2571 list.  Select either @emph{display icons} or @emph{display text} to
2572 change the list format.
2574 When displaying text in the resource window @emph{SHIFT-clicking} on
2575 media files extends the number of highlighted selections. 
2576 @emph{CTRL-clicking} on media files in text mode selects additional
2577 files one at a time.
2579 When displaying icons in the resource window @emph{SHIFT-clicking} or
2580 @emph{CTRL-clicking} selects media files one at a time.
2582 In addition to dragging media files, if you create clips and open the
2583 @emph{clip} folder you can drag clips on the timeline.
2585 In the timeline there is further dragging functionality.  To enable the
2586 dragging functionality of the timeline, select the arrow toggle
2587 @image{arrow}.  Move over an edit and drag it.  If more than one
2588 track is armed, Cinelerra will drag any edits which start on the same
2589 position as the edit the cursur is currently over.  During a dragging
2590 operation the edit snaps to the nearest boundary.
2592 Dragging edits around the timeline allows you to sort music playlists,
2593 sort movie scenes, and give better NAB demos but not much else.
2605 @node CUT AND PASTE EDITING
2606 @section CUT AND PASTE EDITING
2608 This is the traditional method of editing in audio editors.  In the
2609 case of Cinelerra, you either need to start a second copy of Cinelerra
2610 and copy from one copy to the other, copy from different tracks in the
2611 same copy, or load a media file into the Viewer and copy from there.
2613 Load some files onto the timeline.  To perform cut and paste editing
2614 select the @image{ibeam} i-beam toggle.  Select a region of the
2615 timeline and select the @image{cut} cut button to cut it.  Move the
2616 insertion point to another point in the timeline and select the
2617 @image{paste} paste button.  Assuming no in/out points are defined on
2618 the timeline this performs a cut and paste operation.
2620 If in/out points are defined, the insertion point and highlighted
2621 region are overridden by the in/out points for clipboard operations. 
2622 Thus, with in/out points you can perform cut and paste in drag and drop
2623 mode as well as cut and paste mode.
2625 When editing audio, it is customary to cut from one part of a waveform
2626 into the same part of another waveform.  The start and stop points of
2627 the cut are identical in each waveform and might be offset slightly,
2628 while the wave data is different.  It would be very hard to highlight
2629 one waveform to cut it and highlight the second waveform to paste it
2630 without changing the relative start and stop positions.
2632 One option for simplifying this is to open a second copy of Cinelerra,
2633 cutting and pasting to transport media between the two copies.  This
2634 way two highlighed regions can exist simultanously.
2636 Another option is to set in/out points for the source region of the
2637 source waveform and set labels for the destination region of the
2638 destination waveform.  Perform a cut, clear the in/out points, select
2639 the region between the labels, and perform a paste.
2643 A final operation in cut and paste editing is the @emph{edit->clear}
2644 operation.  If a region is highlighted or in/out points exist, the
2645 affected region is cleared by @emph{edit->clear}.  But if the insertion
2646 point is over an edit boundary and the edits on each side of the edit
2647 boundary are the same resource, the edits are combined into one edit
2648 comprised by the resource.  The start of this one edit is the start of
2649 the first edit and the end of this one edit is the end of the second
2650 edit.  This either results in the edit expanding or shrinking.
2656 @node TRIMMING
2657 @section TRIMMING
2659 With some edits on the timeline it's possible to do trimming.  By
2660 trimming you shrink or grow the edit boundaries by dragging them.  In
2661 either drag and drop mode or cut and paste mode, move the cursor over
2662 an edit boundary until it changes shape.  The cursor will either be an
2663 expand left or an expand right.  If the cursor is an expand left, the
2664 dragging operation affects the beginning of the edit.  If the cursor is
2665 an expand right, the dragging operation affects the end of the edit.
2667 When you click on an edit boundary to start dragging, the mouse button
2668 number determines which dragging behavior is going to be followed.  3
2669 possible behaviors are bound to mouse buttons in the interface
2670 preferences. @xref{INTERFACE}.
2672 The effect of each drag operation not only depends on the behavior
2673 button but whether the beginning or end of the edit is being dragged.
2674 When you release the mouse button, the trimming operation is performed.
2676 In a @emph{Drag all following edits} operation, the beginning of the
2677 edit either cuts data from the edit if you move it forward or pastes
2678 new data from before the edit if you move it backward.  The end of the
2679 edit pastes data into the edit if you move it forward or cuts data from
2680 the end of the edit if you move it backward.  All the edits thereafter
2681 shift.  Finally, if you drag the end of the edit past the start of the
2682 edit, the edit is deleted.
2684 In a @emph{Drag only one edit} operation, the behavior is the same when
2685 you drag the beginning or end of an edit.  The only difference is none
2686 of the other edits in the track shift.  Instead, anything adjacent to
2687 the current edit expands or shrinks to fill gaps left by the drag
2688 operation.
2690 In a @emph{Drag source only} operation, nothing is cut or pasted.  If
2691 you move the beginning or end of the edit forward, the source reference
2692 in the edit shifts forward.  If you move the beginning or end of the
2693 edit backward, the source reference shifts backward.  Where the edit
2694 appears in the timeline remains the same but the source shifts.
2696 For all file formats besides still images, the extent of the trimming
2697 operation is clamped to the source file length.  Attempting to drag the
2698 start of the edit beyond the start of the source clamps it to the
2699 source start.
2701 In all trimming operations, all edits which start on the same position
2702 as the cursor when the drag operation begins are affected.  Unarm
2703 tracks to prevent edits from getting affected.
2712 @node USING EFFECTS
2713 @chapter USING EFFECTS
2715 It would be sufficient to perform all changes to the timeline using
2716 editing operations, but this isn't very extensible.  Certain timeline
2717 changes should produce a different effect in the output without
2718 involving a unique procedure to apply each change.  This is why we have
2719 effects.
2721 Effects fall into three categories, and each effect in a category is
2722 applied using the same procedure.
2725 @menu
2726 * REALTIME EFFECTS::
2727 * RENDERED EFFECTS::
2728 * TRANSITIONS::
2729 * LADSPA EFFECTS::
2730 @end menu
2734 @node REALTIME EFFECTS
2735 @section REALTIME EFFECTS
2737 These are layered under the track they apply to.  They process the
2738 track when the track is played back, with no permanent storage of the
2739 output except when the project is rendered.
2741 All the realtime effects are listed in the resource window, divided
2742 into two groups: audio effects and video effects.  Audio effects should
2743 be dragged from the resource window onto audio tracks.  Video effects
2744 should be dragged onto video tracks.
2746 If there is data on the destination track, the effect is applied to the
2747 entire track.  If there is no data on the track the effect is deleted. 
2748 Finally, if a region of the track is selected the effect is pasted into
2749 the region, regardless of whether there is data.
2751 Some of the effects don't process data but synthesize data.  In the
2752 case of a synthesis effect, you'll want to select a region of the
2753 track so the dragging operation pastes it without deleting it.
2755 When dragging more than one effect onto a track, you'll see the effects
2756 layering from top to bottom, on the bottom of the track.   When the
2757 track is played back, effects are processed from top to bottom.  The
2758 output of the top effect becomes the input of the bottom effect and so
2759 on and so forth.
2761 In addition to dragging from the resource window, effects may be
2762 applied to a track by a popup menu.  Right click on a track and select
2763 @emph{Attach effect} from the popup.  The attach effect dialog gives
2764 you more control than pure dragging and dropping.  For one thing, the
2765 attach effect dialog lets you attach two more types of effects: shared
2766 effects and shared tracks.  Select a plugin from the @emph{Plugins}
2767 column and hit @emph{Attach} under the plugins column to attach it. 
2768 The effect is the same as if the effect was dragged from the resource
2769 window.
2771 When an effect exists under a track, it most often needs to be
2772 configured.  Go to the effect and right click on it to bring up the
2773 effect popup.  In the effect popup is a @emph{show} option.  The show
2774 option causes the GUI for the effect to appear under the cursor.  Most
2775 effects have GUI's but some don't.  If the effect doesn't have a GUI,
2776 nothing pops up when the @emph{show} option is selected.  When you
2777 tweek parameters in the effect GUI, the parameters normally effect the
2778 entire duration of the effect.
2781 @menu
2782 * REALTIME EFFECT TYPES::
2783 * EDITING REALTIME EFFECTS::
2784 @end menu
2788 @node REALTIME EFFECT TYPES
2789 @subsection REALTIME EFFECT TYPES
2791 The two other effect types supported by the Attach Effect dialog are
2792 recycled effects.  In order to use a recycled effect, three requiremenets
2793 must be met:
2795 @itemize
2797 @item
2798 There must be other effects in the timeline.
2800 @item
2802 The other effects must be of the same type as the track you're
2803 attaching an effect to.  If the track is an audio track, the effects
2804 must be audio effects.  If the track is a video track, the effects must
2805 be video effects.
2807 @item
2809 The insertion point or selected region must start inside the other effects.
2811 @end itemize
2813 In the case of a shared effect, these conditions must be true.  In the
2814 case of a shared track, there merely must be another track on the
2815 timeline of the same type as the track you're applying an effect to. 
2816 If you right clicked on a video track to attach an effect, there won't
2817 be anything in the @emph{shared tracks} column if no other video track
2818 exists.  If you right clicked on an audio track there won't be anything
2819 in the shared track column if no other audio track exists.
2821 If shared effects or shared tracks are available, they appear in the
2822 @emph{shared effects} and @emph{shared tracks} columns.  The
2823 @emph{attach} button under each column causes anything highlighted in
2824 the column to be attached under the current track.
2826 Shared effects and shared tracks allow very unique things to be done. 
2827 In the case of a shared effect, the shared effect is treated like a
2828 copy of the original effect except in the shared effect the GUI can't
2829 be brought up.  All configuration of the shared effect is determined by
2830 the GUI of the original effect and only the GUI of the original effect
2831 can be brought up.
2833 When a shared effect is played back, it's processed just like a normal
2834 effect except the configuration is copied from the original effect. 
2835 Some effects detect when they are being shared, like the reverb effects
2836 and the compressor.  These effects determine what tracks are sharing
2837 them and either mix the two tracks together or use one track to stage
2838 some value.  The reverb mixes tracks together to simulate ambience. 
2839 The compressor uses one of the sharing tracks as the trigger.
2841 When an original track has a @emph{shared track} as one of its effects,
2842 the shared track itself is used as a realtime effect.  This is more
2843 commonly known as @emph{bouncing tracks} but Cinelerra achieves the
2844 same operation by attaching shared tracks.  The fade and any effects in
2845 the shared track are applied to the original track.  Once the shared
2846 track has processed the data, the original track performs any effects
2847 which come below the shared track and then composites it on the output.
2849 In addition, once the shared track has processed the output of the
2850 original track like a realtime effect, the shared track mixes itself
2851 into the output with it's settings for pan, mode, and projector.  Thus,
2852 two tracks are mixing the same data on the output.  Most of the time
2853 you don't want the shared track to mix the same data as the original
2854 track on the output.  You want it to stop right before the mixing stage
2855 and give the data back to the original track.  Do this by enabling the
2856 @image{mutepatch_up} mute toggle next to each track for whom you don't
2857 want to mix on the output.
2859 Suppose you were making video and you did want the shared track to
2860 composite the original track's data on the output a second time.  In
2861 the case of video, the video from the shared track would always appear
2862 under the video from the original track, regardless of whether it was
2863 on top of the original track.  This is because shared tracks are
2864 composited in order of their attachment.  Since it's part of the original
2865 track it has to be composited before the original track is composited.
2873 @node EDITING REALTIME EFFECTS
2874 @subsection EDITING REALTIME EFFECTS
2876 Many operations exist for manipulating effects once they are in the
2877 timeline.  Because mixing effects and media is such complex business,
2878 the methods used in editing effects aren't as concise as cutting and
2879 pasting.  Some of the editing happens by dragging in/out points, some
2880 of the editing happens through popup menus, and some of it happens by
2881 dragging effects.
2883 Normally when you edit tracks, the effects follow the editing
2884 decisions.  If you cut from a track, the effect shrinks.  If you drag
2885 edit in/out points, the effect changes length.  This behavior can be
2886 disabled by selecting @emph{Settings->edit effects} in the project
2887 window.  This decouples effects from editing operations, but what if
2888 you just want to edit the effects?
2890 Move the timeline cursor over the effect borders until it changes to a
2891 resize left or resize right icon.  In this state, if you drag the end
2892 of the effect, it performs an edit just like dragging the end of a
2893 track does.  
2895 The three editing behaviors of track trimming apply to effect trimming
2896 and they are bound to the mouse buttons that you set in @emph{interface
2897 preferences}. @xref{INTERFACE}.  When you perform a trim edit on an
2898 effect, the effect boundary is moved by dragging on it.  Unlike track
2899 editing, the effect has no source length.  You can extend the end of an
2900 effect as much as desired without being limited.
2902 Also unlike track editing, the starting position of the drag operation
2903 doesn't bind the edit decision to media.  The media the effect is bound
2904 to doesn't follow effect edits.  Other effects; however, do follow
2905 editing decisions made on an effect.  If you drag the end of an effect
2906 which is lined up to effects on other tracks, the effects on the other
2907 tracks will be edited while the media stays the same.
2909 What happens if you trim the end of an effect in, leaving a lot of
2910 unaffected time near the end of the track?  When you drag an effect in
2911 from the Resource Window you can insert the effect in the portion of
2912 the row unoccupied by the trimming operation.  Realtime effects are
2913 organized into rows under the track.  Each row can have multiple
2914 effects.
2916 In addition to trimming, you can move effects up or down.  Every track
2917 can have a stack of effects under it.  By moving an effect up or down
2918 you change the order in which effects are processed in the stack.  Go
2919 to an effect and right click to bring up the effect menu.  The
2920 @emph{Move up} and @emph{Move down} options move the effect up or down.
2922 When you're moving effects up or down, be aware that if they're shared
2923 as @emph{shared effects}, any references will be pointing to a
2924 different effect after the move operation.
2926 Finally, there's dragging of effects.  Dragging effects works just like
2927 dragging edits.  You must select the @image{arrow} arrow to enter drag and
2928 drop mode before dragging effects.  The effects snap to media
2929 boundaries, effect boundaries, and tracks.  Be aware if you drag a
2930 reference to a shared effect, the reference will usually point to the
2931 wrong effect afterwards.
2933 Right click on an effect to bring up a menu for the effect.  Select
2934 @emph{attach...} to change the effect or change the reference if it is
2935 a shared effect.
2944 @node RENDERED EFFECTS
2945 @section RENDERED EFFECTS
2948 Another type of effect is performed on a section of the track and the
2949 result stored somewhere before it is played back.  The result is
2950 usually pasted into the track to replace the original data.
2952 The rendered effects are not listed in the resource window but instead
2953 are accessed through the @emph{Audio->Render effect} and
2954 @emph{Video->Render effect} menu options.  Each of these menu options
2955 brings up a dialog for the rendered effect.  Rendered effects apply to
2956 only one type of track, either audio or video.  If no tracks of the
2957 type exist, an error pops up.
2959 A region of the timeline to apply the effect to must be defined before
2960 selecting @emph{Render effect...}.  If no in/out points and no
2961 highlighted region exists, the entire region after the insertion point
2962 is treated as the affected region.  Otherwise, the region between the
2963 in/out points or the highlighted region is the affected region.
2965 In the render effect dialog is a list of all the realtime and all the
2966 rendered effects.  The difference here is that the realtime effects are
2967 rendered to disk and not applied under the track.  Highlight an effect
2968 in the list to designate it as the one being performed.
2970 Define a file to render the effect to in the @emph{Select a file to
2971 render to} box.  The @image{magnify} magnifying glass allows file
2972 selection from a list.
2974 Select a file format which can handle the track type.  The
2975 @image{wrench} wrench allows configuration specific to the file format.
2977 There is also an option for creating a new file at each label.  If you
2978 have a CD rip on the timeline which you want to divide into different
2979 files, the labels would become dividing points between the files if
2980 this option were selected.  When the timeline is divided by labels, the
2981 effect is re-initialized at every label.  Normalize operations take the
2982 peak in the current file and not in the entire timeline.
2984 Finally there is an insertion strategy just like in the render dialog. 
2985 It should be noted that even though the effect applies only to audio or
2986 video, the insertion strategy applies to all tracks just like a
2987 clipboard operation.
2989 When you click @emph{OK} in the effect dialog, it calls the GUI of the
2990 effect.  If the effect is also a realtime effect, a second GUI appears
2991 to prompt for acceptance or rejection of the current settings.  After
2992 accepting the settings, the effect is processed.
3007 @node TRANSITIONS
3008 @section TRANSITIONS
3010 When one edit ends and another edit begins, the default behaviour is to
3011 have the first edit's output immediately become the output of the
3012 second edit when played back.  Transitions are a way for the first
3013 edit's output to become the second edit's output with different
3014 variations.
3016 Cinelerra supports audio and video transitions, all of which are listed
3017 in the resource window.  Transitions may only apply to the matching
3018 track type.  Transitions under @emph{audio transitions} can only apply
3019 to audio tracks.  Transitions under @emph{video transitions} can only
3020 apply to video tracks.
3022 Load a video file and cut a section from the center so the edit point
3023 is visible on the timeline.  Go the resource window and click on the
3024 @emph{Video transitions} folder.  Drag a transition from the transition
3025 list onto the second video edit on the timeline.  A box highlights over
3026 where the transition will appear.  Releasing it over the second edit
3027 applies the transition between the first and second edit.
3029 You can now scrub over the transition with the transport controls and
3030 watch the output in the @emph{Compositor window}.  Scrubbing with the
3031 insertion point doesn't normally show transitions because the
3032 transition durations are usually too short.  The exact point in time
3033 when the transition takes effect isn't straightforward.  It starts when
3034 the second edit begins and lasts a certain amount of time into the
3035 second edit.  Therefore, the first asset needs to have enough data
3036 after the edit point to fill the transition into the second edit.
3038 Once the transition is in place, it can be edited similarly to an
3039 effect.  Move the pointer over the transition and right click to bring
3040 up the transition menu.  The @emph{show} option brings up specific
3041 parameters for the transition in question if there are any.  The
3042 @emph{length} option adjusts the length of the transition in seconds. 
3043 Once these two parameters are set, they are applied to future
3044 transitions until they are changed again.  Finally, the @emph{detach}
3045 option removes the transition from the timeline.
3047 Dragging and dropping transitions from the Resource window to the
3048 Program window can be really slow and tiring.  Fortunately, once you
3049 drag a transition from the Resource window, the @emph{U} and @emph{u}
3050 keys will paste the same transition.  The @emph{U} key pastes the last
3051 video transition and the @emph{u} key pastes the last audio transition
3052 on all the recordable tracks.  If the insertion point or in point is
3053 over an edit, the beginning of the edit is covered by the transition.  
3055 It should be noted that when playing transitions from the timeline to a
3056 hardware accelerated video device, the hardware acceleration will
3057 usually be turned off momentarily during the transition and on after
3058 the transition in order to render the transition.  Using an
3059 unaccelerated video device for the entire timeline normally removes the
3060 disturbance.
3066 @node LADSPA EFFECTS
3067 @section LADSPA EFFECTS
3070 LADSPA effects are supported in realtime and rendered mode for audio. 
3071 The LADSPA plugins you get from the internet vary in quality.  Most
3072 can't be tweeked in realtime very easily and work better when
3073 rendered.  Some crash and some can only be applied to one track due to
3074 a lack of reentrancy.  Although Cinelerra implements the LADSPA
3075 interface as accurately as possible, multiple tracks of realtime,
3076 simultaneous processing go beyond the majority of LADSPA users.  LADSPA
3077 effects appear in the audio folder as the hammer and screwdriver, to
3078 signify that they are Plugins for Linux Audio Developers.
3080 LADSPA Effects are enabled merely by setting the @emph{LADSPA_PATH}
3081 environment variable to the location of your LADSPA plugins or putting
3082 them in the @emph{/usr/lib/cinelerra} directory.
3093 @node SETTING PROJECT ATTRIBUTES
3094 @chapter SETTING PROJECT ATTRIBUTES
3096 When you play media files in Cinelerra, the media files have a certain
3097 number of tracks, a certain frame size, a certain sample size, and so
3098 on and so forth.  No matter what the media file has; however, it is
3099 still played back according to the project attributes.  If an audio
3100 file's samplerate is different than the project attributes, it is
3101 resampled.  If a video file's frame size is different than the project
3102 attributes, it is composited on a black frame, either cropped or
3103 bordered with black.
3105 The project attributes are adjusted in @emph{settings->format} and in
3106 to a more limited extent in @emph{file->new}.  When you adjust project
3107 settings in @emph{file->new} a new timeline is created with no data. 
3108 Every timeline created from this point uses the same settings.  When
3109 you adjust settings in @emph{settings->format}, the timeline is not
3110 recreated with no data but every timeline created from this point uses
3111 the same settings.
3113 In addition to the traditional settings for sample rate, frame rate,
3114 frame size, Cinelerra uses some unusual settings like @emph{channel
3115 positions, color model, and aspect ratio.}
3117 @itemize
3119 @item
3121 Channel positions is the only setting which doesn't affect the output
3122 necessarily.  Click on a speaker icon and drag to change the position
3123 of a channel.  It is merely a convenience so when more than 2 channels
3124 are used, the pan controls on the timeline are effective.  Channels 3,
3125 4, and 5 wouldn't be very adjustible if they occupied the same
3126 locations as channels 1 and 2 on a pan control.  Normally a 6 channel
3127 configuration would look like this:
3129 @sp 2
3130 @image{channelpositions}
3131 @sp 2
3133 But different channels can be positioned very close together to make
3134 them have the same output.
3139 @item
3141 Color model is very important for video playback.  The video is stored
3142 on disk in one colormodel, normally compressed using a YUV derivative. 
3143 When played back, Cinelerra decompresses it from the file format
3144 directly into the format of the output device.  If effects are
3145 processed, the decompression is into an internal colormodel first and
3146 the internal colormodel is then converted to the format of the output
3147 device.  The selection of internal colormodel determines how accurate
3148 and fast the effects are.
3150 Cinelerra colormodels are described using a certain packing order of
3151 components and a certain number of bits for each component.  The
3152 packing order is printed on the left and the bit allocation is printed
3153 on the right.
3155 @emph{RGBA8888} uses red, green, blue, and alpha with 8 bits per
3156 channel.
3158 In order to do effects which involve alpha channels, a colormodel with
3159 an alpha channel must be selected.  These are RGBA8888, YUVA8888,
3160 RGBA16161616, YUVA16161616.  The 4 channel colormodels are notoriously
3161 slower than 3 channel colormodels, with the slowest being
3162 RGBA16161616.  Some effects, like fade, work around the need for alpha
3163 channels while other effects, like chromakey, require an alpha channel
3164 to do anything, so it's a good idea to try the effect without alpha
3165 channels.
3167 The YUV colormodels are usually faster than RGB colormodels when using
3168 compressed footage.  They also destroy fewer colors than RGB
3169 colormodels.  If footage stored as JPEG or MPEG is processed many times
3170 in RGB, the colors will fade while they won't if processed in YUV.
3172 @item
3174 Aspect ratio determines the shape of the video output when using the
3175 X11 video output.  The numbers in each direction can be any floating
3176 point number.  When drawn on the screen, video pixels are stretched to
3177 match the aspect ratio.
3183 @end itemize
3190 @node COMPOSITING
3191 @chapter COMPOSITING
3194 A large amount of Cinelerra's binary size is directed towards
3195 compositing.  When you remove the letterboxing from a widescreen show,
3196 you're compositing.  Changing the resolution of a show, making a split
3197 screen, and fading in and out among other things are all compositing
3198 operations in Cinelerra.  Cinelerra detects when it's in a compositing
3199 operation and plays back through the compositing engine only then. 
3200 Otherwise, it uses the fastest decoder available in the hardware.
3202 Compositing operations are done on the timeline and in the Compositor
3203 window.  Shortcuts exist in the Resource window for changing project
3204 attributes.  Once some video files are on the timeline, the compositor
3205 window is a good place to try compositing.
3208 @menu
3209 * THE CAMERA AND PROJECTOR::
3210 * MASKS::
3211 * CROPPING::
3212 * SAFE REGIONS::
3213 * OVERLAY MODES::
3214 * TRACK AND OUTPUT SIZES::
3215 @end menu
3219 @node THE CAMERA AND PROJECTOR
3220 @section THE CAMERA AND PROJECTOR
3222 In the compositor window, the most important functions are the
3223 @image{camera} camera button and the @image{projector} projector
3224 button.  These control operation of the camera and projector.  Inside
3225 Cinelerra's compositing pipeline, the camera determines where in the
3226 source video the temporary is copied from.  The projector determines
3227 where in the output the temporary is copied to.  The temporary is a
3228 frame of video in Cinelerra's memory where all graphics processing is
3229 done.  Each track has a different temporary which is defined by the
3230 track size.  By resizing the tracks you can create splitscreens, pans,
3231 and zooms.
3233 @sp 2
3234 @image{compositing_pipeline}
3235 @sp 2
3236 @emph{Visual representation of the compositing pipeline}.
3238 When editing the camera and projector in the compositing window, the
3239 first track with @emph{record} enabled is the track affected.  Even if
3240 the track is completely transparent, it's still the affected track.  If
3241 multiple video tracks exist, the easiest way to select one track for
3242 editing is to @emph{shift-click} on the record icon of the track.  This
3243 solos the track.
3245 When the @emph{projector} button is enabled in the compositor window,
3246 you're in projector editing mode.  A guide box appears in the video
3247 window.  Dragging anywhere in the video window causes the guide box to
3248 move, hopefully along with the video.  @emph{shift-dragging} anywhere
3249 in the video window causes the guide box to shrink and grow along with
3250 the video.  Once you've positioned the video with the projector, you're
3251 ready to master the camera.
3253 Select the @image{camera} camera button to enable camera editing mode. 
3254 In this mode, the guide box shows where the camera position is in
3255 relation to past and future camera positions but not where it is in
3256 relation to the source video.  Dragging the camera box in the
3257 compositor window doesn't move the box but instead moves the location
3258 of the video inside the box.
3260 For example, when you drag the camera left, the video moves right. 
3261 When you drag the camera up, the video moves down.  When you shift-drag
3262 the camera, the effect is the same as if you zoomed in or out of the
3263 source.  The intention of the camera is to produce still photo panning,
3264 while the intention of the projector is to composite several sources in
3265 the same scene.
3267 In the compositing window, there is a popup menu of options for the
3268 camera and projector.  Right click over the video portion of the
3269 compositing window to bring up the menu.
3271 @itemize
3273 @item Reset Camera causes the camera to return to the center position.
3275 @item Reset Projector causes the projector to return to the center.
3277 @end itemize
3280 The camera and projector have shortcut operations neither in the popup
3281 menu or represented in video overlays.  These are accessed in the
3282 @emph{Tool window}.  Most operations in the Compositor window have a
3283 tool window which is enabled by activating the @image{toolwindow}
3284 question mark.
3286 In the case of the camera and projector, the tool window shows x, y,
3287 and z coordinates.  By either tumbling or entering text directly, the
3288 camera and projector can be precisely positioned.  9 justification
3289 types are also defined for easy access.  A popular justification
3290 operation is upper left projection after image reduction.  This is used
3291 when reducing the size of video with aspect ratio adjustment.
3293 The translation effect allows simultaneous aspect ratio conversion and
3294 reduction but is easier to use if the reduced video is put in the upper
3295 left of the temporary instead of in the center.  The track size is set
3296 to the original size of the video and the camera is centered.  The
3297 output size is set to the reduced size of the video.  Without any
3298 effects, this produces just the cropped center portion of the video in
3299 the output.
3301 The translation effect is dropped onto the video track.  The input
3302 dimensions of the translation effect are set to the original size and
3303 the output dimensions are set to the reduced size.  To put the reduced
3304 video in the center section that the projector shows would require
3305 offsetting @emph{out x and out y} by a complicated calculation. 
3306 Instead, we leave @emph{out x and out y} at 0 and use the projector's
3307 tool window.
3309 Merely by selecting @image{left_justify} left justify and
3310 @image{top_justify} top justify, the projector displays the reduced
3311 image from the top left corner of the temporary in the center of the
3312 output.
3319 @node MASKS
3320 @section MASKS
3322 Masks select a region of the video for either displaying or hiding. 
3323 Masks are also used in conjunction with another effect to isolate the
3324 effect to a certain region of the frame.  A copy of one video track may
3325 be delayed slightly and unmasked in locations where the one copy has
3326 interference but the other copy doesn't.  Color correction may be
3327 needed in one section of a frame but not another.  A mask can be
3328 applied to just a section of the color corrected track while the
3329 vanilla track shows through.  Removal of boom microphones, airplanes,
3330 and housewives are other mask uses.
3332 The order of the compositing pipeline affects what can be done with
3333 masks.  Mainly, masks are performed on the temporary after effects and
3334 before the projector.  This means multiple tracks can be bounced to a
3335 masked track and projected with the same mask.
3337 Our compositing pipeline graph now has a masking stage.  There are 8
3338 possible masks per track.  Each mask is defined separately, although
3339 they each perform the same operation, whether it's addition or
3340 subtraction.
3342 @sp 2
3343 @image{compositing_pipeline2}
3344 @sp 2
3345 @emph{Compositing pipeline with masks}
3347 To define a mask, go into the Compositor window and enable the
3348 @image{mask} @emph{mask} toggle.  Now go over the video and
3349 click-drag.  Click-drag again in another part of the image to create
3350 each new point of the mask.  While it isn't the conventional bezier
3351 curve behavior, this masking interface performs in realtime what the
3352 effect of the mask is going to be.  Creating each point of the mask
3353 expands a rubber band curve.  
3355 Once points are defined, they can be moved by @emph{ctrl-dragging} in
3356 the vicinity of the corner.  This; however, doesn't smooth out the
3357 curve.  The in-out points of the bezier curve are accessed by
3358 @emph{shift-dragging} in the vicinity of the corner.  Then
3359 @emph{shift-dragging} near the in or out point causes the point to
3360 move.
3362 Finally, once you have a mask, the mask can be translated in one piece
3363 by @emph{alt-dragging} the mask.  Mask editing in Cinelerra is
3364 identical to how The Gimp edits masks except in this case the effect of
3365 the mask is always on.
3367 The masks have many more parameters which couldn't be represented with
3368 video overlays.  These are represented in the tool window for masks. 
3369 Selecting the @image{toolwindow} question mark when the @image{mask}
3370 mask toggle is highlighted brings up the mask options.
3372 The @emph{mode} of the mask determines if the mask removes data or
3373 makes data visible.  If the mode is subtractive, the mask causes video
3374 to disappear.  If the mode is additive, the mask causes video to appear
3375 and everything outside the mask to disappear.
3377 The @emph{value} of the mask determines how extreme the addition or
3378 subtraction is.  In the subtractive mode, higher values subtract more
3379 alpha.  In the additive mode, higher values make the region in the mask
3380 brighter while the region outside the mask is always hidden.
3382 The mask number determines which one of the 8 possible masks we're
3383 editing.  Each track has 8 possible masks.  When you click-drag in the
3384 compositor window, you're only editing one of the masks.  Change the
3385 value of @emph{mask number} to cause another mask to be edited.  The
3386 previous mask is still active but only the curve overlay for the
3387 currently selected mask is visible.
3389 When multiple masks are used, their effects are ORed together.  Every
3390 mask in a single track uses the same value and mode.
3392 The edges of a mask are hard by default but this rarely is desired. 
3393 The @emph{feather} parameter determines how many pixels to feather the
3394 mask.  This creates softer edges but takes longer to render.
3396 Finally, there are parameters which affect one point on the current
3397 mask instead of the whole mask.  These are @emph{Delete, x, y}.  The
3398 active point is defined as the last point dragged in the compositor
3399 window.  Any point can be activated merely by @emph{ctrl-clicking} near
3400 it without moving the pointer.  Once a point is activated,
3401 @emph{Delete} deletes it and @emph{x, y} allow repositioning by numeric
3402 entry.
3407 @node CROPPING
3408 @section CROPPING
3412 Cropping changes the value of the output dimensions and the projector
3413 to reduce the visible picture area.  Enable the @image{crop} crop
3414 toggle and the @image{toolwindow} tool window to perform cropping in
3415 the compositing window.  This draws a rectangle over the video. 
3416 Click-drag anywhere in the video to create a new rectangle.  Click-drag
3417 over any corner of the rectangle to reposition the corner.  The tool
3418 window allows text entry of the coordinates.  When the rectangle is
3419 positioned, hit the @emph{do it} button in the tool window.
3424 @node SAFE REGIONS
3425 @section SAFE REGIONS
3427 On consumer displays the borders of the image are cut off and within
3428 the cutoff point is a region which isn't always square like it is in
3429 the compositor window.  The borders are intended for scratch room and
3430 vertical blanking data.  You can show where these borders are by
3431 enabling the @image{titlesafe} safe regions toggle.  Keep titles inside
3432 the inner rectangle and keep action inside the outer rectangle.
3441 @node OVERLAY MODES
3442 @section OVERLAY MODES
3444 Every video track has an overlay mode, accessible by expanding the
3445 track.  The overlay mode is a pulldown menu on the left under the
3446 fader.  When collapsed, it displays an icon representing the current
3447 overlay mode.
3449 Select the @image{expandpatch_checked} expand track toggle to view all
3450 the options for a video track if you can't see the overlay mode.  The
3451 overlay mode of video tracks is @emph{normal} by default.  Select other
3452 modes by clicking the overlay button and selecting an item from the
3453 popup menu.
3455 Overlay modes are processed inside the projector stage of compositing. 
3456 The different modes are summarized below.
3458 @itemize
3460 @item
3462 @b{Normal} uses a traditional Porter-Diff equation to blend tracks with
3463 alpha.  When no alpha exists in the project color model, the new track
3464 always replaces the output.
3466 @item
3468 @b{Addition}  In this mode, whatever is in the output is added to the
3469 current track.  The result is blended based on the current track's
3470 alpha onto the output.
3472 @item
3474 @b{Subtraction} In this mode, the current track is subtracted from the
3475 output and the result is alpha blended onto the output.
3477 @item 
3479 @b{Multiply} is the most useful operation.  The current track is multiplied
3480 by the output and the result blended onto the output.  Usually a black
3481 and white image with no alpha channel or a white title on a black image
3482 is used as the current track.  With the multiply operation, only the
3483 output portions under the white area show.
3485 @item
3487 @b{Divide} divides the current track by the output and the result is
3488 blended into the output.  It usually results in overloaded levels.
3490 @item
3492 @b{Replace} does no blending and overwrites the output with the current
3493 track.
3495 @end itemize
3501 @node TRACK AND OUTPUT SIZES
3502 @section TRACK AND OUTPUT SIZES
3504 The size of the temporary and the size of the output in our compositing
3505 pipeline are independant and variable.  This fits into everything
3506 covered so far.  The camera's viewport is the temporary size.  Effects
3507 are processed in the temporary and are affected by the temporary size. 
3508 Projectors are rendered to the output and are affected by the output
3509 size.  If the temporary is smaller than the output, the temporary is
3510 bordered by blank regions in the output.  If the temporary is bigger
3511 than the output, the temporary is cropped.
3513 The temporary size is defined as the track size.  Each track has a
3514 different size.  Right click on a track to bring up the track's menu. 
3515 Select @emph{Resize Track} to resize the track to any arbitrary size. 
3516 Alternatively you can select @emph{Match output size} to make the track
3517 the same size as the output.
3519 The output size is set in either @emph{New} when creating a new project
3520 or @emph{Settings->Format}.  In the Resource window there is another
3521 way to change the output size.  Right click on a video asset and select
3522 @emph{Match project size} to conform the output to the asset.  When new
3523 tracks are created, the track size always conforms to the output size
3524 specified by these methods.
3531 @node KEYFRAMES
3532 @chapter KEYFRAMES
3536 Setting static compositing parameters isn't very useful most of the
3537 time.  Normally you need to move the camera around over time or change
3538 mask positions.  Masks need to follow objects.  We create dymanic
3539 changes by defining keyframes.  A keyframe is a certain point in time
3540 when the settings for one operation change.  In Cinelerra, there are
3541 keyframes for almost every compositing parameter and effect parameter.
3543 Whenever you adjust any parameter, the value is stored in a keyframe. 
3544 If the value is stored in a keyframe, why doesn't it always change? 
3545 The keyframe it is stored in is known as the @emph{default keyframe}. 
3546 The default keyframe applies to the entire duration if no other
3547 keyframes are present.  The default keyframe is not drawn anywhere
3548 because it always exists.  The only way change occurs over time is if
3549 non-default keyframes are created.
3551 Display keyframes for any parameter by using the @emph{view} menu. 
3552 When keyframes are selected, they are drawn on the timeline over the
3553 tracks they apply to.
3555 @menu
3556 * CURVE KEYFRAMES::
3557 * TOGGLE KEYFRAMES::
3558 * AUTOMATIC KEYFRAMES::
3559 * COMPOSITOR KEYFRAMES::
3560 * EDITING KEYFRAMES::
3561 @end menu
3565 @node CURVE KEYFRAMES
3566 @section CURVE KEYFRAMES
3568 Fade and zoom settings are stored in bezier curves.  Go to
3569 @emph{view->fade keyframes} or @emph{view->...zoom} to show curves on
3570 the timeline.  It's sometimes easier to pull down the @emph{view} menu
3571 and then use the keyboard shortcuts listed in the menu to enable or
3572 disable keyframes while the menu is visible.  In either arrow editing
3573 mode or i-beam editing mode, move the cursor over the curves in the
3574 timeline until it changes shape.  Then merely by clicking and dragging
3575 on the curve you can create a keyframe at the position.
3577 After the keyframe is created, click drag on it again to reposition
3578 it.  When you click-drag a second keyframe on the curve, it creates a
3579 smooth ramp.  @emph{ctrl-dragging} on a keyframe changes the value of
3580 either the input control or the output control.  This affects the
3581 sharpness of the curve.  While the input control and the output control
3582 can be moved horizontally as well as vertically, the horizontal
3583 movement is purely for legibility and isn't used in the curve value.
3585 You may remember that The Gimp and the Compositing masks all use
3586 @emph{shift} to select control points so why does the timeline use
3587 @emph{ctrl}?  When you @emph{shift-drag} on a timeline curve, the
3588 keyframe jumps to the value of either the next or previous keyframe,
3589 depending on which exists.  This lets you set a constant curve value
3590 without having to copy the next or previous keyframe.
3594 @node TOGGLE KEYFRAMES
3595 @section TOGGLE KEYFRAMES
3597 Mute is the only toggle keyframe.  Mute keyframes determine where the
3598 track is processed but not rendered to the output.  Click-drag on these
3599 curves to create a keyframe.  Unlike curves, the toggle keyframe has
3600 only two values: on or off.  Ctrl and shift do nothing on toggle
3601 keyframes.
3608 @node AUTOMATIC KEYFRAMES
3609 @section AUTOMATIC KEYFRAMES
3611 You may have noticed when a few fade curves are set up, moving the
3612 insertion point around the curves causes the faders to reflect the
3613 curve value under the insertion point.  This isn't just to look cool. 
3614 The faders themselves can set keyframes in automatic keyframe mode. 
3615 Automatic keyframe mode is usually more useful than dragging curves.
3617 Enable automatic keyframe mode by enabling the automatic keyframe
3618 toggle @image{autokeyframe}.  In automatic keyframe mode, every time
3619 you tweek a keyframeable parameter it creates a keyframe on the
3620 timeline.  Since automatic keyframes affect many parameters, it's best
3621 enabled just before you need a keyframe and disabled immediately
3622 thereafter.
3624 It's useful to go into the @emph{View} menu and make the desired
3625 parameter visible before performing a change.  The location where the
3626 automatic keyframe is generated is under the insertion point.  If the
3627 timeline is playing back during a tweek, several automatic keyframes
3628 will be generated as you change the parameter.
3630 When automatic keyframe mode is disabled, a similarly strange thing
3631 happens.  Adjusting a parameter adjusts the keyframe immediately
3632 preceeding the insertion point.  If two fade keyframes exist and the
3633 insertion point is between them, changing the fader changes the first
3634 keyframe.
3636 There are many parameters which can only be keyframed in automatic
3637 keyframe mode.  These are parameters for which curves would take up too
3638 much space on the track or which can't be represented easily by a
3639 curve.
3641 Effects are only keyframable in automatic mode because of the number of
3642 parameters in each individual effect.  
3644 Camera and projector translation can only be keyframed in automatic
3645 keyframe mode while camera and projector zoom can be keyframed with
3646 curves.  It is here that we conclude the discussion of compositing,
3647 since compositing is highly dependant on the ability to change over
3648 time.
3652 @node COMPOSITOR KEYFRAMES
3653 @section COMPOSITOR KEYFRAMES
3655 Camera and projector translation is represented by two parameters: x
3656 and y.  Therefore it is cumbersome to adjust with curves.  Cinelerra
3657 solves this problem by relying on automatic keyframes.  With a video
3658 track loaded, move the insertion point to the beginning of the track
3659 and enable automatic keyframe mode.
3661 Move the projector slightly in the compositor window to create a
3662 keyframe.  Then go forward several seconds.  Move the projector a long
3663 distance to create another keyframe and emphasize motion.  This creates
3664 a second projector box in the compositor, with a line joining the two
3665 boxes.  The joining line is the motion path.  If you create more
3666 keyframes, more boxes are created.  Once all the desired keyframes are
3667 created, disable automatic keyframe mode.
3669 Now when scrubbing around with the compositor window's slider, the
3670 video projection moves over time.  At any point between two keyframes,
3671 the motion path is read for all time before the insertion point and
3672 green for all time after the insertion point.  It's debatable if this
3673 is a very useful feature but it makes you feel good to know what
3674 keyframe is going to be affected by the next projector tweek.
3676 Click-drag when automatic keyframes are off to adjust the preceeding
3677 keyframe.  If you're halfway between two keyframes, the first projector
3678 box is adjusted while the second one stays the same.  Furthermore, the
3679 video doesn't appear to move in step with the first keyframe.  This is
3680 because, halfway between two keyframes the projector translation is
3681 interpolated.  In order to set the second keyframe you'll need to scrub
3682 after the second keyframe.
3684 By default the motion path is a straight line, but it can be curved
3685 with control points.  @emph{Ctrl-drag} to set either the in or out
3686 control point of the preceeding keyframe.  Once again, we depart from
3687 The Gimp because @emph{shift} is already used for zoom.  After the in
3688 or out control points are extrapolated from the keyframe,
3689 @emph{Ctrl-dragging} anywhere in the video adjusts the nearest control
3690 point.  A control point can be out of view entirely yet still
3691 controllable.
3693 When editing the camera translation, the behavior of the camera boxes
3694 is slightly different.  Camera automation is normally used for still
3695 photo panning.  The current camera box doesn't move during a drag, but
3696 if multiple keyframes are set, every camera box except the current
3697 keyframe appears to move.  This is because the camera display shows
3698 every other camera position relative to the current one.
3700 The situation becomes more intuitive if you bend the motion path
3701 between two keyframes and scrub between the two keyframes.  The
3702 division between red and green, the current position between the
3703 keyframes, is always centered while the camera boxes move.
3710 @node EDITING KEYFRAMES
3711 @section EDITING KEYFRAMES
3713 Keyframes can be shifted around and moved between tracks on the
3714 timeline using similar cut and paste operations to editing media.  Only
3715 the keyframes selected in the @emph{view} menu are affected by keyframe
3716 editing operations, however.
3718 The most popular keyframe editing operation is replication of some
3719 curve from one track to the other, to make a stereo pair.  The first
3720 step is to solo the source track's record @image{recordpatch_up} patch
3721 by @emph{shift-clicking} on it.  Then either set in/out points or
3722 highlight the desired region of keyframes.  Go to @emph{keyframes->copy
3723 keyframes} to copy them to the clipboard.  Solo the destination track's
3724 record @image{recordpatch_up} patch by @emph{shift-clicking} on it and
3725 go to @emph{keyframes->paste keyframes} to paste the clipboard.
3727 The media editing commands are mapped to the keyframe editing commands
3728 by using the @emph{shift} key instead of just the keyboard shortcut.  
3730 This leads to the most complicated part of keyframe editing, the
3731 default keyframe.  Remember that when no keyframes are set at all,
3732 there is still a default keyframe which stores a global parameter for
3733 the entire duration.  The default keyframe isn't drawn because it
3734 always exists.  What if the default keyframe is a good value which you
3735 want to transpose between other non-default keyframes?  The
3736 @emph{keyframes->copy default keyframe} and @emph{keyframes->paste
3737 default keyframe} allow conversion of the default keyframe to a
3738 non-default keyframe.
3740 @emph{Keyframes->copy default keyframe} copies the default keyframe to
3741 the clipboard, no matter what region of the timeline is selected.  The
3742 @emph{keyframes->paste keyframes} function may then be used to paste
3743 the clipboard as a non-default keyframe.
3745 If you've copied a non-default keyframe, it can be stored as the
3746 default keyframe by calling @emph{keyframes->paste default keyframe}. 
3747 After using paste default keyframe to convert a non-default keyframe
3748 into a default keyframe, you won't see the value of the default
3749 keyframe reflected until all the non-default keyframes are removed.
3751 Finally, there is a convenient way to delete keyframes besides
3752 selecting a region and calling @emph{keyframes->clear keyframes}. 
3753 Merely click-drag a keyframe before its preceeding keyframe or after
3754 its following keyframe on the track.
3762 @node CAPTURING MEDIA
3763 @chapter CAPTURING MEDIA
3765 Ideally, all media would be stored on hard drives, CD-ROM, flash, or
3766 DVD and loading it into Cinelerra would be a matter of loading a file. 
3767 In reality, very few sources of media can be accessed like a filesystem
3768 but instead rely on tape transport mechanisms and dumb I/O mechanisms
3769 to transfer the data to computers.  These media types are imported into
3770 Cinelerra through the Record dialog.
3772 The first step in recording is to configure the input device.  In
3773 @emph{Settings->preferences} are a number of recording parameters
3774 described in configuration @xref{RECORDING}.  These parameters apply to
3775 recording no matter what the project settings are, because the
3776 recording parameters are usually the maximum capability of the
3777 recording hardware while project settings come and go.
3779 Go to @emph{File->record} to record a dumb I/O source.  This prompts
3780 for an output format much like rendering does.  Once that's done, the
3781 record window and the record monitor pop up.
3783 The record window has discrete sections.  While many parameters change
3784 depending on if the file has audio or video, the discrete sections are
3785 always the same.
3787 @itemize
3789 @item
3791 The output format area describes the format of the output file and the
3792 current position within it.
3795 @item
3797 The edit batch area lets you change parameters in the current batch.
3799 @item
3801 The transport controls start and stop recording different ways.
3803 @item
3805 The batch list displays all the defined batches.
3807 @item
3809 The confirmation area lets you determine how the output files are
3810 imported into the timeline and quit.
3812 @end itemize
3814 @image{recording}
3815 @sp 2
3816 @emph{Recording window areas}
3819 Recording in Cinelerra is organized around batches.  A batch
3820 essentially defines a distinct output file for the recording.  For now
3821 you can ignore the batch concept entirely and record merely by hitting
3822 the record button @image{record}.
3824 The record button opens the current output file if it isn't opened and
3825 writes captured data to it.  Use the stop button to stop the
3826 recording.  Recording can be resumed with the record button without
3827 erasing the file at this point.  In the case of a video file, there is
3828 a single frame record button @image{singleframe} which records a single
3829 frame.
3831 When enough media is recorded, choose an insertion method from the
3832 @emph{Insertion Strategy} menu and hit @emph{close}.
3837 @menu
3838 * BATCHES::
3839 * EDITING TUNER INFORMATION::
3840 @end menu
3845 @node BATCHES
3846 @section BATCHES
3848 Now we come to the concept of batches.  Batches try to make the dumb
3849 I/O look more like a filesystem.  Batches are traditionally used to
3850 divide tape into different programs and save the different programs as
3851 different files instead of recording straight through an entire tape. 
3852 Because of the high cost of developing frame-accurate deck control
3853 mechanisms, the only use of batches now is recording different programs
3854 during different times of day.  This is still useful for recording TV
3855 shows or time lapse movies as anyone who can't afford proper appliances
3856 knows.
3858 The record window supports a list of batches and two recording modes:
3859 interactive and batch recording.  Interactive recording happens when
3860 the record button is pressed.  Interactive recording starts immediately
3861 and uses the current batch to determine everything except start time. 
3862 By default, the current batch is configured to behave like tape.
3864 Batch recording happens when the @emph{start} button is pressed.  In
3865 batch recording, the @emph{start time} is the time the batch starts
3866 recording.
3868 First, you'll want to create some batches.  Each batch has certain
3869 parameters and methods of adjustment.  
3874 @itemize
3876 @item 
3878 @emph{On} determines whether the batch is included in batch recording
3879 operations.  Click the list row under @emph{On} to enable or disable
3880 batches.
3883 @item 
3885 @emph{Path} is the file the batch is going to be recorded to.  The
3886 filename specified in the record dialog is the name of the first batch,
3887 to simplify interactive recording, but the filename may be changed in
3888 the record window for any batch in the @emph{edit batch} area.
3891 @item
3893 @emph{News} shows whether the file exists or not.  This is a very
3894 important attribute since there is no confirmation dialog if the file
3895 exists.  The first time you hit record, the file is opened.  If the
3896 file exists at this point it's erased.  News says @emph{File exists} if
3897 it exists and @emph{OK} if it doesn't.  Every time you resume recording
3898 in the same batch, the news should say @emph{Open}, indicating the file
3899 is already opened and won't be erased in the next record button press.
3901 If you change out of the current batch after recording, the file is
3902 closed.  Next time you change into the batch, the file will be erased.
3904 @item
3906 @emph{Start time} is the 24 hour time of day the batch will start
3907 recording if in batch mode.  The start time may become a time of tape
3908 and reel number if deck control is implemented but for now it's a time
3909 of day.
3911 @item
3913 @emph{Duration} is the length of the batch.  It only has meaning if the
3914 @emph{Mode} of the batch is @emph{Timed}.  Once the recording length
3915 reaches @emph{duration} the recording stops, whether in interactive or
3916 batch mode.
3918 @item
3920 @emph{Source} has meaning only when the capturing hardware has multiple
3921 sources.  Usually the source is a tuner channel or input.  When the
3922 current batch finishes and the next batch begins recording, the source
3923 is changed to what the next batch is set to.  This way multiple TV
3924 stations can be recorded at different times.
3927 @end itemize
3929 The record window has a notion of the @emph{current batch}.  The
3930 current batch is not the same as the batch which is highlighted in the
3931 batch list.  The current batch text is colored red in the batch list. 
3932 The highlighted batch is merely displayed in the edit batch section for
3933 editing.
3935 By coloring the current batch red, any batch can be edited by
3936 highlighting it, without changing the batch to be recorded.
3938 All recording operations take place in the current batch.   If there
3939 are multiple batches, highlight the desired batch and hit
3940 @emph{activate} to make it the current batch.  If the @emph{start}
3941 button is pressed, the current batch flashes to indicate it's waiting
3942 for the start time in batch mode.  If the @emph{record} button is
3943 pressed, the current batch is recorded immediately in interactive mode.
3945 In batch and interactive recording modes, when the current batch
3946 finishes recording the next batch is activated and performed.  All
3947 future recording is done in batch mode.  When the first batch finishes,
3948 the next batch flashes until its start time is reached.
3950 Interrupt either the batch or the interactive operation by hitting the
3951 stop button.
3953 Finally there is the @image{rewind} rewind button.  In either
3954 interactive or batch recording, the rewind button causes the current
3955 batch to close its file.  The next recording operation in the current
3956 batch deletes the file.
3963 @node EDITING TUNER INFORMATION
3964 @section EDITING TUNER INFORMATION
3967 Sometimes in the recording process and the configuration process,
3968 you'll need to define and select tuner channels to either record or
3969 play back to.  In the case of the Video4Linux and Buz recording
3970 drivers, tuner channels define the source.  When the Buz driver is also
3971 used for playback, tuner channels define the destination.  
3973 Defining tuner channels is accomplished by pushing the @image{channel}
3974 channel button.  This brings up the channel editing window.  In this
3975 window you add, edit, and sort channels.  Also, for certain video
3976 drivers, you can adjust the picture quality.
3978 The @emph{add} operation brings up a channel editing box.  The title of
3979 the channel appears in the channel list.  The source of the channel is
3980 the entry in the physical tuner's frequency table corresponding to the
3981 title.  
3983 Fine tuning in the channel edit dialog adjusts the physical frequency
3984 slightly if the driver supports it.  The norm and frequency table
3985 together define which frequency table is selected for defining
3986 sources.  If the device supports multiple inputs, the input menu
3987 selects these.
3989 To sort channels, highlight the channel in the list and push @emph{move
3990 up} or @emph{move down} to move it.
3992 Once channels are defined, the @emph{source} item in the record window
3993 can be used to select channels for recording.  The same channel
3994 selecting ability also exists in the record monitor window.  Be aware
3995 channel selections in the record monitor window and the record window
3996 are stored in the current batch.
3998 For some drivers an option to @b{swap fields} may be visible.  These
3999 drivers don't get the field order right every time without human
4000 intervention.  Toggle this to get the odd and even lines to record in
4001 the right order.
4006 @node IMPROVING PERFORMANCE
4007 @chapter IMPROVING PERFORMANCE
4010 Let's get one thing perfectly clear.  Linux is not a very good
4011 desktop.  It's a server.  Most of what you'll find on modern Linux
4012 distributions are faceless, network-only programs strategicly designed
4013 to counteract one Microsoft server feature or another and not to
4014 perform very well at user interaction.  There are a number of
4015 parameters on Linux, which ordinary people can adjust to make it behave
4016 more like a thoroughbred in desktop usage.
4019 @menu
4020 * DISABLING SWAP SPACE::
4021 * ENLARGING SOUND BUFFERS::
4022 * FREEING MORE SHARED MEMORY::
4023 * SPEEDING UP THE HARD DRIVE::
4024 * DISABLING CRON::
4025 * REDUCING USB MOUSE SENSITIVITY::
4026 * ASSORTED X TWEEKS::
4027 * SPEEDING UP THE FILE SYSTEM::
4028 * IMPROVING ZORAN VIDEO::
4029 @end menu
4031 @node DISABLING SWAP SPACE
4032 @section DISABLING SWAP SPACE
4034 On systems with lots of memory, Cinelerra sometimes runs better without
4035 a swap space.  If you have 4 GB of RAM, you're probably better off
4036 without a swap space.  If you have 512MB of RAM, you should keep the
4037 swap.  If you want to do recording, you should probably disable swap
4038 space in any case.  There's a reason for this.  Linux only allows half
4039 the available memory to be used.  Beyond that, it starts searching for
4040 free pages to swap, in order to cache more disk access.  In a 4 GB
4041 system, you start waiting for page swaps after using only 2 GB.  
4043 The question then is how to make Linux run without a swap space. 
4044 Theoretically it should be a matter of running
4046 @example
4047 swapoff -a
4048 @end example
4050 Unfortunately, without a swap space the @b{kswapd} tasklet normally
4051 spins at 100%.  To eliminate this problem, edit @b{linux/mm/vmscan.c}.
4052 In this file, put a line saying @b{return 0;} before it says 
4054 @example
4055         /*
4056          * Kswapd main loop.
4057          */
4058 @end example
4060 Then recompile the kernel.
4065 @node ENLARGING SOUND BUFFERS
4066 @section ENLARGING SOUND BUFFERS
4068 In order to improve realtime performance, the audio buffers for all the
4069 Linux sound drivers were limited from 128k to 64k.  For recording audio
4070 and video simultaneously and for most audio recording this causes
4071 dropouts.  Application of low latency and preemtible kernel patches
4072 make it possible to record more audio recordings but it doesn't improve
4073 recording video with audio.  This is where you need to hack the kernel.
4075 To see if your sound buffers are suitable, run the included
4076 @b{soundtest} program with nothing playing or recording.  This
4077 allocates the largest possible buffers and displays them.  If the
4078 @b{TOTAL BYTES AVAILABLE} is under 131072, you need to see about
4079 getting the buffers enlarged in the driver.  While many drivers differ,
4080 we have a hack for at least one driver.
4082 This only applies to the OSS version of the Soundblaster Live driver. 
4083 Since every sound card and every sound driver derivative has a
4084 different implementation you'll need to do some searching for other
4085 sound cards.  Edit @b{linux/drivers/sound/emu10k1/audio.c}
4087 Where is says
4089 @example
4090 if (bufsize >= 0x10000)
4091 @end example
4093 change it to say
4095 @example
4096 if (bufsize > 0x40000)
4097 @end example
4101 Where is says
4103 @example
4104                 for (i = 0; i < 8; i++)
4105                         for (j = 0; j < 4; j++)
4106 @end example
4108 change it to say
4110 @example
4111                 for (i = 0; i < 16; i++)
4112                         for (j = 0; j < 4; j++)
4113 @end example
4117 In @b{linux/drivers/sound/emu10k1/hwaccess.h}
4119 Change
4121 @b{#define MAXBUFSIZE   65536} 
4123 to 
4125 @b{#define MAXBUFSIZE   262144} 
4127 Finally, in @b{linux/drivers/sound/emu10k1/cardwi.h}
4129 @b{#define WAVEIN_MAXBUFSIZE         65536}
4133 @b{#define WAVEIN_MAXBUFSIZE         262144}
4135 Then recompile the kernel modules.
4142 @node FREEING MORE SHARED MEMORY
4143 @section FREEING MORE SHARED MEMORY
4145 The Linux kernel only allows 32MB of shared memory to be allocated by
4146 default.  This needs to be increased to do anything useful.  Run the
4147 following command:
4149 @b{echo "0x7fffffff" > /proc/sys/kernel/shmmax}
4155 @node SPEEDING UP THE HARD DRIVE
4156 @section SPEEDING UP THE HARD DRIVE
4158 This is a very popular command sequence among Linux gurus, which is not
4159 done by default on Linux distributions.
4161 @b{hdparm -c3 -d1 -u1 -k1 /dev/hda}
4163 @b{-c3} puts the hard drive into 32 bit I/O with sync.  This normally
4164 doesn't work due to inept kernel support for most IDE controllers.  If
4165 you get lost interrupt or SeekComplete errors, quickly use @b{-c0}
4166 instead of @b{-c3} in your command.
4168 @b{-d1} enables DMA of course.  This frees up the CPU partially during
4169 data transfers.
4171 @b{-u1} allows multiple interrupts to be handled during hard drive
4172 transactions.  This frees up even more CPU time.
4174 @b{-k1} prevents Linux from resetting your settings in case of a
4175 glitch.
4181 @node DISABLING CRON
4182 @section DISABLING CRON
4184 Linux runs some daily operations like compressing man pages.  These may
4185 be acceptable background tasks while compiling or word processing but
4186 not while playing video.  Disable these operations by editing
4187 @b{/etc/rc.d/init.d/anacron}.
4189 Put @b{exit} before the first line not beginning in @b{#}.
4191 In @b{/etc/rc.d/init.d/crond} put @b{exit} before the first line not
4192 beginning in @b{#}.  Then make like Win 2000 and reboot.
4194 You can't use the @b{at} command anymore, but who uses that command
4195 anyways?
4205 @node REDUCING USB MOUSE SENSITIVITY
4206 @section REDUCING USB MOUSE SENSITIVITY
4208 Gamers like high resolution mice, but this can be painful for precisely
4209 positioning the mouse on a timeline or video screen.  XFree86 once
4210 allowed you to reduce PS/2 mouse sensitivity using commands like
4211 @b{xset m 1 1} but you're out of luck with USB mice or KVM's.
4213 We have a way to reduce USB mouse sensitivity.  Edit
4214 @b{/usr/src/linux/drivers/input/mousedev.c}.  
4216 After the line saying 
4218 @example
4219 struct mousedev_list @{
4220 @end example
4225 @example
4226 #define DOWNSAMPLE_N 100
4227 #define DOWNSAMPLE_D 350
4228 int x_accum, y_accum;
4229 @end example
4231 Next, the section which says something like:
4233 @example
4234 case EV_REL:
4235         switch (code) @{
4236                 case REL_X:     list->dx += value; break;
4237                 case REL_Y:     list->dy -= value; break;
4238                 case REL_WHEEL: if (list->mode) list->dz -= value; break;
4239         @}
4240         break;
4241 @end example
4243 must be replaced by
4245 @example
4247 case EV_REL:
4248         switch (code) @{
4249                 case REL_X:     
4250                         list->x_accum += value * DOWNSAMPLE_N;
4251                         list->dx += (int)list->x_accum / (int)DOWNSAMPLE_D;
4252                         list->x_accum -= ((int)list->x_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
4253                         break;
4254                 case REL_Y:     
4255                         list->y_accum += value * DOWNSAMPLE_N;
4256                         list->dy -= (int)list->y_accum / (int)DOWNSAMPLE_D;
4257                         list->y_accum -= ((int)list->y_accum / (int)DOWNSAMPLE_D) * (int)DOWNSAMPLE_D;
4258                         break;
4259                 case REL_WHEEL: if (list->mode) list->dz -= value; break;
4260         @}
4261         break;
4265 @end example
4267 Change the value of @b{DOWNSAMPLE_N} to change the mouse sensitivity.
4276 @node ASSORTED X TWEEKS
4277 @section ASSORTED X TWEEKS
4280 XFree86 by default can't display Cinelerra's advanced pixmap rendering
4281 very fast.  The X server stalls during list box drawing.  Fix this by
4282 adding a line to your XF86Config* files.
4284 In the @b{Section "Device"} area, add a line saying:
4286 @b{Option "XaaNoOffscreenPixmaps"}
4288 and restart the X server.
4292 Screen blanking is really annoying, unless you're fabulously rich and
4293 can afford to leave your monitor on 24 hours a day without power saving
4294 mode.  In @b{/etc/X11/xinit/xinitrc} put 
4296 @example
4297 xset s off
4298 xset s noblank
4299 @end example
4301 before the first @b{if} statement.
4303 How about those windows keys which no Linux distribution even thinks to
4304 use.  You can make the window keys provide ALT functionality by editing
4305 @b{/etc/X11/Xmodmap}.  Append the following to it.
4307 @example
4308 keycode 115 = Hyper_L
4309 keycode 116 = Hyper_R
4310 add mod4 = Hyper_L
4311 add mod5 = Hyper_R
4312 @end example
4314 The actual changes to a window manager to make it recognize window keys
4315 for ALT are complex.  In @b{FVWM} at least, you can edit
4316 @b{/etc/X11/fvwm/system.fvwm2rc} and put
4318 @example
4319 Mouse 0 T A move-and-raise-or-raiselower
4320 #Mouse 0 W M move
4321 Mouse 0 W 4 move
4322 Mouse 0 W 5 move
4323 Mouse 0 F A resize-or-raiselower
4324 Mouse 0 S A resize-or-raiselower
4325 @end example
4327 in place of the default section for moving and resizing.  Your best
4328 performance is going to be on FVWM.  Other window managers seem to slow
4329 down video with extra event trapping and aren't as efficient in layout.
4341 @node SPEEDING UP THE FILE SYSTEM
4342 @section SPEEDING UP THE FILE SYSTEM
4344 You'll often store video on an expensive, gigantic disk array separate
4345 from your boot disk.  You'll thus have to manually install an EXT
4346 filesystem on this disk array, using the @b{mke2fs} command.  By far
4347 the fastest file system is 
4349 @example
4351 mke2fs -i 65536 -b 4096 my_device
4352 tune2fs -r0 -c10000 my_device
4354 @end example
4356 This has no journaling, reserves as few blocks as possible for
4357 filenames, and accesses the largest amount of data per block possible.
4358 A slightly slower file system, which is easier to recover after power
4359 failures is
4361 @example
4363 mke2fs -j -i 65536 -b 4096 my_device
4364 tune2fs -r0 -c10000 my_device
4366 @end example
4368 This adds a journal which slows down the writes but makes us immune to
4369 power failures.
4377 @node IMPROVING ZORAN VIDEO
4378 @section IMPROVING ZORAN VIDEO
4380 Video recorded from the ZORAN inputs is normally unaligned or not
4381 completely encoded on the right.  This can be slightly compensated by
4382 adjusting parameters in the driver sourcecode.
4384 In @b{/usr/src/linux/drivers/media/video/zr36067.c} the structures
4385 defined near line 623 affect alignment.  At least for NTSC, the 2.4.20
4386 version of the driver could be improved by changing 
4388 @example
4389 static struct tvnorm f60ccir601 = @{ 858, 720, 57, 788, 525, 480, 16 @};
4390 @end example
4394 @example
4395 static struct tvnorm f60ccir601 = @{ 858, 720, 57, 788, 525, 480, 17 @};
4396 @end example
4399 In @b{/usr/src/linux/drivers/media/video/bt819.c} more structures near
4400 line 76 affect alignment and encoding.
4402 For NTSC 
4404 @example
4405 @{858 - 24, 2, 523, 1, 0x00f8, 0x0000@},
4406 @end example
4408 could be changed to 
4409 @example
4410 @{868 - 24, 2, 523, 1, 0x00f8, 0x0000@},
4411 @end example
4413 Adjusting these parameters may or may not improve your picture.  More
4414 of the time, they'll cause the driver to lock up before capturing
4415 the first frame.
4424 @node TROUBLESHOOTING
4425 @chapter TROUBLESHOOTING
4428 @menu
4429 * BUZ DRIVER CRASHES::
4430 * DRAGGING IN AND OUT POINTS DOESN'T WORK::
4431 * SYNCHRONIZATION LOST WHILE RECORDING::
4432 @end menu
4434 @node BUZ DRIVER CRASHES
4435 @section BUZ DRIVER CRASHES
4437 First, Zoran capture boards must be accessed using the @b{Buz} video
4438 driver in @b{Preferences->Recording} and @b{Preferences->Playback}. 
4439 Some performance tweeks are available in another section. 
4440 @xref{IMPROVING PERFORMANCE}.
4442 Once tweeked, the Buz driver seems to crash if the number of recording
4443 buffers is too high.  Make sure @b{Preferences->Recording->Frames to
4444 buffer in device} is below 10.
4447 @node DRAGGING IN AND OUT POINTS DOESN'T WORK
4448 @section DRAGGING IN AND OUT POINTS DOESN'T WORK
4451 Sometimes there will be two edits really close together.  The point
4452 selected for dragging may be next to the indended edit on an edit too
4453 small to see at the current zoom level.  Zoom in horizontally.
4457 @node SYNCHRONIZATION LOST WHILE RECORDING
4458 @section SYNCHRONIZATION LOST WHILE RECORDING
4460 If the framerate of the recording is much lower than the framerate of
4461 the source, the video will accumulate in the recording buffers over
4462 time while the audio and video are well out of sync.  Decrease the
4463 @b{number of frames to buffer in the device} in
4464 @b{preferences->recording} so the excess frames are dropped instead of
4465 buffered.
4471 @node SECRETS OF CINELERRA
4472 @chapter SECRETS OF CINELERRA
4475 @menu
4476 * DOLBY PRO LOGIC ENCODING::
4477 * ANALOG TV CLEANING::
4478 * DEFEATING INTERLACING::
4479 * MAKING VIDEO LOOK LIKE FILM::
4480 * CLEARING OUT HAZE::
4481 @end menu
4484 @node DOLBY PRO LOGIC ENCODING
4485 @section DOLBY PRO LOGIC ENCODING
4487 Dolby pro logic is an easy way to output 6 channel audio from a 2
4488 channel soundcard with degraded but useful results.  Rudimentary Dolby
4489 pro logic encoding can be achieved with clever usage of the effects.
4491 Create 2 audio tracks with the same audio.  Apply @b{invert audio} to
4492 one track.  The signal comes out of the back speakers.
4494 Create a single audio track with monaural audio of a different source. 
4495 Center it in the @b{pan} control.  The signal comes out of the center
4496 speaker.
4498 Create other tracks with different signals and pan them left or right
4499 to put signals in the front left or right speaker.
4501 Finally, if a copy of the signal in the back speakers is desired in any
4502 single front speaker, the signal in the back speakers must be delayed
4503 by at least 0.05 seconds and a single new track should be created.  Pan
4504 the new track to orient the signal in the front speakers.
4506 If the same signal is desired in all the speakers except the center
4507 speaker, delay the back speakers by 0.5 seconds and delay either the
4508 front left or front right by 0.2 seconds.
4510 If you want to hear something from the subwoofer, create a new track,
4511 select a range, drop a synthesizer effect, and set the frequency below
4512 60 Hz.  The subwoofer merely plays anything below around 60Hz.
4514 Other tricks you can perform to separate the speakers are parametric
4515 equalization to play only selected ranges of frequencies through
4516 different speakers and lowpass filtering to play signals through the
4517 subwoofer.
4522 @node ANALOG TV CLEANING
4523 @section ANALOG TV CLEANING
4526 Unless you live in a rich nation like China or are a terrorist, you
4527 probably record analog TV more than you record digital TV.  The picture
4528 quality on analog TV is horrible but you can do things in Cinelerra to
4529 make it look more like it did in the studio.
4531 First, when capturing the video, capture it in the highest resolution
4532 possible.  For Europeans it's 720x576 and for Americans it's 720x480. 
4533 Don't bother adjusting the brightness or contrast in the recording
4534 monitor, although maxing out the color is useful.  Capture it using
4535 MJPEG or uncompressed Component Video if possible.  If those are too
4536 demanding, then capture it using JPEG.  RGB should be a last resort.
4538 Now on the timeline use @b{Settings->Format} to set a YUV colorspace. 
4539 Drop a @b{Downsample} effect on the footage.  Set it for 
4541 @example
4542 Horizontal:        2
4543 Horizontal offset: 0
4544 Vertical:          2
4545 Vertical offset:   0
4547       red
4548   x   green
4549   x   blue
4550       alpha
4551 @end example
4553 Use the camera tool to shift the picture up or down a line to remove
4554 the most color interference from the image.  This is the difference
4555 we're looking for:
4557 @sp 1
4559 @image{cleaning1}
4561 If you have vertical blanking information or crawls which constantly
4562 change in each frame, block them out with the @b{Mask} tool.  This
4563 improves compression ratios.
4565 This is about all you can do without destroying more data than you
4566 would naturally lose in compression.  The more invasive cleaning
4567 techniques involve deinterlacing.
4573 @node DEFEATING INTERLACING
4574 @section DEFEATING INTERLACING
4577 Interlacing is done on most video sources because it costs too much to
4578 build progressive scanning cameras and progressive scanning CRT's. 
4579 Many a consumer has been dissapointed to spend 5 paychecks on a
4580 camcorder and discover what horrible jagged images it produces on a
4581 computer monitor.
4583 As for progressive scanning camcorders, forget it.  Cost factors are
4584 probably going to keep progressive scanning cameras from ever equalling
4585 the spatial resolution of interlaced cameras.  Interlacing is here to
4586 stay.  That's why they made deinterlacing effects in Cinelerra.
4588 We don't believe there has ever been a perfect deinterlacing effect. 
4589 They're either irreversible or don't work.  Cinelerra cuts down the
4590 middle by providing deinterlacing tools that are irreversible sometimes
4591 and don't work sometimes but are neither one or the other.
4593 @b{Line Doubling}
4595 This one is done by the @b{Deinterlace} effect when set to @b{Odd
4596 lines} or @b{Even lines}.  When applied to a track it reduces the
4597 vertical resolution by 1/2 and gives you progressive frames with
4598 stairstepping.  This is only useful when followed by a scale effect
4599 which reduces the image to half its size.
4601 @b{Line averaging}
4603 The @b{Deinterlace} effect when set to @b{Average even lines} or
4604 @b{Average odd lines} does exactly what line doubling does except
4605 instead of making straight copies of the lines it makes averages of the
4606 lines.  This is actually useful for all scaling.
4608 There's an option for adaptive line averaging which selects which lines
4609 to line average and which lines to leave interlaced based on the
4610 difference between the lines.  It doesn't work.
4612 @b{Inverse Telecine}
4614 This is the most effective deinterlacing tool when the footage is an
4615 NTSC TV broadcast of a film.  @xref{INVERSE TELECINE}.
4618 @b{Time base correction}
4620 The first three tools either destroy footage irreversibly or don't work
4621 sometimes.  @b{Time base correction} is last because it's the perfect
4622 deinterlacing tool.  It leaves the footage intact.  It doesn't reduce
4623 resolution, perceptually at least.  It doesn't cause jittery timing.
4625 The @b{Frames to Fields} effect converts each frame to two frames, so
4626 it must be used on a timeline whose project frame rate is twice the
4627 footage's frame rate.  In the first frame it puts a line averaged copy
4628 of the even lines.  In the second frame it puts a line averaged copy of
4629 the odd lines.  When played back at full framerates it gives the
4630 illusion of progressive video with no loss of detail.
4632 Best of all, this effect can be reversed with the @b{Fields to frames}
4633 nonrealtime effect.  That one combines two frames of footage back into
4634 the one original interlaced frame of half the framerate.
4636 Unfortunately, the output of @b{Frames to Fields} can't be compressed
4637 as efficiently as the original because it introduces vertical twitter
4638 and a super high framerate.
4640 Interlaced 29.97fps footage can be made to look like film by applying
4641 @b{Frames to Fields} and then reducing the project frame rate of the
4642 resulting 59.94fps footage to 23.97fps.  This produces no timing jitter
4643 and the occasional odd field gives the illusion of more detail than
4644 there would be if you just line averaged the original.
4651 @node MAKING VIDEO LOOK LIKE FILM
4652 @section MAKING VIDEO LOOK LIKE FILM
4657 Video sweetening is constantly getting better.  Lately the best thing
4658 you can do for dirt cheap consumer camcorder video is to turn it into
4659 progressive 24fps output.  While you can't really do that, you can get
4660 pretty close for the money.  Mind you, this procedure can degrade high
4661 quality video just as easily as it improves low quality video.  It
4662 should only be used for low quality video.
4664 @itemize
4666 @item
4668 Step 1 - Set project framerate to twice the video framerate.
4670 @item
4672 Step 2 - Apply a @b{Sharpen} effect.  Set it to sharpness: 25, no
4673 interlacing, and horizontal only.
4675 @item
4677 Step 3 - Drop a @b{Frame to Fields} effect on the same track.  Set
4678 Average Empty Rows on and play through the video a few times to figure
4679 out which field is first.  If the wrong field is first, the motion is
4680 shaky.  Secondly, any editing in the doubled frame rate may now screw
4681 up the field order.  We're still figuring out the easiest way to
4682 support warnings for field glitches but for now you need to go back to
4683 the normal framerate to do editing or play test to make sure the fields
4684 are right.
4687 @item
4689 Step 4 - Render just the video to the highest quality file possible.
4691 @item
4693 Step 5 - Import the video back to a new track.  Set the project
4694 framerate to 24.  The new track should now display more filmish and
4695 sharper images than the original footage.
4697 @end itemize
4699 This entire procedure could be implemented in one nonrealtime effect,
4700 but the biggest problem with that is you'll most often want to keep the
4701 field based output and the 24fps output for posterity.  A nonrealtime
4702 effect would require all that processing just for the 24fps copy. 
4703 Still debating that one.
4713 @node CLEARING OUT HAZE
4714 @section CLEARING OUT HAZE
4716 Let's face it, if you're employed you live in Silicon Valley.  As such
4717 you probably photograph a lot of haze and never see blue sky ever. 
4718 Even if you can afford to briefly go somewhere where there is blue sky,
4719 horizon shots usually can stand for more depth.  This is what the
4720 @b{gradient effect} is for.
4722 Drop the gradient effect on hazy tracks.  Set the following parameters:
4724 @example
4725 Angle: 0
4726 Inner radius: 0
4727 Outer radius: 40
4728 Inner color: blue 100% alpha
4729 Outer color: blue 0% alpha
4730 @end example
4732 It's important to set the 0% alpha color to blue even though it's 0%
4733 alpha.  This is a generally applicable setting for the gradient.  Some
4734 scenes may work better with orange or brown for an evening feel.
4744 @node EFFECT DESCRIPTIONS
4745 @chapter EFFECT DESCRIPTIONS
4747 Most effects in Cinelerra can be figured out just by using them and
4748 tweeking.  Here are brief descriptions of effects which you might not
4749 utilize fully by mere experimentation.
4752 @menu
4753 * CHROMA KEY::        How to make areas transparent based on color.
4754 * DEINTERLACE::       How to convert interlaced video to progressive video.
4755 * HISTOGRAM::         How to change the mapping of different brightness values.
4756 * INVERSE TELECINE::  How to convert pulled down frames to progressive frames.
4757 * TIME AVERAGE::      How to add trail patterns or increase still image quality.
4758 * TITLER::            How to add text to a track from inside Cinelerra.
4759 * VIDEO SCOPE::       How to view the dynamic range of intensity and hue.
4760 @end menu
4766 @node CHROMA KEY
4767 @section CHROMA KEY
4770 This effect replaces the selected color or intensity with black if
4771 there is no alpha channel and replaces it with transparency if there is
4772 an alpha channel.  The selection of color model is important.
4774 Chroma key uses either the value or the hue to determine what is
4775 erased.  If this parameter is within a certain threshold it's erased. 
4776 It's not a simple on/off switch, however.  As the selected parameter
4777 approaches the edge of the threshold, it gradually gets erased if the
4778 slope is low or is completely erased if the slope is high.
4780 The slope tries to soften the edges of the chroma key but it doesn't
4781 work well for compressed sources.  A popular softening technique is to
4782 use a maximum slope and chain a blur effect below the chroma key effect
4783 to blur just the alpha.
4789 @node DEINTERLACE
4790 @section DEINTERLACE
4792 The deinterlace effect has evolved over the years to deinterlacing and
4793 a whole lot more.  In fact two of the deinterlacing methods, @b{Inverse
4794 Telecine} and @b{Frames to Fields}, are separate effects.  The
4795 deinterlace effect offers several variations of line replication to
4796 eliminate comb artifacts in interlaced video.  It also has some line
4797 swapping tools to fix improperly captured video or make the result of a
4798 reverse effect display fields in the right order.
4804 @node HISTOGRAM
4805 @section HISTOGRAM
4808 This shows the number of occurances of each value of a certain color
4809 channel.  It is always performed in 16 bit RGB regardless of the
4810 project colorspace.  Use the upper gradient to determine the range of
4811 input intensities to be expanded to the output.  Use the lower gradient
4812 to determine the range of output intensities to target the expansion
4813 to.  Enable @emph{automatic} mode to have the histogram calculate
4814 automatic input values for every frame.  The threshold is only used in
4815 automatic mode and determines how sensitive to the upper and lower
4816 boundaries of the histogram the automatic gain should be.
4822 @node INVERSE TELECINE
4823 @section INVERSE TELECINE
4825 This is the most effective deinterlacing tool when the footage is a
4826 video transfer of a film.  Here the film was converted from 24fps to
4827 60fps.  Then the 60fps was downsampled to 30fps by extracting odd and
4828 even lines and interlacing the lines.  The IVTC effect is primarily a
4829 way to convert interlaced video to progressive video.  It undoes three
4830 patterns of interlacing.
4832 @example
4833   A AB BC CD D
4834   AB CD CD DE EF
4835   Automatic
4836 @end example
4838 The first two options are fixed patterns and affected by the @b{pattern
4839 offset} and @b{odd field first} parameters.  The last option creates
4840 several combinations of lines for each frame and picks the most
4841 progressive combination.  It's a brute force algorithm.
4843 This technique doesn't rely on a pattern like other techniques and is
4844 less destructive but the timing is going to be jittery because of the
4845 lack of a frame rate reduction.
4857 @node TIME AVERAGE
4858 @section TIME AVERAGE
4860 Time average is one effect which has many uses besides creating nifty
4861 trail patterns of moving objects.  It's main use is reducing noise in
4862 still images.  Merely point a video camera at a stationary subject for
4863 30 frames, capture the frames, and average them using TIME AVERAGE and
4864 you'll have a super high quality print.  In 16 bit colormodels, time
4865 average can increase the dynamic range of lousy cameras.
4868 @node TITLER
4869 @section TITLER
4871 While it is possible to add text to movies by importing still images
4872 from The Gimp and compositing them, the Titler allows you to add text
4873 from within Cinelerra.  
4875 The titler has standard options for @b{font, size, and style}.  The
4876 best font is a generic, normal font like Arial in a large size.
4878 The titler also has options you'll only find in moving pictures.  The
4879 @b{Justify} operation justifies the text relative to the entire frame. 
4880 Once justified, the @b{X and Y} offset is applied.  This allows text to
4881 be justified while at the same time letting you push it within the
4882 title safe region.
4884 The @b{motion type} scrolls the text in any of the four directions. 
4885 When using this, the text may dissappear.  Move the insertion point
4886 along the timeline until the text is far enough along the animation to
4887 reappear.  The text scrolls on and scrolls off.
4889 Setting @b{loop} causes the text to scroll completely off and repeat. 
4890 Without @b{loop} the text scrolls off and never reappears.
4892 The speed of the animation is determined by @b{speed}  Set it higher to
4893 speed up the animation.
4895 @b{Drop shadow} draws a black copy of the text to the bottom right of
4896 the original text.  Useful when drawing text over changing video to
4897 keep the border always visible.
4899 In addition to the scrolling, @b{Fade in/Fade out} are a second type of
4900 animation.  If the fade seconds are 0, no fading is done.
4902 @b{Color} picks the color to draw the text in.  Usually white is the
4903 only practical color.
4905 @b{Stamp timecode} replaces the text with the current position on the
4906 timeline in seconds and frames.
4908 @menu
4909 * ADDING FONTS TO THE TITLER:: How to add fonts to the titler
4910 * THE TITLE-SAFE REGION::      How to keep text visible on output
4911 @end menu
4913 @node ADDING FONTS TO THE TITLER
4914 @subsection ADDING FONTS TO THE TITLER
4916 The X Window system originally didn't have a suitable font renderer for
4917 video.  It also is restricted to the current bit depth.  It doesn't
4918 have a convenient way to know which fonts work with the suitable font
4919 renderer in the desired bit depth.  The easiest way we've found to
4920 support fonts in the titler is to have a directory for them at
4921 @b{/usr/lib/cinelerra/fonts}.
4923 The titler supports mainly @b{TTF}, true type fonts.  It supports
4924 others but TTF are the most reliable.  To add true type fonts, copy the
4925 @b{.TTF} files to the @b{/usr/lib/cinelerra/fonts} directory.  In that
4926 directory run @b{ttmkfdir > fonts.dir} and restart Cinelerra.  The new
4927 fonts should appear.
4930 @node THE TITLE-SAFE REGION
4931 @subsection THE TITLE-SAFE REGION
4933 If the video is displayed on a consumer TV, the outer border is going
4934 to be cropped by 5% on each side.  Moreover, text which is too close to
4935 the edge looks sloppy.  Make sure when added titles to have the
4936 @b{title-safe} @image{titlesafe} tool active in the @b{compositor} window.
4937 The text shouldn't cross the inner rectangle.
4947 @node VIDEO SCOPE
4948 @section VIDEO SCOPE
4950 The video scope plots two views of the image.  One view plots the
4951 intensity of each pixel against horizontal position.  They call this
4952 the WAVEFORM.  Another view translates hue to angle and saturation to
4953 radius for each pixel.  They call this the VECTORSCOPE.
4955 The vectorscope is actually very useful for determining if an image is
4956 saturated.  When adjusting saturation, it's important to watch the
4957 vectorscope to make sure pixels don't extend past the 100 radius.
4959 The waveform allows you to make sure image data extends from complete
4960 black to complete white while adjusting the brightness/contrast.
4962 Some thought is being given to having a video scope for recording. 
4963 Unfortunately, this would require a lot of variations of the video
4964 scope for all the different video drivers.
4970 @node PLUGIN AUTHORING
4971 @chapter PLUGIN AUTHORING
4973 The plugin API in Cinelerra dates back to 1997, before the LADSPA and
4974 before VST became popular.  It's fundamentally the same as it was in
4975 1997, with minor modifications to handle keyframes and GUI feedback. 
4976 Unfortunately, the GUI is not abstracted from the programmer.  This
4977 allows the programmer to use whatever toolkit they want and allows more
4978 flexibility in appearance but it costs more.
4980 There are several types of plugins, each with a common procedure of
4981 implementation and specific changes for that particular type.  The
4982 easiest way to implement a plugin is to take the simplest existing one
4983 out of the group and rename the symbols.  
4985 @menu
4986 * COMMON PROCEDURES::
4987 * REALTIME PLUGINS::
4988 * NONREALTIME PLUGINS::
4989 * AUDIO PLUGINS::
4990 * VIDEO PLUGINS::
4991 * TRANSITION PLUGINS::
4992 * PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK::
4993 * PLUGIN QUERIES::
4994 @end menu
4997 @node COMMON PROCEDURES
4998 @section COMMON PROCEDURES
5000 All plugins inherit from a derivative of PluginClient.  This derivative
5001 implements most of the required methods in PluginClient, but users must
5002 still define methods for PluginClient.  The most commonly used methods
5003 are already implemented in macros.
5005 The files they include depend on the plugin type.  Audio plugins
5006 include @b{pluginaclient.h} and video plugins include
5007 @b{pluginvclient.h}.  They inherit @b{PluginAClient} and
5008 @b{PluginVClient} respectively.
5010 Another thing all plugins do is define at least three objects:
5012 @itemize
5014 @item
5016 Processing object - Contains pointers to all the other objects and
5017 performs the signal processing.  This object contains a number of
5018 queries to identify itself and is the object you register to register
5019 the plugin.
5022 @item
5024 User interface object - This is defined according to the programmer's
5025 discretion.  It can either use Cinelerra's toolkit or another toolkit. 
5026 It shows data on the screen and collects parameters from the user.
5028 Using Cinelerra's toolkit, the only user interface object a developer
5029 needs to worry about is the Window.  The window has pointers to a
5030 number of widgets, a few initialization methods, and a back pointer to
5031 the plugin's processing object.  The documentation refers to usage of
5032 Cinelerra's toolkit.
5034 Depending on the user interface toolkit, a user interface thread may be
5035 created to run the user interface asynchronous of everything else. 
5036 Synchronizing the user interface to changes in keyframes is the most
5037 complicated aspect of the plugin, so the user interface thread and
5038 object are heavily supported by macros if you use Cinelerra's toolkit.
5041 @item
5043 Configuration object - This stores the user parameters and always needs
5044 interpolation, copying, and comparison functions.  The plugin client
5045 automatically calls configuration methods to interpolate keyframes.
5047 @end itemize
5049 @menu
5050 * THE PROCESSING OBJECT::
5051 * THE CONFIGURATION OBJECT::
5052 * THE USER INTERFACE OBJECT::
5053 @end menu
5057 @node THE PROCESSING OBJECT
5058 @subsection THE PROCESSING OBJECT
5060 The processing object should inherit from the intended PluginClient
5061 derivative.  Its constructor should take a PluginServer argument.
5063 @example
5064 MyPlugin(PluginServer *server);
5065 @end example
5067 In the implementation, the plugin must contain a registration line with
5068 the name of the processing object like
5070 @example
5071 REGISTER_PLUGIN(MyPlugin)
5072 @end example
5075 The constructor should contain 
5077 @example
5078 PLUGIN_CONSTRUCTOR_MACRO
5079 @end example
5081 to initialize the most common variables.
5084 The processing object should have a destructor containing
5086 @example
5087 PLUGIN_DESTRUCTOR_MACRO
5088 @end example
5090 to delete the most common variables.
5092 Another function which is useful but not mandatory is
5094 @example
5095 int is_multichannel();
5096 @end example
5098 It should return 1 if one instance of the plugin handles multiple
5099 channels simultaneously or 0 if one instance of the plugin only handles
5100 one channel.  The default is 0 if it is omitted.  Multichannel plugins
5101 should refer to the value of @b{PluginClient::total_in_buffers} to
5102 determine the number of channels.
5107 To simplify the implementation of realtime plugins, a macro for
5108 commonly used members should be put in the class header, taking the
5109 configuration object and user interface thread object as arguments. 
5110 This is only useful for realtime plugins.  Fortunately, nonrealtime
5111 plugins are simpler.
5113 @example
5114 PLUGIN_CLASS_MEMBERS(config_name, thread_name)
5115 @end example
5117 Many other members may be defined in the processing object, depending
5118 on the plugin type.  The commonly used members in PLUGIN_CLASS_MEMBERS
5119 are described below.  Not all these members are used in nonrealtime
5120 plugins.
5122 @itemize
5124 @item
5125 int load_configuration();
5127 Loads the configuration based on surrounding keyframes and current
5128 position.  The class definition should contain 
5130 @example
5131 LOAD_CONFIGURATION_MACRO(plugin_class, config_class)
5132 @end example
5134 to implement load_configuration.  This stores whatever the current
5135 configuration is inside the plugin's configuration object.  The
5136 plugin's configuration object is always called @b{config} when using
5137 PLUGIN_CLASS_MEMBERS.
5139 @item
5140 VFrame* new_picon();
5142 Creates a picon for display in the resource window.  Use
5144 @example
5145 #include "picon_png.h"
5146 NEW_PICON_MACRO(plugin_class)
5147 @end example
5149 to implement new_picon.  In addition, the user should create a
5150 @emph{picon_png.h} header file from a PNG image using @emph{pngtoh}. 
5151 @emph{pngtoh} is compiled in the @emph{guicast/ARCH} directory.
5153 The source PNG image should be called picon.png and can be any format
5154 supported by PNG.
5156 @item
5157 char* plugin_title();
5159 Returns a text string identifying the plugin in the resource window. 
5160 The string has to be unique.
5163 @item
5164 void update_gui(); 
5166 Should first load the configuration and then redraw the GUI with the
5167 new parameters.  All the plugins using GuiCast have a format like
5169 @example
5170 void MyPlugin::update_gui()
5172         if(thread)
5173         @{
5174                 load_configuration();
5175                 thread->window->lock_window();
5176 // update widgets here
5177                 thread->window->unlock_window();
5178         @}
5180 @end example
5182 to handle concurrency and conditions of no GUI.
5184 @item
5185 int show_gui();
5187 Instantiate the GUI and switch the plugin to GUI mode.  This is implemented with
5189 @example
5190 SHOW_GUI_MACRO(plugin_class, thread_class)
5191 @end example
5193 @item
5194 int set_string();
5196 Changes the title of the GUI window to a certain string.  This is implemented with
5198 @example
5199 SET_STRING_MACRO(plugin_class)
5200 @end example
5203 @item
5204 void raise_window();
5206 Raises the GUI window to the top of the stack.  This is implemented with
5208 @example
5209 RAISE_WINDOW_MACRO(plugin_class)
5210 @end example
5214 @end itemize
5222 @node THE CONFIGURATION OBJECT
5223 @subsection THE CONFIGURATION OBJECT
5225 The configuration object is critical for GUI updates, signal
5226 processing, and default settings in realtime plugins.  Be aware it is
5227 not used in nonrealtime plugins.  The configuration object inherits
5228 from nothing and has no dependancies.  It's merely a class containing
5229 three functions and variables specific to the plugin's parameters.
5231 Usually the configuration object starts with the name of the plugin
5232 followed by Config.
5234 @example
5235 class MyPluginConfig
5237 public:
5238         MyPluginConfig();
5239 @end example
5242 Following the name of the configuration class, we put the three
5243 required functions and the configuration variables.
5245 @example
5246         int equivalent(MyPluginConfig &that);
5247         void copy_from(MyPluginConfig &that);
5248         void interpolate(MyPluginConfig &prev, 
5249                 MyPluginConfig &next, 
5250                 int64_t prev_position, 
5251                 int64_t next_position, 
5252                 int64_t current_position);
5256         float parameter1;
5257         float parameter2;
5258         int parameter3;
5261 @end example
5264 Now you must define the three functions.  @b{Equivalent} is called by
5265 LOAD_CONFIGURATION_MACRO to get the return value.  That is all it's
5266 used for and if you don't care about load_configuration's return value,
5267 you can leave this function empty.  It normally returns 1 if the
5268 argument's variables have the same values as the local variables.
5270 Then there's @b{copy_from} which transfers the configuration values
5271 from the argument to the local variables.  This is once again used in
5272 LOAD_CONFIGURATION_MACRO to store configurations in temporaries.  Once 
5273 LOAD_CONFIGURATION_MACRO has replicated the configuration, it loads a
5274 second configuration.  Then it interpolates the two configurations to
5275 get the current configuration.  The interpolation function performs the
5276 interpolation and stores the result in the local variables.
5278 Normally the interpolate function calculates a previous and next
5279 fraction, using the arguments.
5281 @example
5282 void MyPluginConfig::interpolate(MyPluginConfig &prev, 
5283                 MyPluginConfig &next, 
5284                 int64_t prev_position, 
5285                 int64_t next_position, 
5286                 int64_t current_position)
5288         double next_scale = (double)(current_position - prev_position) / (next_position - prev_position);
5289         double prev_scale = (double)(next_position - current_position) / (next_position - prev_position);
5290 @end example
5292 Then the scales are applied to the previous and next configuration
5293 object to yield the current values.
5295 @example
5297         this->parameter1 = (float)(prev.parameter1 * prev_scale + next.parameter1 * next_scale);
5298         this->parameter2 = (float)(prev.parameter2 * prev_scale + next.parameter2 * next_scale);
5299         this->parameter3 = (int)(prev.parameter3 * prev_scale + next.parameter3 * next_scale);
5302 @end example
5304 Alternatively you can copy the values from the previous configuration
5305 argument for no interpolation.
5307 This usage is the same in audio and video plugins.  In video playback,
5308 the interpolation function is called for every frame, yielding smooth
5309 interpolation.  In audio playback, the interpolation function is called
5310 only once for every console fragment and once every time the insertion
5311 point moves.  This is good enough for updating the GUI while selecting
5312 regions on the timeline but it may not be accurate enough for really
5313 smooth rendering of the effect.
5315 For really smooth rendering of audio, you can still use
5316 load_configuration when updating the GUI.  For process_realtime;
5317 however, ignore load_configuration and write your own interpolation
5318 routine which loads all the keyframes in a console fragment and
5319 interpolates every sample.  This would be really slow and hard to
5320 debug, yielding improvement which may not be audible.  Then of course,
5321 every century has its set of wierdos.
5323 An easier way to get smoother interpolation is to reduce the console
5324 fragment to 1 sample.  This would have to be rendered and played back
5325 in a separate program of course.  The Linux sound driver can't play
5326 fragments of 1 sample.
5335 @node THE USER INTERFACE OBJECT
5336 @subsection THE USER INTERFACE OBJECT
5339 The user interface object at the very least consists of a pointer to a
5340 window and pointers to a set of widgets.  Using Cinelerra's toolkit, it
5341 consists of a @b{BCWindow} derivative and a @b{Thread} derivative.  The
5342 Thread derivative is declared in the plugin header using
5344 @example
5345 PLUGIN_THREAD_HEADER(plugin_class, thread_class, window_class)
5346 @end example
5348 Then it is defined using
5350 @example
5351 PLUGIN_THREAD_OBJECT(plugin_class, thread_class, window_class)
5352 @end example
5354 This in combination with the SHOW_GUI macro does all the work in
5355 instantiating the Window class.  This is used in realtime plugins but
5356 not in nonrealtime plugins.  Nonrealtime plugins create and destroy
5357 their GUI in @b{get_parameters} and there's no thread.
5359 Now the window class must be declared in the plugin header.  It's
5360 easiest to implement the window by copying an existing plugin and
5361 renaming the symbols.  The following is an outline of what happens. 
5362 The plugin header must declare the window's constructor using the
5363 appropriate arguments.
5365 @example
5367 #include "guicast.h"
5369 class MyPluginWindow : public BC_Window
5371 public:
5372         MyPluginWindow(MyPluginMain *plugin, int x, int y);
5374 @end example
5376 This becomes a window on the screen, positioned at x and y.
5378 It needs two methods
5380 @example
5381         int create_objects();
5382         int close_event();
5383 @end example
5385 and a back pointer to the plugin
5387 @example
5388         MyPlugin *plugin;
5389 @end example
5392 The constructor's definition should contain extents and flags causing
5393 the window to be hidden when first created.  The create_objects member
5394 puts widgets in the window according to GuiCast's syntax.  A pointer to
5395 each widget which is to be synchronized to a keyframe is stored in the
5396 window class.  These are updated in the @b{update_gui} function you
5397 earlier defined for the plugin.  The widgets are usually derivatives of
5398 a GuiCast widget and they override functions in GuiCast to handle
5399 events.  Finally create_objects calls 
5401 @example
5402         show_window();
5403         flush();
5404 @end example
5406 to make the window appear all at once.
5408 The close_event member should be implemented using
5410 @example
5411 WINDOW_CLOSE_EVENT(window_class)
5412 @end example
5414 Every widget in the GUI needs to detect when its value changes.  In
5415 GuiCast the @b{handle_event} method is called whenever the value
5416 changes.  In @b{handle_event}, the widget then needs to call
5417 @b{plugin->send_configure_change()} to propogate the change to rendering.
5427 @node REALTIME PLUGINS
5428 @section REALTIME PLUGINS
5430 Realtime plugins should use PLUGIN_CLASS_MEMBERS to define the basic
5431 set of members in their headers.  All realtime plugins must define an
5433 @example
5434 int is_realtime()
5435 @end example
5437 member returning 1.  This causes a number of realtime methods to be
5438 called during playback and the plugin to be droppable on the timeline.
5440 Realtime plugins must define a member called
5442 @example
5443 process_realtime 
5444 @end example
5446 to be called during every audio fragment and video frame.  It has an
5447 input and an output argument and for audio, a size argument.  The
5448 process_realtime function should start by calling
5449 @b{load_configuration}.  The LOAD_CONFIGURATION_MACRO returns 1 if the
5450 configuration changed.  Then process_realtime should move the data from
5451 the input to the output with processing.
5455 Additional members are implemented to maintain configuration in
5456 realtime plugins.  Some of these are also needed in nonrealtime
5457 plugins.
5459 @itemize
5460 @item
5461 void read_data(KeyFrame *keyframe);
5463 Loads data from a keyframe into the plugin's configuration.  Inside the
5464 keyframe is an XML string.  It's most easily parsed by creating a
5465 @emph{FileXML} object.  See an existing plugin to see how the read_data
5466 function is implemented.
5468 Read data loads data out of the XML object and stores values in the
5469 plugin's configuration object.
5471 @item
5472 void save_data(KeyFrame *keyframe);
5474 Saves data from the plugin's configuration to a keyframe.  Inside the
5475 keyframe you'll put an XML string which is normally created by a
5476 FileXML object.  See an existing plugin to see how the save_data
5477 function is implemented.
5479 Save data saves data from the plugin's configuration object into the
5480 XML object.
5482 @item
5483 int load_defaults();
5485 Another way the plugin gets parameters is from a defaults file.  The
5486 load and save defaults routines use a Defaults object to parse the
5487 defaults file.  The defaults object is created in @b{load_defaults} and
5488 destroyed in the plugin's destructor.  See an existing plugin to see
5489 how the Defaults object is used.
5491 @item
5492 int save_defaults();
5494 Saves the configuration in the defaults object.
5496 @end itemize
5503 @node NONREALTIME PLUGINS
5504 @section NONREALTIME PLUGINS
5506 Like realtime plugins, @b{load_defaults} and @b{save_defaults} must be
5507 implemented.  In nonrealtime plugins, these are not just used for
5508 default parameters but to transfer values from the user interface to
5509 the signal processor.  There doesn't need to be a configuration class
5510 in nonrealtime plugins.
5512 Unlike realtime plugins, the LOAD_CONFIGURATION_MACRO can't be used in
5513 the plugin header.  Instead, the following methods must be defined.
5515 The nonrealtime plugin should contain a pointer to a defaults object.
5517 @example
5519 Defaults *defaults;
5521 @end example
5523 It should also have a pointer to a MainProgressBar.
5525 @example
5527 MainProgressBar *progress;
5528 @end example
5530 The progress pointer allows nonrealtime plugins to display their
5531 progress in Cinelerra's main window.
5533 The constructor for a nonrealtime plugin can't use
5534 PLUGIN_CONSTRUCTOR_MACRO but must call @b{load_defaults} directly.
5536 The destructor, likewise, must call @b{save_defaults} and @b{delete
5537 defaults} directly instead of PLUGIN_DESTRUCTOR_MACRO.
5539 @itemize
5541 @item
5542 VFrame* new_picon();
5544 char* plugin_title();
5546 The usage of these is the same as realtime plugins.
5548 @item
5549 int is_realtime();
5551 This function must return 0 to indicate a nonrealtime plugin.
5553 @item
5555 int get_parameters();
5557 Here, the user should create a GUI, wait for the user to hit an OK
5558 button or a cancel button, and store the parameters in plugin
5559 variables.  This routine must return 0 for success and 1 for failure. 
5560 This way the user can cancel the effect from the GUI.
5562 Unlike the realtime plugin, this GUI need not run asynchronously of the
5563 plugin.  It should block the get_parameters function until the user
5564 selects OK or Cancel.
5566 @item
5567 int load_defaults();
5569 This should create a defaults object and load parameters from the
5570 defaults object into plugin variables.
5572 @item
5573 int save_defaults();
5575 This should save plugin variables to the defaults object.
5578 @item
5579 int start_loop();
5581 If @b{get_parameters} returned 0 for success, this is called once to
5582 give the plugin a chance to initialize processing.  The plugin should
5583 instantiate the progress object with a line like
5585 @example
5587 progress = start_progress("MyPlugin progress...", 
5588         PluginClient::end - PluginClient::start);
5590 @end example
5592 The usage of @b{start_progress} depends on whether the plugin is
5593 multichannel or single channel.  If it's multichannel you always call
5594 start_progress.  If it's single channel, you first need to know whether
5595 the progress bar has already started in another instance of the plugin.
5597 If @b{PluginClient::interactive} is 1, you need to start the progress
5598 bar.  If it's 0, the progress bar has already been started.
5600 The PluginClient defines @b{end} and @b{start} for the timeline range
5601 to be processed.  The units are either samples or frames.
5603 @item
5604 int process_loop
5606 This is called repeatedly until the timeline range is processed.  It
5607 takes either a samples or frames buffer and a reference to
5608 write_length.  The arguments are a location and length for the output
5609 if it's audio.
5611 The plugin must use @b{read_samples} or @b{read_frame} to read the
5612 input.  These functions take a buffer and a position relative to the
5613 start of the timeline.  Then it must process it and put the output in
5614 the arguments to process_loop.  write_length should contain the number
5615 of samples generated if it's audio.
5617 Finally, process_loop must test @b{PluginClient::interactive} and
5618 update the progress bar if it's 1.
5620 @example
5621 progress->update(total_written);
5622 @end example
5624 returns 1 or 0 if the progress bar was cancelled.  If it's 1,
5625 process_loop should return 1 to indicate a cancellation.  In addition
5626 to progress bar cancellation, @b{process_loop} should return 1 when the
5627 entire timeline range is processed.
5629 @item
5630 int stop_loop();
5632 This is called after process_loop processes its last buffer.  
5634 If PluginClient::is_interactive is 1, this should call
5635 @b{stop_progress} in the progress bar pointer and delete the pointer. 
5636 Then it should delete any objects it created for processing in
5637 @b{start_loop}.
5640 @end itemize
5644 @node AUDIO PLUGINS
5645 @section AUDIO PLUGINS
5647 The simplest audio plugin is Gain.  The processing object should
5648 include @b{pluginaclient.h} and inherit from @b{PluginAClient}.  Realtime audio plugins need to
5649 define 
5651 @example
5652 int process_realtime(int64_t size, 
5653                 double **input_ptr, 
5654                 double **output_ptr);
5655 @end example
5657 if it's multichannel or 
5659 @example
5660 int process_realtime(int64_t size, 
5661                 double *input_ptr, 
5662                 double *output_ptr);
5663 @end example
5665 if it's single channel.  These should return the number of samples
5666 generated.  In the future, the number of samples return value will
5667 synchronize plugins which delay audio.
5669 Nonrealtime audio plugins need to define
5671 @example
5672 int process_loop(double *buffer, int64_t &write_length);
5673 @end example
5675 for single channel or
5677 @example
5678 int process_loop(double **buffers, int64_t &write_length);
5679 @end example
5681 for multi channel.
5684 @node VIDEO PLUGINS
5685 @section VIDEO PLUGINS
5690 The simplest video plugin is Flip.  The processing object should
5691 include @b{pluginvclient.h} and inherit from @b{PluginVClient}. 
5692 Realtime video plugins need to define 
5694 @example
5695 int process_realtime(VFrame **input, 
5696                 VFrame **output);
5697 @end example
5699 if it's multichannel or 
5701 @example
5702 int process_realtime(VFrame *input, 
5703                 VFrame *output);
5704 @end example
5706 if it's single channel.  They only get one frame per call but should  
5707 return the number of frames generated anyway.  In the future, the
5708 number of frames return value will synchronize plugins which delay
5709 video.
5711 The nonrealtime video plugins need to define
5713 @example
5714 int process_loop(VFrame *buffer);
5715 @end example
5717 for single channel or
5719 @example
5720 int process_loop(VFrame **buffers);
5721 @end example
5723 for multi channel.  They're always assumed to have a write length of 1
5724 when they return 0.
5728 @node TRANSITION PLUGINS
5729 @section TRANSITION PLUGINS
5734 The simplest video transition is @b{dissolve} and the simplest audio
5735 transition is @b{crossfade}.   These work identical to the single
5736 channel, realtime audio and video plugins.  The only difference is the
5737 addition of an @b{is_transition} method to the processing object. 
5738 @b{is_transition} should return 1.
5740 Routines exist for determining where you are relative to the
5741 transition's start and end.
5743 @itemize
5745 @item @b{PluginClient::get_source_position()} - returns an integer
5746 position since the start of the transition
5748 @item @b{PluginClient::get_total_len()} - returns the integer length of
5749 the transition.  The units are either samples or frames.
5751 @end itemize
5754 Users should divide source position by total length to get the fraction
5755 of the transition the current @b{process_realtime} function starts
5758 Secondly, the meaning of the input and output arguments to
5759 @b{process_realtime} is different for transitions than for realtime
5760 plugins.
5762 The first argument to process_realtime is the data for the next edit. 
5763 The second argument to process_realtime is the data for the previous
5764 edit.  Eventually the second argument becomes the output.
5770 @node PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK
5771 @section PLUGIN GUI'S WHICH UPDATE DURING PLAYBACK
5773 Effects like @b{Histogram} and @b{VideoScope} need to update the GUI
5774 during playback to display information about the signal.  This is
5775 achieved with the @b{send_render_gui} and @b{render_gui} methods. 
5776 Normally in process_realtime, when the processing object wants to
5777 update the GUI it should call @b{send_render_gui}.  This should only be
5778 called in process_realtime.  Send_render_gui goes through a search and
5779 eventually calls @b{render_gui} in the GUI instance of the plugin.
5781 Render_gui should have a sequence like
5783 @example
5784 void MyPlugin::render_gui(void *data)
5786         if(thread)
5787         @{
5788                 thread->window->lock_window();
5790 // update GUI here
5792                 thread->window->unlock_window();
5793         @}
5796 @end example
5799 The sequence uses one argument, a void pointer to transfer information
5800 from the renderer to the GUI.  The user should typecast this pointer
5801 into something useful.
5805 @node PLUGIN QUERIES
5806 @section PLUGIN QUERIES
5808 There are several useful queries in PluginClient which can be accessed
5809 from the processing object.  Some of them have different meaning in
5810 realtime and non-realtime mode.  They all give information about the
5811 operating system or the project.
5813 @itemize
5816 @item
5818 @b{int PluginClient::get_project_smp()} Gives the number of CPU's on
5819 the system minus 1.  If it's a uniprocessor it's 0.  If it's a dual
5820 processor, it's 1.  This number should be used to gain any parallelism.
5823 @item
5825 @b{double PluginClient::get_project_framerate()} Gives the frames per
5826 second of the video.
5829 @item
5831 @b{int PluginClient::get_project_samplerate()} Gives the samples per
5832 second of the audio.
5834 @end itemize
5842 @node RELEASE NOTES
5843 @chapter RELEASE NOTES
5845 @itemize
5847 @b{1.0.0}
5849 @example
5851 First release since Broadcast 2000 migration.
5853 @end example
5856 @b{1.1.0}
5859 @example
5861 Titler fonts installed by rpm.
5862 XMovie decodes ac3 according to redesigned liba52 channel mappings.
5863 Quicktime MPEG4 parameters debugged.
5864 Background rendering over a renderfarm.
5865 Renderfarm clients automatically reduced to idle priority.
5866 Better MJPA decoding on single processors.
5867 Better title functionality in 16 bit colormodels.
5868 Undo for effect keyframes.
5869 Effect GUI's cleared during undo for effect attachment.
5870 Fewer lockups on startup.
5871 Proper keyframe interpolation in scale effect.
5872 Stamp timecode in titler.
5873 Memory leaks in rendering stages removed.
5874 Removed legacy plugin server code.
5875 Option to generate sequence header in every GOP for MPEG2.
5876 LADSPA support.
5877 Listbox doesn't enter drag_icon state when dragging column division.
5878 Effect rendering bug fixed.
5879 64 bit mpeg transport stream seeking beyond 2 gigs.
5880 More accurate mask drawing when projector is zoomed.
5881 Clear labels updates CWindow
5882 More accurate YUV/RGB conversions.
5883 Import partial tgas
5884 Copy keyframes doesn't copy default keyframe.
5885 Track highlighting offset by vertical scroll.
5886 Multiple video scope, spectrogram, and histogram displays may be opened.
5887 HutSaturation in YUV colorspaces.
5888 Undo for masks.
5889 Shared synthesis effects cause the sharing tracks to 
5890 play back instead of just the owning track.
5891 Quicktime recovery utility improved.
5892 Single frame recording with multiple batches doesn't crash.
5893 DV encoding.
5894 New video effects:
5895 gradient, downsample video, radial blur, linear blur, zoom blur,
5896 histogram, perspective.
5898 New audio effect:
5899 Sound level
5903 @end example
5907 @b{1.1.5}
5911 @example
5913 More options for the ffmpeg/MPEG-4 codecs.
5914 Histogram works on SMP.
5915 Better 16 bit alpha blending.
5916 BRender path updates from preferences.
5917 Separate preroll for background rendering and rendering.
5918 Deinterlace by averaging lines 0 and 2 or 1 and 3 to get intervening lines.
5919 Adaptive deinterlace.
5920 Frame per second statistics in renderfarm are more reliable.
5921 Select and slide in the patchbay.
5922 Video scope can be resized.
5923 Effect keyframes pasted in right positions more often.
5924 Selective denoising of video based on color channel.
5925 More mouse wheel bindings in MainWindow and ListBox.
5926 Ctrl-w closes effect windows.
5927 Perspective doesn't crash when switching from stretch to sheer.
5928 Better text list searching and keyboard navigation.
5929 Better Vorbis decoding after a pause.
5930 Close recording without recording anything doesn't crash.
5931 Save backup now option.
5932 OpenGL not required anymore.
5933 Time format changes update the selection textboxes more often.
5934 MPEG-4 deblocking option in XMovie and Cinelerra.
5935 Resize in Record GUI doesn't screw it up.
5936 Better export of YUVA16161616 to Component Y'CbCr 10-bit 4:4:4.
5937 Better import of Component Y'CbCr 10-bit 4:4:4 to RGB colorspaces.
5939 @end example
5943 @b{1.1.6}
5946 @example
5948 Create fade keyframe inadverdently drags bezier handle less often.
5949 Float autos don't draw on right edge of timeline when keyframes are beyond right edge.
5950 Better float auto creation.
5951 Add track anywhere in timeline through track popup.
5952 Shared track references are automatically reconfigured after deleting or adding tracks.
5953 Libmpeg3: Better decoding of field-based MPEG video.
5954 Channels can be moved up or down in the Channel picker properly.
5955 Better handling of the long delay in deleting files without overflowing the recording buffers.
5956 Deinterlace really swaps fields instead of just saying it.
5957 Two line swapping combinations in deinterlace.
5958 Better listbox row sizing.
5959 Downsample offset.
5960 Faster window creation.
5961 Splash screen while you wait for it to start up.
5962 File deletion occurs before opening the driver instead of
5963         after opening the driver for recording.
5964 Changing sample rate of WAV file in Asset window works.
5965 JPEG stills get saved with proper dimensions.
5966 Migrated to RedHat 8.0.
5967  - e2fsprogs-devel is needed to compile the background render object.
5968 Fewer crashes due to OpenDivx global variables getting overwritten.
5969 Paste silence and clipboards also shifts effect keyframes properly.
5970 More checks for circular references in shared effects and shared tracks.
5971 Tracking during audio playback without video doesn't run past edge of loop boundaries.
5972 Better keyframing in Titler.
5973 Multiple language encodings in Titler.
5974 Undo of replace project after an effect works.
5975 Frame -> field conversion does line averaging and pixel shifting.
5976 Field -> frame conversion uses pixel shifting.
5977 Negative cursor selection is frame aligned.
5978 Documentation on video cleaning and deinterlacing tools.
5979 Buttons repositioned properly when filebox is resized vertically.
5980 Fade automation is more accurate.
5981 CWindow and VWindow slider position is less erratic after the window is resized.
5982 Timebars with regions track the playback position.
5983 More workarounds for buz driver lockups.
5984 Dragging the cursor on the timebar off the edges scrolls the timeline.
5985 IVTC uses luminance only in YUV colorspaces to improve accuracy.
5986 Quicktime: Tighter audio synchronization when encoding Quicktime with Vorbis audio.
5987 Start of audio effects is more accurate.
5988 Better IEEE1394 playback of video only.
5989 More IEEE1394 playback options.
5991 @end example
5993 @end itemize
5996 @bye