Current version

v1.10.4 (stable)


Main page
Archived news
Plugin SDK
Knowledge base
Contact info
Other projects


Blog Archive

VirtualDub 1.7.1 (27021) released

New experimental version.


Well, you know the drill.

Animated GIF support is indeed in this version. I experimented with an animated palette delta trick that a reader suggested, and it does indeed create some really nice animated GIFs. (For the three of you who remember my really old DOS paint program, I pulled the adaptive palette generation code from it.) Animated GIF output wasn't really meant to be a real feature in VirtualDub, particularly since I don't want to implement two-pass encoding just for an optimized global palette, so the output path doesn't have options and tends to write enormous files. Still, if you want to experiment with it, you can do so via the Tools > Create Animated GIF menu option.

There are a few other miscellaneous features in this version as well. I threw in a CPU version of the "warp resize" display pixel shader I posted a while back, and the "display decompressed output" option can now be toggled on the fly, so you can preview part of a save operation without slowing down the whole thing.

The real features in this version, though, are all due to me screwing around a bit with 3D acceleration.

First, the Direct3D and D3DFX display minidrivers now have hardware YCbCr acceleration support for most formats, including UYVY, YUY2, YV24, YV16, YV12, I420, and YVU9. I used pixel shaders for this, so it's not vulnerable to the imprecise or incorrectly ranged hardware conversions that the DirectShow Video Mixing Renderer 9 sometimes hits with StretchBlt(). Also, the D3D9 and D3DFX minidrivers now have full support for field display modes. The plan is to eventually switch the default display path from DirectDraw to Direct3D for Windows Vista, but I'm not ready to make the switch yet, as I'm still seeing annoying issues with Vista and NVIDIA display drivers... and I haven't gotten around to reinstalling Vista RTM on my ATI-based machine to figure out who to blame.

Second, preview acceleration in capture mode now has options to do field-based display. This isn't particularly useful during normal capture, but they're more useful if you're viewing non-interlaced output... like if a certain programmer decided to use his new capture device to play an old Playstation 1 game, like Lunar 2....

The distinctive feature in this version, though, is the screen capture support in capture mode. Now, you might think... why the heck did he add screen capture? Because he's too cheap to buy a real screen capture program? Well, yes, but the real reason is that I found an interesting way to do it. The screen capture minidriver supports OpenGL acceleration, which means that if you have a 3D card with pixel shaders, you can get hardware accelerated scaling, RGB-to-YCbCr conversion, and duplicate frame detection (probably the strangest use ever for occlusion query). I have successfully captured a 1920x1200 desktop, shrunk to 960x600, converted to YUY2, and compressed to Huffyuv at 30 fps. Combine this with "What U Hear" or "Stereo Mix" or whatever your sound card calls the loopback, and you can capture motion video with sound with surprisingly good sync. Surprisingly, it works even if another program is using the 3D hardware -- I successfully captured Final Fantasy VII in an emulator at full rate. The downside is that it doesn't seem to work with the NVIDIA drivers for Vista, where it just gives a black screen. It fails even if the DWM is disabled and only Aero Basic is displayed. Again, I haven't tried this with ATI's Vista drivers yet, although I did test it successfully on a RADEON X850XT in Windows XP. If anyone has an idea how to get desktop readback into a texture working on Vista or manages to get it working with WDDM drivers, please let me know.

Read on for the change list.


