remove file ogg/vorbis
authorGood Guy <[email protected]>
Sat, 2 Feb 2019 20:52:10 +0000 (13:52 -0700)
committerGood Guy <[email protected]>
Sat, 2 Feb 2019 20:52:10 +0000 (13:52 -0700)
Makefile clean tweak
fixes shuttle focus/99rules file
ydiff ffmpeg tweak
upgrade fftw,opus,ogg,vorbis,tiff,x265,openjpeg
add vcodecs av1,webp
new options files: av1,webp,jp2
delete old CHANGELOGS

60 files changed:
cinelerra-5.1/cinelerra/CHANGELOG [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.1.1.7 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.1.1.8 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.1.1.9 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.1.2.0 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.1.2.1 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.1.2.2 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.1.2.3 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.2.1 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.2.2 [deleted file]
cinelerra-5.1/cinelerra/CHANGELOG.4 [deleted file]
cinelerra-5.1/cinelerra/Makefile
cinelerra-5.1/cinelerra/asset.C
cinelerra-5.1/cinelerra/asset.h
cinelerra-5.1/cinelerra/file.C
cinelerra-5.1/cinelerra/file.inc
cinelerra-5.1/cinelerra/fileogg.C [deleted file]
cinelerra-5.1/cinelerra/fileogg.h [deleted file]
cinelerra-5.1/cinelerra/filevorbis.C [deleted file]
cinelerra-5.1/cinelerra/filevorbis.h [deleted file]
cinelerra-5.1/cinelerra/filevorbis.inc [deleted file]
cinelerra-5.1/cinelerra/formatpopup.C
cinelerra-5.1/cinelerra/shuttle.C
cinelerra-5.1/cinelerra/shuttle.h
cinelerra-5.1/cinelerra/ydiff.C
cinelerra-5.1/configure.ac
cinelerra-5.1/doc/99-ShuttlePRO.rules
cinelerra-5.1/doc/Makefile
cinelerra-5.1/ffmpeg/video/av1.webm [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/bmp.bmp
cinelerra-5.1/ffmpeg/video/jp2.jp2 [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/pam.pam
cinelerra-5.1/ffmpeg/video/pbm.pbm
cinelerra-5.1/ffmpeg/video/pcx.pcx
cinelerra-5.1/ffmpeg/video/pgm.pgm
cinelerra-5.1/ffmpeg/video/pgmyuv.pgmyuv
cinelerra-5.1/ffmpeg/video/png.png
cinelerra-5.1/ffmpeg/video/ppm.ppm
cinelerra-5.1/ffmpeg/video/sgi.sgi
cinelerra-5.1/ffmpeg/video/tiff.tiff
cinelerra-5.1/ffmpeg/video/tiff48.tiff
cinelerra-5.1/ffmpeg/video/webp.dfl [new file with mode: 0644]
cinelerra-5.1/ffmpeg/video/webp.webp [new file with mode: 0644]
cinelerra-5.1/thirdparty/Makefile
cinelerra-5.1/thirdparty/downloads.txt
cinelerra-5.1/thirdparty/src/fftw-3.3.7.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/fftw-3.3.8.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libaom-v1.0.0.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libogg-1.3.2.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/libogg-1.3.3.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libvorbis-1.3.5.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/libvorbis-1.3.6.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/libwebp-1.0.2.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/openjpeg-2.3.0.tar.xz
cinelerra-5.1/thirdparty/src/opus-1.2.1.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/opus-1.3.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/tiff-4.0.10.tar.xz [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/tiff-4.0.9.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/x265_2.9.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/x265_3.0.tar.xz [new file with mode: 0644]

diff --git a/cinelerra-5.1/cinelerra/CHANGELOG b/cinelerra-5.1/cinelerra/CHANGELOG
deleted file mode 100644 (file)
index 2637a5d..0000000
+++ /dev/null
@@ -1,1365 +0,0 @@
-11/7/01
-
-Mask feathering and value implemented.  Crash bug in
-CWindowMaskGUI::get_keyframe fixed.
-
-
-
-
-
-11/22/01
-
-Removed memory leak in VirtualConsole.  Another case of base destructor
-calling base methods only.
-
-Time average finally implemented. Deinterlace implemented.
-
-Translation in screencapture recording implemented.
-
-AVI parameter editing box.
-
-Drag and drop of assets during an index build doesn't lock up.
-Dragging mixtures of audio and video works better.  Better handling of
-shared effects which are off.
-
-Batches can be moved up and down the list.
-
-
-
-
-
-12/6/01
-
-OpenDIVX debugging:
-
-Fixed bugs in decore2: *run = *last = -1; was not copied over from
-encore50.
-
-Rewrote bitstream parser in encore2 and decore2 to be more reliable.
-
-Disabled MMX due to crashes in Redhat 7.2.
-
-Discovered decore2 can't do P frames so switched back to decore50.
-
-Renamed header files, symbols to all
-in the same program.
-
-Renamed more symbols in mpeg2enc to coexist with opendivx.
-
-To make encore2 work on 64 bit processors:
-
-Typecasted offsets in CompensateBlock and get_ref to (int)
-
-Decore50 still not functional on 64 bit processors.
-
-
-
-
-Implemeneted PNG list output.  Debugged list output and input.
-
-Configuration dialog for OpenDivx in Cinelerra migrated from encore50
-to encore2.
-
-Configuration dialog for Vorbis and Vorbis export to Quicktime.
-
-Can use shift-R to render.
-
-DV encoding implemented.  The last libdv library only supported MMX and
-B&W.
-
-
-
-
-12/16/01
-
-Moved all OpenDivx support to the encore50 derivative of the encoder.
-This appears to do everything that the encore2 derivative could do at
-equal or lesser reliability.
-
-Changed bmp argument for decore50 to 3 member array.  Added quant
-argument which, when set to nonzero, fixes the quantization.  OpenDivx
-with fixed quantization looks 33% better than MPEG-2.
-
-Direct copy rendering for OpenDivx so output of the renderfarm can be
-direct copied into a single file.
-
-Moved all theme support into a plugin.  Resources are no longer
-compiled in but concatenated to the binaries.  This made compilation
-take less time and should theoretically allow more themes to be
-supported without increasing resident set size.
-
-Made ports specific to each render node instead of global.  This way
-multiple Cinelerra clients can run on the same box without violating
-the single thread requirement of new libraries.
-
-Cinelerra daemon forks to background.  Made assets export more
-compression parameters to render nodes.
-
-Vorbis decoding in Quicktime without seeking.  The encoding is probably
-not going to change anymore but Vorbis doesn't appear seekable.  No-one
-is going to use OpenDivx and Vorbis without an endorsement from
-Microsoft anyway.
-
-
-
-
-
-
-
-12/22/01
-
-Seeking support for Quicktime/Vorbis.  Support for Vorbis on 64 bit
-processors.  Further debugging of Divx.  Quality of 6 yields errors in
-output.  Quality of 5 seems to be the maximum.  Changed fourcc from
-VBIS to OggS for vorbis.
-
-To make Vorbis work on 64 bit processors:
-
-change sizeof(int) to sizeof(int*) in lib/floor1.c: 263
-
-Menu effects can paste into the timeline.
-
-Changes in label handling when pasting resources.
-
-Statusbar and zoombar resizing restored.
-
-Implemented code to move plugin sets up and down a level.
-
-Improved table of contents support for libmpeg3.  This scans every byte
-of the mpeg files and records the location of every keyframe and every
-sample of audio.  The table of contents can then be loaded by
-Cinelerra, allowing frame accurate editing from mpeg source material.
-
-A memory allocation bug in the Linux kernel crashes the system when
-using mpeg3toc on DVD's so forget about transcoding Starwars on a
-render farm.  Don't know who discovered that either.
-
-
-
-
-
-
-
-12/28/01
-
-Ignored the warnings and set -ieee for all files in quicktime to fix
-floating point exceptions.  This made it twice as slow but it worked.
-
-Floating point exceptions in the following places were fixable with
-certain changes:
-
-vorbis_lpc_predict    ->  A return statement before anything is done.
-bark_noise_pointmp    ->  noise[i] could be set to 0
-bark_noise_hybridmp   ->  noise[i] could be set to 0
-
-Defining VORBIS_IEEE_FLOAT32 seemed to fix mapping0 crashes so the
-preceeding changes were backed out.
-
-Loading XML files with multiple video tracks works better.
-
-Linux 2.4.17 handles DVD table of contents operations better but
-crashes after 5 hours of reading a DVD.  You'll have to reboot often to
-control memory corruption.
-
-
-
-
-
-
-
-1/4/02
-
-Credit for official Microsoft software even though there isn't any
-official Microsoft software.
-
-Records to DV again but not under kernels after 2.4.7.
-
-New audio effects:
-Tone generator
-Reverse audio
-Delay audio
-
-3rd attempt to improve main window scrollbars.
-
-
-
-
-
-
-1/11/02
-
-New video effects:
-Delay video
-Reverse video
-Swap channels
-
-New audio effects:
-Denoise
-Parametric EQ using fast fourier transform.  This isn't standard but
-it gives real gaussian curves.
-Spectrogram
-Time stretch
-Resample
-Pitch shift
-
-Frequency table expanded in Units.  This uses real 1/3 octave steps.
-
-Flipped U and V in opendivx encoder so it conforms to YUV order on
-disk.
-
-Reconfiguration during audio rendering reenabled.
-
-Constitutive reconfiguration for video turned off.  This was used to
-debug the memory leaks.
-
-Icon for Normalize.  Tone generator improvement.
-
-
-
-
-
-1/18/02
-
-New audio effects:
-Compressor
-
-
-New video effects:
-Denoise
-Frame to field conversion
-Field to frame conversion
-Reframe
-
-Video denoise uses the average of an arbitrary number of previous
-frames to predict what the value for the next frame should be.  This
-can also be used as a threshold effect or a time average.
-
-Optimized time average.
-
-
-
-
-1/25/02
-
-Plugin keyframes loaded from XML.
-Correct rendering of plugin keyframes.  Some plugins interpolate.
-Most plugin GUI's update when insertion point is moved among keyframes.
-Plugin keyframes draw when created.
-Cursor jumps to plugin keyframes when selected.
-Samplerate adjustable in all media info windows.
-Samplerate and framerate adjustments not overridden when loaded in an EDL.
-Improved fade automation rendering.
-
-New video effects:
-Oil painting
-Whirl/pinch
-Polar
-Rotation
-Waves
-Waveform/Vectorscope
-Hue/Saturation
-YUV adjustment
-Invert video
-
-New audio effect:
-Invert audio
-
-
-
-
-
-
-
-2/1/02
-
-Progress windows really cancel instead of just letting you press the
-button.
-Status bar shows how long something took when it finishes.
-Removed Send and Recieve options from effects.  It was never needed and it
-complicated the use of variable track sizes.
-
-First stage of making width and height specific to tracks and renamed
-projector size to canvas size.
-More interpolation for effects.
-Second stage of titler.
-
-
-
-
-
-
-2/8/02
-Pasting effect keyframes works better.
-Improved extension and contraction of effects during clear and paste.
-Automation for more effects.
-Effect keyframe behavior is more predictable.
-For a good time enable auto keyframes and type stuff into the titler while playing back.
-Clearing VFrames clears the alpha too.
-Added a tests directory and stored some test EDLs.
-Blur can selectively blur single channels
-Effects can be attached to tracks with no data via a popup menu finally.
-Plugin GUI's are more often updated when tracks are deleted.
-
-Final stage of titling implementation.
-Chromakey and lumakey
-
-
-
-2/15/02
-Effects more accurately follow edits while cutting and pasting.
-More accurate keyframing in effects.
-Video Transitions restored.
-Audio transitions enabled.
-Transition length inputted in seconds.
-Stepped up the number of previous files displayed.
-Option to disable tracks when no edits was removed.  The VConsole automatically
-detects when effects synthesize material.
-Independant track sizes can now be changed with a popup menu.
-Renderfarm more accurately calculates balanced loads.
-Disabled avifile to reduce the debugging noise.
-Removed memory leak from Quicktime MPEG-4 decoder.
-Slightly optimized resource window updates after loading.
-
-Linux 2.4.17 crashes probably because Cinelerra moves too much memory
-around.  We disabled kswapd by putting a return 0; in
-/usr/src/linux/mm/vmscan.c.  The operating system seems more stable now.
-
-Enabled deletion of assets and clips from the project.  Also can delete
-assets from disk.
-Rebuild indices should handle multiple indices if selected.
-
-Rectangle selection in asset window.  The heroine background was
-lightened but mind you, the heroine background is a permanent feature.
-
-Latest seeking issue fixed in libmpeg3.  Looking for ways to shift
-audio based on the pts.
-Compositor window tumblers work better.
-More verbose overlays for camera, projector, and output regions, making
-it easier to visualize the compositing pipeline.
-Easier to use magnifying glass.
-Middle mouse button dragging in CWindow works.
-
-
-new video transitions:
-bandslide
-bandwipe
-slide
-wipe
-irissquare
-
-
-
-
-
-
-
-2/22/02
-
-Implemented another MPEG-2 bitrate control algorithm.  YUV 4:2:2 MPEG-2
-in fixed bitrate modes above 7000000 is recommended for DV footage for
-now.
-
-Assets and effects are now sortable in the Resource window.  Text
-displays aren't corrupted as much.
-
-Certain EDL load operations honor the labels follow edits setting and
-certain load operations insert labels constitutively.
-
-Width and height of tracks load properly.  Adjustments to track width
-and height render more often.
-
-Playback automation always restored from undos.
-
-Improved tracking when every frame is played.  Smooth scrolling during
-playback is now supported.
-
-Right mouse button doesn't activate selection rectangles anymore.
-AVIFile disabled since it doesn't support GCC 3.0 anymore.
-More reliable reading of individual image files.
-More accurate rendering of fade automation.
-More accurate tracking during playback.
-Deinterlace with average works.
-Certain edit operations from CWindow don't lock up the MWindow anymore.
-CWindow scrollbars updatge after loading.
-Track canvas after In/Out point dragging is properly refreshed.
-Cursor motion over keyframes doesn't force rendering as often.
-
-
-
-
-
-
-3/1/02
-
-In/Out clearing crashes less and works better.
-
-Removed IPC modeled semaphores.  Now no IPC stubs are left after a crash.
-
-Rendering nodes and recording batches can be individually toggled.
-
-Buz driver refurbished.  No longer requires kernel hacks to change channels.
-
-Motion JPEG compression library debugged further.  Less corruption.
-
-Playback through Buz driver enabled.  Now adjust color correction and see
-it on a monitor.
-
-Playback of video through Firewire implemented.  Still not functional.
-
-YUV 4:2:0 Planar -> YUV 4:2:2 Planar color conversion
-
-Renderengine retools the playback configuration for every command instead of
-every EDL change.
-
-Integrated IA-32 assembly language jpeg library.
-
-
-
-
-
-
-
-3/15/02
-
-Enabled assembly language routines in jpeg library.  Added swap fields
-option to Buz output driver.
-
-YUV overlay reenabled.  Only works on commercial NVidia drivers.
-
-Libmpeg3 reads transport streams again.
-
-Dissolve debugged further.
-
-Moving out guicast images.  Implementing defaulttheme and microtheme.
-
-
-
-
-
-
-
-
-
-
-
-
-3/22/02
-
-Consolidated audio and video settings into a format dialog.
-Made XVideo a separate driver.
-Continued improvements of defaulttheme.
-Draws MWindow BG and copies top background instead of several MWindow drawing calls.
-
-
-
-
-
-
-
-
-
-
-
-
-
-4/5/02
-
-Re-enabled configurable preloading in Quicktime since moov atoms larger
-than 2 M were setting the preload too high.
-
-Frame to field copies two fields into the output instead of line
-doubling one field.
-
-Tightened synchronization during recording startup.
-
-CWindow and VWindow timebars implemented.
-Timebars in CWindow and VWindow allow a region to be selected for
-previewing.
-
-Debugged configuration updates in Synthesizer and Parametric EQ.
-
-Extra redundancies in the jpeg library enabled to get IA-32 assembly
-working.
-
-Time average is absolute.
-
-Keybindings and icons for In/Out points changed.
-
-Bezier keyframes less than 10 frames apart don't freeze the CWindow.
-
-Clearing puts the cursor at the in point when using in/out points.
-
-Camera translation from the exact top of a frame to less than the full
-height really translates instead of squishing.
-
-Reenabled background_pixmap in TrackCanvas to allow faster overlay drawing.
-
-Loading non-XML files doesn't change the output width and height
-anymore.  This allows VWindow to change sources without reverting the
-output size.
-
-Loop region loads right.
-
-Pan images aren't corrupted anymore.
-
-Clips created when no region is selected take the entire EDL now.
-
-Parametric EQ reenabled.
-
-Shared effects work again when deleted.
-
-Multiple effects per effect row load properly again.
-
-Jumping to next and prev label from CWindow doesn't lock up when playing back.
-
-Instead of synchronizing the absolute position of each fader, the gang
-option now changes the relative position of each fader.
-
-Slider tooltips always update before being shown instead of showing
-obsolete data.
-
-Got rid of next record label in RecordGUI. Labels set while recording
-are finally inserted in the timeline.  The 'l' key triggers a label
-when recording.
-
-Busy wait removed from repeater finally.
-Prepared settings menu for addition of plugin editing option.
-
-Began first stage of Microsoft AVI importer for Quicktime.
-
-
-
-
-
-
-4/19/02
-
-AVI decoding of official Microsoft MPEG-4 and mp3.
-Second debugging pass for BC_Repeater.
-23.976 framerate put in place of 24.976 framerate.
-Synthesizer locks up less.
-Libmpeg3 needs only 1 include path instead of 5000.
-MPEG audio decoding 75% reimplemented for use in Quicktime.
-AC3 reimplemented using liba52.
-The mpeg3_layer_t structure handles mp2 and mp3 decoding separate
-from libmpeg3 on a frame basis.
-The mpeg3_ac3_t structure handles ac3 decoding on a frame basis.
-The mpeg3_pcm_t handles pcm decoding.  PCM is repacketized by the demuxer.
-
-Zoombar clamps more selection values.
-
-
-
-
-
-
-5/3/02
-
-Microsoft MPEG-4 and MP3 encoding in Quicktime, AVI edition.
-       100% Readable by Cinelerra and Xine but not by Microsoft.
-       Either audio or video plays back in Windows but not both.
-Several Quicktime frame rates changed to double.
-CWindow scrollbars updated on startup.
-Another pass through scrollbar appearance.
-New option to make effects follow edits.
-Preview range updated more often in CWindow.
-Another pass through listbox appearance.
-Track cursor redrawn more frequently.
-XMovie merged with new theme.
-MPEG audio debugging pass 1.
-Got rid of AVIFile and obsolete ffmpeg copy.
-
-
-
-
-
-
-
-
-
-
-
-5/10/02
-
-Better handling of non-existent files in edit lists and renderfarms.
-Hopefully better reporting of errors with the renderfarm.
-Debugged percentage seeking in mpeg3audio.
-Vorbis rc3 doesn't encode without crashing.  Downgraded to vorbis rc2.
-JPEG exporting in AVI.
-More codec checking in AVI and Quicktime export.
-Paste assets from AWindow doesn't lock up as much.
-Faders not visible in the patchbay should now be gangable.
-Debugged YUV compositing algorithms.
-New RGBA -> YUV 16 bit conversions.
-Selecting labels during playback in CWindow doesn't lock up.
-Rewind and end in CWindow and VWindow do something again.
-Playing from the VWindow after loading from XML doesn't crash as much.
-Localsession needs to initialize everything in its constructor.
-Paste from one samplerate to another isn't corrupted as much.  Samplerate conversion in paste_edls.
-
-MICROSOFT mouse wheel adjusts all scrollbars, sliders, pots, and
-tumblers, perfect for fine adjustments and zooming.  In CWindow and
-VWindow it performs frame advance.
-
-Mix2000 update for mouse wheel.
-
-
-
-
-
-5/17/02
-
-Pulling the official MICROSOFT mouse wheel back zooms out the CWindow
-when using the zoom tool.
-
-Brought back the last reflection level in Heroine College Concert Hall
-since backwards reverb seems to be popular.
-
-Paste automation resampling implemented.
-
-Splice and overwrite debugged.  Paste_edls doesn't change the VWindow
-source during splice and overwrite.  Splice inserts before the in_point
-and ignores the out_point.  Overwrite erases between in_point and
-out_point.
-
-Dragging asset into VWindow updates the timebar.
-
-Shifting effect handles works better.  Disabled checks not important to
-effects.
-
-TIFF and TGA I/O with image sequences.
-
-Reenabled alpha blending.
-
-Got rid of row_table[i] reference in cmodel_permutation output subscript.
-
-Decompression of YUV 4:4:4 JPEG.
-
-
-
-
-
-
-
-6/10/02
-
-New option to disable thumbnails in AWindow.
-Shift right handle out doesn't shift keyframes before it.
-Waveform drawn more often after undo load.
-Confirmation box for quit.
-Quit really quits instead of crashing and looking like it quit.
-MP3 decoding hacks to skip JPEG images without parsing ID3 tags.
-Changing track titles redraws overlays.
-Window is renamed after replacing project.
-
-Shrank threshold in equivalency tests.  It was catching the wrong
-in/out points.
-
-Made FloatAutos store bezier curve information.
-
-Got rid of full duplex record options.  Since modern sound drivers
-allow single devices to be opened twice this is more easily done by
-starting playback on the timeline manually when recording.
-
-Plugin titles updated when track titles change.
-Create clip with just in or out point creates something of positive length.
-Create clip with no in or out point takes the entire length in VWindow.
-Labels enabled in VWindow.
-Overwrite doesn't shift effects or labels.
-Overwrite overwrites the region between in and out of in and out are different
-but overwrites its own length if in and out are identical.
-
-Shifting out point in doesn't delete transitions.
-
-Paste should extend effects when the clipboard has no effects and should
-overwrite effects when the clipboard has effects.
-
-Labels are undone during undo after paste.
-Video tracks are added to the top of the stack while audio tracks are added
-to the bottom of the stack.
-
-Dragging an effect from one track to a zero length track retains the length
-of the effect instead of crashing.
-
-Dragging an effect from the Resource Window onto a zero length track doesn't
-insert the effect on the track.
-
-
-
-
-
-
-
-6/14/02
-
-Bilinear interpolation from Broadcast 2000 migrated over.  This
-averaged more pixels than the standard bilinear interpolation we
-upgraded to in 2000.
-
-Mutual exclusion lock for liba52 since liba52 can't run two frame
-decodes simultaneously.
-
-Removed double lock from Heroine College Concert Hall.
-
-Correctly detects playable tracks more often.
-
-Bezier curves for fade and zoom.
-
-64 bit mpeg file support.  XMovie plays 64 bit mpeg files.
-
-Variable channel numbers work finally.  Audio pans adjust when channel
-count changes.
-
-DV encoding in color works slightly better but still corrupted on the
-right side.  The libdv upgrade can't decode of course.
-
-After assessing levels of interest, marketing direction, and
-experiencing a CVS erasing filesystem crash we moved forward on the
-folding of all code into a single repository.  Moved quicktime,
-libmpeg3, xmovie, mix2000, and 2 mpeg multiplexing tools into the
-cinelerra tree and renamed the one gigantic tree hvirtual.  The upside
-is Cinelerra compilation only requires exporting CFLAGS instead of
-hunting down 5 packages and exporting CFLAGS.  The downside is the one
-guy who uses Quicktime has to download a bigger package through his
-bankrupt ISP's refurbished 1998 reissued cable modem.
-
-Mind you everything except cinelerra and plugins will remain
-independant of each other.
-
-While it may work for servers ext3 isn't suitable for desktops which
-are constantly shut down and restarted.
-
-
-
-6/21/02
-
-DV decoder 0.9.5 migrated.  Not tested for error resilience yet.
-Made to_clip not copy all to the temporary clipboard so it wouldn't
-copy the child EDL's.
-Sort items put in AssetPopup.
-Plugin titles don't extend beyond background.
-Menus reposition when the window is repositioned.
-Default window positions is more accurate.
-Despike migrated to interpolated keyframes.
-Level window resets with everything else.
-Fixed detection of playable tracks error that was introduced with bezier faders.
-More often plays full audio track instead of truncating it.
-MPEG decoder supports XVideo better.
-Going to next and previous label with scrolling refreshes the compositor.
-Drawing of highlight box when dragging over the timeline is more accurate.
-Dragging one keyframe beyond another deletes the keyframe like it should.
-Bezier keyframes may work better than before.
-
-tracks->get_total_length considers keyframe length as well as edit
-length.  This allows keyframe undo for regions where no edits exist.
-
-Update undo routines can be called recursively without corrupting the
-undo table.
-Undoing and redoing keyframe adjustments works better.
-
-Bilinear reduction with alpha channels fixed.
-
-Memory leak removed from Quicktime udta.
-Kludge for 88200 samplerate in Quicktime.  Not tested.
-
-
-
-
-
-
-
-
-
-7/12/02
-
-Sharpen GUI synchronized to keyframes.
-Flip video.
-Freezeframe.
-Freeverb.
-Shift interlace.
-AWindow scrollbars calculated more accurately.
-Attach when effect is already in slot lets you change the effect.
-Faders and effect GUI's track playback.
-More frequent updating of patchbay when scrubbing.
-Pan automation works.
-Raw PCM export supports endian changes.
-All assets are saved during Save File.
-Keyframing right curves for projector zoom.
-All paste_edl operations copy all the assets.
-Camera zoom and projector zoom keyframes are properly generated from CWindow.
-Better bezier keyframe drawing in CWindow.
-Default window positions work in KDE, Gnome, and fvwm.
-
-Can grab control points in CWindow more easily if they're both against
-the left side.
-
-Large amout of unused Broadcast 2000 code removed.
-RecordGUI uses EDL aspect ratio.
-
-Grabbing control points in CWindow works better.
-Different colors for curves.
-Frame advance reverse plays the last frame in the timeline properly.
-Single frame record.
-Rendered effects handle transitions.
-
-Fewer crashes when hiding and showing effects during playback.
-More macros for plugins.
-Ganged faders are unaffected with record off.
-
-Pasting shared effects to different tracks than they were copied from
-doesn't crash but shared effect resolution will be broken.
-
-Shift key snaps curve values when dragging curves.
-
-Documentation buildout.
-
-Creating a clip in the VWindow doesn't automatically set the VWindow to
-the new clip.
-
-Changing asset sample rate works again.
-List boxes updated in AWindow after changing mode.
-Interface preferences have options for trimming.
-
-Copy added to CWindow buttons.  Cut removed from VWindow buttons.
-Copying always takes session parameters, so it works in VWindow instead
-of crashing.
-
-Audio module fragment reduced to support Linux 2.4.18.  Maximum DMA
-allocation is no longer supported in 2.4.18 so audio fragments must be
-kept below 4096.
-
-Units in freeverb changed to DB.
-
-
-
-
-
-
-
-
-
-
-7/19/02
-
-libmjpeg works on dual CPU systems finally.  Mutually excludes
-allocate_temps.  MJPEG files should crash less often.
-
-Start playback after editing doesn't have noise. Denoise mutes first window.
-
-Clear plugin GUI after attach changes it to a different plugin.
-
-DV capture migrated to Linux 2.4.18.
-
-Freezeframe works better.
-
-Concatenate tracks works more often.
-
-When dragging effects, the effect can be positioned at the start of an
-edit or at the start of a track instead of just at the start of a
-track.
-
-More accurate drawing of highlighting.
-
-ALSA driver migrated to Linux 2.4.18, alsa-0.9.0rc2.
-
-Render realtime affect doesn't crash when bringing up GUI.
-Plugin initialization takes proper buffer size.
-Resource Window starts up with nothing highlighted.
-Textboxes don't update contents if the contents are identical.
-Textboxes allow entry and have normal cursor behavior during playback.
-
-Loading with insertion modes that don't replace the project doesn't
-change the project filename.
-
-Curves aren't affected by the cursor when the track isn't armed.
-Tooltips deleted when widgets are deleted.
-start_realtime and stop_realtime removed from plugin interface.
-Memory leaks due to plugins not deleting data reduced.
-
-Must use -O3 because optimization errors prevent video from playing with -O2.
-
-Labels in CWindow don't vanish after resize to fullscreen.
-Undo for transitions.
-
-Better recording from DV camcorders.
-
-
-
-
-
-
-
-
-
-7/26/02
-
-FFT based denoiser.
-Ogg Vorbis support.
-Interpolate effect interpolates the start and end sample of a selection.
-Quicktime ported to Vorbis 1.0
-Undo detach transition.
-Fade should cut out at INFINITYGAIN.
-More accurate waveform drawing of sound files.
-Dragging end of an edit in doesn't clear the first keyframe of the next edit.
-Dragging end of an edit out shifts keyframes with it.
-AgingTV debugged.
-Changing sample rate of asset has an effect on played output.
-Reset camera and projector once again resets the zoom curve.
-U and u key for default transition.  Default transition menu item.
-VWindow remembers labels and in/out points.
-Labels updated in CWindow after undo.
-More intuitive centering on cursor after zooming.
-
-
-
-
-
-
-7/29/02
-16 bit color supported again.
-Apply button in format settings.
-Fewer crashes when toggling play and mute patches during playback.
-More locking when record updates the GUI.
-Better floating point comparison for setting labels.
-More intuitive scrollbar behavior for timeline.
-Level window updates when meter range changes.
-Waveforms drawn after window expansion.
-Background for RecordGUI.
-Preview size adjusted after in/out point dragging and silence pasting.
-More robust handling of Freetype failures in titler.
-Private font directory for titler.  Should ease renderfarm administration.
-AWindow background title updated more often.
-Drop shadow in titler.
-Compositor overlays translated more accurately when scrollbars are gone.
-Better handling of scrollbar and tumbler repeating after mousewheel is used.
-Creating a new project removes the clip reference from VWindow instead of making it crash.
-Project deletion operations while CWindow or VWindow is playing crash less often.
-Overlay modes ported to YUV colormodels.
-8 bit RGB -> 16 bit YUV importing.
-RGB601 refurbished.
-Pots debugged.  They might change value with cursor keys now.
-Bilinear scaling has better clipping for fewer crashes.
-
-
-
-
-
-
-
-
-
-
-
-8/2/02
-Titler crash with drop shadow fixed.
-Titler looping.
-Render uses in/out points if they exist.
-More accurate edges in bilinear scaling.
-Playback termination memory leak removed.
-Module calls render_stop before deleting the attachmentpoint.
-Render farm crash fixed.
-More often terminates recording when no firewire device exists instead
-of just freezing up.
-Titler doesn't interpolate any parameters.
-Old references to real_transition removed from virtual console.
-Source position in plugin client made relative to start of track.
-
-
-
-
-
-
-
-
-8/19/02
-Titler fonts installed by rpm.
-XMovie decodes ac3 according to redesigned liba52 channel mappings.
-Quicktime MPEG4 parameters debugged.
-Gradient effect.
-Background rendering over a renderfarm.
-Renderfarm clients automatically reduced to idle priority.
-Better MJPA decoding on single processors.
-Better title functionality in 16 bit colormodels.
-Undo for effect keyframes.
-Effect GUI's cleared during undo for effect attachment.
-Fewer lockups on startup.
-Proper keyframe interpolation in scale effect.
-Stamp timecode in titler.
-Memory leak in rendering stages removed.
-Removed legacy plugin server code.
-Downsample video resolution.
-Option to generate sequence header in every GOP for MPEG2.
-LADSPA support.
-Listbox doesn't enter drag_icon state when dragging column division.
-Radial, linear, and zoom blur.
-Effect rendering bug fixed.
-64 bit mpeg transport stream seeking beyond 2 gigs.
-More accurate mask drawing when projector is zoomed.
-Clear labels updates CWindow
-More accurate YUV/RGB conversions.
-Histogram.
-Perspective.
-Import partial tga's
-Copy keyframes doesn't copy default keyframe.
-Track highlighting offset by vertical scroll.
-Multiple video scope, spectrogram, and histogram displays may be opened.
-HutSaturation in YUV colorspaces.
-Undo for masks.
-
-
-
-
-10/13/02
-Interpolation of gradient keyframes
-libmpeg3 handles case where audio channel count increases in the middle of the stream
-Zoom bar redrawn more accurately when time format changes.
-More reliable quit of render nodes when master node crashes.
-Render doesn't reset brender to 0.
-Play keyframes discontinued.
-Deleting media from middle of track and pasting to end plays back.
-Persistent frame rate statistics stored in render farm.
-Flash transition.
-Undo for in and out points.
-
-
-
-10/19/02
-sync_parameters for splice, drag assets on CWindow.
-Change asset path updates brender and index file status.
-Transition drop on CWindow.
-Changing video play patch doesn't freeze brender permanently.
-Swap channels generates correct output.
-Shared synthesis effects cause the sharing tracks to
-play back instead of just the owning track.
-Quicktime recovery utility improved.
-Memory leaks in FileVorbis::check_sig and AssetPicon::create_objects removed.
- - Remove asset from disk removes it more often.
-AttachmentPoint::~AttachmentPoint deletes plugin servers.
- - For some reason they were originally deleted in render_stop but render_stop
-   was commented out of Module::~Module.
-Drag scroll working for region selections.
-Single frame recording with multiple batches doesn't crash.
-Sound Level
-DV encoding with proper color conversion.
-
-
-
-
-
-
-
-
-11/08/02
-
-More options for the ffmpeg/MPEG-4 codecs.
-Histogram works on SMP.
-Proper 16 bit alpha blending.
-BRender path updates from preferences.
-Separate preroll for background rendering and rendering.
-Deinterlace by averaging lines 0 and 2 or 1 and 3 to get intervening lines.
-Adaptive deinterlace.
-Frame per second statistics in renderfarm are more reliable.
-Select and slide in the patchbay.
-Video scope can be resized.
-Effect keyframes pasted in right positions.
-Selective denoising of video based on color channel.
-
-
-
-1/12/03
-
-More mouse wheel bindings in MainWindow and ListBox.
-Ctrl-w closes effect windows.
-Perspective doesn't crash when switching from stretch to sheer.
-Better text list searching and keyboard navigation.
-Better Vorbis decoding.
-
-
-
-2/10/03
-
-Close recording without recording anything doesn't crash.
-Save backup now option.
-OpenGL not required anymore.
-Time format changes update the selection textboxes more often.
-MPEG-4 deblocking option in XMovie.
-Resize in Record GUI.
-Export of YUVA16161616 to Component Y'CbCr 10-bit 4:4:4.
-Import of Component Y'CbCr 10-bit 4:4:4 to RGB colorspaces.
-
-
-
-
-
-
-
-
-
-2/14/03
-
-
-Create fade keyframe inadverdently drags bezier handle less often.
-Float autos don't draw on right edge of timeline when keyframes are beyond right edge.
-Better float auto creation.
-Add track anywhere in timeline through track popup.
-Shared track references are automatically reconfigured after deleting or adding tracks.
-Libmpeg3: Better decoding of field-based MPEG video.
-Channels can be moved up or down in the Channel picker properly.
-Better handling of the long delay in deleting files without overflowing the recording buffers.
-Deinterlace really swaps fields instead of just saying it.
-Two line swapping combinations in deinterlace.
-Better listbox row sizing.
-Downsample offset.
-Faster window creation.
-Splash screen while you wait for it to start up.
-File deletion occurs before opening the driver instead of
-       after opening the driver for recording.
-Changing sample rate of WAV file in Asset window works.
-JPEG stills get saved with proper dimensions.
-Migrated to RedHat 8.0.
- - e2fsprogs-devel is needed to compile the background render object.
-Fewer crashes due to OpenDivx global variables getting overwritten.
-Paste silence and clipboards also shifts effect keyframes properly.
-More checks for circular references in shared effects and shared tracks.
-Tracking during audio playback without video doesn't run past edge of loop boundaries.
-Better keyframing in Titler.
-Multiple language encodings in Titler.
-Undo of replace project after an effect works.
-Frame -> field conversion does line averaging and pixel shifting.
-Field -> frame conversion uses pixel shifting.
-Negative cursor selection is frame aligned.
-Documentation on video cleaning and deinterlacing tools.
-Buttons repositioned properly when filebox is resized vertically.
-Fade automation is more accurate.
-CWindow and VWindow slider position is less erratic after the window is resized.
-Timebars with regions track the playback position.
-More workarounds for buz driver lockups.
-Dragging the cursor on the timebar off the edges scrolls the timeline.
-IVTC uses luminance only in YUV colorspaces to improve accuracy.
-Quicktime: Tighter audio synchronization when encoding Quicktime with Vorbis audio.
-Start of audio effects is more accurate.
-Better IEEE1394 playback of video only.
-More IEEE1394 playback options.
-
-
-
-
-
-
-
-A lot of patches were rejected.  Some were accepted.  Most of these
-coding practices were done in 1997 but abandonned later because of high
-maintenance.  To save code size, the memory leak checker shouldn't flag
-single allocations as leaks and static pointers shouldn't be
-explicitely deleted on exit.
-
-
-titler-charsets.diff
-
-merged.
-
-
-cinelerra-loop-patch*
-
-The bugs in loops and audio positioning were fixed another way.
-
-
-cursor-patch.diff
-
-Too much maintenance in function indirection with no effect.
-
-Explicit declaration of the movement distance requires too much
-maintenance.  The move commands were separated for scalability reasons.
-
-
-
-mempatch-2.diff
-
-
-Units::topower was already static.  Patch has no effect and requires
-too much maintenance.
-
-
-mempatch-3.diff:
-
-DefaultTheme is intended to be replaced by a subclass of BC_Theme and
-use BC_Theme for all memory management.  No expansion of this file is
-maintainable.
-
-ArrayList::aray_delete was merged.
-
-Changes to BC_Meter, BC_Resources require too much maintainence and
-have no effect.
-
-static variables in BC_WindowBase prevent different windows in the same
-application from having different fonts.
-
-Deletion of pointers in AWindow, CWindow, VWindow, MWindow requires too
-much maintenance.
-
-Buttons in AWindow may be used in the future and should not be deleted.
-
-Buttons in editpanel may be used in the future and should not be deleted.
-
-Selections were replaced by masks.  Deleted from VTrack.
-
-
-
-
-
-
-
-mempatch-5.diff
-
-BC_NewFolderThread expansion done differently.
-BC_FileBox widget deletion already done by BC_WindowBase.  Too much code for no effect.
-BC_ProgressBar::~BC_ProgressBar() implemented.
-BC_Resources changes have no effect.
-It's already a static object and if the images were overridden, their BC_Theme class would delete the lists.
-BC_WindowBase changes were preemptively rejected.
-Canvas::~Canvas merged.
-CPanel::~CPanel already done by BC_WindowBase.  Too much code.
-CWindowGUI::~CWindowGUI mostly done by BC_WindowBase.
-MeterPanel::~MeterPanel merged
-Module::create_new_attachments merged
-StatusBar::~StatusBar already done by BC_SubWindow.
-theme.C too much code.
-VirtualConsole::~VirtualConsole introduced too many bugs.
-ZoomBar::~ZoomBar partially merged.  Mostly done by BC_SubWindow.
-DefaultTheme::DeleteVFrames is done by BC_Theme.
-title.C fonts is a static variable because it shouldn't be deleted.
-
-
-
-
-mempatch-6.diff
-BC_FileBox done differently.  Lock_window is normally used when updating a GUI from a thread.
-
-mempatch-7.diff
-VirtualConsole refurbishment was handled differently.
-
-filevorbis.C asymetric fclose patch applied.
-
-
-
-
-
-
-
-mempatch-9.diff
-
-MWindow::load_filenames memory management applied.
-Rest has no effect.
-
-mempatch-10.diff
-
-decode_lock is static because it shouldn't be deleted.
-Rest has no effect.
-
-
-
-
-
-
-
-
-
-
-
-
-5/16/03
-
-Audio and video playback through firewire.  Can't get a playable
-audio stream for the camcorder in realtime but the interface is there.
-
-Quicktime: Libraw1394 and grabbing removed.  Didn't serve any purpose
-since  playback requires a completely different mechanism than record.
-
-Quicktime, XMovie, Cinelerra: ffmpeg decoder used in MPEG-4.  This
-gives slightly faster playback but is lousy at seeking.
-
-More file writing recovery from crashes.
-
-Cinelerra: Module dereferences renderengine less often in nonrealtime
-effects where renderengine is 0.
-
-Quicktime: Importing of dvgrab and lavtools AVI files.
-Cinelerra: Hitting space rapidly doesn't lock up recording as much.
-Cinelerra: Resize Render effect window.
-Cinelerra: Changing parameters for PCM file works more often.
-
-Cinelerra: tiff upgraded to 3.1.7
-Firehose: Fixed bug in firehose reciever.
-Cinelerra: Virtual file system for renderfarm.
- - The filesystem prefix for rendering nodes was decidedly useless so it was
-discontinued.
-Cinelerra: Time stretch based on overlapping windows instead of FFT.
-Cinelerra: Freeze frame has line doubling option.
-
-Integrated mpeg2enc, toolame, lame encoding as libraries.
-Toolame refurbishment:
- - converted exit to return in main.
- - put prototypes in filempeg.h
- - created input buffer management.
- - forced stdin at all times
- - created error and eof variables.
- - freq2bark -> toolame_freq2bark
-mpeg2enc symbol conflicts:
- - putbits -> mpeg2enc_putbits
- - SmpFrqIndex -> toolame_SmpFrqIndex
- - BitrateIndex -> toolame_BitrateIndex
-
-edit and effect titles stay visible at all times.  We'll see how long
-this lasts.
-
-long replaced with int64 wherever possible.  After many years of
-assuming long would automatically scale to whatever it was compiled on,
-it appears more of a pain than a scalability point in matters of
-function overloading.
-
-Default configuration should run on stock Redhat 9.0 system.
-
-
-
-Patches:
-loop-crush.diff applied
-exit-crush.diff too much code for no effect
-splash-leak.diff applied
-overlay-speedup.diff applied
-overlay-speedup2.diff applied
-titler-stroke.diff
-titler-stroke2.diff applied but disabled due to SMP crash. (crush)
-       Added Outline style and tumbler.
-       Reduced number of exits due to bounds checking errors.
-
-
-quicktime_leak.diff applied
-small-clean2.diff file may be closed and reopened without calling destructor.
-
-patchbay_free.diff applied but the real problem was PatchBay::update()
-       dereferenced non-existent tracks to get the ID.
-
-
-perspective_alpha_stretch.diff applied
-virtualconsole_leak.diff applied but the default destructors seem to be
-       getting called.
-dvlib_bug_workaround.diff applied
-debian_new_dvlib_compile.diff applied
-
-multihead_compositor-1.1.5.diff rejected  The X11 parameter in Playback
-preferences is the compositor display.
-
-filexml.diff applied
-paste-outpoints.diff needs testing
-
-paste-outpoints.diff rejected.  Broke other paste behavior.  The paste
-behavior is not a uniform case but the result of trying behaviors on a
-case by case basis and deciding which behavior is the most convenient.
-Most of the time what's convenient is not the most scientific.
-
-
-
-
-
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.1.1.7 b/cinelerra-5.1/cinelerra/CHANGELOG.1.1.7
deleted file mode 100644 (file)
index ce17a3e..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-Audio and video playback through firewire.  Can't get a playable
-audio stream for the camcorder in realtime but the interface is there.
-
-Quicktime: Libraw1394 and grabbing interface removed.  Didn't serve any
-purpose since playback requires a completely different mechanism than
-record.
-
-Quicktime, XMovie, Cinelerra: ffmpeg decoder used in MPEG-4.  This
-gives slightly faster playback but is lousy at seeking.
-
-More file writing recovery from crashes.
-
-Cinelerra: Module dereferences renderengine less often in nonrealtime
-effects where renderengine is 0.
-
-Quicktime: Importing of dvgrab and lavtools AVI files.
-Cinelerra: Hitting space rapidly doesn't lock up recording as much.
-Cinelerra: Resize Render effect window.
-Cinelerra: Changing parameters for PCM file works more often.
-
-Cinelerra: tiff upgraded to 3.1.7
-Firehose: Fixed bug in firehose reciever.
-Cinelerra: Virtual file system for renderfarm.
- - The filesystem prefix for rendering nodes was decidedly useless so it was
-discontinued.
-Cinelerra: Time stretch based on overlapping windows instead of FFT.
-Cinelerra: Freeze frame has line doubling option.
-
-Integrated mpeg2enc, toolame, lame encoding as libraries.
-Toolame refurbishment:
- - converted exit to return in main.
- - put prototypes in filempeg.h
- - created input buffer management.
- - forced stdin at all times
- - created error and eof variables.
- - freq2bark -> toolame_freq2bark
-mpeg2enc symbol conflicts:
- - putbits -> mpeg2enc_putbits
- - SmpFrqIndex -> toolame_SmpFrqIndex
- - BitrateIndex -> toolame_BitrateIndex
-
-edit and effect titles stay visible at all times.  We'll see how long
-this lasts.
-
-long replaced with int64 wherever possible.  After many years of
-assuming long would automatically scale to whatever it was compiled on,
-it appears more of a pain than a scalability point in matters of
-function overloading.
-
-Default configuration should run on stock Redhat 9.0 system.
-
-
-
-Patches:
-loop-crush.diff applied
-exit-crush.diff too much code for no effect
-splash-leak.diff applied
-overlay-speedup.diff applied
-overlay-speedup2.diff applied
-titler-stroke.diff
-titler-stroke2.diff applied but disabled due to SMP crash. (crush)
-       Added Outline style and tumbler.
-       Reduced number of exits due to bounds checking errors.
-
-
-quicktime_leak.diff applied
-small-clean2.diff file may be closed and reopened without calling destructor.
-
-patchbay_free.diff applied but the real problem was PatchBay::update()
-       dereferenced non-existent tracks to get the ID.
-
-
-perspective_alpha_stretch.diff applied
-virtualconsole_leak.diff applied but the default destructors seem to be
-       getting called.
-dvlib_bug_workaround.diff applied
-debian_new_dvlib_compile.diff applied
-
-multihead_compositor-1.1.5.diff rejected  The X11 parameter in Playback
-preferences is the compositor display.
-
-filexml.diff applied
-paste-outpoints.diff needs testing
-
-paste-outpoints.diff rejected.  Broke other paste behavior.  The paste
-behavior is not a uniform case but the result of trying behaviors on a
-case by case basis and deciding which behavior is the most convenient.
-Most of the time what's convenient is not the most scientific.
-
-
-
-
-
-
-
-
-Brief:
-
-
-Improved playback through firewire.  Importing of dvgrab and lavtools
-AVI files.  Changing parameters for PCM works more often.  Virtual file
-system for renderfarm.  Time stretch based on overlapping windows
-instead of FFT.  Integrated mpeg2enc, toolame, lame encoding as
-libraries.  Default configuration should run on stock Redhat 9.0 system.
-
-
-
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.1.1.8 b/cinelerra-5.1/cinelerra/CHANGELOG.1.1.8
deleted file mode 100644 (file)
index 3ea731b..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-Date, Size, Path sorting in file boxes.
-
-libsndfile upgraded
- - libsndfile.diff applied
- - Debugged libsndfile patches.
- - Modified libsndfile to support VFS
-MJPEG software encoding debug on AVI and Quicktime.
-Better drawing of highly oversampled waves.
-Better rendering of MPEG video where the framerate is oversampled.
-Overlay mode displayed as icon.
-Date, Size, Path sorting in file boxes.
-Track nudge.
-Tool tips for nudge, pan, overlay mode.
-Context menu for seconds or samples/frames for nudge
-Better handling of mpeg table of contents files with relative paths.
-MPEG-4 decoding starts on right frame more often.
-Cursors deactivate when window not focused
-Pan positions load properly.
-Short audio clips play in their entirety.
-Text conforming in time textboxes.
-Troubleshooting guide for recording slow framerates.
-Crash when cancelling some Vorbis Quicktime rendering fixed.
-Better synchronization for fixed bitrate Vorbis Quicktime movies.
-Home and End keys go to start and end of timeline.
-Patternless Inverse Telecine.
-Better drag select behavior for patches.
-Single confirmation dialog instead of multiple dialogs for file overwrites.
-Batch rendering.
-Force single processor is a preferences option not an EDL parameter.
-Simple lock debugging and tracing.
-ESound migrated to new GCC syntax.
-Video In transport control removed due to lockups.  Should be a remote control there.
-DV1394 implemented as new driver.
-Titler: More redundancy when scanning font dir.
-Tracking::stop_playback stops the thread entirely instead of capturing loop_lock.
- - In the NPTL, a mutex can't be locked unless the other user delays
-   between unlocking and locking.
- - In the NPTL, cancelling a select operation crashes.
-libmpeg3: seek_percentage replaced by seek_byte
-          mpeg3_previous_frame really gets previous frame
-                 more accurate decoding of start of video
-                 faster seeking
-xmovie: previous frame really gets previous frame in MPEG 1&2
-               Quit during playback -> fewer crashes
-               Workaround for NPTL cancel.
-               MMX disabled due to compiler changes.
-quicktime: ffmpeg upgraded to 0.4.8
-Configure script implemented to error out in an unsuitable build environment.
-Foreign languages implemented but disabled due to new bugs.
-Buz recording migrated to 2.4.22.
-Assorted locks migrated to NPTL.
-Boundary tests in EDL::load_xml.
-
-
-Jens Seidel:
-German translation
-
-
-
-
-
-Andraz Tori:
-
-Slovanian translation
-
-Fixed crash when slave plugin extended past master plugin with no asset
-in track.
-
-bcsignal_new_delete.diff - the meters need to have separations at 5 and
-20, not 1/6 and 2/5.
-
-bcmeter_illegal_access.diff - this function shouldn't copy the string
-at all.
-
-
-overlay-speedup3.diff applied
-
-overlay-speedup4.diff rejected
-       - pixel_transparency is still taken from the alpha of the pixel, which is 0 - max.
-         Bit shifting reduces the result by 1.
-
-imagesequence.patch applied
-
-framecache1.diff rejected
-       - The cache explodes when handling HDTV.  Can't use it until you've
-       finished the options in preferences and the absolute size.
-
-close_window.diff rejected
-       - too much work for something that a set_done call would do.
-
-quicktime debug
-
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.1.1.9 b/cinelerra-5.1/cinelerra/CHANGELOG.1.1.9
deleted file mode 100644 (file)
index fe00038..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-Command line option for alternate configure file.
-Pinch works if whirl is zero.
-Push method replaced by pull method in virtual console.
- - less memory
- - realtime time domain effects possible
- - no distinction between amount to read from disk and amount to send through console
-Popup menu instead of text entry for playback fragment size.
-Video decimation
-Parametric EQ, pitch shift, time stretch have no delay.
-Synchronized start of video and audio playback.
-Controls can be hidden from compositor.
-Mov not improperly detected as OGG Vorbis
- - ov_open result also needs testing against first 8 bytes
-Fixed histogram crashes due to not all LoadClients being called.
-Attach button attaches shared effects properly.
-Automatic filename generation doesn't change directory.
-Nudge values updated when project rates change.
-Background rendering detects nudge change.
-Loading an EDL with the CWindow tool followed by loading an EDL without
-       the CWindow tool crashes less.
-PCM format configuration more reliable.
-Freeze frame freezes on the exact frame the effect starts
-       or on the latest keyframe.
-Better alignment of fade out in Titler.
-Better text entry in titler.
-Video overlay effect.
-Realtime reverse video and audio.
-Loop audio and video effects.
-Colorbalance tabulation doesn't leave last entry empty
-Zoom menu goes towards center instead of top left of compositor.
-Middle mouse button scrolling works when compositor output is smaller than canvas.
-Aspect ratio saved in mpeg video.
-Default keyframe position stays at 0 after shifting effect right then left.
-Batch render from command line without GUI.
-Titler reverted to old freetype API.
- - 400 less lines of code and better vertical alignment.
- - the "stroker" outline looked terrible.  Outlines need to be done with a real
-     outline filter.
-Rendering load balancing tests for infinite frame rate.
-Frame -> fields optimized for pull console.
-Fields -> frame converted to realtime.
-Bounds checking in crop entry point.
-Credits screen.  Send omitted names to [email protected]
-Memory debug system.
-An optimization error in GCC 3.3.2 causes RGB16 colormodels to crash.
-Easier changing of the nudge parameters during playback.
-
-quicktime: Memory leak in raw.c with temp_rows removed.
-       RLE decoding
-
-libmpeg3: multiple title stream handling and table of contents moved to
-absolute offsets
-- mpeg3toc takes -a to limit the number of audio streams scanned.
-
-
-Patches (Send whining to [email protected]):
-
-
-
-Andraz Tori:
-
-locale.diff more language bindings
-       applied
-bctheme_memfix.diff different arraylist handling
-       applied
-cinelerra-gettext-6.diff more language bindings
-       applied
-sharpen.diff engine debug
-       applied
-buttons.diff + buttons_pngs.tar.gz 3 segment replacement for text
-       rejected.
-       Why don't you add support for picons in generic buttons
-       instead of requiring different 3segment bitmaps.
-       Set real x and y in the initialize() instead of guessing in the constructor.
-canvas_cache2.diff picon and rendering cache with preferences rejected.
-       Make File work without *preferences.
-       Caching picons should only involve FrameCache and ResourcePixmap.
-       Picon caching is good.  Playback caching is too slow.
-       Either require a total cache bytes or a total cache items but not both.
-libdv yuv->rgb conversion used again.
-version_define.diff version macro renamed
-       applied
-dv_in_32khz.diff 12 bit hack for 1394
-       applied
-alsa_fix.diff ALSA API change
-       applied
-crop_crush.diff new crop interface
-       Partially applied.  The corners shouldn't snap to the cursor.
-qt_mpeg_cleanup.diff:
-       Partially applied.  The temp rows are needed for packed colormodels.
-overlay-speedup5.diff TRANSFER_REPLACE overlay optimization:
-       applied
-maskengine4* mask engine rewrite:
-       rejected - not SMP compatible
-masks_fixes.diff new rerendering test + interpolation rewrite
-       new rerendering test imported
-       new interpolation rejected.  This needs to be done with the existing API
-               instead of an orthogonal one.  Try confining it to CWindowGUI.
-               Mask points need to interpolate in every
-               previous and every next keyframe instead of just the previous.
-
-
-David Arendt <[email protected]>
-
-xml.diff different xml syntax
-       rejected.  These standards points are ignored in
-       most every web page anyway, and Cinelerra exports aren't used by
-       anything else.
-render.diff rendering hack
-       rejected.  Command line rendering should run without a GUI and do
-       batches.
-
-
-
-Eric Seigne <[email protected]>
-
-french translation imported
-
-
-
-
-drag.diff different drag behavior
-       rejected.  Most people seem to want arbitary dropping with an
-       option to paste to arbitrary positions.
-spanish translation imported
-
-
-
-koen muylkens <[email protected]>
-
-newskin-cinelerra.diff - rejected.  Move Cinelerra specific settings
-from BC_Resources to Theme.  Put default values back in BC_Resources so
-it can be used by other applications.  Need button picons instead of 3
-segment button.  Make splash screen determined by a default field, set
-when the user sets a theme.
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.1.2.0 b/cinelerra-5.1/cinelerra/CHANGELOG.1.2.0
deleted file mode 100644 (file)
index 2754024..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-I/O subsystems partially migrated to 2.6.3
- - Video4Linux 2 JPEG capture
- - ALSA migrated to alsa-lib 1.0.2
-Fixed rounding error in conversion between requested position and
-       project position in VModule::render
-Patchbay redrawn after rendering effect which adds tracks.
-Caching of picons and single frame playback.
-Caching based on total megabytes instead of total open files.
-Compression settings retained in batch render if the data type is not enabled.
-Batch render doesn't insert into project if an insertion strategy was selected in Render.
-More useful increments for compressed video bitrate and compressed audio bitrate.
-AC3 audio encoding.
-Key bindings for AVC transport.
-Realtime effect rendering debugged.
-Interpolate audio in realtime.
-Time based interpolate of video in realtime.
-
-Shift dragging floatautos snaps to closest neighboring value if adjoined
-by other autos.
-
-Quad CPU's debugged.  FileThread now limits the ring buffer count to 2
-and expands the frame number count to match the CPU's.
-
-Temporary file deletion on crash.
-
-Nudge forces update of PARAMS instead of EDL for audio.
-
-Default render jobs increased
-
-Automatic disabling of realtime priority for nonroot.
-Deck control for DV camcorders.
-DV playback debugs.
-Histogram crashes fixed.
-Slide optimization.
-More locale debugging.
-Context sensitive menu for effect keyframes.
-Double click on effect selects the region of the effect.
-Scrollbars in asset window improved.
-Drag and drop debugs.
-Optimizations in fade engine.
-Alignment buttons for camera and projector debugged.
-Fewer loopvideo crashes.
-Direct copy of more Quicktime DV files.
-Rounding changed to conform to PAL framerates.
-
-
-
-Quicktime:
-       Decoding of compressed headers.
-       Sorenson Video 1 & 3 playback supported through ffmpeg.
-       mp4v decoding
-
-Mix2000: signal handling fixed again so defaults get saved during X
-server crashes.
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.1.2.1 b/cinelerra-5.1/cinelerra/CHANGELOG.1.2.1
deleted file mode 100644 (file)
index 59c86b6..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Theme images stored as elf binaries instead of concatenated png files.
-Project filename restored from backups.
-Proper frame being read out of cache for frame advance.
-Automatically repositions when loading new file to top left of timeline.
-Presets in Set Format for quick reconfiguration.
-Transition lengths adjusted for frame rate changes.
-Keyframes for effects are hidden if edits are collapsed.
-
-Compressor works better.  Readahead option removed.  Delay removed.
-Setting reaction time negative provides readahead now.  Also a
-smoothing only option renders the just loudness for academic uses.
-
-Realtime time stretch and reframe for video.
-Time average now supports accumulation and doesn't require reading ahead.
-
-ALSA buffer underruns handled better for 2.6.7.
-ALSA synchronization and interrupts handled better.
-32 bit option in ALSA.
-Backup fonts in case primary fonts don't exist.
-Sound levels over 0 DB show in meters with a new max level setting.
-DenoiseFFT debug
-
-New event propogation system should reduce the number of lockups due to
-repeat events.
-
-Faster meter responsiveness.
-
-Migrated to DV1394 version 2.6.7 for DV capture.
-Migrated the Video 4 Linux 2 JPEG driver to Video 4 Linux 2 JPEG version 2.6.7.
-Partially supported uncompressed Video 4 Linux 2 version 2.6.7 but need new frequency table.
-Linux 2.4 is depreciated.
-
-RGB floating point color space.
-RGB 16 removed.
-OpenEXR support
-Floating point TIFF.
-
-Higher precision in YUV/RGB conversions.
-Greyscale JPEGs imported properly.
-
-CD ripper accepts ending tracks higher than the total tracks.  Put in
-100 for the ending track to get the entire disk.
-
-Race conditions in certain dialog box openings removed.
-
-
-Quicktime: faster writing since write buffer is disabled while writing
-data.
-Quicktime: floating point color conversions
-
-
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.1.2.2 b/cinelerra-5.1/cinelerra/CHANGELOG.1.2.2
deleted file mode 100644 (file)
index c8c3534..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-Debugging for VFS in 64 bit mode
-Quicktime: quicktime_set_position without buffering sets the position
-Threshold effect.
-Unsharp mask effect.
-Debugging for image sequence rendering on renderfarms.
-Greyscale TIFF loading.
-Wheel mouse works over textbox for tumble textboxes.
-Rotation moved to the affine transform since trig transform seemed to have very
-slight errors.
-Writing floating point wav files doesn't clamp the sound level anymore.
-Writing and reading quicktime RGBA8888 works.
-Compression title in asset info displays readable info.
-Spherical gradient
-Motion and rotation tracking.
-Bilinear reduction banding error fixed.
-Realtime priority routines migrated to 2.6 kernels.
-Realtime priority now extends from the virtual console to the sound driver and is
-inherited by Thread objects from the parent thread.
-Rendering effects where the region contains a transition doesn't crash.
-Allow effect keyframe at end of effect.
-Video keyframes positioned more accurately at subframe zoom levels.
-Shift clicking a boundary of an effect causes the trim operation to
-       change only the one effect.
-Interpolate video doesn't use the input frame rate when keyframes are used
-       as the border frames.
-Status indicator on Compositor window shows when processing is occurring.
-Time can be displayed as seconds.
-On time bar, ctrl-middle button selects previous time format.
-       Ctrl-left button selects next time format.
-AC3 file creation works better.
-X11 video doesn't blank out before playback.
-Tried disabling ALSA thread cancellation again due to continued crashes
-with this library.
-
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.1.2.3 b/cinelerra-5.1/cinelerra/CHANGELOG.1.2.3
deleted file mode 100644 (file)
index e3da3cd..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-H.264 Video, MPEG-4 Audio and Video encoding in Quicktime, compatible with Quicktime player.
- - The ffmpeg front end has been improved to where it generates useful quality.
- - Certain frame rates and compression options don't work in Win.
-
-Refurbished MPEG table of contents.
- - Tables of contents now detect changes in PID.
- - Tables of contents are created twice as fast.
- - Load any MPEG or IFO file with video in Cinelerra and a table of
-   contents is automatically created.
- - Audio indexes are created simultaneously with MPEG tables of contents.
- - Still possible to create permanent tables of contents with mpeg3toc.
- - Using MPEG files in a renderfarm still requires mpeg3toc due to the fact that the
- automatic .toc files are hidden.
-
-Fewer lockups when resizing video window.
-Fewer crashes due to socket timeouts in background rendering.
-Directory search boxes only contain relevant information for directories.
-Hourglass displayed in main window during time consuming operations.
-Having shared effect off but sharing instance on doesn't create mono sound anymore.
-Tool options get closed when CWindow is closed.
-Picture settings retained after recording from V4L2.  Workaround for V4L2 driver
-       where 2 different picture settings must be uploaded.
-Bitrate displayed in asset info box.
-64 bit plugins are stored in /usr/lib64 so 64 bit executables can be run on the
-       same systems as 32 bit executables without renaming the directory.
-Color picker in compositor window allows selecting colors from the output frame
-       for use in effects.
-Refurbushed chroma key:
- - uses color cube instead of hue for color comparison
- - uses the color picker to select the color
-Support for raw digital camera importing.
- - Uses dcraw to decode the images into floating point RGB.
- - tested on Canon .cr2 and .tiff files.
- - Linearize effect is provided to convert gamma values.
-White balance function in colorbalance effect.
- - Select the grey color in the compositor window.
- - Hit the white balance button.
-
-YUV 16 bit colormodels have been depreciated.  The only practical
-colormodels have been 8 bit and floating point.  Even with raw sensor
-data, the precision needs to be higher to handle the gamma correction.
-
-Difference key using different tracks.
-Undo buffers use compression to reduce memory usage.
-Undo supports effect tweeks.
-Nudge textboxes are ganged.
-Mouse wheel changes nudge value.
-
-Holding CTRL when doing any playback operation causes the in/out points to be used
-for the playback range.
-
-Moved from the unified camera and projector keyframes to discrete x
-and y curves.
- - Z was already made discrete out of necessary utility.
- - Too much information was drawn on the Compositor window.
- - The timeline functionality is extended to better handle curves.
-
-Alt+up and Alt+down zoom the automation vertically.
-
-Dedicated window provided for selecting which automation overlays to show.
-
-The problem with virtual filesystem:
- - VFS was developed back when we wanted to use some high powered servers but
- didn't have root access to mount filesystems on them.  That situation ended and
- it was taking an enourmous amount of effort to work VFS around the number of
- strange things libraries do like accessing megabytes using fgetc.
- VFS has now been phased out.
-
-Fixed lockups due to MWindow locking CWindow when MWindow was still locked.
-Fixed problems loading ulaw sound files.
-
-Tip of the day shown.
-Filebox supports deleting files and refreshing.
-Extra zoom levels added to Compositor window.
-
-Highlighted region overrides in/out points if it is nonzero length.
-
-Blond theme has not been updated.  Instead it has been replaced by the
-SUV theme.  The SUV theme is extremely manly and dark and should make
-the media stand out more.
-
-MPEG4 audio decodes on x86_64.  Had to put stdint.h in faad.h and
-change all the unsigned long to uint32_t because those structures were
-redefined in structs.h with uint32_t.
-
-Channel changing for Video4Linux2 ported to kernel 2.6.7. Automatic
-channel scanning and sorting is supported for the 1 guy who still uses
-these cards.
-
-Pressing ALT while clicking in cropping window causes translation of
-all 4 cropping points.
-
-Rotation effect supports a variable pivot and drawing of the pivot in
-the frame.
-
-DV support migrated to latest API rewrite: libIEC61883
-
-MPEG video encoding provides a graphical interface for YUV 4:2:0
-encoding on the mjpegtools version of mpeg2enc.
-
-The audio playback options support a global offset for audio
-synchronization.  This doesn't affect the audio playback or the
-rendering.  It just compensates for inaccuracy in the Linux sound
-drivers.
-
-The ALSA options allow compensation for lockups at end of playback
-depending on the ALSA version, soundcard, and ALSA rewrite.
-
-Press Tab while the cursor is anywhere over a track to toggle the track
-arming status.  Press Shift-Tab while the cursor is over a track to
-toggle the arming status of every other track.
-
-Resample effect changed to match the behavior of the Reframe effects.
-Scale factors > 1 shorten the length of the audio.
-
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.2.1 b/cinelerra-5.1/cinelerra/CHANGELOG.2.1
deleted file mode 100644 (file)
index 5f066bf..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-Overlay audio effect.  Allows applying compression to the result of a
-6 -> 2 mixdown in realtime.
-
-Compressor can use sum of all channels in addition to highest channel
-and trigger.
-
-Channel position recall based on number of channels.
-
-Audio recording uses another layer of buffers to handle the extremely
-small ALSA buffers better.
-ALSA support migrated to version 1.0.11 and using the dynamic library since
-it is now installed by default.
-
-Faster entry into recording interface.  Recording file format is now
-set in Preferences under Recording so the r key drops you straight into
-monitor mode.
-
-Live Audio effect, allowing processing of the soundcard's input through
-the timeline, in realtime.
- - effects requiring read ahead don't work
-
-Live Video effect for IEC61883 and uncompressed Video4Linux 2 devices.
- - With OpenGL, allows processing video input through the timeline in realtime.
- - Must configure video driver using Record interface first.
- - Uses record output file format to determine video path.
- - Can't be used simultaneously with Live Audio if both drivers use DV.
-
-Filename extension automatically changed when selecting file format.
-
-Toggles for effect on/show.
-
-Motion tracking controls width and height for the block and range
-instead of just size. Motion tracking takes the previous keyframe's x
-and y instead of interpolating them.
-
-Channel mapping for the AC3/A52 decoder is fixed for 5.1 channels.
-Liba52 outputs LFE, FL, C, FR, BL, BR but every other library expects
-C, FL, FR, BL, BR, LFE, which caused errors when the BR channel from
-liba52 was encoded straight through as LFE.
-
-2 presets for audio mixing positions.  Map each track to a different
-channel and map 5.1 tracks to stereo.
-
-Preview region in VWindow and CWindow follows the timeline length more often.
-
-Background drawing of tracks for more responsiveness.
-
-Number of channels is no longer set in device configuration but totally
-dependant on project settings.
-
-Automatic cursor hiding when video is playing back.
-
-Fullscreen video in compositor window, recording monitor.  Lots of new
-menu options in the compositor popup.
-
-A floating point boundary condition in Linearize was fixed, defeating
-the color glitches that would show up many steps later in floating
-point images.
-
-Smarter timebar drawing.
-
-Tabs instead of pulldown menu for changing preferences dialogs.
-
-Pulldown menu for automation zoom with most popular values.
-Keyframes->Straighten curves: straightens the bezier curves if more than one
-curve keyframe is in the highlighted area.
-
-W and H may be swapped by a single button in the project settings.
-
-Entire GOP's from compressed MPEG-4, H.264, and MPEG-2 video are
-cached during seeking, allowing faster reverse playback.
-
-Plugin dialog has a single OK button instead of 3 attach buttons.
-
-Option to match project frame rate in asset popup.
-Asset info gives bitrate of actual MPEG stream instead of table of
-contents file.
-
-TOC rebuilt if source MPG file changes date.
-
-Antialiased fonts for the interface.
-
-Colorbalance ranges changed to more easily support white balancing.
-
-Histogram shows the output of the RGB transfer in the value plot,
-because the value transfer is applied after the RGB transfer.
- - Histogram has split output
-
-Limited DVD subtitle support.  Requires starting playback before the
-subtitle appears.  The number of subtitle tracks are given in the asset
-info dialog for MPEG video files.
-
-Full OpenGL support during playback for compositing and effects.
- - Some effects can't be useful and software isn't catching up to hardware.
- - Requires OpenGL 2.0 drivers which only NVidia supports currently.
- - Selected effects have been OpenGL enabled but most have not.
- - OpenGL allows higher video resolution than Xv can handle.
- - OpenGL enabled effects must be placed after software-only effects to get the hardware
-acceleration.
- - The OpenGL routines are not very optimized.  You can get in the code
-and fix that.
- - Histogram only uses OpenGL if no channel has more than 3 points.
- - Histogram effects only use OpenGL if the
- GUI is closed or the histogram plot is disabled.
- - Certain frame sizes don't work in OpenGL.  If they're not multiples of 4.
- - Most effect sequences have 8 bit intermediates.
- - Certain effect sequences don't have 8 bit intermediates.
-       - Interpolate Pixels->Linearize->Color Balance->Histogram
-       - Frames to Fields->RGB601
- - Multichannel effects should set discarded outputs to TEXTURE.
- - PBuffers are unreliable.  It may take advancing 2 frames or restarting for
-       an OpenGL operation to take effect.
-
-The following effects support OpenGL:
-brightness
-chromakey
-chromakeyhsv
-colorbalance
-deinterlace
-diffkey
-dissolve
-flip
-frames to fields
-freezeframe
-gamma
-gradient
-histogram
-huesaturation
-interpolate Pixels
-invertvideo
-linearblur
-overlay
-perspective
-radialblur
-rgb601
-rotate
-scale
-threshold
-zoomblur
-
-
-
-Advancing labels and edits from compositor window doesn't get stuck on
-select mode as often.
-
-The line doubling options in Frames to Fields and Freezeframe were
-removed to simplify things.  Use deinterlace after freezeframe.  Frames
-to Fields always averages lines.
-
-Rounding error in picon drawing for long timelines fixed.
-
-Handy error dialog pops up showing errors that would previously only
-appear on the console.
-
-Gradient in floating point doesn't stair step anymore.
-Gradient with changing alpha works when colormodel doesn't have alpha.
-
-Chromakey with hue/saturation/value is back, in addition to the color
-cube method and difference key.
-
-All operations except STOP that could interrupt a recording in progress
-are confirmed instead of just cancel.
-
-For overlaying, divide behavior is the same as the Gimp.
-New overlaying algorithm: Max takes the maximum r, g, and b values.
-
-If an output track contains a shared track but the output track has no
-media, the output track reads the shared track's media.  If the output
-track has media, it reads its own media.  This allows replicating media
-between tracks with shared tracks instead of copying the media.
-
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.2.2 b/cinelerra-5.1/cinelerra/CHANGELOG.2.2
deleted file mode 100644 (file)
index 026af37..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Newer faster icon buttons for selecting load mode.
-Blur extended to radei beyond 100 pixels.
-Swap channels supports OpenGL.
-New swap frames effect.
-Quicktime make_streamable utility has been ported to support some outside
-       streams with AVC1.
-QDesign Music 2 decoding finally supported.
-x and backspace function in the Compositor window.
-Ruler and angle tool.
-For IEEE1394/IEC61883/DV1394 replaced timed waits with polling since pthread_cond_timedwait doesn't work
-in all kernels.
-Beefier table of contents generation for the MPEG decoding.
-2 point motion tracking for faster rotation tracking.
-Configurable x, y for search area in addition to w, h.
-Backed out broken default keyframe paste from Cinelerra-CV.
-Full screen mode selects the right monitor for dual head.
-Title does proper alpha blending when dropshadow and fade are used but is slower.
-Lens aberration effect
-Graphic EQ.
-Parametric EQ now uses a logarithmic envelope.
-Musical note entry in the Synthesizer.
-FLAC audio
-Linear & bezier modes for curves.
-Proper outlining for Titles.
-Attach effects to multiple tracks simultaneously from the Audio & Video menus.
-Asynchronous decoding debugged.
-ID3 tags handled by mp3 parser.
diff --git a/cinelerra-5.1/cinelerra/CHANGELOG.4 b/cinelerra-5.1/cinelerra/CHANGELOG.4
deleted file mode 100644 (file)
index e0c9d70..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Newer faster icon buttons for selecting load mode.
-Blur extended to radei beyond 100 pixels.
-Swap channels supports OpenGL.
-New swap frames effect.
-Quicktime make_streamable utility has been ported to support some outside
-       streams with AVC1.
-Most QDesign Music 2 derivatives supported.
-Most WMA, WMV & FLV derivatives supported through FFMPEG.  These formats don't support seeking.
-x and backspace function in the Compositor window.
-Ruler and angle tool.
-For IEEE1394/IEC61883/DV1394 replaced timed waits with polling since pthread_cond_timedwait doesn't work
-in all kernels.
-Better table of contents generation for the MPEG decoding.
-2 point motion tracking for faster rotation tracking.
-Configurable x, y for search area in addition to w, h.
-Backed out broken default keyframe paste from Cinelerra-CV.
-Full screen mode selects the right monitor for dual head.
-Title does proper alpha blending when dropshadow and fade are used but is slower.
-Lens aberration effect
-Graphic EQ.
-Parametric EQ now uses a logarithmic envelope.
-Musical note entry in the Synthesizer.
-FLAC audio
-Linear & bezier modes for curves.
-Proper outlining for Titles.
-Attach effects to multiple tracks simultaneously from the Audio & Video menus.
-Asynchronous decoding debugged.
-ID3 tags handled by mp3 parser.
-Keyframe spanning for effects & masks.
- - Select single point in time & it uses default keyframe generation as before.
- - Select a range & it copies the changed parameter to all selected keyframes.
-Spectrogram horizontal zoom & color
-
index 4c08bbf0b48feb3c051f1bf7ec9f98e2949df008..acef3b4809f97d008e69f8d615ec8c59aed545d6 100644 (file)
@@ -109,7 +109,6 @@ OBJS := \
        $(OBJDIR)/filejpeg.o \
        $(OBJDIR)/filelist.o \
        $(OBJDIR)/file.o \
-       $(OBJDIR)/fileogg.o \
        $(OBJDIR)/filepng.o \
        $(OBJDIR)/fileppm.o \
        $(OBJDIR)/filescene.o \
@@ -117,7 +116,6 @@ OBJS := \
        $(OBJDIR)/filetga.o \
        $(OBJDIR)/filethread.o \
        $(OBJDIR)/filetiff.o \
-       $(OBJDIR)/filevorbis.o \
        $(OBJDIR)/filexml.o \
        $(OBJDIR)/floatauto.o \
        $(OBJDIR)/floatautos.o \
@@ -557,6 +555,7 @@ ydiff:      ydiff.C $(LIBRARIES)
 
 clean:
        rm -rf $(OBJDIR)
+       rm -f shuttle_keys.h
 
 
 tags:
index 2856ed5c0dde278aa7661dfdaa322ca177671061..ad5c5c8d7ead8e57994a41a2f63aa1454c3f66a8 100644 (file)
@@ -103,18 +103,6 @@ int Asset::init_values()
        ampeg_bitrate = 256;
        ampeg_derivative = 3;
 
-       vorbis_vbr = 0;
-       vorbis_min_bitrate = -1;
-       vorbis_bitrate = 128000;
-       vorbis_max_bitrate = -1;
-
-       theora_fix_bitrate = 1;
-       theora_bitrate = 860000;
-       theora_quality = 16;
-       theora_sharpness = 2;
-       theora_keyframe_frequency = 64;
-       theora_keyframe_force_frequency = 64;
-
 // mpeg parameters
        vmpeg_iframe_distance = 45;
        vmpeg_pframe_distance = 0;
@@ -241,21 +229,6 @@ void Asset::copy_format(Asset *asset, int do_index)
        ampeg_bitrate = asset->ampeg_bitrate;
        ampeg_derivative = asset->ampeg_derivative;
 
-
-       vorbis_vbr = asset->vorbis_vbr;
-       vorbis_min_bitrate = asset->vorbis_min_bitrate;
-       vorbis_bitrate = asset->vorbis_bitrate;
-       vorbis_max_bitrate = asset->vorbis_max_bitrate;
-
-
-       theora_fix_bitrate = asset->theora_fix_bitrate;
-       theora_bitrate = asset->theora_bitrate;
-       theora_quality = asset->theora_quality;
-       theora_sharpness = asset->theora_sharpness;
-       theora_keyframe_frequency = asset->theora_keyframe_frequency;
-       theora_keyframe_force_frequency = asset->theora_keyframe_frequency;
-
-
        jpeg_quality = asset->jpeg_quality;
 
 // mpeg parameters
@@ -639,14 +612,7 @@ int Asset::write_audio(FileXML *file)
 
 //     file->tag.set_property("AMPEG_BITRATE", ampeg_bitrate);
 //     file->tag.set_property("AMPEG_DERIVATIVE", ampeg_derivative);
-//
-//     file->tag.set_property("VORBIS_VBR", vorbis_vbr);
-//     file->tag.set_property("VORBIS_MIN_BITRATE", vorbis_min_bitrate);
-//     file->tag.set_property("VORBIS_BITRATE", vorbis_bitrate);
-//     file->tag.set_property("VORBIS_MAX_BITRATE", vorbis_max_bitrate);
-//
 //     file->tag.set_property("MP3_BITRATE", mp3_bitrate);
-//
 
 
 
@@ -788,18 +754,6 @@ void Asset::load_defaults(BC_Hash *defaults,
        ampeg_bitrate = GET_DEFAULT("AMPEG_BITRATE", ampeg_bitrate);
        ampeg_derivative = GET_DEFAULT("AMPEG_DERIVATIVE", ampeg_derivative);
 
-       vorbis_vbr = GET_DEFAULT("VORBIS_VBR", vorbis_vbr);
-       vorbis_min_bitrate = GET_DEFAULT("VORBIS_MIN_BITRATE", vorbis_min_bitrate);
-       vorbis_bitrate = GET_DEFAULT("VORBIS_BITRATE", vorbis_bitrate);
-       vorbis_max_bitrate = GET_DEFAULT("VORBIS_MAX_BITRATE", vorbis_max_bitrate);
-
-       theora_fix_bitrate = GET_DEFAULT("THEORA_FIX_BITRATE", theora_fix_bitrate);
-       theora_bitrate = GET_DEFAULT("THEORA_BITRATE", theora_bitrate);
-       theora_quality = GET_DEFAULT("THEORA_QUALITY", theora_quality);
-       theora_sharpness = GET_DEFAULT("THEORA_SHARPNESS", theora_sharpness);
-       theora_keyframe_frequency = GET_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency);
-       theora_keyframe_force_frequency = GET_DEFAULT("THEORA_FORCE_KEYFRAME_FREQUENCY", theora_keyframe_force_frequency);
-
        GET_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options);
        GET_DEFAULT("FF_SAMPLE_FORMAT", ff_sample_format);
        ff_audio_bitrate = GET_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate);
@@ -832,14 +786,6 @@ void Asset::load_defaults(BC_Hash *defaults,
        vmpeg_preset = GET_DEFAULT("VMPEG_PRESET", vmpeg_preset);
        vmpeg_field_order = GET_DEFAULT("VMPEG_FIELD_ORDER", vmpeg_field_order);
 
-       theora_fix_bitrate = GET_DEFAULT("THEORA_FIX_BITRATE", theora_fix_bitrate);
-       theora_bitrate = GET_DEFAULT("THEORA_BITRATE", theora_bitrate);
-       theora_quality = GET_DEFAULT("THEORA_QUALITY", theora_quality);
-       theora_sharpness = GET_DEFAULT("THEORA_SHARPNESS", theora_sharpness);
-       theora_keyframe_frequency = GET_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency);
-       theora_keyframe_force_frequency = GET_DEFAULT("THEORA_FORCE_KEYFRAME_FEQUENCY", theora_keyframe_force_frequency);
-
-
        ac3_bitrate = GET_DEFAULT("AC3_BITRATE", ac3_bitrate);
 
        png_use_alpha = GET_DEFAULT("PNG_USE_ALPHA", png_use_alpha);
@@ -889,11 +835,6 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("AMPEG_BITRATE", ampeg_bitrate);
                UPDATE_DEFAULT("AMPEG_DERIVATIVE", ampeg_derivative);
 
-               UPDATE_DEFAULT("VORBIS_VBR", vorbis_vbr);
-               UPDATE_DEFAULT("VORBIS_MIN_BITRATE", vorbis_min_bitrate);
-               UPDATE_DEFAULT("VORBIS_BITRATE", vorbis_bitrate);
-               UPDATE_DEFAULT("VORBIS_MAX_BITRATE", vorbis_max_bitrate);
-
                UPDATE_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options);
                UPDATE_DEFAULT("FF_SAMPLE_FORMAT", ff_sample_format);
                UPDATE_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate);
