| Win32 Systems (Win95, 98, Me, NT,
2000 and XP)
The PXCDRAW samples are two
programs that use the same GDI mechanism for displaying video in a window.
The differences between the programs is in their use of the queuing facility
in the PXC library. See the program
descriptions below. You should
feel free to use our samples as starting points for your applications.
These programs are updates
of the same programs that came on the floppies with your PXC product.
The GDI Method
These programs show you how
to use the Windows GDI facilities to display video in a window. As computers
become faster and faster, this becomes a very good way to display video.
It is much simpler than DirectDraw and does
not rely as heavily on the
VGA drivers.
Windows provides three methods
for drawing graphics on a window: text, raster, and vector. These samples
use the raster method. An image is stored in an array called a bitmap
and then a call is made to a Windows function that
describes how to display the
bitmap. A bitmap consists of a header and an upside-down representation
of an image.
In the following programs,
we set the header with the function SetBitMapHead(). We flip the image
upside down with the function GetImage(). And we send the image to the
screen with the Windows function SetDIBitsToDevice(). You can also use
StretchDIBits() but it is slower. Don't use StretchDIBits unless the image
and window are different sizes. SetDIBitsToDevice() is the fastest way
to move an image to the VGA card when the image size does not need to
change.
The complete algorithm for
grabbing and displaying an image is as follows:
Grab();
GetImage();
SetDIBitsToDevice();
The bitmap header is set during
initialization and never changed. After the grab, the image is flipped row
by row in GetImage() and displayed. The work is divided between the functions
AppPaint() and AppIdle().
Unzipping the Programs
The programs will unzip into
two directories under C:\PXC2\SAMPLES. If you used the default C:\PXC2
when you ran our setup program, then the samples will compile right where
they unzip. If you changed the default, then you will
have to modify the project
file.
These two programs have project
files for Microsoft Visual C/C++ 6.0. If you have an older version or
a different compiler, you will need to make your own project file.
The only thing you need in
your project file is the source (PXCDRAW1.C or PXCDRAW2.C), the header
PXC.H and a reference to the library ILIB_32.LIB for Microsoft or ILIB_32B.LIB
for Borland.
If you prefer to use the command
line compiler, there are two make files included with the programs.
Notes on Compilers
In order to make compiling
and linking easier, you can add our LIB and INCLUDE directories to the
directories that your compiler and linker normally search. Our libraries
are not installed in your compiler's LIB directory. You must explicitly
link your program with any third party library like ours.
Borland
Borland compilers and linkers
use the TURBOC.CFG file to locate libraries and header files. The TURBOC.CFG
file can be found in your compiler's BIN subdirectory. For example, if
you have the Borland 5.0 compiler, the TURBOC.CFG file will be found in
C:\BC5\BIN\TURBOC.CFG.
It normally contains the following
two lines:
-IC:\BC5\INCLUDE
-LC:\BC5\LIB
You can modify it to include
the PX5 subdirectories as follows:
-IC:\BC5\INCLUDE;C:\PXC2\INCLUDE
-LC:\BC5\LIB;C:\PXC2\LIB
Microsoft
You need to use Microsoft C/C++
4.0 or newer to link with our import library. Microsoft compilers use
environment variables to find LIB and INCLUDE directories. You can add
the PXC2 directories to the existing values. These variables are typically
set in your AUTOEXEC.BAT file or in the System Applet in NT.
SET INCLUDE=C:\MSDEV\INCLUDE;C:\MSDEV\MFC\INCLUDE;C:\PXC2\INCLUDE
SET LIB=C:\MSDEV\LIB;C:\MSDEV\MFC\LIB;C:\PXC2\LIB
If you are using a Windows
IDE with either Borland or Microsoft, you can set these same values as
defaults in the IDE, or you can include the libraries as part of your
project file.
The PXCDRAW Sample Programs
PXCDRAW1.C
This is the simplest and slowest
sample. It uses a NON-QUEUED grab which means it wastes 33 ms waiting
for the grab to complete. Then it flips the image and copies it to a window.
This sample has a maximum theoretical speed
of 20 frames a second if it
can get the display done in 1 field time (16 ms). That means it would
grab a frame, skip a field, grab a frame, etc.
When you run the program,
make note of the COMPOSITE and SVIDEO buttons. Make sure you press the
button for the type of video you have.
For the PXC200-L, s-video
must be on channel 1 of the channels 0 thru 3.
For the PXC200-F, s-video can
be on any or all channels.
PXCDRAW2.C
This sample uses QUEUED frame
grabs and DOUBLE BUFFERING. It keeps the image buffers full by using 2
queued grabs. It flips an image and requeues the next grab while it sends
the image to a window. If this sample can flip an image and requeue the
next one fast enough, it can achieve a speed of 30 frames per second.
On most newer computers, this sample should display 25 (CCIR) or 30 (NTSC)
fps. In the early days of Pentiums that was not true, but today with speeds
between 400 and 700 MHz it should be quite easy to reach real time display.
A NOTE ON BOTH SAMPLES
Both sample progams use 24
bit RGB images by default. This means that they will run better
if the computer's display adapter is in 24 bit color mode (sometimes called
True Color or 16 million color mode). The samples can
be recompiled to use 8 bit
grayscale images by changing the value of the PIXEL_TYPE constant near
the top of the source file. Note that the programs will only work
with 8 or 24 bit frames.
|