SAMPLE: SetPal.exe Uses mciSendString() to Change .AVI Palette
ID: Q139746
|
The information in this article applies to:
-
Microsoft Windows Software Development Kit (SDK) 3.1
-
Microsoft Win32 Software Development Kit (SDK), version 3.5
-
Microsoft Video for Windows Development Kit (VfWDK) version 1.1
SUMMARY
The SetPal.exe sample demonstrates how to use the "setvideo palette handle
to" Media Control Interface (MCI) string to change the palette that will be
used when an Audio-Video Interleaved (.avi) file is played.
MORE INFORMATIONThe following file is available for download from the Microsoft
Download Center. Click the file name below to download the file:
SetPal.exe Release Date: Apr-29-1998
For more information about how to download files from the Microsoft Download
Center, please visit the Download Center at the following Web address
http://www.microsoft.com/downloads/search.asp
and then click How to use the Microsoft Download Center.
The current video mode of the display must be a palettized video mode, such
as 256 colors, for the technique to succeed because the "setvideo palette
handle to" string is ignored in non-palettized video modes. Also, the video
compressor/decompressor (codec) that decompresses the .avi file handles the
palette. Therefore, the exact behavior may depend on the codec in use. For
example, the MS Video 1 codec is an 8-bit (256 color) palettized codec
while the Indeo and Cinepak Codecs are 24-bit non-palettized Codecs, so
their palette behavior might differ.
The following steps show how to supply your own palette:
- Fill in a LOGPALETTE structure containing the color information for
your palette.
- Create a logical palette using the CreatePalette() function.
- Call mciSendString() (or mciSendCommand()) to supply that palette to
the AVI file using a string such as:
setvideo <alias> palette handle to <palette handle>
The remainder of this article supplies more information and code excerpts
from the SETPAL sample that perform these steps.
You can compile the SetPal.exe sample as a 32-bit sample, called SetPal32,
or as a 16-bit sample, called SetPal16. As a result, it is compatible with
Windows 95, Windows NT, and Windows 3.1. Setpal32.mak and Setpal16.mak make
files are provided. SetPal16 requires the Video for Windows 1.1 Development
Kit to build successfully.
SetPal.exe is a sample application that allows you to open an .avi file
through the open common dialog box. Menu choices allow the .avi file to be
opened, played, stopped, or closed. MCI strings perform the underlying
work. The following MCI string is used to supply a palette for the .avi
file:
setvideo <alias> palette handle to <palette handle>
Excerpts from Setpal.c
// Include files.
#include <windows.h> // Required for all Windows applications
#include "windowsx.h" // for GlobalAllocPtr/GlobalFreePtr in
// CreateSamplePalette.
#include "mmsystem.h" // For the MCI calls.
// Global variables.
static HPALETTE g_hPal = NULL; // Palette handle.
.
.
.
// CreateSamplePalette() demonstrates how to fill in a LOGPALETTE
// structure and create a logical palette.
VOID CreateSamplePalette(void)
{
LPLOGPALETTE lpLogPal;
int i;
int nPalEntries = 236; // Number of entries in our
// palette.
// 256 are possible, but the
// system reserves 20 of them.
lpLogPal = (LPLOGPALETTE) GlobalAllocPtr (GHND,
sizeof (LOGPALETTE) + nPalEntries * sizeof
(PALETTEENTRY));
lpLogPal->palVersion = 0x300;
lpLogPal->palNumEntries = nPalEntries;
for (i = nPalEntries; i > 0; i--)
{
// Fill in the red, green, and blue values for our palette.
// This particular palette is a wash from green to black.
lpLogPal->palPalEntry[i].peRed = 0;
lpLogPal->palPalEntry[i].peGreen = i;
lpLogPal->palPalEntry[i].peBlue = 0;
// Create unique palette entries. This flag may change depending
// on your purposes. See the Windows API documentation
// about the PALETTEENTRY structure for more information.
lpLogPal->palPalEntry[i].peFlags = PC_NOCOLLAPSE;
}
// Create the logical palette.
g_hPal = CreatePalette (lpLogPal);
// Clean up.
GlobalFreePtr (lpLogPal);
}
// The ProcessAVICommands() function in SETPAL.C handles the open, set
// palette, play, and close for the AVI file. Once the AVI file has been
// opened, issue an mciSendString() such as the following to set the
// palette:
static char szAlias[10] = "paltest"; // The movie alias to use in
mciSendString // buffer to hold the MCI
char szBuffer[128]; // string we built.
.
.
.
wsprintf(szBuffer, "setvideo %s palette handle to %d",
(LPSTR)szAlias, g_hPal);
mciSendString(szBuffer, NULL, 0, NULL);
Additional query words:
mciSendCommand MCI_SETVIDEO MCI_DGV_SETVIDEO_ITEM MCI_DGV_SETVIDEO_PALHANDLE
Keywords : kbcode kbfile kbmm kbsample MMVideo
Version : WINDOWS:3.1,3.5
Platform : WINDOWS
Issue type :
|