Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
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
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 05:03:03.


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