AVIFileInit()
AVIFileOpen()
AVIFileReadData()
AVIFileRelease()
AVIFileWriteData()
AVIGetFromClipboard()
AVIMakeCompressedStream()
AVIMakeFileFromStream()
AVIMakeStreamFromClipboard()
AVIPutFileOnClipboard()
AVISave()
AVISaveOptions()
AVISaveOptionsFree()
AVISaveV()
AVIStreamAddRef()
AVIStreamBeginStreaming()
AVIStreamCreate()
AVIStreamEndStreaming()
AVIStreamCreate()
AVIStreamEndStreaming()
AVIStreamFindSample()
AVIStreamGetFrame()
AVIStreamGetFrameClose()
AVIStreamGetFrameOpen()
AVIStreamInfo()
AVIStreamLength()
AVIStreamOpenFromFile()
AVIStreamRead()
AVIStreamReadData()
AVIStreamReadFormat()
AVIStreamRelease()
AVIStreamSampleToTime()
AVIStreamSetFormat()
AVIStreamStart()
AVIStreamTimeToSample()
AVIStreamWrite()
AVIStreamWriteData()
CreateEditableStream()
EditStreamClone()
EditStreamCopy()
EditStreamCut()
EditStreamPaste()
EditStreamSetInfo()
EditStreamSetName()
ICClose()
ICCompress()
ICCompressorChoose()
ICCompressorFree()
ICDecompress()
ICDecompressEx()
ICDecompressExBegin()
ICDecompressExQuery()
ICDraw()
ICDrawBegin()
ICDrawSuggestFormat()
ICGetInfo()
ICGetDisplayFormat()
ICImageCompress()
ICImageDecompress()
ICInfo()
ICInstall()
ICLocate()
ICOpen()
ICOpenFunction()
ICRemove()
ICSendMessage()
ICSeqCompressFrame()
ICCompressFrameEnd()
ICCompressFrameStart()
ICGetStatusProc()
MyStatusProc()
Конечно, для воспроизведения роликов нужна лишь небольшая часть функций VFW, но чтобы изменить или расширить возможности программы из этой главы, вам, скорее всего, понадобятся и другие функции. Давайте рассмотрим те функции, с которыми нам придется работать.
СОВЕТ
Не забудьте включить VFW в проект
Перед тем как пользоваться функциями Video For Windows, необходимо включить в проект заголовочный файл vfw.hи добавить vfw32.libв список файлов компоновщика.
Для правильной работы функций из табл. 8.1 необходимо инициализировать VFW функцией AVIFileInit(). Эта функция не получает аргументов и не возвращает никакого значения, поэтому работать с ней проще простого.
После инициализации VFW можно создавать поток функцией AVIStreamOpenFromFile(). Эта функция получает в одном из аргументов имя AVI-файла и инициализирует по нему логический номер потока. Полученный логический номер затем используется как аргумент большинства функций VFW и определяет поток, с которым выполняется операция.
В частности, по логическому номеру, возвращаемому AVIStreamOpenFromFile(), можно получить сведения о видеоролике. Функция AVIStreamReadFormat()сообщает такие данные, как количество кадров, размер изображения и глубина пикселей; для этого она заполняет структуру BITMAPINFOHEADER(возможно, структура BITMAPINFOHEADERпокажется вам знакомой — мы уже встречались с ней при описании BMP-файлов). Я снова приведу определение этой структуры, взятое из файла Windows wingdi.h:
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
Некоторые поля структуры (например, biXPelsPerMeterи biYPelsPerMeter) не имеют отношения к AVI-файлам, но таких полей немного. Размеры, глубина пикселей, алгоритм сжатия и количество цветов — все это можно взять из структуры BITMAPINFOHEADERпосле успешного вызова функции AVIStreamReadFormat().
Более подробные сведения о потоке можно получить с помощью функции AVIStreamInfo(). Функция AVIStreamInfo(), как и функция AVIStreamReadFormat(), получает в качестве аргумента логический номер и заполняет структуру данными о потоке. Для передачи информации AVIStreamInfo()использует структуру AVISTREAMINFO. Ее определение в файле vfw.hвыглядит так:
typedef struct _AVISTREAMINFOW {
DWORD fccType;
DWORD fccHandler;
DWORD dwFlags;
DWORD dwCaps;
WORD wPriority;
WORD wLanguage;
DWORD dwScale;
DWORD dwRate;
DWORD dwStart;
DWORD dwLength;
DWORD dwInitialFrames;
DWORD dwSuggestedBufferSize;
DWORD dwQuality;
DWORD dwSampleSize;
Читать дальше