What is VirtualDub?
VirtualDub is a video capture/processing utility for 32-bit Windows platforms
(95/98/ME/NT4/2000/XP), licensed under the GNU General Public License
(GPL). It lacks the editing power of a general-purpose editor such as
Adobe Premiere, but is streamlined for fast linear operations over video.
It has batch-processing capabilities for processing large numbers of files and
can be extended with third-party video
filters. VirtualDub is mainly geared toward processing AVI files,
although it can read (not write) MPEG-1 and also handle sets of BMP images.
I basically started VirtualDub in
college to do some quick capture-and-encoding that I wanted done; from there
it's basically grown into a more general utility that can trim and clean up
video before exporting to tape or processing with another program. I
released it on the web and others found it useful, so I've been tinkering around
with its code ever since. If you have the time, please download and enjoy.
§
¶How to
fix debugger visualizers for VS2005 SP1 and VS2008
If you've
written a bunch of custom visualizers for the Visual Studio debugger, you
may have run into the problem lately of the preview() section of your visualizer
causing the debugger to hang or crash, or simply displaying ... when used in
nested visualizers. I tracked this down to a change that was snuck into VS2005
SP1 and which is also in VS2008 beta 2. It used to be the case that $c
(container) and $e (element) were equivalent in the preview() block. This is no
longer the case -- $c instead refers to the top level container. This means that
you can run into problems if you have a nested setup like this:
A {
preview($c.m)
}
B {
preview($c.m)
}
Formerly, this would work fine with an object of type B which derives from A.
In VS2005 SP1 / VS2008b2, this causes the debugger to crash, because instead of
evaluating B::m and then A::m, it evaluates B::m over and over and then blows
up. In visualizers where the fields of the nested type don't alias with the type
that started the evaluation, you'll see ... instead as that's the debugger's way
of signifying evaluation error.
In the cases that I've seen, replacing $c with $e within preview() fixes
the problem.
I also have some additional tips that I've learned since writing the original
blog entry:
- You can avoid bumping the indices of the auto-numbered elements by
surrounding named elements in #(), which will push them after the
auto-numbered ones:
MyVector {
children(
#(
#array(expr: $c.s[$i], size: $c.len),
#(raw: [$c,!])
)
)
}
This can also be used as a dirty way to force w to the
end of the variable list for a 4-vector that has x, y, z, and w components,
which would ordinarily be sorted alphabetically.
(Although this
bug still exists in VS2005 SP1, it appears to be fixed in VS2008 beta
2 — the indices start at [0] regardless.)
- The expression parser is whitespace sensitive when parsing template type
expressions, so you should mimic the debugger exactly. Generally,
this means the unusual style of placing a space before the comma
separating template elements and not after, i.e.: mytype<$T1 ,$T2>.
- The "b" at the end of a debugger format tag means "bare" and is useful for
displaying a value without adornment like quotes and 0x
prefixes. It's used in the existing visualizers for strings (foo,sub),
but you can also use it for integers: value,xb
- If you use #array() within a preview block, the debugger will
automatically insert commas between each element.
(Read
more....)
§
¶What's
new in the 1.7 series
A reader wanted to a summary of all the new features in the VirtualDub 1.7
series, so....
Improved file format support
- Maya IFF (read).
- PNG (now read/write).
- Animated GIF (read/write).
- Adobe Filmstrip (read/write).
- WAVE64 (read/write): Now break the 2GB barrier for audio files.
- Raw audio (write).
- IFF ANIM: Added support for HAM, Halfbrite, and AGA modes.
- AVI: Direct YV24 and Y800 support.
- Input driver plugin API: Add support for custom formats.
Enhanced editing
- Smart rendering: Recompress only the portions of the video you've edited
and copy the rest at direct-mode speeds.
- Audio display: View the waveform or spectrogram of an uncompressed audio
stream. Visually drag an audio stream back into sync.
- On-the-fly compressed preview: View the post-compression output for a
moment. Toggle it back off without speed penalty.
- Preserve empty frames: Process a "120 fps" video at actual frame
rate.
More powerful filtering
- Revamped resize filter UI: Easy relative sizing and aspect ratio
preservation. Save your favorite settings.
- New center cut algorithm for better center/side
audio separation.
- Cleaner pitch scaling algorithm.
- Warp resize: Cartoon-friendly resizing.
- Filter curves: Fade a filter in and out over time. Combine with smart
rendering to direct-copy the parts of the video you don't filter.
Improved compatibility
- Fixed display issues when running under Windows Vista.
- Recover broken AVI files written by Vista RTM. (Note: There is now a patch
available from Microsoft for this issue.)
- Workarounds for broken JPEGs and mu-law audio streams written by digital
cameras.
- Resolved issues with various drivers and codecs, including the Adaptec
GameBridge, Pinnacle DV codec, and Blackmagic MJPEG codec.
- No more dangling frames when writing segmented AVIs while compressing
video.
Better display support
- Better vertical sync and field display support: See interlaced video more
faithfully.
- Improved D3DFX annotation/semantics support: Prototype more powerful
algorithms.
- Direct3D accelerated color conversion for UYVY, YUY2, YV24, YV16, I420,
and YVU9 formats: Preview faster under Vista with WDDM drivers.
Expanded video capture capabilities
- Video proc amp support: Easy access to a device's brightness, contrast,
saturation, and hue controls.
- Configurable global stop/start hotkeys.
- Tuner antenna/cable switching.
- More settings auto-save.
- Improved audio resync code.
Stability, stability, stability
- Lots of bug fixes that were too risky to push into the 1.6.x
series.
(Read
more....)