Here's the changelog too:-
__________________________
1.4.12 is out, and it breaks a rather old VirtualDub tradition: it has a separate version optimized for the Pentium 4, instead of all optimizations in one codebase. Intel Corporation has graciously given me a 3.06GHz Pentium 4 with HyperThreading Technology, along with copies of Intel C/C++ and VTune, and I spent some time optimizing the MPEG-1 decoder, resize filter, and color conversion routines for the P4. The reason for the separate executables is that the P4 version is compiled with Intel C/C++ with the /QxW flag, and won't run at all on CPUs without SSE2. However, don't fret, because 1.4.12 still has a standard executable with auto-CPU-specific dispatch, and it even has some of the optimizations of the P4 version. To run the P4 version, just drop it in the folder where you unzipped the regular version, and launch VeedubP4.exe instead; it otherwise should function exactly as the usual version. And yes, I do still have a Pentium III, so I do know the normal version does not require a P4.
This wouldn't be a new release, of course, without a little something for everyone else too. As it turns out, the HyperThreaded CPU exposed non-atomic synchronization code in the playback routine, and so this version fixes random lockups during playback on any SMP or HT-capable system. (A rather neat feature of HyperThreading is that you find all the mistakes in your threading code without having a second CPU do nothing all the time other than run WinAmp.) The VTune 6.0 profiler also spotted an unaligned row buffer in the resize routine, which should execute a little faster now. I fixed a bug that made the copy construction support in the filter API unusable, and fixed the directory bug that everyone's been telling me about in the Save Image Sequence command. I'm sorry I wasn't able to squish some of the other bugs or missing features that still exist, but I wanted to get the P4 version and the above critical fixes out first.
My philosophy is that one executable should contain optimizations for all CPUs and users should not have to switch executables to do so, but I have to rethink my strategy for doing so. Intel C++ has a much better code generator than Visual C++, even VC7 -- the output of the Intel compiler makes me say "hey, that's pretty good," whereas my reaction to Visual C++'s output is usually "hey, that doesn't suck." The main problems are that CPU-specific dispatch is tougher when you have a large amount of C++ code involved, and that the Intel compiler generally produces executables about 30% bigger than the Microsoft compiler. A third downside is that the IC++ inline assembler... well, miscompiles some of my assembly code. For that reason, one module in the P4 version, mpeg_idct.cpp, is compiled with Visual Studio .NET rather than Intel C++. My plan for current releases, however, is for the codebase to be buildable on Visual C++ 6.0 SP5+PP, Visual Studio .NET, and Intel C++ 6.0. Also, at least for the short term, VirtualDub will continue to run on all 80486-compatible CPUs; I haven't decided to require MMX yet.
On a random note, I've been distracted by two new games. I just started playing Final Fantasy X (beaten FF4-FF9/FFMQ/FFT/SD2/SD3/RS3, can't stop now), and although I like the new battle system, I hate Blitzball. It's actually been out for a long time, but I just got it. For some reason, I have a strong urge to rename my main character "Selphie." The other game is Need for Speed: Hot Pursuit 2, which has much improved car physics and gameplay -- the cops no longer have the giant electromagnet at their disposal and resetting gives you a running start -- but what I find annoying is the game insulting my driving. I play NFS:HP2 with the keyboard, and the cops keep radioing "he's all over the road!" to each other.
The changelist for 1.4.12:
Build 14303 (Version 1.4.12): [November 23, 2002]
[features added]
* Parts of the MPEG-1 decoder, some color conversion
functions, and parts of the resize filter have been
optimized for SSE2 (Pentium 4).
[bug fixes]
* Fixed intermittent deadlock during playback caused
by non-atomic thread synchronization. This affects
SMP systems as well as CPUs with HyperThreading
Technology.
* Fixed Save Image Sequence regression in 1.4.11 that
caused the directory portion of the dialog to be
ignored.
* Fixed broken copyProc support.