Форум: "Игры";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизОшибка при проигрывании Avi Найти похожие ветки
← →
Зм1й © (2005-10-30 14:17) [0]Я хочу проиграть avi-файл под OpenGL, вот код:
var
PStream: IAviStream;
PFrame: IGetFrame;
PBits: Pointer;
bmp: TBitMap;
Width, Height, Length: DWord;
TimerCount: DWord;
CurrentFrame: DWord;
procedure TAviFilm.LoadFromFile(FileName: String);
var
f: IAviFile;
fi: TAviFileInfo;
begin
AviFileOpen(f, PChar(FileName), OF_READ, nil);
AviFileInfo(f, fi, SizeOf(fi));
Width:=fi.dwWidth;
Height:=fi.dwHeight;
Length:=fi.dwLength;
AviFileRelease(f);
AviFileInit;
bmp:=TBitMap.Create;
bmp.Width:=512;
bmp.Height:=512;
AviStreamOpenFromFile(PStream, PChar(FileName), StreamTypeVideo, 0, OF_READ, nil);
PFrame:=AviStreamGetFrameOpen(PStream, nil);
end;
procedure TAviFilm.Timer;
var
HlpBmp: TBitmap;
dc: hDC;
ph: PBitmapInfoHeader;
HlpStream: TFileStream;
begin
Inc(TimerCount);
if TimerCount>=2 then begin
HlpBmp:=TBitMap.Create;
TimerCount:=0;
ph:=AviStreamGetFrame(PFrame, CurrentFrame);
PBits:=Pointer(Integer(ph)+SizeOf(TBitMapInfoHeader));
DC:=CreateDC("display", nil, nil, nil);
HlpBmp.Handle:=CreateDIBitMap(dc, ph^, CBM_INIT, PBits, PBitMapInfo(ph)^, DIB_RGB_COLORS);
bmp.Canvas.StretchDraw(Bounds(0, 0, 512, 512), HlpBmp);
Inc(CurrentFrame);
end;
// код вывода bmp как текстуры...
end;
На выделенной строке вылетает Access Violation. А вот этот код работает:var
PStream: IAviStream;
PFrame: IGetFrame;
PBits: Pointer;
bmp: TBitMap;
Width, Height, Length: DWord;
TimerCount: DWord;
CurrentFrame: DWord;
procedure TAviFilm.LoadFromFile(FileName: String);
var
f: IAviFile;
fi: TAviFileInfo;
ph: PBitmapInfoHeader;
begin
AviFileOpen(f, PChar(FileName), OF_READ, nil);
AviFileInfo(f, fi, SizeOf(fi));
Width:=fi.dwWidth;
Height:=fi.dwHeight;
Length:=fi.dwLength;
AviFileRelease(f);
AviFileInit;
bmp:=TBitMap.Create;
bmp.Width:=512;
bmp.Height:=512;
AviStreamOpenFromFile(PStream, PChar(FileName), StreamTypeVideo, 0, OF_READ, nil);
PFrame:=AviStreamGetFrameOpen(PStream, nil);
AviStreamRelease(PStream);
ph:=AviStreamGetFrame(PFrame, CurrentFrame);
PBits:=Pointer(Integer(ph)+SizeOf(TBitMapInfoHeader));
end;
procedure TAviFilm.Timer;
var
HlpBmp: TBitmap;
dc: hDC;
ph: PBitmapInfoHeader;
HlpStream: TFileStream;
begin
Inc(TimerCount);
if TimerCount>=2 then begin
HlpBmp:=TBitMap.Create;
TimerCount:=0;
AviStreamOpenFromFile(PStream, PChar("Temp\25"), StreamTypeVideo, 0, OF_READ, nil);
PFrame:=AviStreamGetFrameOpen(PStream, nil);
ph:=AviStreamGetFrame(PFrame, CurrentFrame);
PBits:=Pointer(Integer(ph)+SizeOf(TBitMapInfoHeader));
DC:=CreateDC("display", nil, nil, nil);
HlpBmp.Handle:=CreateDIBitMap(dc, ph^, CBM_INIT, PBits, PBitMapInfo(ph)^, DIB_RGB_COLORS);
bmp.Canvas.StretchDraw(Bounds(0, 0, 512, 512), HlpBmp);
AviStreamRelease(PStream);
Inc(CurrentFrame);
end;
// код вывода bmp как текстуры...
end;
Объясните пожалуста, в чём ошибка?! Мне ОЧЕНЬ это важно, я уже отчаялся найти ошибку...
← →
Зм1й © (2005-11-02 19:51) [1]Up
← →
PAVIA © (2005-11-02 20:32) [2]в первом случае у тебя не проинецеализован
PFrame: IGetFrame;
и равен nil. Отсюда и ошибка.
← →
Зм1й © (2005-11-02 21:24) [3]
> в первом случае у тебя не проинецеализован
> PFrame: IGetFrame;
> и равен nil. Отсюда и ошибка.
Но он же инициализируется в процедуре LoadFromFile
← →
Зм1й © (2005-11-03 14:31) [4]Всё, разобрался. Обсуждение закрыто
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c