Функция CreateAviSurface()
Теперь у нашего приложения есть открытый AVI-поток и информация в объеме, достаточном для извлечения кадров. Но что же делать с кадром после того, как он будет прочитан и восстановлен? Нам понадобится поверхность для хранения полученных данных, и тогда воспроизведение видеоролика сведется к простому блиттингу содержимого этой поверхности во вторичный буфер приложения с последующим переключением страниц. Эта промежуточная поверхность создается функцией
CreateAviSurface():
BOOL AviPlayWin::CreateAviSurface() { if (avisurf) avisurf->Release(), avisurf=0; avisurf=CreateSurface( srcfmt->biWidth, srcfmt->biHeight ); CRect displayrect=GetDisplayRect(); x=(displayrect.Width()-srcfmt->biWidth)/2; y=0; return TRUE; }
|
После освобождения поверхности, созданной ранее, функция
CreateAviSurface() с помощью функции
CreateSurface() интерфейса
DirectDraw создает поверхность, размеры которой совпадают с размерами кадра. Кроме того, функция
CreateAviSurface() инициализирует переменные
x и
y, определяющие положение поверхности AVI на вторичном буфере. В нашем случае кадры будут выравниваться по центру экрана, поэтому в вычислениях применяется функция
DirectDrawWin::GetDisplayRect() для определения размеров экрана.
Содержание Назад Вперед