Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2003
etruel etruel is offline
Registrado
 
Registrado: oct 2003
Posts: 5
Poder: 0
etruel Va por buen camino
acceder a frames de Divx

Hola.
Antes que nada, ME doy la bienvenida en esta magnifica Comunidad de Programadores. Y espero no meter la pata en mi primer post.

He buscado muchisimo por la web y no encontre nada que me lo solucione. Hay multitud de ejemplos, pero andan solo con avi comunes, no con Divx.

Lo que quiero hacer es acceder frame x frame a un Divx y mandarlo a un TBitmap, sin necesidad de reproducirlo.
Esto es para recorrer el video de forma mas rapida que en tiempo real.

Pongo un codigo que "casi" anduvo:
(usando vfw.pas)
Cita:
AVIFileInit;
// The AVIFileOpen function opens an AVI file
Error := AVIFileOpen(pFile, PChar(FileName), 0, nil);
...
// AVIFileInfo obtains information about an AVI file

if AVIFileInfo(pFile, @AVIINFO, SizeOf(AVIINFO)) <> AVIERR_OK then
...
MediaWidth := AVIINFO.dwWidth;
MediaHeight:= AVIINFO.dwHeight;
MediaFrames:= AVIINFO.dwLength;
MediaScale := AVIINFO.dwScale;

// Open a Stream from the file
Error := AVIFileGetStream(pFile, AVIStream, streamtypeVIDEO, 0);
...
// Prepares to decompress video frames
gapgf := AVIStreamGetFrameOpen(AVIStream, nil);
...
// Read current Frame
// AVIStreamGetFrame Returns the address of a decompressed video frame
lpbi := AVIStreamGetFrame(gapgf, iFrameNum);
...

TmpBmp := TBitmap.Create;
try
TmpBmp.Height := lpbi.biHeight;
TmpBmp.Width := lpbi.biWidth;
bits := Pointer(Integer(lpbi) + SizeOf(TBITMAPINFOHEADER));

DC_Handle := CreateDC('Display', nil, nil, nil);
try
hBmp := CreateDIBitmap(DC_Handle, // handle of device context
lpbi^, // address of bitmap size and format data
CBM_INIT, // initialization flag
bits, // address of initialization data
PBITMAPINFO(lpbi)^, // address of bitmap color-format data
DIB_RGB_COLORS); // color-data usage
finally
DeleteDC(DC_Handle);
end;
TmpBmp.Handle := hBmp;
finally
TmpBmp.Free;
end;
Esto me anda para AVIs comunes pero para videos Divx la linea
gapgf := AVIStreamGetFrameOpen(AVIStream, nil); siempre me devuelve nil, entoces falla el getframe.

Probe tambien el TmediaPlayer y no me reproduce divx.
y probé el DSPack con directshow pero no se como acceder a los frames sin tener que reproducir el video.

¿Alguien me puede dar una mano con esto?
Gracias
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:01:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi