virtualdub.org Proof that I had too much free time in college

### Current version

v1.9.11 (stable)
v1.10.1 (exp.)

### Navigation

Main page
Archived news
Downloads
Documentation
Capture
Compiling
Processing
Crashes
Features
Filters
Plugin SDK
Knowledge base
Donate
Contact info
Forum
Other projects
Altirra

# VirtualDub documentation: compiling

It seems you can never compile someone else's application without a lot of hair pulling!

> What do I need to compile VirtualDub?

>   You need Visual C++ 6.0 SP5 + Processor Pack and Microsoft Macro Assembler (MASM) 6.15. The Processor Pack is a free download from Microsoft's website, although you will need to patch to SP5 first (this is mandatory anyway since some pre-SP3 bugs will cause VirtualDub to miscompile). It also includes MASM (`ml.exe`) as well. If you don't have the Processor Pack installed, the SSE instruction `sfence` will not compile.

> What are the `verinc` and `mapconv` tools?

>   `verinc` is my automatic build number incrementer, and `mapconv` generates the `.dbg` files used to generate stack dumps on a crash. `mapconv` can be safely removed from the VirtualDub.exe post-build step without problems, but `verstub.asm` still needs to be compiled.

>   Download source code for mapconv and verinc from virtualdub.org (HTTP).

> How should I lay out the directory structure when I unzip the archives?

>   The source and auxsrc distributions can go into any directory, although `VirtualDub` just might be a good name for it. NekoAmp should go into `amplib_new` and Sylia should go into `sylia`, with both directories at the same level as the `VirtualDub` directory.

> What's `INVALID_SET_FILE_POINTER`?

>   A macro constant included in recent versions of Microsoft's Platform SDK, which has newer Win32 includes than the original Visual C++ 6.0 distribution. Install the PSDK includes or use:

>   > `#define INVALID_SET_FILE_POINTER ((DWORD)-1)`

> VC++ says it can't find `IAMPDecoder.h`.

>   You need to install the NekoAmp source code and headers. By mistake, some of VirtualDub's modules refer to an `amplib` directory in their preprocessor settings; they should all be pointing to `amplib_new`.

> VC++ says it can't find `IScriptInterpreter.h`.

>   Install the source code and headers for the Sylia scripting language in `../sylia`.

> When I recompile VirtualDub, the executable is over a megabyte, instead of the 380K yours is!

>   Don't release Debug mode builds; change the build target to "VirtualDub - Win32 Release." (You're not supposed to ship debug executables anyway, as the Visual C++ debug RTL isn't redistributable.)

> I'm building a Release build now, but it's still over 800K.

>   I cheated -- the release `VirtualDub.exe` is compacted with UPX.

> Isn't assembly language dead with modern compilers?

>       void add_pairs(float *dst, const float *src, int count) {
>       	if (count) {
>       		do {
>       			float x = *src++;
>       			float y = *src++;

>       			*dst++ = x+y;
>       		} while(--count);
>       	}
>       }

>       F:\test>cl /c /O2ax /G6s fpu.cpp && dumpbin /disasm fpu.obj
>       Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
>       Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

>       fpu.cpp
>       Microsoft (R) COFF Binary File Dumper Version 6.00.8447
>       Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

>       Dump of file fpu.obj

>       File Type: COFF OBJECT

>       ?add_pairs@@YAXPAMPBMH@Z (void __cdecl add_pairs(float *,float const *,int)):
>         00000000: 8B 54 24 0C        mov         edx,dword ptr [esp+0Ch]
>         00000004: 85 D2              test        edx,edx
>         00000006: 74 1F              je          00000027
>         00000008: 8B 44 24 08        mov         eax,dword ptr [esp+8]
>         0000000C: 8B 4C 24 04        mov         ecx,dword ptr [esp+4]
>         00000010: D9 00              fld         dword ptr [eax]
>         00000012: 83 C0 04           add         eax,4
>         00000015: D9 00              fld         dword ptr [eax]
>         00000017: 83 C0 04           add         eax,4
>         0000001A: D8 C1              fadd        st,st(1)
>         0000001C: 83 C1 04           add         ecx,4
>         0000001F: 4A                 dec         edx
>         00000020: D9 59 FC           fstp        dword ptr [ecx-4]
>         00000023: DD D8              fstp        st(0)
>         00000025: 75 E9              jne         00000010
>         00000027: C3                 ret
>         00000028: 90                 nop
>         00000029: 90                 nop
>         0000002A: 90                 nop
>         0000002B: 90                 nop
>         0000002C: 90                 nop
>         0000002D: 90                 nop
>         0000002E: 90                 nop
>         0000002F: 90                 nop

>   What was that again?