Build 27021 (1.7.1, experimental): [February 6, 2007]
   [features added]
   * AVI file info now shows the FOURCC of the video stream.
   * The "display decompressed output" option can now be enabled and disabled
     in the middle of encoding.
   * Improved playback timing.
   * Added /hexview command-line flag to open a file in read-only mode.
   * Added /noStupidAntiDebugChecks for development purposes.
   * Added "warp resize" video filter.
   * The "resize" video filter now allows editing the frame height with an
     aspect ratio constraint active.
   * Ctrl+Drag in the audio display modifies the audio displacement.
   * Added an option to create several types of diagnostic test videos.
   * Added Y800 as a synonym for Y8.
   * Added support for the 4:4:4 planar YCbCr "YV24" format.
   * Added animated GIF import.
   * D3D: UYVY, YUY2, YV24, YV16, YV12, I420, and YVU9 video display is now
     accelerated in Direct3D mode.
   * D3DFX: Added additional support for field-based display shaders.
   * Capture: Added a new screen capture driver.
   * Capture: Added configurable hotkeys for stopping and starting capture.
   * Capture: DirectShow filter graph build errors are now noted in the log
   * Capture: Full-screen mode now auto-hides mouse cursor.
   * Capture: Added UI for modifying DirectShow brightness, contrast, gamma,
     sharpness, and hue settings.
   * Capture: Audio playback setting is now auto-saved. 

   [bugs fixed]
   * "Export as filmstrip" command failed if no audio stream was available.
   * Filmstrips didn't resave properly as AVI (video stream type set
   * Modified the SSE check to ignore the flush-to-zero (FTZ) bit, which
     unfortunately some compiler DLL runtimes twiddle.
   * "Preserve empty frames" was writing out the empty frames as key frames.
     VirtualDub corrects this on load, but it was still incorrect on disk.
   * "Preserve empty frames" caused the video codec key frame interval to
     work incorrectly -- it counted compressed frames rather than total frames.
   * "Display decompressed output" was broken.
   * Added workaround for silent crash when using the audio display with older
     versions of Avisynth.
   * Added workaround for digital cameras that leave the last byte off of JPEG
   * Added workaround for some naughty DLLs that prevented VirtualDub's crash
     logging mechanisms from working properly.
   * Added more workarounds for overlay surface goofiness on Windows Vista.
   * Audio display now reflects timeline edits and the audio displacement
   * Made it more difficult to accidentally select frames in the audio display.
   * Fixed divide by zero crash when D3DFX display is enabled and a video pane
     is shrunken to zero width.
   * Fixed case where tiny audio chunks were emitted periodically when using
     some MP3 codecs at a 44KHz sampling rate (audio interleaving issue, not
     sync issue).
   * Fixed goofed file filters in source dialog of "create paletted AVI"
   * Inverse telecine could be enabled with smart rendering (which doesn't
   * Fixed "preserve empty frames" and "smart rendering" options to work
     better in the presence of a B-frame encoding delay.
   * Capture: Alt+Enter full-screen toggle left window in topmost placement.
   * Capture: Fixed sporadic crash when capturing with resync disabled.
   * Capture: Fixed tabbing in "set custom format" dialog.
   * Capture: /capfileinc and the startup code didn't increment the filename
     properly past existing files when multisegment capture was enabled.
   * Capture: Hide on Capture now works for DirectShow-based devices.
   * Capture: Added workaround for driver bug in Adaptec AVC-1400 GameBridge
     drivers that causes a crash when displaying video capture pin properties.
   * Capture: Fixed filter leak in DirectShow driver in some cases when the
     filter graph failed to build properly.
   * Capture: When the "transform filter" registry option was used, the
     transform filter popped off the capture filter after a video format

   [regressions fixed]
   * Fixed crash when opening AVI file with truncated MP3 audio format.
   * Fixed some audio sync errors when cutting.
   * Fixed the resize filter's settings not saving properly. This was actually
     caused by a long standing overload resolution bug in filter script with
     multiple glue functions on the same overload.
   * Fixed crash when attempting to preview with an audio stream for which no
     decompressor is available.
   * Fixed crash when using quick preview beyond end of selection.
   * Fixed a couple of cases of bogus total audio sample counts being reported
     in the dub status window.
   * Audio sync sometimes wasn't correct when cutting files with VBR audio.
   * Audio stream estimate on status window was sometimes negative.
   * Fixed crash at end of operation with IVTC enabled.


This blog was originally open for comments when this entry was first posted, but was later closed and then removed due to spam and after a migration away from the original blog software. Unfortunately, it would have been a lot of work to reformat the comments to republish them. The author thanks everyone who posted comments and added to the discussion.