@@ -903,15 +844,6 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("FF_VIDEO_BITRATE", ff_video_bitrate);
                UPDATE_DEFAULT("FF_VIDEO_QUALITY", ff_video_quality);
 
-               UPDATE_DEFAULT("THEORA_FIX_BITRATE", theora_fix_bitrate);
-               UPDATE_DEFAULT("THEORA_BITRATE", theora_bitrate);
-               UPDATE_DEFAULT("THEORA_QUALITY", theora_quality);
-               UPDATE_DEFAULT("THEORA_SHARPNESS", theora_sharpness);
-               UPDATE_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency);
-               UPDATE_DEFAULT("THEORA_FORCE_KEYFRAME_FREQUENCY", theora_keyframe_force_frequency);
-
-
-
                UPDATE_DEFAULT("MP3_BITRATE", mp3_bitrate);
 
                UPDATE_DEFAULT("JPEG_QUALITY", jpeg_quality);
index b877c47d938d1ccfb29184c673ceb12116f9da80..c853d7adfdc7cae06d2fdeeec749de9fc171ec02 100644 (file)
@@ -163,21 +163,6 @@ public:
 // 2 - 3
        int ampeg_derivative;
 
-// Vorbis compression
-       int vorbis_min_bitrate;
-       int vorbis_bitrate;
-       int vorbis_max_bitrate;
-       int vorbis_vbr;
-
-// Theora compression
-       int theora_fix_bitrate;
-       int theora_bitrate;
-       int theora_quality;
-       int theora_sharpness;
-       int theora_keyframe_frequency;
-       int theora_keyframe_force_frequency;
-
-
 // Set by package render during file creation. -1 means square pixels.
        double aspect_ratio;
 
