Información sobre los *.AVI

15/09/2004 - 00:15 por Raúl | Informe spam
He encontrado una API que me da informacion acerca de un fichero
que yo le pase, tengo el ejemplo en visual basic y funciona perfecto,
pero cuando lo paso a Foxpro tengo el siguiente problema ...

En el ejemplo de VB se crean un tipo de datos llamado :

Private Type AVIFileInfo
dwMaxBytesPerSec As Long
dwFlags As Long
dwCaps As Long
dwStreams As Long
dwSuggestedBufferSize As Long
dwWidth As Long
dwHeight As Long
dwScale As Long
dwRate As Long
dwLength As Long
dwEditCount As Long
szFileType As String * 64
End Type

En el cual al ejecutar la API, se rellenan todos los datos, pero en foxpro,
la unica forma que he conseguido hacer funcionar la api es poniendo ese
tipo
como cadena y los datos que me devuelve en Foxpro no tiene nada que ver
con los datos de VB, asi que si alguien me puede ayudar ...

La API con la cual estoy teniendo problemas es :

DECLARE INTEGER AVIFileInfo IN "avifil32" INTEGER NFichero, STRING @
FDatos, INTEGER FTamano

P.D. : Por si a alguien le interesa, es para hayar los datos del avi,
ademas del codec de video
y el de audio que se usa. El Codec de video ya se como se obtiene, asi que
ahora me faltan
averiguar las propiedades como duracion, alto y ancho del video y codec de
sonido, asi que
si os interesa avisarme y gracias por leer hasta aqui y por si me puedes
ayudar ^_^




Dim hFile As Long, AviInfo As AVIFileInfo

'initialize the AVIFile library
AVIFileInit
'create a handle to the AVI file
If AVIFileOpen(hFile, Fichero, OF_SHARE_DENY_WRITE, ByVal 0&) = 0 Then
'retrieve the AVI information
If AVIFileInfo(hFile, AviInfo, Len(AviInfo)) = 0 Then
Datos = Str(AviInfo.dwWidth) + "#" + Str(AviInfo.dwHeight)
Else
'MsgBox "Error while retrieving AVI information... :("
End If
'release the file handle
AVIFileRelease hFile
Else
'MsgBox "Error while opening the AVI file... :("
End If
'exit the AVIFile library and decrement the reference count for the
library
AVIFileExit

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
 

Leer las respuestas

#1 Jorge Mota
15/09/2004 - 05:11 | Informe spam
#Define OF_SHARE_DENY_WRITE 0x20
#If .F. && Estructura de Informacion de File Info, puedes remover esto
*Struct AVIFILEINFO
dwMaxBytesPerSec As Long
dwFlags As Long
dwCaps As Long
dwStreams As Long
dwSuggestedBufferSize As Long
dwWidth As Long
dwHeight As Long
dwScale As Long
dwRate As Long
dwLength As Long
dwEditCount As Long
szFileType As String * 64
*EndStruct
#Endif
Declare Long AVIFileOpen In "avifil32" Long @ppfile, String szFile, Long
mode, Long pclsidHandler
Declare Long AVIFileRelease In "avifil32" Long pfile
Declare Long AVIFileInfo In "avifil32" Long NFichero, String @FDatos,
Long FTamano
Declare AVIFileInit In "avifil32"
Declare AVIFileExit In "avifil32"
Local hFile As Long, AviInfo As String
hFile = 10
AviInfo = Replicate(Chr(0),11*4) &&11 los elementos que tiene *4pos. que
ocupa cada uno
AviInfo = AviInfo + Space(64)&&Space(64) &&area para el string que devuelve
AVIFileInit()
cCad = [c:\smstit\ANIMATE\a180.avi]
If AVIFileOpen(@hFile, cCad,OF_SHARE_DENY_WRITE, 0) = 0
If AVIFILEINFO(hFile, @AviInfo, Len(AviInfo)) = 0 Then
messagebox("Tamaño: " + Transform(nRepStruct(AviInfo,6)) + "x"
+ Transform(nRepStruct(AviInfo,7)))