index 13e1b457463a2876c411725d4c6ad2ff700c9336..c53842842e6380e84fb91f46c0ab0d49a12c0270 100644 (file)
@@ -52,7 +52,6 @@
 #include "filejpeg.h"
 #include "filempeg.h"
 #undef HAVE_STDLIB_H // automake conflict
-#include "fileogg.h"
 #include "filepng.h"
 #include "fileppm.h"
 #include "filescene.h"
@@ -60,7 +59,6 @@
 #include "filetga.h"
 #include "filethread.h"
 #include "filetiff.h"
-#include "filevorbis.h"
 #include "filexml.h"
 #include "formatwindow.h"
 #include "formattools.h"
 #include "samples.h"
 #include "vframe.h"
 
-//static int temp_debug = 0;
-//suppress noref warning
-void *vorbis0_ov_callbacks[] = {
- &OV_CALLBACKS_DEFAULT, &OV_CALLBACKS_NOCLOSE,
- &OV_CALLBACKS_STREAMONLY, &OV_CALLBACKS_STREAMONLY_NOCLOSE,
-};
-
 File::File()
 {
        cpus = 1;
@@ -237,10 +228,6 @@ int File::get_options(FormatTools *format,
                FileTIFF::get_parameters(parent_window, asset, format_window,
                        audio_options, video_options, edl);
                break;
-       case FILE_OGG:
-               FileOGG::get_parameters(parent_window, asset, format_window,
-                       audio_options, video_options, edl);
-               break;
        default:
                break;
        }
@@ -362,8 +349,6 @@ const char *File::default_probes[] = {
        "CR2",
        "TGA",
        "TIFF",
-       "OGG",
-       "Vorbis",
        "MPEG",
        "EDL",
                "FFMPEG_Late", 
@@ -461,16 +446,6 @@ int File::probe()
                        file = new FileTIFF(this->asset, this);
                        return FILE_OK;
                }
-               if( !strcmp(pref->name,"OGG") ) { // OGG file
-                       if( !FileOGG::check_sig(this->asset) ) continue;
-                       file = new FileOGG(this->asset, this);
-                       return FILE_OK;
-               }
-               if( !strcmp(pref->name,"Vorbis") ) { // VorbisFile file
-                       if( !FileVorbis::check_sig(this->asset) ) continue;
-                       file = new FileVorbis(this->asset, this);
-                       return FILE_OK;
-               }
 #ifdef HAVE_LIBZMPEG
                if( !strcmp(pref->name,"MPEG") ) { // MPEG file
                        if( !FileMPEG::check_sig(this->asset) ) continue;
@@ -591,13 +566,6 @@ int File::open_file(Preferences *preferences,
                file = new FileMPEG(this->asset, this);
                break;
 #endif
-       case FILE_OGG:
-               file = new FileOGG(this->asset, this);
-               break;
-
-       case FILE_VORBIS:
-               file = new FileVorbis(this->asset, this);
-               break;
 #ifdef HAVE_DV
        case FILE_RAWDV:
                file = new FileDV(this->asset, this);
@@ -1254,8 +1222,6 @@ int File::strtoformat(const char *format)
        if( !strcasecmp(format, _(VMPEG_NAME)) ) return FILE_VMPEG;
        if( !strcasecmp(format, _(TGA_NAME)) ) return FILE_TGA;
        if( !strcasecmp(format, _(TGA_LIST_NAME)) ) return FILE_TGA_LIST;
-       if( !strcasecmp(format, _(OGG_NAME)) ) return FILE_OGG;
-       if( !strcasecmp(format, _(VORBIS_NAME)) ) return FILE_VORBIS;
        if( !strcasecmp(format, _(RAWDV_NAME)) ) return FILE_RAWDV;
        if( !strcasecmp(format, _(FFMPEG_NAME)) ) return FILE_FFMPEG;
        if( !strcasecmp(format, _(DBASE_NAME)) ) return FILE_DB;
@@ -1294,8 +1260,6 @@ const char* File::formattostr(int format)
        case FILE_TGA_LIST:     return _(TGA_LIST_NAME);
        case FILE_TIFF:         return _(TIFF_NAME);
        case FILE_TIFF_LIST:    return _(TIFF_LIST_NAME);
-       case FILE_OGG:          return _(OGG_NAME);
-       case FILE_VORBIS:       return _(VORBIS_NAME);
        case FILE_RAWDV:        return _(RAWDV_NAME);
        case FILE_FFMPEG:       return _(FFMPEG_NAME);
        case FILE_DB:           return _(DBASE_NAME);
@@ -1427,7 +1391,6 @@ int64_t File::get_memory_usage()
 int File::renders_video(int format)
 {
        switch( format ) {
-       case FILE_OGG:
        case FILE_JPEG:
        case FILE_JPEG_LIST:
        case FILE_CR2:
@@ -1463,8 +1426,6 @@ int File::renders_audio(int format)
        case FILE_FLAC:
        case FILE_PCM:
        case FILE_WAV:
-       case FILE_OGG:
-       case FILE_VORBIS:
        case FILE_AMPEG:
        case FILE_AU:
        case FILE_AIFF:
@@ -1511,7 +1472,6 @@ const char* File::get_tag(int format)
        case FILE_FLAC:         return "flac";
        case FILE_JPEG:         return "jpg";
        case FILE_JPEG_LIST:    return "jpg";
-       case FILE_OGG:          return "ogg";
        case FILE_PCM:          return "pcm";
        case FILE_PNG:          return "png";
        case FILE_PNG_LIST:     return "png";
@@ -1522,7 +1482,6 @@ const char* File::get_tag(int format)
        case FILE_TIFF:         return "tif";
        case FILE_TIFF_LIST:    return "tif";
        case FILE_VMPEG:        return "m2v";
-       case FILE_VORBIS:       return "ogg";
        case FILE_WAV:          return "wav";
        case FILE_FFMPEG:       return "ffmpg";
        }
@@ -1556,8 +1515,6 @@ const char* File::get_prefix(int format)
        case FILE_EXR:          return "EXR";
        case FILE_EXR_LIST:     return "EXR_LIST";
        case FILE_CR2:          return "CR2";
-       case FILE_OGG:          return "OGG";
-       case FILE_VORBIS:       return "VORBIS";
        case FILE_FLAC:         return "FLAC";
        case FILE_FFMPEG:       return "FFMPEG";
        case FILE_SCENE:        return "SCENE";
@@ -1571,16 +1528,7 @@ const char* File::get_prefix(int format)
 
 PackagingEngine *File::new_packaging_engine(Asset *asset)
 {
-       PackagingEngine *result;
-       switch( asset->format ) {
-       case FILE_OGG:
-               result = (PackagingEngine*)new PackagingEngineOGG();
-               break;
-       default:
-               result = (PackagingEngine*) new PackagingEngineDefault();
-               break;
-       }
-
+       PackagingEngine *result = (PackagingEngine*) new PackagingEngineDefault();
        return result;
 }
 
index 8bcda4ebe6a454441b3f22829b8f725bedc0d190..856c4d53e598c7eb507b3aa97ea894c142089506 100644 (file)
@@ -81,8 +81,6 @@
 #define FILE_EXR                26
 #define FILE_EXR_LIST           27
 #define FILE_CR2                28
-#define FILE_OGG               30
-#define FILE_VORBIS             31
 #define FILE_FLAC               32
 #define FILE_FFMPEG             33
 #define FILE_SCENE              34
@@ -112,8 +110,6 @@ N_("Microsoft WAV")
 N_("MPEG Audio")    // For encoding only
 N_("MPEG")          // For decoding only
 N_("MPEG Video")    // For encoding only
-N_("OGG Theora/Vorbis")
-N_("OGG Vorbis")    // For decoding only
 N_("PNG")
 N_("PNG Sequence")
 N_("PPM")
@@ -146,7 +142,6 @@ N_("Unknown sound")
 #define JPEG_LIST_NAME         "JPEG Sequence"
 #define JPEG_NAME              "JPEG"
 #define MPEG_NAME              "MPEG Stream"   // For capture only
-#define OGG_NAME               "OGG Theora/Vorbis"
 #define PCM_NAME               "Raw PCM"
 #define PNG_LIST_NAME          "PNG Sequence"
 #define PNG_NAME               "PNG"
@@ -160,7 +155,6 @@ N_("Unknown sound")
 #define TIFF_LIST_NAME         "TIFF Sequence"
 #define TIFF_NAME              "TIFF"
 #define VMPEG_NAME             "MPEG Video"    // For encoding only
-#define VORBIS_NAME            "OGG Vorbis"
 #define WAV_NAME               "Microsoft WAV"
 
 #define BITSLINEAR8    8
diff --git a/cinelerra-5.1/cinelerra/fileogg.C b/cinelerra-5.1/cinelerra/fileogg.C
deleted file mode 100644 (file)
index 99995fe..0000000
+++ /dev/null
@@ -1,2638 +0,0 @@
-
-/*
- * CINELERRA
- * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "asset.h"
-#include "bcsignals.h"
-#include "byteorder.h"
-#include "clip.h"
-#include "edit.h"
-#include "file.h"
-#include "fileogg.h"
-#include "guicast.h"
-#include "interlacemodes.h"
-#include "language.h"
-#include "mainerror.h"
-#include "mutex.h"
-#include "mwindow.inc"
-#include "preferences.h"
-#include "render.h"
-#include "vframe.h"
-#include "versioninfo.h"
-#include "videodevice.inc"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-
-#define READ_SIZE 3*66000
-
-/* This code was aspired by ffmpeg2theora */
-/* Special thanks for help on this code goes out to [email protected] */
-
-int ogg_ret0, ogg_ret1, ogg_ret2;
-
-FileOGG::FileOGG(Asset *asset, File *file)
- : FileBase(asset, file)
-{
-       if(asset->format == FILE_UNKNOWN)
-               asset->format = FILE_OGG;
-       asset->byte_order = 0;
-       reset_parameters();
-       final_write = 1;
-}
-
-FileOGG::~FileOGG()
-{
-       if (tf)
-       {
-
-               if (tf->videosync)
-               {
-                       ogg_sync_clear(&tf->videosync->sync);
-                       delete tf->videosync;
-                       theora_info_clear(&tf->ti);
-                       theora_comment_clear(&tf->tc);
-               }
-               if (tf->audiosync)
-               {
-                       ogg_sync_clear(&tf->audiosync->sync);
-                       delete tf->audiosync;
-                       vorbis_info_clear(&tf->vi);
-                       vorbis_comment_clear(&tf->vc);
-               }
-               if (tf->vpage)
-                       free(tf->vpage);
-               if (tf->apage)
-                       free(tf->apage);
-               delete tf;
-       }
-       if (temp_frame) delete temp_frame;
-       if (stream) close_file();
-       if(pcm_history)
-       {
-               for(int i = 0; i < asset->channels; i++)
-                       delete [] pcm_history[i];
-               delete [] pcm_history;
-       }
-
-       if (flush_lock) delete flush_lock;
-}
-
-void FileOGG::get_parameters(BC_WindowBase *parent_window,
-       Asset *asset, BC_WindowBase* &format_window,
-       int audio_options, int video_options, EDL *edl)
-{
-       if(audio_options)
-       {
-               OGGConfigAudio *window = new OGGConfigAudio(parent_window, asset);
-               format_window = window;
-               window->create_objects();
-               window->run_window();
-               delete window;
-       }
-       else
-       if(video_options)
-       {
-               OGGConfigVideo *window = new OGGConfigVideo(parent_window, asset);
-               format_window = window;
-               window->create_objects();
-               window->run_window();
-               delete window;
-       }
-}
-
-int FileOGG::reset_parameters_derived()
-{
-       tf = 0;
-       temp_frame = 0;
-       stream = 0;
-       flush_lock = 0;
-       pcm_history = 0;
-       start_frame = 0;
-       return 0;
-}
-
-static int read_buffer(FILE *in, sync_window_t *sw, int buflen)
-{
-       char *buffer = ogg_sync_buffer(&sw->sync, buflen);
-//     printf("reading range: %lli - %lli\n", sw->file_bufpos, sw->file_bufpos + buflen);
-       sw->wlen = fread(buffer, 1, buflen, in);
-       ogg_sync_wrote(&sw->sync, sw->wlen);
-//     printf("XX data: %c %c %c %c\n", sw->sync.data[0], sw->sync.data[1], sw->sync.data[2], sw->sync.data[3]);
-       sw->file_bufpos += sw->wlen;
-//     printf("sb: %i\n",buffer);
-       return (sw->wlen);
-}
-
-static int read_buffer_at(FILE *in, sync_window_t *sw, int buflen, off_t filepos)
-{
-//     printf("seeking to %lli %lli\n", filepos, sw->file_bufpos);
-       fseeko(in, filepos, SEEK_SET);
-//     if (sw->file_bufpos != filepos)
-//     {
-               sw->file_bufpos = filepos;
-               sw->file_pagepos = filepos; // this one is not valid until sync_pageseek!
-               ogg_sync_reset(&sw->sync);
-
-//     }
-       return read_buffer(in, sw, buflen);
-}
-
-static int take_page_out_autoadvance(FILE *in, sync_window_t *sw, ogg_page *og)
-{
-       while (1)
-       {
-               int ret = ogg_sync_pageout(&sw->sync, og);
-               if (ret > 0)
-               {
-//             printf("fpa: %lli\n", sw->file_pagepos);
-// advance 'virtual' position
-                       sw->file_pagepos += og->header_len + og->body_len;
-//             printf("ret2: %i %i\n",ret, og->header_len + og->body_len);
-                       return ret;
-               }
-               else if (ret < 0)
-               {
-                       eprintf(_("FileOGG: Taking page out on nonsynced stream!\n"));
-                       return ret;
-
-               } else
-               {
-                       // need more data for page
-                       if ((ret = read_buffer(in, sw, READ_SIZE)) == 0)
-                       {
-                               printf(_("FileOGG: There is no more data in the file we are reading from\n"));
-                               return 0;  // No more data
-                       }
-               }
-       }
-       return 1;
-}
-
-
-// we never need to autoadvance when syncing, since our read chunks are larger than
-// maximum page size
-static int sync_and_take_page_out(sync_window_t *sw, ogg_page *page)
-{
-       page->header_len = 0;
-       page->body_len = 0;
-       page->header = 0;
-       page->body = 0;
-       int ret = ogg_sync_pageseek(&sw->sync, page);
-       if (ret < 0)
-       {
-               sw->file_pagepos -= ret;
-       }
-       else if (ret > 0)
-       {
-               sw->file_pagepos += ret;
-//             printf("ret: %i %i\n",ret, page->header_len + page->body_len);
-       }
-       return ret;
-}
-
-int FileOGG::open_file(int rd, int wr)
-{
-       if (!tf)
-       {
-               tf = new theoraframes_info_t;
-               memset(tf, 0, sizeof(*tf));
-       }
-
-
-       if(wr)
-       {
-
-
-               if((stream = fopen(asset->path, "w+b")) == 0)
-               {
-                       eprintf(_("Error while opening \"%s\" for writing. %m\n"), asset->path);
-                       return 1;
-               }
-
-               tf->audio_bytesout = 0;
-               tf->video_bytesout = 0;
-               tf->videotime = 0;
-               tf->audiotime = 0;
-
-               tf->vpage_valid = 0;
-               tf->apage_valid = 0;
-               tf->apage_buffer_length = 0;
-               tf->vpage_buffer_length = 0;
-               tf->apage = NULL;
-               tf->vpage = NULL;
-               tf->v_pkg=0;
-               tf->a_pkg=0;
-
-
-               /* yayness.  Set up Ogg output stream */
-               srand (time (NULL));
-
-               if(asset->video_data)
-               {
-                       ogg_stream_init (&tf->to, rand ());    /* oops, add one ot the above */
-
-                       theora_info_init (&tf->ti);
-
-                       tf->ti.frame_width = asset->width;
-                       tf->ti.frame_height = asset->height;
-
-                       tf->ti.width = ((asset->width + 15) >>4)<<4; // round up to the nearest multiple of 16
-                       tf->ti.height = ((asset->height + 15) >>4)<<4; // round up to the nearest multiple of 16
-                       if (tf->ti.width != tf->ti.frame_width || tf->ti.height != tf->ti.frame_height)
-                       {
-                               eprintf(_("WARNING: Encoding theora when width or height are not dividable by 16 is suboptimal\n"));
-                       }
-
-                       tf->ti.offset_x = 0;
-                       tf->ti.offset_y = tf->ti.height - tf->ti.frame_height;
-                       tf->ti.fps_numerator = (unsigned int)(asset->frame_rate * 1000000);
-                       tf->ti.fps_denominator = 1000000;
-
-                       if (asset->aspect_ratio > 0)
-                       {
-                               // Cinelerra uses frame aspect ratio, theora uses pixel aspect ratio
-                               float pixel_aspect = asset->aspect_ratio / asset->width * asset->height;
-                               tf->ti.aspect_numerator = (unsigned int)(pixel_aspect * 1000000);
-                               tf->ti.aspect_denominator = 1000000;
-                       } else
-                       {
-                               tf->ti.aspect_numerator = 1000000;
-                               tf->ti.aspect_denominator = 1000000;
-                       }
-                       if(EQUIV(asset->frame_rate, 25) || EQUIV(asset->frame_rate, 50))
-                               tf->ti.colorspace = OC_CS_ITU_REC_470BG;
-                       else if((asset->frame_rate > 29 && asset->frame_rate < 31) || (asset->frame_rate > 59 && asset->frame_rate < 61) )
-                               tf->ti.colorspace = OC_CS_ITU_REC_470M;
-                       else
-                               tf->ti.colorspace = OC_CS_UNSPECIFIED;
-
-                       if (asset->theora_fix_bitrate)
-                       {
-                               tf->ti.target_bitrate = asset->theora_bitrate;
-                               tf->ti.quality = 0;
-                       } else
-                       {
-                               tf->ti.target_bitrate = 0;
-                               tf->ti.quality = asset->theora_quality;     // video quality 0-63
-                       }
-                       tf->ti.dropframes_p = 0;
-                       tf->ti.quick_p = 1;
-                       tf->ti.keyframe_auto_p = 1;
-                       tf->ti.keyframe_frequency = asset->theora_keyframe_frequency;
-                       tf->ti.keyframe_frequency_force = asset->theora_keyframe_force_frequency;
-                       tf->ti.keyframe_data_target_bitrate = (unsigned int) (tf->ti.target_bitrate * 1.5) ;
-                       tf->ti.keyframe_auto_threshold = 80;
-                       tf->ti.keyframe_mindistance = 8;
-                       tf->ti.noise_sensitivity = 1;
-                       tf->ti.sharpness = 2;
-
-
-                       if (theora_encode_init (&tf->td, &tf->ti))
-                       {
-                               eprintf(_("(FileOGG:file_open) initialization of theora codec failed\n"));
-                       }
-               }
-               /* init theora done */
-
-               /* initialize Vorbis too, if we have audio. */
-               if(asset->audio_data)
-               {
-                       ogg_stream_init (&tf->vo, rand ());
-                       vorbis_info_init (&tf->vi);
-                       /* Encoding using a VBR quality mode.  */
-                       int ret;
-                       if(!asset->vorbis_vbr)
-                       {
-                               ret = vorbis_encode_init(&tf->vi,
-                                                       asset->channels,
-                                                       asset->sample_rate,
-                                                       asset->vorbis_max_bitrate,
-                                                       asset->vorbis_bitrate,
-                                                       asset->vorbis_min_bitrate);
-                       } else
-                       {
-                               // Set true VBR as demonstrated by http://svn.xiph.org/trunk/vorbis/doc/vorbisenc/examples.html
-                               ret = vorbis_encode_setup_managed(&tf->vi,
-                                       asset->channels,
-                                       asset->sample_rate,
-                                       -1,
-                                       asset->vorbis_bitrate,
-                                       -1);
-                               ret |= vorbis_encode_ctl(&tf->vi, OV_ECTL_RATEMANAGE_AVG, NULL);
-                               ret |= vorbis_encode_setup_init(&tf->vi);
-                       }
-
-                       if (ret)
-                       {
-                               eprintf(_("The Vorbis encoder could not set up a mode according to\n"
-                                       "the requested quality or bitrate.\n\n"));
-                               fclose (stream);
-                               stream = 0;
-                               return 1;
-                       }
-
-                       vorbis_comment_init (&tf->vc); // comment is cleared lateron
-                       vorbis_comment_add_tag (&tf->vc, (char*)"ENCODER", (char*)PROGRAM_NAME " " CINELERRA_VERSION);
-                       /* set up the analysis state and auxiliary encoding storage */
-                       vorbis_analysis_init (&tf->vd, &tf->vi);
-                       vorbis_block_init (&tf->vd, &tf->vb);
-
-               }
-               /* audio init done */
-
-               /* write the bitstream header packets with proper page interleave */
-
-               /* first packet will get its own page automatically */
-               if(asset->video_data)
-               {
-                       theora_encode_header (&tf->td, &tf->op);
-                       ogg_stream_packetin (&tf->to, &tf->op);
-                       if (ogg_stream_pageout (&tf->to, &tf->og) != 1)
-                       {
-                               eprintf(_("Internal Ogg library error.\n"));
-                               return 1;
-                       }
-                       fwrite (tf->og.header, 1, tf->og.header_len, stream);
-                       fwrite (tf->og.body, 1, tf->og.body_len, stream);
-
-                       /* create the remaining theora headers */
-                       theora_comment_init (&tf->tc);
-                       theora_comment_add_tag (&tf->tc, (char*)"ENCODER",
-                                       (char*)PROGRAM_NAME " " CINELERRA_VERSION);
-                       theora_encode_comment (&tf->tc, &tf->op);
-                       ogg_stream_packetin (&tf->to, &tf->op);
-                       theora_comment_clear(&tf->tc);
-                       theora_encode_tables (&tf->td, &tf->op);
-                       ogg_stream_packetin (&tf->to, &tf->op);
-               }
-               if(asset->audio_data)
-               {
-                       ogg_packet header;
-                       ogg_packet header_comm;
-                       ogg_packet header_code;
-
-                       vorbis_analysis_headerout (&tf->vd, &tf->vc, &header,
-                                      &header_comm, &header_code);
-                       ogg_stream_packetin (&tf->vo, &header);    /* automatically placed in its own page */
-                       vorbis_comment_clear(&tf->vc);
-                       if (ogg_stream_pageout (&tf->vo, &tf->og) != 1)
-                       {
-                               eprintf(_("Internal Ogg library error.\n"));
-                               return 1;
-                       }
-                       fwrite (tf->og.header, 1, tf->og.header_len, stream);
-                       fwrite (tf->og.body, 1, tf->og.body_len, stream);
-
-                       /* remaining vorbis header packets */
-                       ogg_stream_packetin (&tf->vo, &header_comm);
-                       ogg_stream_packetin (&tf->vo, &header_code);
-               }
-
-               /* Flush the rest of our headers. This ensures
-                * the actual data in each stream will start
-                * on a new page, as per spec. */
-               while (1 && asset->video_data)
-               {
-                       int result = ogg_stream_flush (&tf->to, &tf->og);
-                       if (result < 0)
-                       {
-                               /* can't get here */
-                               eprintf(_("Internal Ogg library error.\n"));
-                               return 1;
-                       }
-                       if (result == 0)
-                               break;
-                       fwrite (tf->og.header, 1, tf->og.header_len, stream);
-                       fwrite (tf->og.body, 1, tf->og.body_len, stream);
-               }
-               while (1 && asset->audio_data)
-               {
-                       int result = ogg_stream_flush (&tf->vo, &tf->og);
-                       if (result < 0)
-                       {
-                               /* can't get here */
-                               eprintf(_("Internal Ogg library error.\n"));
-                               return 1;
-                       }
-                       if (result == 0)
-                               break;
-                       fwrite (tf->og.header, 1, tf->og.header_len, stream);
-                       fwrite (tf->og.body, 1, tf->og.body_len, stream);
-               }
-               flush_lock = new Mutex("OGGFile::Flush lock");
-//             printf("End of headers at position: %lli\n", ftello(stream));
-       } else
-       if (rd)
-       {
-
-               if((stream = fopen(asset->path, "rb")) == 0)
-               {
-                       eprintf(_("Error while opening %s for reading. %m\n"), asset->path);
-                       return 1;
-               }
-
-               /* get file length */
-               struct stat file_stat;
-               stat(asset->path, &file_stat);
-               file_length = file_stat.st_size;
-
-               /* start up Ogg stream synchronization layer */
-               /* oy is used just here to parse header, we use separate syncs for video and audio*/
-               sync_window_t oy;
-               ogg_sync_init(&oy.sync);
-               // make sure we init the position structures to zero
-               read_buffer_at(stream, &oy, READ_SIZE, 0);
-
-
-               /* init supporting Vorbis structures needed in header parsing */
-               vorbis_info_init(&tf->vi);
-               vorbis_comment_init(&tf->vc);
-
-
-               /* init supporting Theora structures needed in header parsing */
-               theora_comment_init(&tf->tc);
-               theora_info_init(&tf->ti);
-
-
-
-               /* Ogg file open; parse the headers */
-               /* Only interested in Vorbis/Theora streams */
-               int stateflag = 0;
-               int theora_p = 0;
-               int vorbis_p = 0;
-               while(!stateflag)
-               {
-
-
-//                     int ret = read_buffer(stream, &oy, 4096);
-                       TRACE("FileOGG::open_file 60")
-//                     if(ret == 0)
-//                             break;
-
-                       while(take_page_out_autoadvance(stream, &oy, &tf->og) > 0)
-                       {
-                               ogg_stream_state test;
-
-                               /* is this a mandated initial header? If not, stop parsing */
-                               if(!ogg_page_bos(&tf->og))
-                               {
-                                       /* don't leak the page; get it into the appropriate stream */
-                               //      queue_page(&tf->og);
-                                       if(theora_p)ogg_stream_pagein(&tf->to, &tf->og);
-                                       if(vorbis_p)ogg_stream_pagein(&tf->vo, &tf->og);
-
-                                       stateflag = 1;
-                                       break;
-                               }
-
-                               ogg_stream_init(&test, ogg_page_serialno(&tf->og));
-                               ogg_stream_pagein(&test, &tf->og);
-                               ogg_stream_packetout(&test, &tf->op);
-
-                               /* identify the codec: try theora */
-                               if(!theora_p && theora_decode_header(&tf->ti, &tf->tc, &tf->op)>=0)
-                               {
-                                       /* it is theora */
-                                       memcpy(&tf->to, &test, sizeof(test));
-                                       theora_p = 1;
-       // find out granule shift - from liboggz's oggz_auto.c
-                                       unsigned char * header = tf->op.packet;
-                                       theora_keyframe_granule_shift = (char) ((header[40] & 0x03) << 3);
-                                       theora_keyframe_granule_shift |= (header[41] & 0xe0) >> 5;
-
-                               } else if(!vorbis_p && vorbis_synthesis_headerin(&tf->vi, &tf->vc, &tf->op)>=0)
-                               {
-                                       /* it is vorbis */
-                                       memcpy(&tf->vo, &test, sizeof(test));
-                                       vorbis_p = 1;
-                               } else
-                               {
-                                       /* whatever it is, we don't care about it */
-                                       ogg_stream_clear(&test);
-                               }
-                       }
-               /* fall through to non-bos page parsing */
-               }
-
-
-               /* we're expecting more header packets. */
-               while((theora_p && theora_p < 3) || (vorbis_p && vorbis_p < 3))
-               {
-                       int ret;
-
-                       /* look for further theora headers */
-                       while(theora_p && (theora_p < 3) && (ret = ogg_stream_packetout(&tf->to, &tf->op)))
-                       {
-                               if(ret < 0)
-                               {
-                                       eprintf(_("FileOGG: Error parsing Theora stream headers; corrupt stream?\n"));
-                                       return 1;
-                               }
-                               if(theora_decode_header(&tf->ti, &tf->tc, &tf->op))
-                               {
-                                       eprintf(_("FileOGG: Error parsing Theora stream headers; corrupt stream?\n"));
-                                       return 1;
-                               }
-                               theora_p++;
-                               if(theora_p == 3)
-                                       break;
-                       }
-
-                       /* look for more vorbis header packets */
-                       while(vorbis_p && (vorbis_p < 3) && (ret = ogg_stream_packetout(&tf->vo, &tf->op)))
-                       {
-                               if(ret<0)
-                               {
-                                       eprintf(_("FileOGG: Error parsing Vorbis stream headers; corrupt stream?\n"));
-                                       return 1;
-                               }
-                               if (vorbis_synthesis_headerin(&tf->vi, &tf->vc, &tf->op))
-                               {
-                                       eprintf(_("FileOGG: Error parsing Vorbis stream headers; corrupt stream?\n"));
-                                       return 1;
-                               }
-                               vorbis_p++;
-                               if (vorbis_p == 3)
-                                       break;
-                       }
-
-                       if ((!vorbis_p || vorbis_p == 3) && (!theora_p || theora_p == 3))
-                               break;
-                       /* The header pages/packets will arrive before anything else we
-                           care about, or the stream is not obeying spec */
-
-                       if(take_page_out_autoadvance(stream, &oy, &tf->og) > 0)
-                       {
-//                             queue_page(&tf->og); /* demux into the appropriate stream */
-                               if(theora_p) ogg_stream_pagein(&tf->to, &tf->og);
-                               if(vorbis_p) ogg_stream_pagein(&tf->vo, &tf->og);
-
-                       } else
-                       {
-                               eprintf(_("FileOGG: End of file while searching for codec headers.\n"));
-                               return 1;
-                       }
-               }
-               // Remember where the real data begins for later seeking purposes
-               filedata_begin = oy.file_pagepos;
-
-
-
-               /* and now we have it all.  initialize decoders */
-               if(theora_p)
-               {
-                       int ret;
-
-// WORKAROUND for bug in alpha4 version of theora:
-                       tf->td.internal_encode = 0;
-
-                       ret = theora_decode_init(&tf->td, &tf->ti);
-                       if( ret ) printf("theora_decode_init ret=%d\n", ret);
-                       double fps = (double)tf->ti.fps_numerator/tf->ti.fps_denominator;
-/*                     printf("FileOGG: Ogg logical stream %x is Theora %dx%d %.02f fps\n",
-                               (unsigned int)tf->to.serialno, tf->ti.width, tf->ti.height,
-                               fps);
-*/
-/*
-Not yet available in alpha4, we assume 420 for now
-
-                       switch(tf->ti.pixelformat)
-                       {
-                               case OC_PF_420: printf(" 4:2:0 video\n"); break;
-                               case OC_PF_422: printf(" 4:2:2 video\n"); break;
-                               case OC_PF_444: printf(" 4:4:4 video\n"); break;
-                               case OC_PF_RSVD:
-                               default:
-                                       printf(" video\n  (UNKNOWN Chroma sampling!)\n");
-                               break;
-                       }
-*/
-
-                       theora_cmodel = BC_YUV420P;
-
-                       if(tf->ti.width!=tf->ti.frame_width || tf->ti.height!=tf->ti.frame_height)
-                       {
-                               eprintf(_("Frame content is %dx%d with offset (%d,%d), We do not support this yet. You will get black border.\n"),
-                                                       tf->ti.frame_width, tf->ti.frame_height, tf->ti.offset_x, tf->ti.offset_y);
-                       }
-                       tf->videosync = new sync_window_t;
-                       ogg_sync_init(&tf->videosync->sync);
-                       tf->videosync->wlen = 0;
-
-                       ret = ogg_get_first_page(tf->videosync, tf->to.serialno, &tf->videopage);
-                       if( !ret ) printf("ogg_get_first_page ret=%d\n", ret);
-                       ogg_packet op;
-
-                       // we have headers already decoded, so just skip them
-                       ogg_stream_reset(&tf->to);
-                       ogg_stream_pagein(&tf->to, &tf->videopage);
-                       while (1)
-                       {
-                               while (ogg_stream_packetpeek(&tf->to, NULL) != 1)
-                               {
-                                       if (!ogg_get_next_page(tf->videosync, tf->to.serialno, &tf->videopage))
-                                       {
-                                               printf(_("FileOGG: Cannot find next page while looking for first non-header packet\n"));
-                                               return 1;
-                                       }
-                                       ogg_stream_pagein(&tf->to, &tf->videopage);
-                               }
-                               ogg_stream_packetout(&tf->to, &op);
-                               if (!theora_packet_isheader(&op))
-                                       break;
-                       }
-                       // now get to the page of the finish of the first packet
-                       while (ogg_page_packets(&tf->videopage) == 0)
-                       {
-                               if (ogg_page_granulepos(&tf->videopage) != -1)
-                               {
-                                       printf(_("FileOGG: Broken ogg file - broken page: ogg_page_packets == 0 and granulepos != -1\n"));
-                                       return 1;
-                               }
-                               ogg_get_next_page(tf->videosync, tf->to.serialno, &tf->videopage);
-                       }
-                       // FIXME - LOW PRIORITY - start counting at first decodable keyframe!
-                       // but then we have to fix a/v sync somehow
-                       start_frame = (int64_t) (theora_granule_frame (&tf->td, ogg_page_granulepos(&tf->videopage)) - ogg_page_packets(&tf->videopage)) + 1;
-
-                       ret = ogg_get_last_page(tf->videosync, tf->to.serialno, &tf->videopage);
-                       last_frame = (int64_t) (theora_granule_frame (&tf->td, ogg_page_granulepos(&tf->videopage)));
-                       asset->video_length = last_frame - start_frame + 1;
-//                     printf("FileOGG:: first frame: %lli, last frame: %lli, video length: %lli\n", start_frame, last_frame, asset->video_length);
-
-                       asset->layers = 1;
-                       // FIXME - LOW PRIORITY Cinelerra does not honor the frame_width and frame_height
-                       asset->width = tf->ti.width;
-                       asset->height = tf->ti.height;
-// Don't want a user configured frame rate to get destroyed
-                       if(!asset->frame_rate)
-                               asset->frame_rate = fps;
-// All theora material is noninterlaced by definition
-                       if(!asset->interlace_mode)
-                               asset->interlace_mode = ILACE_MODE_NOTINTERLACED;
-
-       /*              ogg_get_page_of_frame(tf->videosync, tf->to.serialno, &og, 0 +start_frame);
-                       ogg_get_page_of_frame(tf->videosync, tf->to.serialno, &og, 1 +start_frame);
-                       ogg_get_page_of_frame(tf->videosync, tf->to.serialno, &og, 5 +start_frame);
-                       ogg_get_page_of_frame(tf->videosync, tf->to.serialno, &og, 206 +start_frame);
-                       ogg_get_page_of_frame(tf->videosync, tf->to.serialno, &og, 207 +start_frame);
-                       ogg_get_page_of_frame(tf->videosync, tf->to.serialno, &og, 208 +start_frame);
-
-                       int64_t kf;
-                       ogg_seek_to_keyframe(tf->videosync, tf->to.serialno, 0 + start_frame, &kf);
-                       ogg_seek_to_keyframe(tf->videosync, tf->to.serialno, 1 + start_frame, &kf);
-                       ogg_seek_to_keyframe(tf->videosync, tf->to.serialno, 5 + start_frame, &kf);
-                       ogg_seek_to_keyframe(tf->videosync, tf->to.serialno, 66 + start_frame, &kf);
-                       //printf("Keyframe: %lli\n", kf);
-                       ogg_seek_to_keyframe(tf->videosync, tf->to.serialno, 1274 + start_frame, &kf);
-*/
-
-                       set_video_position(0); // make sure seeking is done to the first sample
-                       ogg_frame_position = -10;
-                       asset->video_data = 1;
-                       strncpy(asset->vcodec, "theo", 4);
-
-
-//                 report_colorspace(&ti);
-//                 dump_comments(&tc);
-               } else
-               {
-                       /* tear down the partial theora setup */
-                       theora_info_clear(&tf->ti);
-                       theora_comment_clear(&tf->tc);
-               }
-
-
-               if(vorbis_p)
-               {
-                       vorbis_synthesis_init(&tf->vd, &tf->vi);
-                       vorbis_block_init(&tf->vd, &tf->vb);
-/*                     eprintf(_("FileOGG: Ogg logical stream %x is Vorbis %d channel %d Hz audio.\n"),
-                               (unsigned int)tf->vo.serialno, tf->vi.channels, (int)tf->vi.rate);
-*/
-                       /* init audio_sync structure */
-                       tf->audiosync = new sync_window_t;
-                       ogg_sync_init(&tf->audiosync->sync);
-                       tf->audiosync->wlen = 0;
-
-                       ogg_get_first_page(tf->audiosync, tf->vo.serialno, &tf->audiopage);
-                       ogg_packet op;
-                       ogg_stream_reset(&tf->vo);
-                       // FIXME - LOW PRIORITY should be getting pages until one has granulepos,
-                       //   probably never happens in pracitce
-                       ogg_ret2 = ogg_stream_pagein(&tf->vo, &tf->audiopage);
-                       ogg_int64_t accumulated = 0;
-                       long lastblock = -1;
-                       int result;
-                       while((result = ogg_stream_packetout(&tf->vo, &op)))
-                       {
-                               if(result > 0)
-                               { // ignore holes
-                                       long thisblock =  vorbis_packet_blocksize(&tf->vi, &op);
-                                       if(lastblock != -1)
-                                               accumulated += (lastblock + thisblock) >> 2;
-                                       lastblock = thisblock;
-                               }
-                       }
-                       start_sample = ogg_page_granulepos(&tf->audiopage) - accumulated;
-/*
-                       printf("Begin: %lli, To byte: %lli,  granule: %lli, serialno: %x\n",
-                                       tf->audiosync->file_pagepos_found,
-                                       tf->audiosync->file_pagepos_found + tf->audiopage.body_len + tf->audiopage.header_len,
-                                       ogg_page_granulepos(&tf->audiopage),
-                                       ogg_page_serialno(&tf->audiopage));
-                       while (ogg_get_next_page(tf->audiosync, tf->vo.serialno, &tf->audiopage))
-                               printf("At byte: %lli, To byte: %lli,  granule: %lli, serialno: %x\n",
-                                       tf->audiosync->file_pagepos_found,
-                                       tf->audiosync->file_pagepos_found + tf->audiopage.body_len + tf->audiopage.header_len,
-                                       ogg_page_granulepos(&tf->audiopage),
-                                       ogg_page_serialno(&tf->audiopage));
-*/
-
-                       ogg_ret1 = ogg_get_last_page(tf->audiosync, tf->vo.serialno, &tf->audiopage);
-                       last_sample = ogg_page_granulepos(&tf->audiopage);
-                       asset->audio_length = last_sample - start_sample;
-
-/*                     printf("FileOGG:: First sample: %lli, last_sample: %lli\n", start_sample, last_sample);
-                       printf("FileOGG:: audio length: samples: %lli, playing time: %f\n", asset->audio_length, 1.0 * asset->audio_length / tf->vi.rate);
-*/
-/*                     printf("End: %lli, To byte: %lli,  granule: %lli, serialno: %x\n",
-                                       tf->audiosync->file_pagepos_found,
-                                       tf->audiosync->file_pagepos_found + tf->audiopage.body_len + tf->audiopage.header_len,
-                                       ogg_page_granulepos(&tf->audiopage),
-                                       ogg_page_serialno(&tf->audiopage));
-                       while (ogg_get_prev_page(tf->audiosync, tf->vo.serialno, &tf->audiopage))
-                               printf("At byte: %lli, To byte: %lli,  granule: %lli, serialno: %x\n",
-                                       tf->audiosync->file_pagepos_found,
-                                       tf->audiosync->file_pagepos_found + tf->audiopage.body_len + tf->audiopage.header_len,
-                                       ogg_page_granulepos(&tf->audiopage),
-                                       ogg_page_serialno(&tf->audiopage));
-*/
-
-/*                     ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 0);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 1);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 50);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 5000);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 30000);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 50000);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 90000);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 95999);
-                       ogg_get_page_of_sample(tf->audiosync, tf->vo.serialno, &tf->audiopage, 96000);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 0);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 1);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 5000);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 30000);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 50000);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 90000);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 95999);
-                       ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, 96000);
-*/
-                       asset->channels = tf->vi.channels;
-                       if(!asset->sample_rate)
-                               asset->sample_rate = tf->vi.rate;
-                       asset->audio_data = 1;
-
-
-                       ogg_sample_position = -10;
-                       set_audio_position(0); // make sure seeking is done to the first sample
-                       strncpy(asset->acodec, "vorb", 4);
-
-
-               } else
-               {
-                       /* tear down the partial vorbis setup */
-                       vorbis_info_clear(&tf->vi);
-                       vorbis_comment_clear(&tf->vc);
-               }
-
-               ogg_sync_clear(&oy.sync);
-
-       }
-       return 0;
-}
-
-int FileOGG::ogg_get_prev_page(sync_window_t *sw, long serialno, ogg_page *og)
-{
-       ogg_page page;
-       off_t filepos = sw->file_pagepos_found - READ_SIZE;
-       int first_page_offset = 0;
-       int done = 0;
-       int read_len = READ_SIZE;
-
-//     printf("fp: %lli pagepos found: %lli\n", filepos, sw->file_pagepos_found);
-       while (!done)
-       {
-               if (filepos < 0)
-               {
-//                     read_len = read_len - (filedata_begin - filepos);
-                       read_len = read_len + filepos;
-                       filepos = 0;
-               }
-               if (read_len <= 0)
-                       return 0;
-               int have_read = read_buffer_at(stream, sw, read_len, filepos);
-
-//             printf("reading at %lli, len: %i, read: %i, pagepos: %lli, pageposfound: %lli\n", filepos, read_len, have_read, sw->file_pagepos, sw->file_pagepos_found);
-//             printf("Buffer position: %lli\n", sw->file_bufpos);
-//             printf("SS: storage: %i, fill: %i, returned: %i\n", sw->sync.storage, sw->sync.fill, sw->sync.returned);
-//             printf("US: unsynced%i, headrebytes: %i, bodybyes: %i\n", sw->sync.unsynced, sw->sync.headerbytes, sw->sync.bodybytes);
-//             printf("data: %c %c %c %c\n", sw->sync.data[0], sw->sync.data[1], sw->sync.data[2], sw->sync.data[3]);
-               if (!have_read)
-                       return 0;
-
-// read all pages in the buffer
-               int page_offset = 0;
-               int page_length = 0;
-               int first_page = 1;
-               while (first_page || page_length)
-               {
-                       // if negative, skip bytes
-                       while ((page_length = sync_and_take_page_out(sw, &page)) < 0)
-                       {
-                               page_offset -= page_length;
-
-//                             if (filepos == 0)
-//                                     printf("BBBb page_len: %i\n", page_length);
-                       }
-//                     if (filepos == 0 && page_length)
-//                     {
-//                             printf("AAAAAAAAAAAAAAAAAAAAAAAAAaaa\n");
-//                             printf("pp: %lli %x\n", sw->file_pagepos, ogg_page_serialno(&page));
-//                     }
-                       if (first_page)
-                               first_page_offset = page_offset;
-                       first_page = 0;
-//                     printf("pl: %i, serial: %x iscem: %x\n", page_length, ogg_page_serialno(&page), serialno);
-                       if (page_length && ogg_page_serialno(&page) == serialno)
-                       {
-                               // we will copy every page until last page in this buffer
-                               done = 1;
-
-                               sw->file_pagepos_found = sw->file_pagepos - page.header_len - page.body_len;
-//                             printf("got it : %lli %i %i\n", sw->file_pagepos, page.header_len, page.body_len);
-                               memcpy(og, &page, sizeof(page));
-                       }
-               }
-//             printf("fpo: %i\n", first_page_offset);
-               filepos += first_page_offset - READ_SIZE;
-       }
-
-//     printf("finished\n");
-       if (done)
-               return 1;
-       else
-               return 0;
-}
-
-int FileOGG::ogg_get_last_page(sync_window_t *sw, long serialno, ogg_page *og)
-{
-       ogg_page page;
-       off_t filepos = file_length - READ_SIZE;
-       if (filepos < 0)
-               filepos = 0;
-
-       int first_page_offset = 0;
-       int done = 0;
-       while (!done && filepos >= 0)
-       {
-               //int readlen =
-                 read_buffer_at(stream, sw, READ_SIZE, filepos);
-
-// read all pages in the buffer
-               int page_offset = 0;
-               int page_length = 0;
-               int first_page = 1;
-               while (first_page || page_length)
-               {
-                       // if negative, skip bytes
-                       while ((page_length = sync_and_take_page_out(sw, &page)) < 0)
-                                       page_offset -= page_length;
-                       if (first_page)
-                               first_page_offset = page_offset;
-                       first_page = 0;
-                       if (page_length && ogg_page_serialno(&page) == serialno)
-                       {
-                               // we will copy every page until last page in this buffer
-                               done = 1;
-                               sw->file_pagepos_found = sw->file_pagepos - page.header_len - page.body_len;
-                               memcpy(og, &page, sizeof(page));
-                       }
-               }
-               filepos = filepos + first_page_offset - READ_SIZE;
-       }
-
-       if (done)
-               return 1;
-       else
-               return 0;
-}
-
-int FileOGG::ogg_get_first_page(sync_window_t *sw, long serialno, ogg_page *og)
-{
-//     printf("FileOGG:: Seeking to first page at %lli\n", filedata_begin);
-       read_buffer_at(stream, sw, READ_SIZE, 0);
-// we don't even need to sync since we _know_ it is right
-       return (ogg_get_next_page(sw, serialno, og));
-}
-
-int FileOGG::ogg_seek_to_databegin(sync_window_t *sw, long serialno)
-{
-
-//     printf("FileOGG:: Seeking to first page at %lli\n", filedata_begin);
-       read_buffer_at(stream, sw, READ_SIZE, filedata_begin);
-// we don't even need to sync since we _know_ it is right
-       return (0);
-}
-
-int FileOGG::ogg_get_next_page(sync_window_t *sw, long serialno, ogg_page *og)
-{
-       while (take_page_out_autoadvance(stream, sw, og) > 0)
-       {
-               if (ogg_page_serialno(og) == serialno)
-               {
-                       sw->file_pagepos_found = sw->file_pagepos - og->header_len - og->body_len;
-                       return 1;
-               }
-       }
-       return 0;
-}
-
-int FileOGG::ogg_sync_and_get_next_page(sync_window_t *sw, long serialno, ogg_page *og)
-{
-// TODO: Put better error reporting inhere
-       int ret;
-       while ((ret = sync_and_take_page_out(sw, og)) < 0)
-       {
-               // do nothing;
-       }
-       if (ret == 0)
-               return 0;
-       if (ogg_page_serialno(og) == serialno)
-       {
-               sw->file_pagepos_found = sw->file_pagepos - og->header_len - og->body_len;
-               return 1;
-       }
-       while (ogg_get_next_page(sw, serialno, og))
-               if (ogg_page_serialno(og) == serialno)
-               {
-                       sw->file_pagepos_found = sw->file_pagepos - og->header_len - og->body_len;
-                       return 1;
-               }
-
-       return 0;
-}
-// Returns:
-// >= 0, number of sample within a page
-// <  0 error
-int FileOGG::ogg_get_page_of_sample(sync_window_t *sw, long serialno, ogg_page *og, int64_t sample)
-{
-// First make an educated guess about position
-       if (sample >= asset->audio_length + start_sample)
-       {
-               printf(_("FileOGG: Illegal seek beyond end of samples\n"));
-               return 0;
-       }
-       off_t educated_guess = filedata_begin + (file_length - filedata_begin) * (sample - start_sample) / asset->audio_length - READ_SIZE;
-       if (educated_guess < 0)
-               educated_guess = 0;
-//     printf("My educated guess: %lli\n", educated_guess);
-// now see if we won
-       read_buffer_at(stream, sw, READ_SIZE, educated_guess);
-       ogg_sync_and_get_next_page(sw, serialno, og);
-       int64_t end_sample = ogg_page_granulepos(og);
-       // linear seek to the sample
-       int64_t start_sample = 0;
-// TODO: Use bisection also
-//     printf("Next page granulepos: %lli, pagepos: %lli\n", end_sample, sw->file_pagepos_found);
-       if (end_sample <= sample)
-       {
-       // scan forward
-               while (end_sample <= sample)
-               {
-                       ogg_get_next_page(sw, serialno, og);
-                       start_sample = end_sample;
-                       end_sample = ogg_page_granulepos(og);
-               }
-               ogg_get_prev_page(sw, serialno, og);
-               while (ogg_page_continued(og) && ogg_page_packets(og) == 1)
-                       ogg_get_prev_page(sw, serialno, og);
-       } else
-       {
-       // scan backward
-               start_sample = end_sample;
-               while (start_sample > sample || (ogg_page_continued(og) &&
-                       ogg_page_packets(og) == 1))
-               {
-//                     printf("get prev page: %lli pagepos:%lli\n", ogg_page_granulepos(og), sw->file_pagepos_found);
-                       ogg_get_prev_page(sw, serialno, og);
-                       end_sample = start_sample;
-                       start_sample = ogg_page_granulepos(og);
-               }
-       // go forward one page at the end
-
-       }
-
-//     printf("For sample %lli we need to start decoding on page with granulepos: %lli\n", sample, ogg_page_granulepos(og));
-       return 1;
-}
-
-// seeks, so next sample returned will be the correct one
-// sample here is still the vorbis sample number (= cinelerra sample number + start_sample)
-// reinits the decoding engine
-
-int FileOGG::ogg_seek_to_sample(sync_window_t *sw, long serialno, int64_t sample)
-{
-       // MAYBE FIXME - find out if we really are decoding previous two packets or not
-       // get to the sample
-       ogg_page og;
-       ogg_packet op;
-//     printf("Calling get page of sample\n");
-       if (!ogg_get_page_of_sample(sw, serialno, &og, sample))
-       {
-               eprintf(_("FileOGG: Seeking to sample's page failed\n"));
-               return 0;
-       }
-//     printf("Pagepos: %lli\n", sw->file_pagepos);
-       vorbis_synthesis_restart(&tf->vd);
-       ogg_stream_reset(&tf->vo);
-       ogg_stream_pagein(&tf->vo, &og);
-       int sync = 0;
-//     printf("seeking to sample : %lli , starting at page with gpos: %lli\n", sample, ogg_page_granulepos(&og));
-
-       int64_t current_comming_sample = -1;
-       while (1)
-       {
-
-               // make sure we have a packet ready
-               while (ogg_stream_packetpeek(&tf->vo, NULL) != 1)
-               {
-                       if (!ogg_get_next_page(sw, serialno, &og))
-                       {
-                               eprintf(_("FileOGG: Cannot find next page while seeking\n"));
-                               return 0;
-                       }
-                       ogg_stream_pagein(&tf->vo, &og);
-               }
-               ogg_stream_packetout(&tf->vo, &op);
-               if (sync)
-               {
-
-                       if(!vorbis_synthesis(&tf->vb, &op))
-                       {
-                               ogg_ret0 = vorbis_synthesis_blockin(&tf->vd, &tf->vb);
-                               int64_t previous_comming_sample = current_comming_sample;
-                               current_comming_sample += vorbis_synthesis_pcmout(&tf->vd, NULL);
-                               if (current_comming_sample > sample)
-                               {
-                                       if (previous_comming_sample > sample)
-                                       {
-                                               eprintf(_("Ogg decoding error while seeking sample\n"));
-                                       }
-                                       vorbis_synthesis_read(&tf->vd, (sample - previous_comming_sample));
-//                                     printf("WE GOT IT, samples already decoded: %jd\n", vorbis_synthesis_pcmout(&tf->vd,NULL));
-                                       return 1; // YAY next sample read is going to be ours, sexy!
-                               } else
-                               {
-                                       // discard decoded data before current sample
-                                       vorbis_synthesis_read(&tf->vd, (current_comming_sample - previous_comming_sample));
-
-                               }
-                       }
-               }
-               if (!sync && op.granulepos >= 0)
-               {
-                       sync = 1;
-                       current_comming_sample = op.granulepos;
-                       if(!vorbis_synthesis(&tf->vb, &op))
-                       {
-                               vorbis_synthesis_blockin(&tf->vd, &tf->vb);
-                               if (vorbis_synthesis_pcmout(&tf->vd, NULL) != 0)
-                               {
-                                       eprintf(_("FileOGG: Something wrong while trying to seek\n"));
-                                       return 0;
-                               }
-
-                       }
-
-               }
-       }
-
-
-       return 0;
-}
-
-int FileOGG::ogg_get_page_of_frame(sync_window_t *sw, long serialno, ogg_page *og, int64_t frame)
-{
-       if (frame >= asset->video_length + start_frame)
-       {
-               eprintf(_("FileOGG: Illegal seek beyond end of frames\n"));
-               return 0;
-       }
-//     printf("frame: %lli start frame: %lli\n", frame, start_frame);
-//     printf("file_length: %lli filedata_begin: %lli\n", file_length, filedata_begin);
-       off_t educated_guess = filedata_begin + (file_length - filedata_begin) * (frame - start_frame) / asset->video_length - READ_SIZE/2;
-//     educated_guess += 100000;
-       if (educated_guess > file_length - READ_SIZE)
-               educated_guess = file_length - READ_SIZE;
-       if (educated_guess < filedata_begin)
-               educated_guess = filedata_begin;
-//     printf("My educated guess: %lli\n", educated_guess);
-// now see if we won
-       read_buffer_at(stream, sw, READ_SIZE, educated_guess);
-       if( !ogg_sync_and_get_next_page(sw, serialno, og) ) {
-               printf(_("FileOGG: ogg_sync_and_get_next_page failed\n"));
-               return 0;
-       }
-       int64_t pageend_frame;
-       //int read_back = 0;
-       // find the page with "real" ending
-       while ((pageend_frame = ogg_page_granulepos(og)) == -1)
-       {
-               if (ogg_get_next_page(sw, serialno, og) == 0)
-               {
-                       //read_back = 1;
-                       break;
-               }
-       }
-       pageend_frame = theora_granule_frame(&tf->td, ogg_page_granulepos(og));
-
-       // FIXME - MEDIUM PRIORITY: read back if we've gone too far and no page of our serialno at all can be found
-
-
-       // linear seek to the sample
-// TODO: Use bisection also
-//     printf("Next page granulepos: %lli, pagepos: %lli\n", end_sample, sw->file_pagepos_found);
-       //int discard_packets = 0;
-       int missp = 0;
-       int missm = 0;
-       if (pageend_frame <= frame)
-       {
-       // scan forward
-               while (pageend_frame < frame)
-               {
-                       do {
-                               ogg_get_next_page(sw, serialno, og);
-                       } while (ogg_page_packets(og) == 0);
-                       pageend_frame = theora_granule_frame(&tf->td, ogg_page_granulepos(og));
-                       missp++;
-               }
-               // go back if this frame starts on previous page
-               if (ogg_page_continued(og) && pageend_frame - ogg_page_packets(og) == frame - 1)
-               {
-                       do {
-                               ogg_get_prev_page(sw, serialno, og);
-                       } while (ogg_page_packets(og) == 0 && ogg_page_continued(og));
-               }
-               pageend_frame = theora_granule_frame(&tf->td, ogg_page_granulepos(og));
-       } else
-       {
-       // scan backward
-               int64_t first_frame_on_page = theora_granule_frame(&tf->td, ogg_page_granulepos(og)) - ogg_page_packets(og) + 2;
-               if (!ogg_page_continued(og))
-                       first_frame_on_page--;
-               while (first_frame_on_page > frame)
-               {
-//                     printf("get prev page: %lli pagepos:%lli\n", ogg_page_granulepos(og), sw->file_pagepos_found);
-                       do {
-                               ogg_get_prev_page(sw, serialno, og);
-                       } while (ogg_page_packets(og) == 0 && ogg_page_continued(og));
-                       missm++;
-//                     pageend_frame = theora_granule_frame(&tf->td, ogg_page_granulepos(og));
-                       first_frame_on_page = theora_granule_frame(&tf->td, ogg_page_granulepos(og)) - ogg_page_packets(og) + 2;
-                       if (!ogg_page_continued(og))
-                               first_frame_on_page--;
-               }
-       }
-//     printf("Miss plus: %i, miss minus: %i\n", missp, missm);
-//     printf("last frame of page with frame : %lli\n", pageend_frame);
-       return 1;
-}
-
-
-int FileOGG::ogg_seek_to_keyframe(sync_window_t *sw, long serialno, int64_t frame, int64_t *position)
-{
-//printf("seek %jd\n", frame);
-       ogg_page og;
-       ogg_packet op;
-
-       if( !ogg_get_page_of_frame(sw, serialno, &og, frame) ) {
-               eprintf(_("FileOGG: seek to frame failed\n"));
-               return 0;
-       }
-       // find a page with packets
-       while( ogg_page_packets(&og) == 0 ) {
-               ogg_get_prev_page(sw, serialno, &og);
-       }
-       int64_t granulepos = ogg_page_granulepos(&og);
-       granulepos &= ~((1<<theora_keyframe_granule_shift)-1);
-       int64_t iframe = theora_granule_frame(&tf->td, granulepos);
-       // iframe based on granulepos
-       if( frame < iframe || !ogg_get_page_of_frame(sw, serialno, &og, iframe) )  {
-               eprintf(_("FileOGG: seek to iframe failed\n"));
-               return 0;
-       }
-       while( ogg_page_packets(&og) == 0 ) {
-               ogg_get_prev_page(sw, serialno, &og);
-       }
-       int64_t pageend_frame = theora_granule_frame(&tf->td, ogg_page_granulepos(&og));
-       int64_t frames_on_page = ogg_page_packets(&og);
-       if( ogg_page_continued(&og) ) --frames_on_page;
-       // get frame before page with with iframe
-       int64_t page_frame = pageend_frame - frames_on_page;
-       if( page_frame < 0 ) page_frame = 0;
-//printf("iframe %jd, page_frame %jd, frames_on_page %jd\n", iframe, page_frame, frames_on_page);
-       ogg_stream_reset(&tf->to);
-       ogg_stream_pagein(&tf->to, &og);
-
-       while( ++page_frame < iframe ) {
-               while( ogg_stream_packetpeek(&tf->to, NULL) != 1 ) {
-                       if( !ogg_get_next_page(sw, serialno, &og) ) {
-                               eprintf(_("FileOGG: Cannot find next page while seeking\n"));
-                               return 0;
-                       }
-                       ogg_stream_pagein(&tf->to, &og);
-               }
-               ogg_stream_packetout(&tf->to, &op);
-       }
-
-       *position = iframe - 1;
-       return 1;
-}
-
-
-int FileOGG::check_sig(Asset *asset)
-{
-
-       FILE *fd = fopen(asset->path, "rb");
-
-// Test for "OggS"
-       fseek(fd, 0, SEEK_SET);
-       char data[4];
-
-       (void)fread(data, 4, 1, fd);
-
-       if(data[0] == 'O' &&
-               data[1] == 'g' &&
-               data[2] == 'g' &&
-               data[3] == 'S')
-       {
-
-               fclose(fd);
-//             printf("Yay, we have an ogg file\n");
-               return 1;
-       }
-
-       fclose(fd);
-
-       return 0;
-
-}
-
-int FileOGG::close_file()
-{
-
-       if (file->wr)
-       {
-               if (final_write)
-               {
-                       if (asset->audio_data)
-                               write_samples_vorbis(0, 0, 1); // set eos
-                       if (asset->video_data)
-                               write_frames_theora(0, 1, 1); // set eos
-               }
-               flush_ogg(1); // flush all
-
-               if (asset->audio_data)
-               {
-                       vorbis_block_clear (&tf->vb);
-                       vorbis_dsp_clear (&tf->vd);
-                       vorbis_info_clear (&tf->vi);
-                       ogg_stream_clear (&tf->vo);
-               }
-               if (asset->video_data)
-               {
-                       theora_info_clear (&tf->ti);
-                       ogg_stream_clear (&tf->to);
-                       theora_clear (&tf->td);
-               }
-
-               if (stream) fclose(stream);
-               stream = 0;
-       }
-       else
-       if (file->rd)
-       {
-               if (asset->audio_data)
-               {
-                       vorbis_block_clear (&tf->vb);
-                       vorbis_dsp_clear (&tf->vd);
-                       vorbis_comment_clear (&tf->vc);
-                       vorbis_info_clear (&tf->vi);
-                       ogg_stream_clear (&tf->vo);
-               }
-               theora_comment_clear(&tf->tc);
-               if (asset->video_data)
-               {
-                       theora_info_clear (&tf->ti);
-                       theora_comment_clear (&tf->tc);
-                       theora_clear (&tf->td);
-                       ogg_stream_clear (&tf->to);
-               }
-
-
-               if (stream) fclose(stream);
-               stream = 0;
-
-       }
-       return 0;
-}
-
-int FileOGG::close_file_derived()
-{
-//printf("FileOGG::close_file_derived(): 1\n");
-       if (stream) fclose(stream);
-       stream = 0;
-       return 0;
-}
-
-int64_t FileOGG::get_video_position()
-{
-//     printf("GVP\n");
-       return next_frame_position - start_frame;
-}
-
-int64_t FileOGG::get_audio_position()
-{
-       return next_sample_position - start_sample;
-}
-
-int FileOGG::set_video_position(int64_t x)
-{
-//     x=0;
-//     printf("SVP: %lli\n", x);
-
-       next_frame_position = x + start_frame;
-       return 1;
-}
-
-
-int FileOGG::colormodel_supported(int colormodel)
-{
-//     printf("CMS\n");
-
-       if (colormodel == BC_YUV420P)
-               return BC_YUV420P;
-       else
-               return colormodel;
-}
-int FileOGG::get_best_colormodel(Asset *asset, int driver)
-{
-
-       return BC_YUV420P;
-}
-
-
-int FileOGG::read_frame(VFrame *frame)
-{
-
-       if(!stream) return 1;
-
-
-       // skip is cheaper than seek, do it...
-       int decode_frames = 0;
-       int expect_keyframe = 0;
-       if (ogg_frame_position >= 0 &&
-           next_frame_position >= ogg_frame_position &&
-           next_frame_position - ogg_frame_position < 32)
-       {
-               decode_frames = next_frame_position - ogg_frame_position;
-       } else
-       if (next_frame_position != ogg_frame_position)
-       {
-               if (!ogg_seek_to_keyframe(tf->videosync, tf->to.serialno,
-                       next_frame_position, &ogg_frame_position)) {
-                       eprintf(_("FileOGG:: Error while seeking to frame's keyframe"
-                               " (frame: %jd, keyframe: %jd)\n"),
-                               next_frame_position, ogg_frame_position);
-                       return 1;
-               }
-//             printf("For frame: %lli, keyframe is: %lli\n", next_frame_position,ogg_frame_position);
-               // skip frames must be > 0 here
-               decode_frames = next_frame_position - ogg_frame_position;
-               if (decode_frames <= 0)
-               {
-                       eprintf(_("FileOGG:: Error while seeking to keyframe,"
-                               " wrong keyframe number (frame: %jd, keyframe: %jd)\n"),
-                               next_frame_position, ogg_frame_position);
-                       return 1;
-
-               }
-               expect_keyframe = 1;
-       }
-
-//     printf("Frames to decode: %i\n", decode_frames);
-
-// THIS IS WHAT CAUSES SLOWNESS OF SEEKING, but we can do nothing about it.
-       int ret = -1;
-       while (decode_frames > 0)
-       {
-               ogg_page og;
-               ogg_packet op;
-               while (ogg_stream_packetpeek(&tf->to, NULL) != 1)
-               {
-                       if (!ogg_get_next_page(tf->videosync, tf->to.serialno, &og))
-                       {
-                               eprintf(_("FileOGG: Cannot find next page while seeking\n"));
-                               return 1;
-                       }
-                       ogg_stream_pagein(&tf->to, &og);
-               }
-               ogg_stream_packetout(&tf->to, &op);
-               if( theora_packet_isheader(&op) ) continue;
-//printf("frame %jd, key %d\n", ogg_frame_position, theora_packet_iskeyframe(&op));
-               if (expect_keyframe && !theora_packet_iskeyframe(&op))
-               {
-                               eprintf(_("FileOGG: Expecting keyframe, but didn't get it\n"));
-                       //      return 1; this is generally not a fatal error
-               }
-               expect_keyframe = 0;
-
-               // decode
-               ret = theora_decode_packetin(&tf->td, &op);
-//if(ret < 0 )printf("ret = %d\n", ret);
-               decode_frames --;
-               ogg_frame_position ++;
-       }
-       if( ret >= 0 ) {
-               yuv_buffer yuv;
-               int ret = theora_decode_YUVout (&tf->td, &yuv);
-               if (ret)
-               {
-                       eprintf(_("FileOGG: theora_decode_YUVout failed with code %i\n"), ret);
-               }
-
-// Dirty magic
-/*             yuv.y += yuv.y_stride * (yuv.y_height - 1);
-               yuv.u += yuv.uv_stride * (yuv.uv_height - 1);
-               yuv.v += yuv.uv_stride * (yuv.uv_height - 1);
-               yuv.y_stride = - yuv.y_stride;
-               yuv.uv_stride = - yuv.uv_stride;*/
-               VFrame *temp_frame = new VFrame(yuv.y, -1, 0,
-                                       yuv.u - yuv.y, yuv.v - yuv.y, - yuv.y_stride,
-                                       yuv.y_height, BC_YUV420P, - yuv.y_stride);
-               // copy into temp frame...
-
-               BC_CModels::transfer(frame->get_rows(),
-                       temp_frame->get_rows(),
-                       frame->get_y(),
-                       frame->get_u(),
-                       frame->get_v(),
-                       temp_frame->get_y(),
-                       temp_frame->get_u(),
-                       temp_frame->get_v(),
-                       0,
-                       0,
-                       yuv.y_width,
-                       yuv.y_height,
-                       0,
-                       0,
-                       yuv.y_width,  // temp_frame can be larger than frame if width not dividable by 16
-                       yuv.y_height,
-                       BC_YUV420P,
-                       frame->get_color_model(),
-                       0,
-                       -temp_frame->get_w(),
-                       frame->get_w());
-               delete temp_frame;
-       }
-
-       next_frame_position ++;
-
-       return 0;
-}
-
-
-
-int FileOGG::ogg_decode_more_samples(sync_window_t *sw, long serialno)
-{
-       ogg_page og;
-       ogg_packet op;
-       int done = 0;
-       while (!done)
-       {
-               while (ogg_stream_packetpeek(&tf->vo, NULL) != 1)
-               {
-                       if (!ogg_get_next_page(sw, serialno, &og))
-                       {
-                               eprintf(_("FileOGG: Cannot find next page while trying to decode more samples\n"));
-                               return 0;
-                       }
-                       ogg_stream_pagein(&tf->vo, &og);
-               }
-               ogg_stream_packetout(&tf->vo, &op);
-               if(!vorbis_synthesis(&tf->vb, &op))
-               {
-                       done = 1;
-                       vorbis_synthesis_blockin(&tf->vd, &tf->vb);
-               }
-       }
-       return 1;
-}
-
-int FileOGG::set_audio_position(int64_t x)
-{
-       next_sample_position = x + start_sample;
-       return 0;
-}
-
-int FileOGG::move_history(int from, int to, int len)
-{
-       if( len > 0 ) {
-               for(int i = 0; i < asset->channels; i++)
-                       memmove(pcm_history[i] + to, pcm_history[i] + from, sizeof(float) * len);
-       }
-       history_start = history_start + from - to;
-       if( history_start < 0 ) history_start = 0;
-       return 0;
-}
-
-int FileOGG::read_samples(double *buffer, int64_t len)
-{
-       float **vorbis_buffer;
-       if (len <= 0)
-               return 0;
-//     printf("Reading samples: Channel: %i, number of samples: %lli, reading at :%lli\n", file->current_channel, len, next_sample_position);
-//             printf("\tnext_sample_position: %lli, length: %i\n", next_sample_position, len);
-//             printf("\thistory_start: %lli, length: %i\n", history_start, history_size);
-
-       if(len > HISTORY_MAX)
-       {
-               eprintf(_("max samples=%d\n"), HISTORY_MAX);
-               return 1;
-       }
-
-       if(!pcm_history)
-       {
-               pcm_history = new float*[asset->channels];
-               for(int i = 0; i < asset->channels; i++)
-                       pcm_history[i] = new float[HISTORY_MAX];
-               history_start = -100000000; // insane value to trigger reload
-               history_size = 0;
-       }
-
-       int64_t hole_start = -1;
-       int64_t hole_len = -1;
-       int64_t hole_absstart = -1;
-       int64_t hole_fill = 0;
-
-       if (history_start < next_sample_position && history_start + history_size > next_sample_position && history_start + history_size < next_sample_position + len)
-       {
-//             printf("a\n");
-               hole_fill = 1;
-               hole_start = history_start + history_size - next_sample_position;
-               hole_len = history_size - hole_start;
-               hole_absstart = next_sample_position + hole_start;
-               move_history(next_sample_position - history_start,
-                               0,
-                               hole_start); //
-
-       } else
-       if (next_sample_position < history_start && history_start < next_sample_position + len)
-       {
-//             printf("b\n");
-               hole_fill = 1;
-               hole_start = 0;
-               hole_len = history_start - next_sample_position;
-               hole_absstart = next_sample_position;
-//             printf("hs: %lli, histstart: %lli, next_sample_position: %lli\n", history_size, history_start, next_sample_position);
-//             printf("to: 0, from: %lli, size: %lli\n",
- //                            history_start - next_sample_position,
-//                             history_size - history_start + next_sample_position);
-               move_history(0,
-                               history_start - next_sample_position,
-                               history_size - history_start + next_sample_position);
-
-       } else
-       if (next_sample_position >= history_start + history_size || next_sample_position + len <= history_start)
-       {
-//             printf("c\n");
-               hole_fill = 1;
-               hole_start = 0;
-               hole_len = HISTORY_MAX;
-               hole_absstart = next_sample_position;
-               history_start = hole_absstart;
-               history_size = hole_len;
-       }
-
-       if (hole_fill)
-       {
-               if (hole_start < 0 || hole_len <= 0 || hole_absstart < 0)
-               {
-                       eprintf(_("FileOGG: Error at finding out what to read from file\n"));
-                       return 1;
-               }
-
-               if (hole_absstart + hole_len > asset->audio_length + start_sample)
-               {
-                       hole_len = asset->audio_length + start_sample - hole_absstart;
-                       history_size = asset->audio_length + start_sample - history_start;
-               } else
-               {
-                       history_size = HISTORY_MAX;
-               }
-
-
-//             printf("Decode samples at position: %lli, samples to read: %lli\n", hole_absstart, hole_len);
-
-               int64_t samples_read = 0;
-               if (ogg_sample_position != hole_absstart)
-               {
-                       ogg_sample_position = hole_absstart;
-                       if (!ogg_seek_to_sample(tf->audiosync, tf->vo.serialno, ogg_sample_position))
-                       {
-                               eprintf(_("Error while seeking to sample\n"));
-                               return 1;
-                       }
-               }
-               // now we have ogg_sample_positon aligned
-               int64_t samples_to_read = hole_len;
-               while (samples_read < hole_len)
-               {
-                       int64_t waiting_samples = vorbis_synthesis_pcmout(&tf->vd, &vorbis_buffer);
-                       int64_t takeout_samples;
-                       if (waiting_samples > samples_to_read - samples_read)
-                               takeout_samples = samples_to_read - samples_read;
-                       else
-                               takeout_samples = waiting_samples;
-
-//                     printf("takeout samples: %lli, samples_read: %lli\n", takeout_samples, samples_read);
-
-                       if(waiting_samples)
-                       {
-                               for(int i = 0; i < asset->channels; i++)
-                               {
-                                       float *input = vorbis_buffer[i];
-                                       float *output = pcm_history[i] + hole_start;
-                                       // TODO: use memcpy
-                                       for(int j = 0; j < takeout_samples ; j++)
-                                       {
-                                               output[j] = input[j];
-                                       }
-                               }
-                       }
-
-                       vorbis_synthesis_read(&tf->vd, takeout_samples);
-                       samples_read += takeout_samples;
-                       ogg_sample_position += takeout_samples;
-                       hole_start += takeout_samples;
-
-                       if (samples_read < hole_len)
-                               if (!ogg_decode_more_samples(tf->audiosync, tf->vo.serialno))
-                               {
-                                       ogg_sample_position = -1;
-                                       return 1;
-                               }
-
-
-               }
-       }
-
-       // now we can be sure our history is correct, just copy it out
-       if (next_sample_position < history_start || next_sample_position + len > history_start + history_size)
-       {
-               printf(_("FileOGG:: History not aligned properly \n"));
-               printf(_("\tnext_sample_position: %jd, length: %jd\n"), next_sample_position, len);
-               printf(_("\thistory_start: %jd, length: %jd\n"), history_start, history_size);
-               return 1;
-       }
-       float *input = pcm_history[file->current_channel] + next_sample_position - history_start;
-       for (int i = 0; i < len; i++)
-               buffer[i] = input[i];
-
-       next_sample_position += len;
-       return 0;
-}
-
-
-int FileOGG::write_audio_page()
-{
-       int ret;
-
-       ret = fwrite(tf->apage, 1, tf->apage_len, stream);
-       if(ret < tf->apage_len)
-       {
-               eprintf(_("error writing audio page\n"));
-       }
-       tf->apage_valid = 0;
-       tf->a_pkg -= ogg_page_packets((ogg_page *)&tf->apage);
-       return ret;
-}
-
-int FileOGG::write_video_page()
-{
-       int ret;
-
-       ret = fwrite(tf->vpage, 1, tf->vpage_len, stream);
-       if(ret < tf->vpage_len)
-       {
-               eprintf(_("error writing video page\n"));
-       }
-       tf->vpage_valid = 0;
-       tf->v_pkg -= ogg_page_packets((ogg_page *)&tf->vpage);
-       return ret;
-}
-
-void FileOGG::flush_ogg (int e_o_s)
-{
-    int len;
-    ogg_page og;
-
-       flush_lock->lock();
-    /* flush out the ogg pages  */
-    while(1) {
-      /* Get pages for both streams, if not already present, and if available.*/
-      if(asset->video_data && !tf->vpage_valid) {
-        // this way seeking is much better,
-        // not sure if 23 packets  is a good value. it works though
-        int v_next=0;
-        if(tf->v_pkg>22 && ogg_stream_flush(&tf->to, &og) > 0) {
-          v_next=1;
-        }
-        else if(ogg_stream_pageout(&tf->to, &og) > 0) {
-          v_next=1;
-        }
-        if(v_next) {
-          len = og.header_len + og.body_len;
-          if(tf->vpage_buffer_length < len) {
-            tf->vpage = (unsigned char *)realloc(tf->vpage, len);
-            tf->vpage_buffer_length = len;
-          }
-          tf->vpage_len = len;
-          memcpy(tf->vpage, og.header, og.header_len);
-          memcpy(tf->vpage+og.header_len , og.body, og.body_len);
-
-          tf->vpage_valid = 1;
-          tf->videotime = theora_granule_time (&tf->td,
-                  ogg_page_granulepos(&og));
-        }
-      }
-      if(asset->audio_data && !tf->apage_valid) {
-        // this way seeking is much better,
-        // not sure if 23 packets  is a good value. it works though
-        int a_next=0;
-        if(tf->a_pkg>22 && ogg_stream_flush(&tf->vo, &og) > 0) {
-          a_next=1;
-        }
-        else if(ogg_stream_pageout(&tf->vo, &og) > 0) {
-          a_next=1;
-        }
-        if(a_next) {
-          len = og.header_len + og.body_len;
-          if(tf->apage_buffer_length < len) {
-            tf->apage = (unsigned char *)realloc(tf->apage, len);
-            tf->apage_buffer_length = len;
-          }
-          tf->apage_len = len;
-          memcpy(tf->apage, og.header, og.header_len);
-          memcpy(tf->apage+og.header_len , og.body, og.body_len);
-
-          tf->apage_valid = 1;
-          tf->audiotime= vorbis_granule_time (&tf->vd,
-                  ogg_page_granulepos(&og));
-        }
-      }
-
-      if(!asset->audio_data && tf->vpage_valid) {
-        write_video_page();
-      }
-      else if(!asset->video_data && tf->apage_valid) {
-        write_audio_page();
-      }
-      /* We're using both. We can output only:
-       *  a) If we have valid pages for both
-       *  b) At EOS, for the remaining stream.
-       */
-      else if(tf->vpage_valid && tf->apage_valid) {
-        /* Make sure they're in the right order. */
-        if(tf->videotime <= tf->audiotime)
-          write_video_page();
-        else
-          write_audio_page();
-      }
-      else if(e_o_s && tf->vpage_valid) {
-          write_video_page();
-      }
-      else if(e_o_s && tf->apage_valid) {
-          write_audio_page();
-      }
-      else {
-        break; /* Nothing more writable at the moment */
-      }
-    }
-       flush_lock->unlock();
-}
-
-
-int FileOGG::write_samples_vorbis(double **buffer, int64_t len, int e_o_s)
-{
-       float **vorbis_buffer;
-       static int samples = 0;
-       samples += len;
-       if(e_o_s)
-       {
-               vorbis_analysis_wrote (&tf->vd, 0);
-       } else
-       {
-               vorbis_buffer = vorbis_analysis_buffer (&tf->vd, len);
-               /* double to float conversion */
-               for(int i = 0; i<asset->channels; i++)
-               {
-                       for (int j = 0; j < len; j++)
-                       {
-                               vorbis_buffer[i][j] = buffer[i][j];
-                       }
-               }
-               vorbis_analysis_wrote (&tf->vd, len);
-       }
-       while(vorbis_analysis_blockout (&tf->vd, &tf->vb) == 1)
-       {
-           /* analysis, assume we want to use bitrate management */
-           vorbis_analysis (&tf->vb, NULL);
-           vorbis_bitrate_addblock (&tf->vb);
-
-           /* weld packets into the bitstream */
-           while (vorbis_bitrate_flushpacket (&tf->vd, &tf->op))
-           {
-               flush_lock->lock();
-               ogg_stream_packetin (&tf->vo, &tf->op);
-               tf->a_pkg++;
-               flush_lock->unlock();
-           }
-
-       }
-       flush_ogg(0);
-       return 0;
-
-
-}
-
-int FileOGG::write_samples(double **buffer, int64_t len)
-{
-       if (len > 0)
-               return write_samples_vorbis(buffer, len, 0);
-       return 0;
-}
-
-int FileOGG::write_frames_theora(VFrame ***frames, int len, int e_o_s)
-{
-       // due to clumsy theora's design we need to delay writing out by one frame
-       // always stay one frame behind, so we can correctly encode e_o_s
-       int result = 0;
-       if(!stream) return 0;
-
-       for(int j = 0; j < len && !result; j++)
-       {
-               if (temp_frame) // encode previous frame if available
-               {
-                       yuv_buffer yuv;
-                       yuv.y_width = tf->ti.width;
-                       yuv.y_height = tf->ti.height;
-                       yuv.y_stride = temp_frame->get_bytes_per_line();
-
-                       yuv.uv_width = tf->ti.width / 2;
-                       yuv.uv_height = tf->ti.height / 2;
-                       yuv.uv_stride = temp_frame->get_bytes_per_line() /2;
-
-                       yuv.y = temp_frame->get_y();
-                       yuv.u = temp_frame->get_u();
-                       yuv.v = temp_frame->get_v();
-                       int ret = theora_encode_YUVin (&tf->td, &yuv);
-                       if (ret)
-                       {
-                               printf(_("FileOGG: theora_encode_YUVin failed with code %i\n"), ret);
-                               printf("yuv_buffer: y_width: %i, y_height: %i, y_stride: %i,"
-                                       " uv_width: %i, uv_height: %i, uv_stride: %i\n",
-                                       yuv.y_width, yuv.y_height, yuv.y_stride,
-                                       yuv.uv_width, yuv.uv_height, yuv.uv_stride);
-                       }
-                       while(theora_encode_packetout (&tf->td, e_o_s, &tf->op)) {
-                               flush_lock->lock();
-                               ogg_stream_packetin (&tf->to, &tf->op);
-                               tf->v_pkg++;
-                               flush_lock->unlock();
-            }
-                       flush_ogg(0);  // eos flush is done later at close_file
-               }
-// If we have e_o_s, don't encode any new frames
-               if (e_o_s)
-                       break;
-
-               if (!temp_frame)
-               {
-                       temp_frame = new VFrame ( tf->ti.width, tf->ti.height, BC_YUV420P, 0);
-               }
-               VFrame *frame = frames[0][j];
-               int in_color_model = frame->get_color_model();
-               if (in_color_model == BC_YUV422P &&
-                   temp_frame->get_w() == frame->get_w() &&
-                   temp_frame->get_h() == frame->get_h() &&
-                   temp_frame->get_bytes_per_line() == frame->get_bytes_per_line())
-               {
-                       temp_frame->copy_from(frame);
-               } else
-               {
-
-                       BC_CModels::transfer(temp_frame->get_rows(),
-                               frame->get_rows(),
-                               temp_frame->get_y(),
-                               temp_frame->get_u(),
-                               temp_frame->get_v(),
-                               frame->get_y(),
-                               frame->get_u(),
-                               frame->get_v(),
-                               0,
-                               0,
-                               frame->get_w(),
-                               frame->get_h(),
-                               0,
-                               0,
-                               frame->get_w(),  // temp_frame can be larger than frame if width not dividable by 16
-                               frame->get_h(),
-                               frame->get_color_model(),
-                               BC_YUV420P,
-                               0,
-                               frame->get_w(),
-                               temp_frame->get_w());
-
-               }
-       }
-
-       return 0;
-}
-
-
-int FileOGG::write_frames(VFrame ***frames, int len)
-{
-
-       return write_frames_theora(frames, len, 0);
-}
-
-OGGConfigAudio::OGGConfigAudio(BC_WindowBase *parent_window, Asset *asset)
- : BC_Window(_(PROGRAM_NAME ": Audio Compression"),
-       parent_window->get_abs_cursor_x(1),
-       parent_window->get_abs_cursor_y(1),
-       350, 250)
-{
-       this->parent_window = parent_window;
-       this->asset = asset;
-}
-
-OGGConfigAudio::~OGGConfigAudio()
-{
-
-}
-
-void OGGConfigAudio::create_objects()
-{
-//     add_tool(new BC_Title(10, 10, _("There are no audio options for this format")));
-
-       int x = 10, y = 10;
-       int x1 = 150;
-       char string[BCTEXTLEN];
-
-       lock_window("OGGConfigAudio::create_objects");
-       add_tool(fixed_bitrate = new OGGVorbisFixedBitrate(x, y, this));
-       add_tool(variable_bitrate = new OGGVorbisVariableBitrate(x1, y, this));
-
-       y += 30;
-       sprintf(string, "%d", asset->vorbis_min_bitrate);
-       add_tool(new BC_Title(x, y, _("Min bitrate:")));
-       add_tool(new OGGVorbisMinBitrate(x1, y, this, string));
-
-       y += 30;
-       add_tool(new BC_Title(x, y, _("Avg bitrate:")));
-       sprintf(string, "%d", asset->vorbis_bitrate);
-       add_tool(new OGGVorbisAvgBitrate(x1, y, this, string));
-
-       y += 30;
-       add_tool(new BC_Title(x, y, _("Max bitrate:")));
-       sprintf(string, "%d", asset->vorbis_max_bitrate);
-       add_tool(new OGGVorbisMaxBitrate(x1, y, this, string));
-
-
-       add_subwindow(new BC_OKButton(this));
-       show_window(1);
-       unlock_window();
-}
-
-int OGGConfigAudio::close_event()
-{
-       set_done(0);
-       return 1;
-}
-
-OGGVorbisFixedBitrate::OGGVorbisFixedBitrate(int x, int y, OGGConfigAudio *gui)
- : BC_Radial(x, y, !gui->asset->vorbis_vbr, _("Average bitrate"))
-{
-       this->gui = gui;
-}
-int OGGVorbisFixedBitrate::handle_event()
-{
-       gui->asset->vorbis_vbr = 0;
-       gui->variable_bitrate->update(0);
-       return 1;
-}
-
-OGGVorbisVariableBitrate::OGGVorbisVariableBitrate(int x, int y, OGGConfigAudio *gui)
- : BC_Radial(x, y, gui->asset->vorbis_vbr, _("Variable bitrate"))
-{
-       this->gui = gui;
-}
-int OGGVorbisVariableBitrate::handle_event()
-{
-       gui->asset->vorbis_vbr = 1;
-       gui->fixed_bitrate->update(0);
-       return 1;
-}
-
-
-OGGVorbisMinBitrate::OGGVorbisMinBitrate(int x,
-       int y,
-       OGGConfigAudio *gui,
-       char *text)
- : BC_TextBox(x, y, 180, 1, text)
-{
-       this->gui = gui;
-}
-int OGGVorbisMinBitrate::handle_event()
-{
-       gui->asset->vorbis_min_bitrate = atol(get_text());
-       return 1;
-}
-
-
-
-OGGVorbisMaxBitrate::OGGVorbisMaxBitrate(int x,
-       int y,
-       OGGConfigAudio *gui,
-       char *text)
- : BC_TextBox(x, y, 180, 1, text)
-{
-       this->gui = gui;
-}
-int OGGVorbisMaxBitrate::handle_event()
-{
-       gui->asset->vorbis_max_bitrate = atol(get_text());
-       return 1;
-}
-
-
-
-OGGVorbisAvgBitrate::OGGVorbisAvgBitrate(int x, int y, OGGConfigAudio *gui, char *text)
- : BC_TextBox(x, y, 180, 1, text)
-{
-       this->gui = gui;
-}
-int OGGVorbisAvgBitrate::handle_event()
-{
-       gui->asset->vorbis_bitrate = atol(get_text());
-       return 1;
-}
-
-
-
-
-
-OGGConfigVideo::OGGConfigVideo(BC_WindowBase *parent_window, Asset *asset)
- : BC_Window(_(PROGRAM_NAME ": Video Compression"),
-       parent_window->get_abs_cursor_x(1),
-       parent_window->get_abs_cursor_y(1),
-       450, 220)
-{
-       this->parent_window = parent_window;
-       this->asset = asset;
-}
-
-OGGConfigVideo::~OGGConfigVideo()
-{
-
-}
-
-void OGGConfigVideo::create_objects()
-{
-//     add_tool(new BC_Title(10, 10, _("There are no video options for this format")));
-       int x = 10, y = 10;
-       int x1 = x + 150;
-       int x2 = x + 300;
-
-       lock_window("OGGConfigVideo::create_objects");
-       add_subwindow(new BC_Title(x, y + 5, _("Bitrate:")));
-       add_subwindow(new OGGTheoraBitrate(x1, y, this));
-       add_subwindow(fixed_bitrate = new OGGTheoraFixedBitrate(x2, y, this));
-       y += 30;
-
-       add_subwindow(new BC_Title(x, y, _("Quality:")));
-       add_subwindow(new BC_ISlider(x + 80, y, 0,
-               200, 200, 0, 63,
-               asset->theora_quality, 0,
-               0, &asset->theora_quality));
-
-       add_subwindow(fixed_quality = new OGGTheoraFixedQuality(x2, y, this));
-       y += 30;
-
-       add_subwindow(new BC_Title(x, y, _("Keyframe frequency:")));
-       OGGTheoraKeyframeFrequency *keyframe_frequency =
-               new OGGTheoraKeyframeFrequency(x1 + 60, y, this);
-       keyframe_frequency->create_objects();
-       y += 30;
-
-       add_subwindow(new BC_Title(x, y, _("Keyframe force frequency:")));
-       OGGTheoraKeyframeForceFrequency *keyframe_force_frequency =
-               new OGGTheoraKeyframeForceFrequency(x1 + 60, y, this);
-       keyframe_force_frequency->create_objects();
-       y += 30;
-
-       add_subwindow(new BC_Title(x, y, _("Sharpness:")));
-       OGGTheoraSharpness *sharpness =
-               new OGGTheoraSharpness(x1 + 60, y, this);
-       sharpness->create_objects();
-       y += 30;
-
-
-       add_subwindow(new BC_OKButton(this));
-       show_window(1);
-       unlock_window();
-}
-
-
-int OGGConfigVideo::close_event()
-{
-       set_done(0);
-       return 1;
-}
-
-OGGTheoraBitrate::OGGTheoraBitrate(int x, int y, OGGConfigVideo *gui)
- : BC_TextBox(x, y, 100, 1, gui->asset->theora_bitrate)
-{
-       this->gui = gui;
-}
-
-
-int OGGTheoraBitrate::handle_event()
-{
-       // TODO: MIN / MAX check
-       gui->asset->theora_bitrate = atol(get_text());
-       return 1;
-};
-
-
-
-
-OGGTheoraFixedBitrate::OGGTheoraFixedBitrate(int x, int y, OGGConfigVideo *gui)
- : BC_Radial(x, y, gui->asset->theora_fix_bitrate, _("Fixed bitrate"))
-{
-       this->gui = gui;
-}
-
-int OGGTheoraFixedBitrate::handle_event()
-{
-       update(1);
-       gui->asset->theora_fix_bitrate = 1;
-       gui->fixed_quality->update(0);
-       return 1;
-};
-
-OGGTheoraFixedQuality::OGGTheoraFixedQuality(int x, int y, OGGConfigVideo *gui)
- : BC_Radial(x, y, !gui->asset->theora_fix_bitrate, _("Fixed quality"))
-{
-       this->gui = gui;
-}
-
-int OGGTheoraFixedQuality::handle_event()
-{
-       update(1);
-       gui->asset->theora_fix_bitrate = 0;
-       gui->fixed_bitrate->update(0);
-       return 1;
-};
-
-OGGTheoraKeyframeFrequency::OGGTheoraKeyframeFrequency(int x, int y, OGGConfigVideo *gui)
- : BC_TumbleTextBox(gui,
-       (int64_t)gui->asset->theora_keyframe_frequency,
-       (int64_t)1,
-       (int64_t)500,
-       x,
-       y,
-       40)
-{
-       this->gui = gui;
-}
-
-int OGGTheoraKeyframeFrequency::handle_event()
-{
-       gui->asset->theora_keyframe_frequency = atol(get_text());
-       return 1;
-}
-
-OGGTheoraKeyframeForceFrequency::OGGTheoraKeyframeForceFrequency(int x, int y, OGGConfigVideo *gui)
- : BC_TumbleTextBox(gui,
-       (int64_t)gui->asset->theora_keyframe_frequency,
-       (int64_t)1,
-       (int64_t)500,
-       x,
-       y,
-       40)
-{
-       this->gui = gui;
-}
-
-int OGGTheoraKeyframeForceFrequency::handle_event()
-{
-       gui->asset->theora_keyframe_frequency = atol(get_text());
-       return 1;
-}
-
-
-OGGTheoraSharpness::OGGTheoraSharpness(int x, int y, OGGConfigVideo *gui)
- : BC_TumbleTextBox(gui,
-       (int64_t)gui->asset->theora_sharpness,
-       (int64_t)0,
-       (int64_t)2,
-       x,
-       y,
-       40)
-{
-       this->gui = gui;
-}
-
-int OGGTheoraSharpness::handle_event()
-{
-       gui->asset->theora_sharpness = atol(get_text());
-       return 1;
-}
-
-
-PackagingEngineOGG::PackagingEngineOGG()
-{
-       packages = 0;
-       default_asset = 0;
-}
-
-PackagingEngineOGG::~PackagingEngineOGG()
-{
-       if(packages)
-       {
-               for(int i = 0; i < total_packages; i++)
-                       delete packages[i];
-               delete [] packages;
-       }
-       if (default_asset)
-               default_asset->remove_user();
-}
-
-
-
-int PackagingEngineOGG::create_packages_single_farm(
-               EDL *edl,
-               Preferences *preferences,
-               Asset *default_asset,
-               double total_start,
-               double total_end)
-{
-       this->total_start = total_start;
-       this->total_end = total_end;
-       this->edl = edl;
-
-       this->preferences = preferences;
-
-// We make A COPY of the asset, because we set audio_data = 0 on local asset which is the same copy as default_asset...
-// Should be taken care of somewhere else actually
-       this->default_asset = new Asset(*default_asset);
-
-       audio_start = Units::to_int64(total_start * default_asset->sample_rate);
-       video_start = Units::to_int64(total_start * default_asset->frame_rate);
-       audio_position = audio_start;
-       video_position = video_start;
-       audio_end = Units::to_int64(total_end * default_asset->sample_rate);
-       video_end = Units::to_int64(total_end * default_asset->frame_rate);
-       current_package = 0;
-
-       double total_len = total_end - total_start;
-//printf("PackageDispatcher::create_packages: %f / %d = %f\n", total_len, total_packages, package_len);
-
-       total_packages = 0;
-       if (default_asset->audio_data)
-               total_packages++;
-       if (default_asset->video_data)
-               total_packages += preferences->renderfarm_job_count;
-
-       packages = new RenderPackage*[total_packages];
-
-       int local_current_package = 0;
-       if (default_asset->audio_data)
-       {
-               packages[local_current_package] = new RenderPackage;
-               snprintf(packages[current_package]->path,
-                       sizeof(packages[current_package]->path),
-                       "%s.audio", default_asset->path);
-               local_current_package++;
-       }
-
-       if (default_asset->video_data)
-       {
-               video_package_len = (total_len) / preferences->renderfarm_job_count;
-               int current_number;    // The number being injected into the filename.
-               int number_start;      // Character in the filename path at which the number begins
-               int total_digits;      // Total number of digits including padding the user specified.
-
-               Render::get_starting_number(default_asset->path,
-                       current_number,
-                       number_start,
-                       total_digits,
-                       3);
-
-               for(int i = 0; i < preferences->renderfarm_job_count; i++)
-               {
-                       RenderPackage *package = packages[local_current_package] = new RenderPackage;
-                       Render::create_filename(package->path,
-                               default_asset->path,
-                               current_number,
-                               total_digits,
-                               number_start);
-                       current_number++;
-                       local_current_package++;
-               }
-       }
-       return 0;
-}
-
-RenderPackage* PackagingEngineOGG::get_package_single_farm(double frames_per_second,
-               int client_number,
-               int use_local_rate)
-{
-
-//printf("PackageDispatcher::get_package %ld %ld %ld %ld\n", audio_position, video_position, audio_end, video_end);
-       if (current_package == total_packages)
-               return 0;
-
-       RenderPackage *result = 0;
-       if (current_package == 0 && default_asset->audio_data)
-       {
-               result = packages[0];
-               result->audio_start = audio_start;
-               result->video_start = video_start;
-               result->audio_end = audio_end;
-               result->video_end = video_end;
-               result->audio_do = 1;
-               result->video_do = 0;
-       } else if (default_asset->video_data)
-       {
-               // Do not do any scaling according to node speed, so we know we can get evenly distributed 'forced' keyframes
-               result = packages[current_package];
-               result->audio_do = 0;
-               result->video_do = 1;
-
-               result->audio_start = audio_position;
-               result->video_start = video_position;
-               result->audio_end = audio_position +
-                       Units::round(video_package_len * default_asset->sample_rate);
-               result->video_end = video_position +
-                       Units::round(video_package_len * default_asset->frame_rate);
-
-// Last package... take it all!
-               if (current_package == total_packages -1 )
-               {
-                       result->audio_end = audio_end;
-                       result->video_end = video_end;
-               }
-
-               audio_position = result->audio_end;
-               video_position = result->video_end;
-
-       }
-
-       current_package ++;
-       return result;
-
-}
-
-void PackagingEngineOGG::get_package_paths(ArrayList<char*> *path_list)
-{
-       for(int i = 0; i < total_packages; i++)
-       {
-               path_list->append(strdup(packages[i]->path));
-       }
-// We will mux to the the final file at the end!
-       path_list->append(strdup(default_asset->path));
-       path_list->set_free();
-}
-
-int64_t PackagingEngineOGG::get_progress_max()
-{
-       return Units::to_int64(default_asset->sample_rate *
-                       (total_end - total_start)) * 2+
-               Units::to_int64(preferences->render_preroll *
-                       total_packages *
-                       default_asset->sample_rate);
-}
-
-int PackagingEngineOGG::packages_are_done()
-{
-
-
-// Mux audio and video into one file
-
-// First fix our asset... have to workaround the bug of corruption of local asset
-//     Render::check_asset(edl, *default_asset);
-
-       Asset *video_asset = 0, *audio_asset = 0;
-       File *audio_file_gen = 0, *video_file_gen = 0;
-       FileOGG *video_file = 0, *audio_file = 0;
-       ogg_stream_state audio_in_stream, video_in_stream;
-
-       int local_current_package = 0;
-       if (default_asset->audio_data)
-       {
-               audio_asset = new Asset(packages[local_current_package]->path);
-               audio_asset->format = FILE_OGG;
-               local_current_package++;
-
-               audio_file_gen = new File();
-               audio_file_gen->open_file(preferences, audio_asset, 1, 0);
-               audio_file = (FileOGG*) audio_file_gen->file;
-               ogg_stream_init(&audio_in_stream, audio_file->tf->vo.serialno);
-               audio_file->ogg_seek_to_databegin(audio_file->tf->audiosync, audio_file->tf->vo.serialno);
-       }
-
-       if (default_asset->video_data)
-       {
-               video_asset = new Asset(packages[local_current_package]->path);
-               video_asset->format = FILE_OGG;
-               local_current_package++;
-
-               video_file_gen = new File();
-               video_file_gen->open_file(preferences, video_asset, 1, 0);
-               video_file = (FileOGG*) video_file_gen->file;
-               ogg_stream_init(&video_in_stream, video_file->tf->to.serialno);
-               video_file->ogg_seek_to_databegin(video_file->tf->videosync, video_file->tf->to.serialno);
-       }
-
-// Output file
-       File *output_file_gen = new File();
-       output_file_gen->open_file(preferences, default_asset, 0, 1);
-       FileOGG *output_file = (FileOGG*) output_file_gen->file;
-
-       //ogg_page og;    /* one Ogg bitstream page.  Vorbis packets are inside */
-       ogg_packet op;  /* one raw packet of data for decode */
-
-
-       int audio_ready = default_asset->audio_data;
-       int video_ready = default_asset->video_data;
-       int64_t video_packetno = 1;
-       int64_t audio_packetno = 1;
-       int64_t frame_offset = 0;
-       int64_t current_frame = 0;
-       while ((default_asset->audio_data && audio_ready) || (default_asset->video_data && video_ready))
-       {
-               if (video_ready)
-               {
-                       while (ogg_stream_packetpeek(&video_in_stream, NULL) != 1) // get as many pages as needed for one package
-                       {
-                               if (!video_file->ogg_get_next_page(video_file->tf->videosync, video_file->tf->to.serialno, &video_file->tf->videopage))
-                               {
-                                       // We are at the end of our file, see if it is more and open more if there is
-                                       if (local_current_package < total_packages)
-                                       {
-                                               frame_offset = current_frame +1;
-                                               ogg_stream_clear(&video_in_stream);
-                                               video_file_gen->close_file();
-                                               delete video_file_gen;
-                                               if( video_asset ) video_asset->remove_user();
-                                               video_asset = new Asset(packages[local_current_package]->path);
-                                               video_asset->format = FILE_OGG;
-                                               local_current_package++;
-
-                                               video_file_gen = new File();
-                                               video_file_gen->open_file(preferences, video_asset, 1, 0);
-                                               video_file = (FileOGG*) video_file_gen->file;
-                                               ogg_stream_init(&video_in_stream, video_file->tf->to.serialno);
-                                               video_file->ogg_seek_to_databegin(video_file->tf->videosync, video_file->tf->to.serialno);
-
-                                       } else
-                                               video_ready = 0;
-                                       break;
-                               }
-                               ogg_stream_pagein(&video_in_stream, &video_file->tf->videopage);
-                       }
-                       while (ogg_stream_packetpeek(&video_in_stream, NULL) == 1) // get all packets out of the page
-                       {
-                               ogg_stream_packetout(&video_in_stream, &op);
-                               if (local_current_package != total_packages) // keep it from closing the stream
-                                       op.e_o_s = 0;
-                               if (video_packetno != 1)                     // if this is not the first video package do not start with b_o_s
-                                       op.b_o_s = 0;
-                               else
-                                       op.b_o_s = 1;
-                               op.packetno = video_packetno;
-                               video_packetno ++;
-                               int64_t granulepos = op.granulepos;
-                               if (granulepos != -1)
-                               {
-                               // Fix granulepos!
-                                       int64_t rel_iframe = granulepos >> video_file->theora_keyframe_granule_shift;
-                                       int64_t rel_pframe = granulepos - (rel_iframe << video_file->theora_keyframe_granule_shift);
-                                       int64_t rel_current_frame = rel_iframe + rel_pframe;
-                                       current_frame = frame_offset + rel_current_frame;
-                                       int64_t abs_iframe = current_frame - rel_pframe;
-
-                                       op.granulepos = (abs_iframe << video_file->theora_keyframe_granule_shift) + rel_pframe;
-
-//                                     printf("iframe: %i, pframe: %i, granulepos: %i, op.packetno %lli, abs_iframe: %i\n", rel_iframe, rel_pframe, granulepos, op.packetno, abs_iframe);
-
-                               }
-                               ogg_stream_packetin (&output_file->tf->to, &op);
-                               output_file->tf->v_pkg++;
-                       }
-               }
-               if (audio_ready)
-               {
-                       while (ogg_stream_packetpeek(&audio_in_stream, NULL) != 1) // get as many pages as needed for one package
-                       {
-                               if (!audio_file->ogg_get_next_page(audio_file->tf->audiosync, audio_file->tf->vo.serialno, &audio_file->tf->audiopage))
-                               {
-                                       audio_ready = 0;
-                                       break;
-                               }
-                               ogg_stream_pagein(&audio_in_stream, &audio_file->tf->audiopage);
-                       }
-                       while (ogg_stream_packetpeek(&audio_in_stream, NULL) == 1) // get all packets out of the page
-                       {
-                               ogg_stream_packetout(&audio_in_stream, &op);
-                               ogg_stream_packetin (&output_file->tf->vo, &op);
-                               audio_packetno++;
-                               output_file->tf->a_pkg++;
-                       }
-               }
-
-               output_file->flush_ogg(0);
-
-
-       }
-
-// flush_ogg(1) is called on file closing time...
-//     output_file->flush_ogg(1);
-
-// Just prevent thet write_samples and write_frames are called
-       output_file->final_write = 0;
-
-       if (default_asset->audio_data)
-       {
-               ogg_stream_clear(&audio_in_stream);
-               audio_file_gen->close_file();
-               delete audio_file_gen;
-               if( audio_asset )
-                       audio_asset->remove_user();
-       }
-       if (default_asset->video_data)
-       {
-               ogg_stream_clear(&video_in_stream);
-               video_file_gen->close_file();
-               delete video_file_gen;
-               if( video_asset )
-                       video_asset->remove_user();
-       }
-
-       output_file_gen->close_file();
-       delete output_file_gen;
-
-// don't delete the temp files, for now
-//     for(int i = 0; i < total_packages; i++)
-//             unlink(packages[i]->path);
-
-       return 0;
-}
-
-
-
diff --git a/cinelerra-5.1/cinelerra/fileogg.h b/cinelerra-5.1/cinelerra/fileogg.h
deleted file mode 100644 (file)
index 26a6802..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-
-/*
- * CINELERRA
- * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#ifndef FILEOGG_H
-#define FILEOGG_H
-
-#include "edl.inc"
-#include "filebase.h"
-#include "file.inc"
-#include "packagingengine.h"
-
-#include <theora/theora.h>
-#include <vorbis/codec.h>
-#include <vorbis/vorbisenc.h>
-
-
-#include <libdv/dv.h>
-
-/* This code was aspired by ffmpeg2theora */
-/* Special thanks for help on this code goes out to [email protected] */
-
-typedef struct
-{
-       ogg_sync_state sync;
-       off_t file_bufpos; // position of the start of the buffer inside the file
-       off_t file_pagepos; // position of the page that will be next read
-       off_t file_pagepos_found; // position of last page that was returned (in seeking operations)
-       int wlen;
-} sync_window_t;
-
-typedef struct
-{
-    ogg_page audiopage;
-    ogg_page videopage;
-
-    double audiotime;
-    double videotime;
-    ogg_int64_t audio_bytesout;
-    ogg_int64_t video_bytesout;
-
-    ogg_page og;    /* one Ogg bitstream page.  Vorbis packets are inside */
-    ogg_packet op;  /* one raw packet of data for decode */
-
-    theora_info ti;
-    theora_comment tc;
-    theora_state td;
-
-    vorbis_info vi;       /* struct that stores all the static vorbis bitstream settings */
-    vorbis_comment vc;    /* struct that stores all the user comments */
-    vorbis_dsp_state vd; /* central working state for the packet<->PCM encoder/decoder */
-    vorbis_block vb;     /* local working space for packet<->PCM encode/decode */
-
-    /* used for muxing */
-    ogg_stream_state to;    /* take physical pages, weld into a logical
-                             * stream of packets */
-    ogg_stream_state vo;    /* take physical pages, weld into a logical
-                             * stream of packets */
-
-    int apage_valid;
-    int vpage_valid;
-    unsigned char *apage;
-    unsigned char *vpage;
-    int vpage_len;
-    int apage_len;
-    int vpage_buffer_length;
-    int apage_buffer_length;
-
-
-// stuff needed for reading only
-       sync_window_t *audiosync;
-       sync_window_t *videosync;
-
-    //to do some manual page flusing
-    int v_pkg;
-    int a_pkg;
-
-}
-theoraframes_info_t;
-
-class FileOGG : public FileBase
-{
-friend class PackagingEngineOGG;
-public:
-       FileOGG(Asset *asset, File *file);
-       ~FileOGG();
-
-       static void get_parameters(BC_WindowBase *parent_window,
-               Asset *asset, BC_WindowBase* &format_window,
-               int audio_options, int video_options, EDL *edl);
-
-       int reset_parameters_derived();
-       int open_file(int rd, int wr);
-       static int check_sig(Asset *asset);
-       int close_file();
-       int close_file_derived();
-       int64_t get_video_position();
-       int64_t get_audio_position();
-       int set_video_position(int64_t x);
-       int set_audio_position(int64_t x);
-       int colormodel_supported(int colormodel);
-       int get_best_colormodel(Asset *asset, int driver);
-       int write_samples(double **buffer, int64_t len);
-       int write_frames(VFrame ***frames, int len);
-       int read_samples(double *buffer, int64_t len);
-       int read_frame(VFrame *frame);
-
-private:
-       int write_samples_vorbis(double **buffer, int64_t len, int e_o_s);
-       int write_frames_theora(VFrame ***frames, int len, int e_o_s);
-       void flush_ogg(int e_o_s);
-       int write_audio_page();
-       int write_video_page();
-
-       FILE *stream;
-       off_t file_length;
-
-       theoraframes_info_t *tf;
-       VFrame *temp_frame;
-       Mutex *flush_lock;
-
-       off_t filedata_begin;
-
-       int ogg_get_last_page(sync_window_t *sw, long serialno, ogg_page *og);
-       int ogg_get_prev_page(sync_window_t *sw, long serialno, ogg_page *og);
-       int ogg_get_first_page(sync_window_t *sw, long serialno, ogg_page *og);
-       int ogg_get_next_page(sync_window_t *sw, long serialno, ogg_page *og);
-       int ogg_sync_and_get_next_page(sync_window_t *sw, long serialno, ogg_page *og);
-
-       int ogg_get_page_of_sample(sync_window_t *sw, long serialno, ogg_page *og, int64_t sample);
-       int ogg_seek_to_sample(sync_window_t *sw, long serialno, int64_t sample);
-       int ogg_decode_more_samples(sync_window_t *sw, long serialno);
-
-       int ogg_get_page_of_frame(sync_window_t *sw, long serialno, ogg_page *og, int64_t frame);
-       int ogg_seek_to_keyframe(sync_window_t *sw, long serialno, int64_t frame, int64_t *position);
-       int ogg_seek_to_databegin(sync_window_t *sw, long serialno);
-
-
-       int64_t start_sample; // first and last sample inside this file
-       int64_t last_sample;
-       int64_t start_frame; // first and last frame inside this file
-       int64_t last_frame;
-
-
-       int64_t ogg_sample_position;  // what will be the next sample taken from vorbis decoder
-       int64_t next_sample_position; // what is the next sample read_samples must deliver
-
-       int move_history(int from, int to, int len);
-
-       float **pcm_history;
-#ifndef HISTORY_MAX
-#define HISTORY_MAX 0x100000
-#endif
-       int64_t history_start;
-       int64_t history_size;
-
-       int theora_cmodel;
-       int64_t ogg_frame_position;    // LAST decoded frame position
-       int64_t next_frame_position;   // what is the next sample read_frames must deliver
-       char theora_keyframe_granule_shift;
-       int final_write;
-};
-
-class OGGConfigAudio;
-class OGGConfigVideo;
-
-class OGGVorbisFixedBitrate : public BC_Radial
-{
-public:
-       OGGVorbisFixedBitrate(int x, int y, OGGConfigAudio *gui);
-       int handle_event();
-       OGGConfigAudio *gui;
-};
-
-class OGGVorbisVariableBitrate : public BC_Radial
-{
-public:
-       OGGVorbisVariableBitrate(int x, int y, OGGConfigAudio *gui);
-       int handle_event();
-       OGGConfigAudio *gui;
-};
-
-class OGGVorbisMinBitrate : public BC_TextBox
-{
-public:
-       OGGVorbisMinBitrate(int x,
-               int y,
-               OGGConfigAudio *gui,
-               char *text);
-       int handle_event();
-       OGGConfigAudio *gui;
-};
-
-class OGGVorbisMaxBitrate : public BC_TextBox
-{
-public:
-       OGGVorbisMaxBitrate(int x,
-               int y,
-               OGGConfigAudio *gui,
-               char *text);
-       int handle_event();
-       OGGConfigAudio *gui;
-};
-
-class OGGVorbisAvgBitrate : public BC_TextBox
-{
-public:
-       OGGVorbisAvgBitrate(int x,
-               int y,
-               OGGConfigAudio *gui,
-               char *text);
-       int handle_event();
-       OGGConfigAudio *gui;
-};
-
-
-class OGGConfigAudio: public BC_Window
-{
-public:
-       OGGConfigAudio(BC_WindowBase *parent_window, Asset *asset);
-       ~OGGConfigAudio();
-
-       void create_objects();
-       int close_event();
-
-       Asset *asset;
-       OGGVorbisFixedBitrate *fixed_bitrate;
-       OGGVorbisVariableBitrate *variable_bitrate;
-private:
-       BC_WindowBase *parent_window;
-       char string[BCTEXTLEN];
-};
-
-
-class OGGTheoraBitrate : public BC_TextBox
-{
-public:
-       OGGTheoraBitrate(int x, int y, OGGConfigVideo *gui);
-       int handle_event();
-       OGGConfigVideo *gui;
-};
-
-class OGGTheoraKeyframeFrequency : public BC_TumbleTextBox
-{
-public:
-       OGGTheoraKeyframeFrequency(int x, int y, OGGConfigVideo *gui);
-       int handle_event();
-       OGGConfigVideo *gui;
-};
-
-class OGGTheoraKeyframeForceFrequency : public BC_TumbleTextBox
-{
-public:
-       OGGTheoraKeyframeForceFrequency(int x, int y, OGGConfigVideo *gui);
-       int handle_event();
-       OGGConfigVideo *gui;
-};
-
-class OGGTheoraSharpness : public BC_TumbleTextBox
-{
-public:
-       OGGTheoraSharpness(int x, int y, OGGConfigVideo *gui);
-       int handle_event();
-       OGGConfigVideo *gui;
-};
-
-class OGGTheoraFixedBitrate : public BC_Radial
-{
-public:
-       OGGTheoraFixedBitrate(int x, int y, OGGConfigVideo *gui);
-       int handle_event();
-       OGGConfigVideo *gui;
-};
-
-class OGGTheoraFixedQuality : public BC_Radial
-{
-public:
-       OGGTheoraFixedQuality(int x, int y, OGGConfigVideo *gui);
-       int handle_event();
-       OGGConfigVideo *gui;
-};
-
-
-
-class OGGConfigVideo: public BC_Window
-{
-public:
-       OGGConfigVideo(BC_WindowBase *parent_window, Asset *asset);
-       ~OGGConfigVideo();
-
-       void create_objects();
-       int close_event();
-
-       OGGTheoraFixedBitrate *fixed_bitrate;
-       OGGTheoraFixedQuality *fixed_quality;
-       Asset *asset;
-private:
-       BC_WindowBase *parent_window;
-};
-
-class PackagingEngineOGG : public PackagingEngine
-{
-public:
-       PackagingEngineOGG();
-       ~PackagingEngineOGG();
-       int create_packages_single_farm(
-               EDL *edl,
-               Preferences *preferences,
-               Asset *default_asset,
-               double total_start,
-               double total_end);
-       RenderPackage* get_package_single_farm(double frames_per_second,
-               int client_number,
-               int use_local_rate);
-       int64_t get_progress_max();
-       void get_package_paths(ArrayList<char*> *path_list);
-       int packages_are_done();
-
-private:
-       EDL *edl;
-
-       RenderPackage **packages;
-       int total_packages;
-       double video_package_len;    // Target length of a single package
-
-       Asset *default_asset;
-       Preferences *preferences;
-       int current_package;
-       double total_start;
-       double total_end;
-       int64_t audio_position;
-       int64_t video_position;
-       int64_t audio_start;
-       int64_t video_start;
-       int64_t audio_end;
-       int64_t video_end;
-
-};
-
-
-#endif
diff --git a/cinelerra-5.1/cinelerra/filevorbis.C b/cinelerra-5.1/cinelerra/filevorbis.C
deleted file mode 100644 (file)
index 65eedf7..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-
-/*
- * CINELERRA
- * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "asset.h"
-#include "bcsignals.h"
-#include "byteorder.h"
-#include "clip.h"
-#include "file.h"
-#include "filevorbis.h"
-#include "guicast.h"
-#include "language.h"
-#include "mainerror.h"
-#include "mwindow.inc"
-#include "mainerror.h"
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-//suppress noref warning
-void *vorbis1_ov_callbacks[] = {
- &OV_CALLBACKS_DEFAULT, &OV_CALLBACKS_NOCLOSE,
- &OV_CALLBACKS_STREAMONLY, &OV_CALLBACKS_STREAMONLY_NOCLOSE,
-};
-
-FileVorbis::FileVorbis(Asset *asset, File *file)
- : FileBase(asset, file)
-{
-       reset_parameters();
-       if(asset->format == FILE_UNKNOWN) asset->format = FILE_VORBIS;
-       asset->byte_order = 0;
-}
-
-FileVorbis::~FileVorbis()
-{
-       close_file();
-}
-
-void FileVorbis::get_parameters(BC_WindowBase *parent_window,
-       Asset *asset, BC_WindowBase* &format_window,
-       int audio_options, int video_options, EDL *edl)
-{
-       if(audio_options)
-       {
-               VorbisConfigAudio *window = new VorbisConfigAudio(parent_window, asset);
-               format_window = window;
-               window->create_objects();
-               window->run_window();
-               delete window;
-       }
-}
-
-int FileVorbis::check_sig(Asset *asset)
-{
-       FILE *fd = fopen(asset->path, "rb");
-       OggVorbis_File vf;
-
-// Test for Quicktime since OGG misinterprets it
-       if(fd)
-       {
-               fseek(fd, 4, SEEK_SET);
-               char data[4];
-               (void)fread(data, 4, 1, fd);
-               if(data[0] == 'm' &&
-                       data[1] == 'd' &&
-                       data[2] == 'a' &&
-                       data[3] == 't')
-               {
-                       fclose(fd);
-                       return 0;
-               }
-
-               fseek(fd, 0, SEEK_SET);
-
-               if(ov_open(fd, &vf, NULL, 0) < 0)
-               {
-       // OGG failed.  Close file handle manually.
-                       ov_clear(&vf);
-                       if(fd) fclose(fd);
-                       return 0;
-               }
-               else
-               {
-                       ov_clear(&vf);
-                       return 1;
-               }
-       }
-
-       return 0;
-}
-
-int FileVorbis::reset_parameters_derived()
-{
-       fd = 0;
-       bzero(&vf, sizeof(vf));
-       return 0;
-}
-
-
-int FileVorbis::open_file(int rd, int wr)
-{
-
-       int result = 0;
-
-//printf("FileVorbis::open_file 1\n");
-       if(rd)
-       {
-//printf("FileVorbis::open_file 1\n");
-               if(!(fd = fopen(asset->path, "rb")))
-               {
-                       eprintf("Error while opening \"%s\" for reading. \n%m\n", asset->path);
-                       result = 1;
-               }
-               else
-               {
-//printf("FileVorbis::open_file 2 %p %p\n", fd, vf);
-                       if(ov_open(fd, &vf, NULL, 0) < 0)
-                       {
-                               eprintf(_("FileVorbis::open_file %s: invalid bitstream.\n"), asset->path);
-                               result = 1;
-                       }
-                       else
-                       {
-//printf("FileVorbis::open_file 1\n");
-                               vorbis_info *vi = ov_info(&vf, -1);
-                               asset->channels = vi->channels;
-                               if(!asset->sample_rate)
-                                       asset->sample_rate = vi->rate;
-//printf("FileVorbis::open_file 1\n");
-                               asset->audio_length = ov_pcm_total(&vf,-1);
-//printf("FileVorbis::open_file 1\n");
-                               asset->audio_data = 1;
-// printf("FileVorbis::open_file 1 %d %d %d\n",
-// asset->channels,
-// asset->sample_rate,
-// asset->audio_length);
-                       }
-               }
-       }
-
-       if(wr)
-       {
-               if(!(fd = fopen(asset->path, "wb")))
-               {
-                       eprintf(_("Error while opening \"%s\" for writing. \n%m\n"), asset->path);
-                       result = 1;
-               }
-               else
-               {
-                       vorbis_info_init(&vi);
-                       if(!asset->vorbis_vbr)
-                               result = vorbis_encode_init(&vi,
-                                       asset->channels,
-                                       asset->sample_rate,
-                                       asset->vorbis_max_bitrate,
-                                       asset->vorbis_bitrate,
-                                       asset->vorbis_min_bitrate);
-                       else
-                       {
-                               result = vorbis_encode_setup_managed(&vi,
-                                       asset->channels,
-                                       asset->sample_rate,
-                                       asset->vorbis_max_bitrate,
-                                       asset->vorbis_bitrate,
-                                       asset->vorbis_min_bitrate);
-                               result |= vorbis_encode_ctl(&vi, OV_ECTL_RATEMANAGE_AVG, NULL);
-                               result |= vorbis_encode_setup_init(&vi);
-                       }
-
-                       if(!result)
-                       {
-                               vorbis_analysis_init(&vd, &vi);
-                               vorbis_block_init(&vd, &vb);
-                               vorbis_comment_init(&vc);
-                               srand(time(NULL));
-                               ogg_stream_init(&os, rand());
-
-                               ogg_packet header;
-                               ogg_packet header_comm;
-                               ogg_packet header_code;
-                               vorbis_analysis_headerout(&vd,
-                                       &vc,
-                                       &header,
-                                       &header_comm,
-                                       &header_code);
-                               ogg_stream_packetin(&os,
-                                       &header);
-                               ogg_stream_packetin(&os,
-                                       &header_comm);
-                               ogg_stream_packetin(&os,
-                                       &header_code);
-
-                               while(1)
-                               {
-                                       int result = ogg_stream_flush(&os, &og);
-                                       if(result == 0) break;
-                                       fwrite(og.header, 1, og.header_len, fd);
-                                       fwrite(og.body, 1, og.body_len, fd);
-                               }
-                       }
-               }
-       }
-
-//printf("FileVorbis::open_file 2\n");
-       return result;
-}
-
-#define FLUSH_VORBIS \
-while(vorbis_analysis_blockout(&vd, &vb) == 1) \
-{ \
-       vorbis_analysis(&vb, NULL); \
-       vorbis_bitrate_addblock(&vb); \
-       while(vorbis_bitrate_flushpacket(&vd, &op)) \
-       { \
-               ogg_stream_packetin(&os, &op); \
-               while(1) \
-               { \
-                       int result = ogg_stream_pageout(&os, &og); \
-                       if(!result) break; \
-                       fwrite(og.header, 1, og.header_len, fd); \
-                       fwrite(og.body, 1, og.body_len, fd); \
-                       if(ogg_page_eos(&og)) break; \
-               } \
-       } \
-}
-
-
-int FileVorbis::close_file_derived()
-{
-       if(fd)
-       {
-               if(file->wr)
-               {
-                       vorbis_analysis_wrote(&vd, 0);
-                       FLUSH_VORBIS
-
-                       ogg_stream_clear(&os);
-                       vorbis_block_clear(&vb);
-                       vorbis_dsp_clear(&vd);
-                       vorbis_comment_clear(&vc);
-                       vorbis_info_clear(&vi);
-                       fclose(fd);
-               }
-
-               if(file->rd)
-               {
-// This also closes the file handle.
-                       ov_clear(&vf);
-               }
-               fd = 0;
-       }
-
-       return 0;
-}
-
-
-int FileVorbis::write_samples(double **buffer, int64_t len)
-{
-       if(!fd) return 0;
-
-       float **vorbis_buffer = vorbis_analysis_buffer(&vd, len);
-       for(int i = 0; i < asset->channels; i++)
-       {
-               float *output = vorbis_buffer[i];
-               double *input = buffer[i];
-               for(int j = 0; j < len; j++)
-               {
-                       output[j] = input[j];
-               }
-       }
-
-       vorbis_analysis_wrote(&vd, len);
-       FLUSH_VORBIS
-
-       return 0;
-}
-
-int FileVorbis::read_samples(double *buffer, int64_t len)
-{
-       if(!fd) return 0;
-
-// printf("FileVorbis::read_samples 1 %d %d %d %d\n",
-// history_start,
-// history_size,
-// file->current_sample,
-// len);
-       float **vorbis_output;
-       int bitstream;
-       int accumulation = 0;
-
-
-       update_pcm_history(len);
-
-
-// Fill history buffer
-       if(decode_start != decode_end)
-       {
-               ov_pcm_seek(&vf, decode_start);
-               decode_end = decode_start;
-       }
-
-       while(accumulation < decode_len)
-       {
-               int result = ov_read_float(&vf,
-                       &vorbis_output,
-                       decode_len - accumulation,
-                       &bitstream);
-//printf("FileVorbis::read_samples 1 %d %d %d\n", result, len, accumulation);
-               if(!result) break;
-
-               append_history(vorbis_output, result);
-               accumulation += result;
-       }
-
-
-       read_history(buffer,
-               file->current_sample,
-               file->current_channel,
-               len);
-
-// printf("FileVorbis::read_samples 2 %d %d %d %d\n",
-// history_start,
-// history_size,
-// file->current_sample,
-// len);
-
-       return 0;
-}
-
-
-
-
-
-
-
-
-
-
-VorbisConfigAudio::VorbisConfigAudio(BC_WindowBase *parent_window,
-       Asset *asset)
- : BC_Window(_(PROGRAM_NAME ": Audio Compression"),
-       parent_window->get_abs_cursor_x(1),
-       parent_window->get_abs_cursor_y(1),
-       350,
-       170,
-       -1,
-       -1,
-       0,
-       0,
-       1)
-{
-       this->parent_window = parent_window;
-       this->asset = asset;
-}
-
-VorbisConfigAudio::~VorbisConfigAudio()
-{
-}
-
-void VorbisConfigAudio::create_objects()
-{
-       int x = 10, y = 10;
-       int x1 = 150;
-       char string[BCTEXTLEN];
-
-       lock_window("VorbisConfigAudio::create_objects");
-       add_tool(fixed_bitrate = new VorbisFixedBitrate(x, y, this));
-       add_tool(variable_bitrate = new VorbisVariableBitrate(x1, y, this));
-
-       y += 30;
-       sprintf(string, "%d", asset->vorbis_min_bitrate);
-       add_tool(new BC_Title(x, y, _("Min bitrate:")));
-       add_tool(new VorbisMinBitrate(x1, y, this, string));
-
-       y += 30;
-       add_tool(new BC_Title(x, y, _("Avg bitrate:")));
-       sprintf(string, "%d", asset->vorbis_bitrate);
-       add_tool(new VorbisAvgBitrate(x1, y, this, string));
-
-       y += 30;
-       add_tool(new BC_Title(x, y, _("Max bitrate:")));
-       sprintf(string, "%d", asset->vorbis_max_bitrate);
-       add_tool(new VorbisMaxBitrate(x1, y, this, string));
-
-
-       add_subwindow(new BC_OKButton(this));
-       show_window();
-       flush();
-       unlock_window();
-}
-
-int VorbisConfigAudio::close_event()
-{
-       set_done(0);
-       return 1;
-}
-
-
-
-
-
-VorbisFixedBitrate::VorbisFixedBitrate(int x, int y, VorbisConfigAudio *gui)
- : BC_Radial(x, y, !gui->asset->vorbis_vbr, _("Fixed bitrate"))
-{
-       this->gui = gui;
-}
-int VorbisFixedBitrate::handle_event()
-{
-       gui->asset->vorbis_vbr = 0;
-       gui->variable_bitrate->update(0);
-       return 1;
-}
-
-VorbisVariableBitrate::VorbisVariableBitrate(int x, int y, VorbisConfigAudio *gui)
- : BC_Radial(x, y, gui->asset->vorbis_vbr, _("Variable bitrate"))
-{
-       this->gui = gui;
-}
-int VorbisVariableBitrate::handle_event()
-{
-       gui->asset->vorbis_vbr = 1;
-       gui->fixed_bitrate->update(0);
-       return 1;
-}
-
-
-VorbisMinBitrate::VorbisMinBitrate(int x,
-       int y,
-       VorbisConfigAudio *gui,
-       char *text)
- : BC_TextBox(x, y, 180, 1, text)
-{
-       this->gui = gui;
-}
-int VorbisMinBitrate::handle_event()
-{
-       gui->asset->vorbis_min_bitrate = atol(get_text());
-       return 1;
-}
-
-
-
-VorbisMaxBitrate::VorbisMaxBitrate(int x,
-       int y,
-       VorbisConfigAudio *gui,
-       char *text)
- : BC_TextBox(x, y, 180, 1, text)
-{
-       this->gui = gui;
-}
-int VorbisMaxBitrate::handle_event()
-{
-       gui->asset->vorbis_max_bitrate = atol(get_text());
-       return 1;
-}
-
-
-
-VorbisAvgBitrate::VorbisAvgBitrate(int x, int y, VorbisConfigAudio *gui, char *text)
- : BC_TextBox(x, y, 180, 1, text)
-{
-       this->gui = gui;
-}
-int VorbisAvgBitrate::handle_event()
-{
-       gui->asset->vorbis_bitrate = atol(get_text());
-       return 1;
-}
-
-
-
-
diff --git a/cinelerra-5.1/cinelerra/filevorbis.h b/cinelerra-5.1/cinelerra/filevorbis.h
deleted file mode 100644 (file)
index 0e6c92c..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-
-/*
- * CINELERRA
- * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#ifndef FILEVORBIS_H
-#define FILEVORBIS_H
-
-#include "edl.inc"
-#include "file.inc"
-#include "filebase.h"
-#include "vorbis/vorbisenc.h"
-#include "vorbis/vorbisfile.h"
-
-
-
-
-
-
-class FileVorbis : public FileBase
-{
-public:
-       FileVorbis(Asset *asset, File *file);
-       ~FileVorbis();
-
-       static void get_parameters(BC_WindowBase *parent_window,
-               Asset *asset, BC_WindowBase* &format_window,
-               int audio_options, int video_options, EDL *edl);
-       int reset_parameters_derived();
-
-       static int check_sig(Asset *asset);
-       int open_file(int rd, int wr);
-       int close_file_derived();
-       int write_samples(double **buffer,
-                       int64_t len);
-
-       int read_samples(double *buffer, int64_t len);
-
-// Decoding
-       OggVorbis_File vf;
-       FILE *fd;
-
-// Encoding
-       vorbis_info vi;
-       vorbis_comment vc;
-       vorbis_dsp_state vd;
-       vorbis_block vb;
-       ogg_stream_state os;
-       ogg_page og;
-       ogg_packet op;
-};
-
-
-class VorbisConfigAudio;
-
-
-class VorbisFixedBitrate : public BC_Radial
-{
-public:
-       VorbisFixedBitrate(int x, int y, VorbisConfigAudio *gui);
-       int handle_event();
-       VorbisConfigAudio *gui;
-};
-
-class VorbisVariableBitrate : public BC_Radial
-{
-public:
-       VorbisVariableBitrate(int x, int y, VorbisConfigAudio *gui);
-       int handle_event();
-       VorbisConfigAudio *gui;
-};
-
-class VorbisMinBitrate : public BC_TextBox
-{
-public:
-       VorbisMinBitrate(int x,
-               int y,
-               VorbisConfigAudio *gui,
-               char *text);
-       int handle_event();
-       VorbisConfigAudio *gui;
-};
-
-class VorbisMaxBitrate : public BC_TextBox
-{
-public:
-       VorbisMaxBitrate(int x,
-               int y,
-               VorbisConfigAudio *gui,
-               char *text);
-       int handle_event();
-       VorbisConfigAudio *gui;
-};
-
-class VorbisAvgBitrate : public BC_TextBox
-{
-public:
-       VorbisAvgBitrate(int x,
-               int y,
-               VorbisConfigAudio *gui,
-               char *text);
-       int handle_event();
-       VorbisConfigAudio *gui;
-};
-
-class VorbisConfigAudio : public BC_Window
-{
-public:
-       VorbisConfigAudio(BC_WindowBase *parent_window, Asset *asset);
-       ~VorbisConfigAudio();
-
-       void create_objects();
-       int close_event();
-
-       VorbisFixedBitrate *fixed_bitrate;
-       VorbisVariableBitrate *variable_bitrate;
-       BC_WindowBase *parent_window;
-       char string[BCTEXTLEN];
-       Asset *asset;
-};
-
-
-
-#endif
diff --git a/cinelerra-5.1/cinelerra/filevorbis.inc b/cinelerra-5.1/cinelerra/filevorbis.inc
deleted file mode 100644 (file)
index bf38c44..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-/*
- * CINELERRA
- * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#ifndef FILEVORBIS_INC
-#define FILEVORBIS_INC
-
-class FileVorbis;
-
-
-
-#endif
index 55ffcefa4b487414577f68f88f6c59acfa844385..66f1e72f8b713d8291f926db9192055b7b347b0b 100644 (file)
@@ -70,8 +70,6 @@ void FormatPopup::create_objects()
                post_item(FILE_AMPEG);
                post_item(FILE_VMPEG);
 #endif
-               post_item(FILE_VORBIS);
-               post_item(FILE_OGG);
                post_item(FILE_PCM);
        }
 
index 4c440dbc0709f6e1a71451314e8dbef56869a07f..d32456f709a07a513d1afbff19cc231ab9513e14 100644 (file)
@@ -556,6 +556,7 @@ const char *Shuttle::probe()
        static const char *shuttle_devs[] = {
                "/dev/input/by-id/usb-Contour_Design_ShuttleXpress-event-if00",
                "/dev/input/by-id/usb-Contour_Design_ShuttlePRO_v2-event-if00",
+               "/dev/input/by-id/usb-Contour_Design_ShuttlePro-event-if00",
        };
        int ret = sizeof(shuttle_devs) / sizeof(shuttle_devs[0]);
        while( --ret >= 0 && stat(shuttle_devs[ret] , &st) );
@@ -579,6 +580,14 @@ void Shuttle::stop()
        }
 }
 
+BC_WindowBase *Shuttle::owns(BC_WindowBase *wdw, Window win)
+{
+       if( wdw->win == win ) return wdw;
+       if( (wdw=wdw->top_level)->win == win ) return wdw;
+       for( int i=wdw->popups.size(); --i>=0; )
+               if( wdw->popups[i]->win == win ) return wdw;
+       return 0;
+}
 
 int Shuttle::get_focused_window_translation()
 {
@@ -620,13 +629,16 @@ int Shuttle::get_focused_window_translation()
        this->msk = 0;
        BC_WindowBase *wdw = 0;
        int cin = -1;
-       if( (wdw=mwindow->gui) && wdw->win == focus )
+       if( (wdw=owns(mwindow->gui, focus)) != 0 )
                cin = FOCUS_MWINDOW;
-       else if( (wdw=mwindow->awindow->gui) && wdw->win == focus )
+       else if( (wdw=owns(mwindow->awindow->gui, focus)) != 0 )
                cin = FOCUS_AWINDOW;
-       else if( (wdw=mwindow->cwindow->gui) && wdw->win == focus )
+       else if( (wdw=owns(mwindow->cwindow->gui, focus)) != 0 ) {
+               if( mwindow->cwindow->gui->canvas->get_fullscreen() )
+                       wdw = mwindow->cwindow->gui->canvas->get_canvas();
                cin = FOCUS_CWINDOW;
-       else if( (wdw=mwindow->gui->mainmenu->load_file->thread->window) &&
+       }
+       else if( (wdw=mwindow->gui->mainmenu->load_file->thread->window) != 0 &&
                 wdw->win == focus )
                cin = FOCUS_LOAD;
        else {
@@ -634,7 +646,9 @@ int Shuttle::get_focused_window_translation()
                while( --i >= 0 ) {
                        VWindow *vwdw =  mwindow->vwindows[i];
                        if( !vwdw->is_running() ) continue;
-                       if( (wdw=vwdw->gui) && wdw->win == focus ) {
+                       if( (wdw=owns(vwdw->gui, focus)) != 0 ) {
+                               if( vwdw->gui->canvas->get_fullscreen() )
+                                       wdw = vwdw->gui->canvas->get_canvas();
                                cin = FOCUS_VIEWER;  break;
                        }
                }
@@ -644,7 +658,7 @@ int Shuttle::get_focused_window_translation()
        int root_x = 0, root_y = 0, win_x = 0, win_y = 0, x = 0, y = 0;
        unsigned int mask = 0, width = 0, height = 0, border_width = 0, depth = 0;
        wdw->lock_window("Shuttle::get_focused_window_translation 1");
-       if( XQueryPointer(wdw->display, focus, &root, &child,
+       if( XQueryPointer(wdw->top_level->display, focus, &root, &child,
                        &root_x, &root_y, &win_x, &win_y, &mask) ) {
                if( !child ) {
                        if( wdw->active_menubar )
@@ -653,9 +667,11 @@ int Shuttle::get_focused_window_translation()
                                child = wdw->active_popup_menu->win;
                        else if( wdw->active_subwindow )
                                child = wdw->active_subwindow->win;
+                       else
+                               child = wdw->win;
                }
-               if( child )
-                       XGetGeometry(wdw->display, child, &root, &x, &y,
+               else
+                       XGetGeometry(wdw->top_level->display, child, &root, &x, &y,
                                &width, &height, &border_width, &depth);
        }
        wdw->unlock_window();
index b02a945bad211f8e29ac6109383d85c0647ed1ad..e3bd2c914354233a1ba4485407b1f4e2b957e77c 100644 (file)
@@ -208,6 +208,7 @@ public:
        static const char *probe();
        void run();
        int read_config_file();
+       static BC_WindowBase *owns(BC_WindowBase *wdw, Window win);
 
        int done;
        int failed;
index ebf1e75533bdeb895c10db342cb7f5fd133fe855..5b8f548c82cbe15d3328b6173a010b71608d0500 100644 (file)
@@ -31,6 +31,13 @@ extern "C" {
 #include "libswscale/swscale.h"
 }
 
+#ifdef FFMPEG3
+#define url filename
+#else
+#define av_register_all(s)
+#define avfilter_register_all(s)
+#endif
+
 int done = 0;
 int64_t tm = 0, tn = 0;
 
index 84081a03162f9aa43f9721963cbba4fbf2a50881..c2211b32012f9d35eafd8e86d1d5e5b21d3d869b 100644 (file)
@@ -196,7 +196,7 @@ if test "x$WANT_GIT_FFMPEG" != "xno" ; then
 fi
 
 PKG_3RD([fftw],[auto],
-  [fftw-3.3.7],
+  [fftw-3.3.8],
   [ .libs/libfftw3.a \
     libbench2/libbench2.a \
     rdft/scalar/r2cb/.libs/librdft_scalar_r2cb.a \
@@ -277,7 +277,7 @@ PKG_3RD([libjpeg],[auto],
   [ . ])
 
 PKG_3RD([opus],[auto],
-  [opus-1.2.1],
+  [opus-1.3],
   [ .libs/libopus.a ],
   [ include ])
 
@@ -287,7 +287,7 @@ PKG_3RD([openjpeg],[auto],
   [ src/lib/openjp2 ])
 
 PKG_3RD([libogg],[auto],
-  [libogg-1.3.2],
+  [libogg-1.3.3],
   [ src/.libs/libogg.a ],
   [ include ])
 
@@ -312,7 +312,7 @@ PKG_3RD([libuuid],[yes],
   [ . ])
 
 PKG_3RD([libvorbis],[auto],
-  [libvorbis-1.3.5],
+  [libvorbis-1.3.6],
   [ lib/.libs/libvorbis.a \
     lib/.libs/libvorbisenc.a \
     lib/.libs/libvorbisfile.a ],
@@ -345,7 +345,7 @@ PKG_3RD([openexr],[auto],
 #  [])
 #
 PKG_3RD([tiff],[auto],
-  [tiff-4.0.9],
+  [tiff-4.0.10],
   [ libtiff/.libs/libtiff.a \
     libtiff/.libs/libtiffxx.a \
     port/.libs/libport.a ],[
@@ -362,7 +362,7 @@ PKG_3RD([x264],[auto],
   [ . ])
 
 PKG_3RD([x265],[auto],
-  [x265_2.9],
+  [x265_3.0],
   [ libx265.a ],
   [ . source ])
 
@@ -401,6 +401,16 @@ PKG_3RD([suil],[auto],
   [ usr/local/lib/libsuil-0.a ],
   [ usr/local/include ])
 
+PKG_3RD([libaom],[auto],
+  [libaom-v1.0.0],
+  [ usr/local/lib*/libaom*.a ],
+  [ usr/local/include ])
+
+PKG_3RD([libwebp],[auto],
+  [libwebp-1.0.2],
+  [ usr/local/lib*/libwebp*.a ],
+  [ usr/local/include ])
+
 AC_SUBST(STATIC_PKGS)
 
 AC_DEFUN([CHECK_ENABLE], [
@@ -473,7 +483,7 @@ fi
 
 AC_DEFUN([CHECK_LIB], [
 if test "x$HAVE_$1" != "xno"; then
- if test "x$PKG_$1" = "x" -o "x$WANT_STATIC_BUILD" = "xno"; then
+ if test "x$PKG_$1" = "x" -o "x$WANT_STATIC_BUILD" = "xno" -a "x$PKG_$1" = "xauto"; then
   AC_CHECK_LIB([$2], [$3], [HAVE_$1=yes], [HAVE_$1=no], [$4])
   AC_SUBST([HAVE_$1])
   if test "x$HAVE_$1" = "xyes"; then
@@ -544,6 +554,12 @@ CHECK_LIB([x264], [x264], [x264_encoder_encode])
 CHECK_HEADERS([x264], [x264 headers], [stdint.h x264.h])
 CHECK_LIB([x265], [x265], [x265_encoder_encode])
 CHECK_HEADERS([x265], [x265 headers], [x265.h])
+CHECK_LIB([opus], [opus], [opus_multistream_decoder_create])
+CHECK_HEADERS([opus], [libopus headers], [opus/opus_multistream.h])
+CHECK_LIB([libaom], [aom], [aom_codec_version])
+CHECK_HEADERS([libaom], [libaom headers], [aom/aom.h])
+CHECK_LIB([libwebp], [webp], [WebPGetEncoderVersion])
+CHECK_HEADERS([libwebp], [libwebp headers], [webp/encode.h])
 CHECK_LIB([a52dec], [a52], [a52_init])
 CHECK_HEADERS([a52dec], [a52 headers], [a52.h])
 CHECK_LIB([encore], [encore], [encore])
@@ -621,10 +637,6 @@ CHECK_WANT([ESOUND], [no], [use esd], [
  CHECK_LIB([audiofile], [audiofile], [afOpenFile])
  CHECK_HEADERS([audiofile], [audiofile headers], [audiofile.h])])
 
-CHECK_WANT([OPUS], [auto], [use libopus], [
- CHECK_LIB([opus], [opus], [opus_multistream_decoder_create])
- CHECK_HEADERS([opus], [libopus headers], [opus/opus_multistream.h])])
-
 CHECK_WANT([LV2], [auto], [use lv2], [
  saved_CFLAGS="$CFLAGS"
  CHECK_LIB([lilv], [lilv-0], [lilv_world_new])
@@ -702,7 +714,6 @@ AC_DEFUN([PKG_SHARED],[
  BUILD_$1=0
  AC_SUBST(BUILD_$1)
  SHARED_LIBS+="$SHARED_$1"
- echo "AC_HELP_STRING([shared],[$1])"
 ])
 
 AC_DEFUN([PKG_STATIC],[
@@ -772,6 +783,8 @@ PKG_PROVIDE([libtheora])
 PKG_PROVIDE([libuuid])
 PKG_PROVIDE([libvorbis])
 PKG_PROVIDE([mjpegtools])
+PKG_PROVIDE([libaom])
+PKG_PROVIDE([libwebp])
 PKG_PROVIDE([openexr], [$WANT_OPENEXR])
 PKG_PROVIDE([openjpeg])
 PKG_PROVIDE([tiff])
@@ -779,7 +792,7 @@ PKG_PROVIDE([twolame])
 PKG_PROVIDE([x264])
 PKG_PROVIDE([x265])
 PKG_PROVIDE([libvpx])
-PKG_PROVIDE([opus], [$WANT_OPUS])
+PKG_PROVIDE([opus])
 PKG_PROVIDE([lv2], [$WANT_LV2])
 PKG_PROVIDE([lilv], [$WANT_LV2])
 PKG_PROVIDE([sratom], [$WANT_LV2])
@@ -795,8 +808,10 @@ if test "x$WANT_LV2" = "xyes"; then
 fi
 
 AC_SUBST(STATIC_BLDS)
+for f in $SHARED_LIBS; do
+  echo "AC_HELP_STRING([shared],[$f])"
+done
 AC_SUBST(SHARED_LIBS)
-
 for f in $SYSTEM_LIBS; do
   echo "AC_HELP_STRING([system],[$f])"
 done
@@ -855,13 +870,6 @@ if test "x$HAVE_DL" = "xyes"; then
   EXTRA_LIBS+=' -ldl'
   FFMPEG_EXTRA_CFG+=' --extra-ldflags="-ldl"'
 fi
-if test "x$WANT_OPUS" = "xyes"; then
-  FFMPEG_EXTRA_CFG+=' --enable-libopus'
-  if test "x$HAVE_opus" = "xyes" -a "x$BUILD_opus" = "x0"; then
-    EXTRA_LIBS+=' -lopus'
-    CFG_CFLAGS+=' -I/usr/include/opus -I/usr/local/include/opus'
-  fi
-fi
 if test "x$WANT_BOOBY" != "xno"; then
   CFG_CFLAGS+=" -DBOOBY"
 fi
@@ -1025,9 +1033,6 @@ fi
 if test "x$WANT_GIT_FFMPEG" != "xno"; then
   echo "ffmpeg.git := $WANT_GIT_FFMPEG"
 fi
-if test "x$WANT_OPUS" = "xyes" -a "x$BUILD_opus" = "x0"; then
-  echo 'ffmpeg.cflags+=" -I/usr/include/opus -I/usr/local/include/opus"'
-fi
 if test "x$X264_CFG_PARAMS" != "x" ; then
   echo "x264.cfg_params :=$X264_CFG_PARAMS --enable-static --enable-pic"
 fi
index 2c7776cf4afb64d5bdcf718a7613d157c7d536ab..90584f4b32adb7eaa87900ed3b7fb45924f2aa02 100644 (file)
@@ -5,3 +5,4 @@
 
 ATTRS{name}=="Contour Design ShuttlePRO v2" MODE="0644"
 ATTRS{name}=="Contour Design ShuttleXpress" MODE="0644"
+ATTRS{name}=="Contour Design ShuttlePro" MODE="0644"
index 85367091c330bfb9fdb1ac2d31bfa41c050e8fc0..6cee721ec8c4fb16326138c2047aa7be640e566b 100644 (file)
@@ -58,6 +58,7 @@ install:      all
        cp -a Features5.pdf $(TARGET_DIR)/.
        cp -a shortcuts.html $(TARGET_DIR)/.
        cp -a RenderMux.sh $(TARGET_DIR)/.
+       cp -a 99-ShuttlePRO.rules $(TARGET_DIR)/.
 
 clean:
        rm -f $(OUTPUT) $(IMAGES)
diff --git a/cinelerra-5.1/ffmpeg/video/av1.webm b/cinelerra-5.1/ffmpeg/video/av1.webm
new file mode 100644 (file)
index 0000000..d5e642b
--- /dev/null
@@ -0,0 +1,6 @@
+webm libaom-av1
+# this codec codes less than one frame per sec
+# and so even a few seconds of video can take
+# a very long time to encode
+strict -2
+threads 8
index 50884162168f98b4075080a2d0e2ceaa2cc83128..f05d566742847688fced4f08d9c709bdc73d854c 100644 (file)
@@ -1 +1,3 @@
 image2 bmp
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/b%05d.bmp
diff --git a/cinelerra-5.1/ffmpeg/video/jp2.jp2 b/cinelerra-5.1/ffmpeg/video/jp2.jp2
new file mode 100644 (file)
index 0000000..5a48c6b
--- /dev/null
@@ -0,0 +1,3 @@
+image2 libopenjpeg
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/j%05d.jp2
index 92737ae1244acc919cd33dd6532e9e0e747d9acd..5d0c5e1d311f13d303bc6e51e5154b58e9dacd10 100644 (file)
@@ -1 +1,3 @@
 image2 pam
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/p%05d.pam
index 126ee417cee3b616ddee2e27a8b8e1ed81483908..051817a4aad20d8ab47100b7dccc4bb2948b1935 100644 (file)
@@ -1 +1,3 @@
 image2 pbm
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/p%05d.pbm
index d6eeda93a934e348b036e36657fe55b528b1b112..3a11548fa45e2a68663f6381382f93942bb2e7a9 100644 (file)
@@ -1 +1,3 @@
 image2 pcx
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/p%05d.pcx
index 8befa28b1068625fba2815bedd6c9d15bb4d17a7..574457c3394ac5e098a1b4032b663b2064f70ccf 100644 (file)
@@ -1 +1,3 @@
 image2 pgm
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/p%05d.pgm
index c93204be0f65169417ad76989a0b2d9099cddf43..9b090369836589863708546ee1e43467e25a6236 100644 (file)
@@ -1 +1,3 @@
 image2 pgmyuv
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/p%05d.pgmyuv
index aeaef1e943389a21f1ea9e18aa479382c90189fe..bb590c3ff0b64e38882c7e728bc374c6dd64f8c0 100644 (file)
@@ -1 +1,3 @@
 image2 png
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/p%05d.png
index 33b99c0e4138f97221b051eaeacc2b1413cd8d2d..872bba2217d79e083086beb13d5cb6208ef37994 100644 (file)
@@ -1 +1,3 @@
 image2 ppm
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/p%05d.ppm
index 543d1a12dc94f843e61ed1482518616c90f74629..530ba4898c7e4890cafbf4d8c6e0c2c2c7808bd6 100644 (file)
@@ -1 +1,3 @@
 image2 sgi
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/s%05d.sgi
index 09927d966801bddeaceec1bc96523ba78d36ef8e..4c2ebd2cbb41e692b08bdc78d5315dc8e5a5ed02 100644 (file)
@@ -1 +1,3 @@
 image2 tiff
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/t%05d.tiff
index 8af40d7b944041051b1e3c62573c12f17c8b7530..a1c592709319f7f6d68760aad94126dbcbb4417d 100644 (file)
@@ -1,2 +1,4 @@
 image2 tiff
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/t%05d.tiff
 pixel_format=rgb48
diff --git a/cinelerra-5.1/ffmpeg/video/webp.dfl b/cinelerra-5.1/ffmpeg/video/webp.dfl
new file mode 100644 (file)
index 0000000..5c61c8b
--- /dev/null
@@ -0,0 +1 @@
+webp.webp
diff --git a/cinelerra-5.1/ffmpeg/video/webp.webp b/cinelerra-5.1/ffmpeg/video/webp.webp
new file mode 100644 (file)
index 0000000..656f5b0
--- /dev/null
@@ -0,0 +1,3 @@
+image2 libwebp
+# this codec creates a set of image files in a directory
+# use an image2 file name like /dir/w%05d.webp
index 36101b975539b05d19d8cb73c76d0e68c5621815..a5f15492bf8253ee111e99a9049a9178066c9505 100644 (file)
@@ -114,6 +114,9 @@ ffmpeg.cfg_params= \
        $(call if_pkg,twolame,--enable-libtwolame) \
        $(call if_pkg,openjpeg,--enable-libopenjpeg) \
        $(call if_pkg,lame,--enable-libmp3lame) \
+       $(call if_pkg,libaom,--enable-libaom) \
+       $(call if_pkg,libwebp,--enable-libwebp) \
+       $(call if_pkg,opus,--enable-libopus) \
        $(call if_pkg,libvorbis,--enable-libvorbis) \
        $(call if_pkg,libtheora,--enable-libtheora) \
        $(call if_pkg,libvpx,--enable-libvpx) \
@@ -122,6 +125,8 @@ ffmpeg.cfg_params= \
        --extra-cflags="\
                $(call inc_path,twolame,libtwolame) \
                $(call inc_path,lame,include) \
+               $(call inc_path,libaom,usr/local/include) \
+               $(call inc_path,libwebp,usr/local/include) \
                $(call inc_path,openjpeg,src/lib/openjp2) \
                $(call inc_path,libogg,include) \
                $(call inc_path,opus,include) \
@@ -136,6 +141,8 @@ ffmpeg.cfg_params= \
        --extra-libs="-Wl,--start-group \
                $(call ld_path,twolame,libtwolame/.libs) \
                $(call ld_path,lame,libmp3lame/.libs) \
+               $(call ld_path,libaom,usr/local/lib) \
+               $(call ld_path,libwebp,usr/local/lib) \
                $(call ld_path,openjpeg,bin) \
                $(call ld_path,opus,.libs) \
                $(call ld_path,libogg,lib/.libs) \
@@ -166,6 +173,13 @@ ilmbase.mak_params?=; $(MAKE) -C ilmbase* install; cd $(call bld_path,ilmbase);
 lame.cfg_vars?= CFLAGS+=" -O"
 lame.cfg_params?=--enable-shared=no
 lame.mak_params?= ; cd $(call bld_path,lame,include); ln -sf . lame
+libaom.cfg_vars?=$(call cmake_config,aom-master)
+libaom.cfg_params?= -DENABLE_SHARED=no -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_INSTALL_PREFIX=$(call bld_path,libaom)/usr/local
+libaom.mak_params?= ; $(MAKE) -C libaom* install
+libwebp.cfg_vars?= ./autogen.sh ;
+libwebp.cfg_params?=--enable-shared=no
+libwebp.mak_params?=; $(MAKE) -C libwebp* install DESTDIR=$(call bld_path,libwebp)
 mjpegtools.cflags?="$(call inc_path,libjpeg) $(call ld_path,libjpeg,.libs)"
 mjpegtools.mak_params?=; ln -s . $(call bld_path,mjpegtools,utils)/mjpegtools 
 mjpegtools.cfg_params?= --enable-shared=no --without-libsdl --without-v4l
@@ -272,13 +286,15 @@ $(call rules,$(call std-build,djbfft))
 $(call rules,$(call std-build,audiofile))
 $(call rules,$(call std-build,encore))
 $(call rules,$(call std-build,esound,audiofile))
-$(call rules,$(call std-build,ffmpeg, twolame lame openjpeg opus libtheora x264 x265 libvpx))
+$(call rules,$(call std-build,ffmpeg, twolame lame openjpeg opus libtheora x264 x265 libvpx libaom libwebp))
 $(call rules,$(call std-build,fftw))
 $(call rules,$(call std-build,flac,libogg))
 $(call rules,$(call std-build,giflib))
 $(call rules,$(call std-build,ilmbase))
 $(call rules,$(call std-build,ladspa))
 $(call rules,$(call std-build,lame))
+$(call rules,$(call std-build,libaom))
+$(call rules,$(call std-build,libwebp))
 $(call rules,$(call std-build,libavc1394,libraw1394))
 $(call rules,$(call std-build,libdv))
 $(call rules,$(call std-build,libiec61883,libraw1394))
index fbf1e83aa2941cdc23fb916d1a6fa32b44c77c53..a3643e68d39368f831cd712629fa39059b84cca0 100644 (file)
@@ -1,36 +1,36 @@
 https://www.cybercom.net/~dcoffin/dcraw/dcraw.c
-http://download-mirror.savannah.gnu.org/releases//openexr/ilmbase-2.2.0.tar.gz
-http://gnu.mirrors.pair.com/savannah/savannah//openexr/openexr-2.2.0.tar.gz
+http://download-mirror.savannah.gnu.org/releases//openexr/ilmbase-2.2.1.tar.gz
+http://gnu.mirrors.pair.com/savannah/savannah//openexr/openexr-2.2.1.tar.gz
 https://sourceforge.net/projects/opencvlibrary/files/latest/download?source=directory = 3.2.0
-https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-0.1.5.tar.gz/download
+#https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-2.2.0.tar.gz/download
 http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
 https://ieee1394.wiki.kernel.org/index.php/Libraries
 https://www.kernel.org/pub/linux/libs/ieee1394/libraw1394-2.1.2.tar.xz
 https://www.kernel.org/pub/linux/libs/ieee1394/libiec61883-1.2.0.tar.xz
 https://sourceforge.net/projects/libavc1394/files/latest/download?source=directory = 0.5.4
-https://sourceforge.net/projects/libdv/files/latest/download?source=directory
-https://sourceforge.net/projects/giflib/files/latest/download
-https://sourceforge.net/projects/flac/files/latest/download?source=directory
-https://github.com/uclouvain/openjpeg/archive/master.zip = openjpeg-2.1.0-20160221.tar.xz
+https://sourceforge.net/projects/libdv/files/latest/download?source=directory = 0.104
+https://sourceforge.net/projects/giflib/files/latest/download = 5.1.4
+https://sourceforge.net/projects/flac/files/latest/download?source=directory = 1.3.2
+https://github.com/uclouvain/openjpeg/archive/master.zip = openjpeg-2.3.0-20171004.tar.xz ??
 https://sourceforge.net/projects/libjpeg-turbo/files/1.5.1/libjpeg-turbo-1.5.1.tar.gz/download
-http://www.fftw.org/fftw-3.3.6-pl2.tar.gz
+http://www.fftw.org/fftw-3.3.8.tar.gz
 http://festvox.org/packed/festival/2.4/festival-2.4-release.tar.gz
 http://festvox.org/packed/festival/2.4/speech_tools-2.4-release.tar.gz
 http://festvox.org/packed/festival/2.4/voices/festvox_cmu_us_ahw_cg.tar.gz
-http://downloads.sourceforge.net/faac/faac-1.28.tar.bz2
-http://downloads.sourceforge.net/faac/faad2-2.7.tar.bz2
-http://ftp.gnome.org/pub/gnome/sources/esound/0.2/esound-0.2.41.tar.bz2
+#http://downloads.sourceforge.net/faac/faac-1.29.9.2.tar.gz
+#http://downloads.sourceforge.net/faac/faad2-2.8.8.tar.gz
+#http://ftp.gnome.org/pub/gnome/sources/esound/0.2/esound-0.2.41.tar.bz2
 http://audiofile.68k.org/audiofile-0.3.6.tar.gz
 https://sourceforge.net/projects/twolame/files/latest/download?source=directory = 0.3.13
-http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.xz
-http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
+http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.6.tar.xz
+http://downloads.xiph.org/releases/ogg/libogg-1.3.3.tar.gz
 http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
-https://sourceforge.net/projects/lame/files/latest/download?source=directory = 3.99.5
-http://dl.maptools.org/dl/libtiff/libtiff-cvsroot, untar, cd libtiff, cvs init, cd /tmp/x, cvs co -d path/libtiff = 4.0.6
+https://sourceforge.net/projects/lame/files/latest/download?source=directory = 3.100
+https://download.osgeo.org/libtiff/tiff-4.0.10.tar.gz
 https://sourceforge.net/projects/libuuid/files/latest/download?source=directory - 1.0.3
-ftp://ftp.videolan.org/pub/x264/snapshots/x264-snapshot-20170426-2245-stable.tar.bz2
-https://bitbucket.org/multicoreware/x265/downloads/x265_2.4.tar.gz
-http://ffmpeg.org/releases/ffmpeg-4.0.tar.bz2
+ftp://ftp.videolan.org/pub/x264/snapshots/x264-snapshot-20190131-2245-stable.tar.bz2
+https://bitbucket.org/multicoreware/x265/downloads/x265_3.0.tar.gz
+http://ffmpeg.org/releases/ffmpeg-4.1.tar.gz
 https://github.com/webmproject/libvpx/releases/tag/v1.7.0
 https://github.com/swh/ladspa/releases/tag/v0.4.17, plugin.org.uk
-https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz
+https://archive.mozilla.org/pub/opus/opus-1.3.tar.gz
diff --git a/cinelerra-5.1/thirdparty/src/fftw-3.3.7.tar.xz b/cinelerra-5.1/thirdparty/src/fftw-3.3.7.tar.xz
deleted file mode 100644 (file)
index 7cb2217..0000000
Binary files a/cinelerra-5.1/thirdparty/src/fftw-3.3.7.tar.xz and /dev/null differ
diff --git a/cinelerra-5.1/thirdparty/src/fftw-3.3.8.tar.xz b/cinelerra-5.1/thirdparty/src/fftw-3.3.8.tar.xz
new file mode 100644 (file)
index 0000000..f7dcbe0
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/fftw-3.3.8.tar.xz differ
diff --git a/cinelerra-5.1/thirdparty/src/libaom-v1.0.0.tar.xz b/cinelerra-5.1/thirdparty/src/libaom-v1.0.0.tar.xz
new file mode 100644 (file)
index 0000000..f5d4fee
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/libaom-v1.0.0.tar.xz differ
diff --git a/cinelerra-5.1/thirdparty/src/libogg-1.3.2.tar.xz b/cinelerra-5.1/thirdparty/src/libogg-1.3.2.tar.xz
deleted file mode 100644 (file)
index a100a0c..0000000
Binary files a/cinelerra-5.1/thirdparty/src/libogg-1.3.2.tar.xz and /dev/null differ
diff --git a/cinelerra-5.1/thirdparty/src/libogg-1.3.3.tar.xz b/cinelerra-5.1/thirdparty/src/libogg-1.3.3.tar.xz
new file mode 100644 (file)
index 0000000..bfd8dec
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/libogg-1.3.3.tar.xz differ
diff --git a/cinelerra-5.1/thirdparty/src/libvorbis-1.3.5.tar.xz b/cinelerra-5.1/thirdparty/src/libvorbis-1.3.5.tar.xz
deleted file mode 100644 (file)
index 1928c22..0000000
Binary files a/cinelerra-5.1/thirdparty/src/libvorbis-1.3.5.tar.xz and /dev/null differ
diff --git a/cinelerra-5.1/thirdparty/src/libvorbis-1.3.6.tar.xz b/cinelerra-5.1/thirdparty/src/libvorbis-1.3.6.tar.xz
new file mode 100644 (file)
index 0000000..fb018e3
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/libvorbis-1.3.6.tar.xz differ
diff --git a/cinelerra-5.1/thirdparty/src/libwebp-1.0.2.tar.xz b/cinelerra-5.1/thirdparty/src/libwebp-1.0.2.tar.xz
new file mode 100644 (file)
index 0000000..aea7ec9
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/libwebp-1.0.2.tar.xz differ
index 79603ded6814314e710bdc9ed7cf008f58590146..79d437f3ed9582a2020ac7fd65199904730b0c37 100644 (file)
Binary files a/cinelerra-5.1/thirdparty/src/openjpeg-2.3.0.tar.xz and b/cinelerra-5.1/thirdparty/src/openjpeg-2.3.0.tar.xz differ
diff --git a/cinelerra-5.1/thirdparty/src/opus-1.2.1.tar.xz b/cinelerra-5.1/thirdparty/src/opus-1.2.1.tar.xz
deleted file mode 100644 (file)
index c2f3c81..0000000
Binary files a/cinelerra-5.1/thirdparty/src/opus-1.2.1.tar.xz and /dev/null differ
diff --git a/cinelerra-5.1/thirdparty/src/opus-1.3.tar.xz b/cinelerra-5.1/thirdparty/src/opus-1.3.tar.xz
new file mode 100644 (file)
index 0000000..9e7e246
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/opus-1.3.tar.xz differ
diff --git a/cinelerra-5.1/thirdparty/src/tiff-4.0.10.tar.xz b/cinelerra-5.1/thirdparty/src/tiff-4.0.10.tar.xz
new file mode 100644 (file)
index 0000000..dafaeb2
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/tiff-4.0.10.tar.xz differ
diff --git a/cinelerra-5.1/thirdparty/src/tiff-4.0.9.tar.xz b/cinelerra-5.1/thirdparty/src/tiff-4.0.9.tar.xz
deleted file mode 100644 (file)
index 529bf8e..0000000
Binary files a/cinelerra-5.1/thirdparty/src/tiff-4.0.9.tar.xz and /dev/null differ
diff --git a/cinelerra-5.1/thirdparty/src/x265_2.9.tar.xz b/cinelerra-5.1/thirdparty/src/x265_2.9.tar.xz
deleted file mode 100644 (file)
index d8e2937..0000000
Binary files a/cinelerra-5.1/thirdparty/src/x265_2.9.tar.xz and /dev/null differ
diff --git a/cinelerra-5.1/thirdparty/src/x265_3.0.tar.xz b/cinelerra-5.1/thirdparty/src/x265_3.0.tar.xz
new file mode 100644 (file)
index 0000000..cc68b10
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/x265_3.0.tar.xz differ