Messagebox(Transform(nRepStruct(AviInfo,1))+Chr(13)+; &&dwMaxBytesPerSec
Transform(nRepStruct(AviInfo,2))+Chr(13)+; &&dwFlags
Transform(nRepStruct(AviInfo,3))+Chr(13)+; &&dwCaps
Transform(nRepStruct(AviInfo,4))+Chr(13)+; &&dwStreams
Transform(nRepStruct(AviInfo,5))+Chr(13)+; &&dwSuggestedBufferSize
Transform(nRepStruct(AviInfo,6))+Chr(13)+; &&dwWidth
Transform(nRepStruct(AviInfo,7))+Chr(13)+; &&dwHeight
Transform(nRepStruct(AviInfo,8))+Chr(13)+; &&dwScale
Transform(nRepStruct(AviInfo,9))+Chr(13)+; &&dwRate
Transform(nRepStruct(AviInfo,10))+Chr(13)+; &&dwLength
Transform(nRepStruct(AviInfo,11))+Chr(13)+; &&dwEditCount
Substr(AviInfo,11*4+1,64)) &&szFileType
Else
MessageBox([No Se pudo obtener las propiedades del archivo]
Endif
AVIFileRelease(hFile)
Else
messagebox("Error al abrir el video")
Endif
AVIFileExit()

Function nRepStruct
Lparameters cEstructura, nValor
Local cCadena, nEmp
nEmp=((nValor-1)*4)+1
cCadena = Substr(cEstructura,nEmp,4)
Return (Asc(Substr(cCadena, 1,1)) +;
BitLShift(Asc(Substr(cCadena, 2,1)), 8)+;
BitLShift(Asc(Substr(cCadena, 3,1)), 16)+;
BitLShift(Asc(Substr(cCadena, 4,1)), 24))
Endfunc

si no se ve bien, me das un email y te lo mando.
Saludos.



On Tue, 14 Sep 2004 15:15:21 -0700, Raúl wrote:

He encontrado una API que me da informacion acerca de un fichero
que yo le pase, tengo el ejemplo en visual basic y funciona perfecto,
pero cuando lo paso a Foxpro tengo el siguiente problema ...

En el ejemplo de VB se crean un tipo de datos llamado :

Private Type AVIFileInfo
dwMaxBytesPerSec As Long
dwFlags As Long
dwCaps As Long
dwStreams As Long
dwSuggestedBufferSize As Long
dwWidth As Long
dwHeight As Long
dwScale As Long
dwRate As Long
dwLength As Long
dwEditCount As Long
szFileType As String * 64
End Type

En el cual al ejecutar la API, se rellenan todos los datos, pero en
foxpro,
la unica forma que he conseguido hacer funcionar la api es poniendo ese
tipo
como cadena y los datos que me devuelve en Foxpro no tiene nada que ver
con los datos de VB, asi que si alguien me puede ayudar ...

La API con la cual estoy teniendo problemas es :

DECLARE INTEGER AVIFileInfo IN "avifil32" INTEGER NFichero, STRING @
FDatos, INTEGER FTamano

P.D. : Por si a alguien le interesa, es para hayar los datos del avi,
ademas del codec de video
y el de audio que se usa. El Codec de video ya se como se obtiene, asi
que
ahora me faltan
averiguar las propiedades como duracion, alto y ancho del video y codec
de
sonido, asi que
si os interesa avisarme y gracias por leer hasta aqui y por si me puedes
ayudar ^_^




Dim hFile As Long, AviInfo As AVIFileInfo
'initialize the AVIFile library
AVIFileInit
'create a handle to the AVI file
If AVIFileOpen(hFile, Fichero, OF_SHARE_DENY_WRITE, ByVal 0&) = 0
Then
'retrieve the AVI information
If AVIFileInfo(hFile, AviInfo, Len(AviInfo)) = 0 Then
Datos = Str(AviInfo.dwWidth) + "#" + Str(AviInfo.dwHeight)
Else
'MsgBox "Error while retrieving AVI information... :("
End If
'release the file handle
AVIFileRelease hFile
Else
'MsgBox "Error while opening the AVI file... :("
End If
'exit the AVIFile library and decrement the reference count for the
library
AVIFileExit


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway





Jorge Mota
Microsoft Visual FoxPro MVP
Guatemala

Preguntas similares