Tarjeta de Captura de Video SDVR-404A

131 views
Skip to first unread message

carlosur...@gmail.com

unread,
Dec 16, 2010, 5:32:04 PM12/16/10
to Mundo Visual FoxPro
Hola a todos, ayúdenme con este problema por favor...

Tengo instalada una tarjeta para captura de video (SDVR-404A) con
cuatro puertos de entrada de video y necesito desde VFP capturar el
videos de esas 4 entradas. El equipo tiene sistema operativo XP SP2.

Estoy utilizando la librería AVICAP32 para capturar el video que es lo
más común que encontre en la Web, pero, solo me permite leer una sola
entreda, el código que utilizo es el siguiente:

Local oForm

oForm = Createobject("Tform")
oForm.Show(1)


Define Class Tform As Form

#Define WS_CHILD 0x40000000
#Define WS_VISIBLE 0x10000000
#Define WM_USER 0x0400
#Define WM_CAP_START 0x0400
#Define WM_CAP_UNICODE_START WM_USER + 100
#Define WM_CAP_SET_CALLBACK_ERRORW (WM_CAP_UNICODE_START + 2)
#Define WM_CAP_SET_CALLBACK_ERRORA (WM_CAP_START + 2)
#Define WM_CAP_SET_CALLBACK_FRAME (WM_CAP_START + 5)
#Define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START + 6)
#Define WM_CAP_DRIVER_CONNECT (WM_CAP_START + 10)
#Define WM_CAP_DRIVER_DISCONNECT (WM_CAP_START + 11)
#Define WM_CAP_DRIVER_GET_NAMEA (WM_CAP_START + 12)
#Define WM_CAP_DRIVER_GET_VERSIONA (WM_CAP_START + 13)
#Define WM_CAP_DRIVER_GET_NAMEW (WM_CAP_UNICODE_START + 12)
#Define WM_CAP_DRIVER_GET_VERSIONW (WM_CAP_UNICODE_START + 13)
#Define WM_CAP_DRIVER_GET_NAME WM_CAP_DRIVER_GET_NAMEW
#Define WM_CAP_DRIVER_GET_VERSION WM_CAP_DRIVER_GET_VERSIONW
#Define WM_CAP_DRIVER_GET_CAPS (WM_CAP_START + 14)
#Define WM_CAP_FILE_SET_CAPTURE_FILEA (WM_CAP_START + 20)
#Define WM_CAP_FILE_GET_CAPTURE_FILEA (WM_CAP_START + 21)
#Define WM_CAP_FILE_SAVEASA (WM_CAP_START + 23)
#Define WM_CAP_FILE_SAVEDIBA (WM_CAP_START + 25)
#Define WM_CAP_FILE_SET_CAPTURE_FILEW (WM_CAP_UNICODE_START + 20)
#Define WM_CAP_FILE_GET_CAPTURE_FILEW (WM_CAP_UNICODE_START + 21)
#Define WM_CAP_FILE_SAVEASW (WM_CAP_UNICODE_START + 23)
#Define WM_CAP_FILE_SAVEDIBW (WM_CAP_UNICODE_START + 25)
#Define WM_CAP_FILE_SET_CAPTURE_FILE WM_CAP_FILE_SET_CAPTURE_FILEW
#Define WM_CAP_FILE_GET_CAPTURE_FILE WM_CAP_FILE_GET_CAPTURE_FILEW
#Define WM_CAP_FILE_SAVEAS WM_CAP_FILE_SAVEASW
#Define WM_CAP_FILE_SAVEDIB WM_CAP_FILE_SAVEDIBW
#Define WM_CAP_FILE_ALLOCATE (WM_CAP_START + 22)
#Define WM_CAP_FILE_SET_INFOCHUNK (WM_CAP_START + 24)
#Define WM_CAP_EDIT_COPY (WM_CAP_START + 30)
#Define WM_CAP_SET_AUDIOFORMAT (WM_CAP_START + 35)
#Define WM_CAP_GET_AUDIOFORMAT (WM_CAP_START + 36)
#Define WM_CAP_DLG_VIDEOFORMAT (WM_CAP_START + 41)
#Define WM_CAP_DLG_VIDEOSOURCE (WM_CAP_START + 42)
#Define WM_CAP_DLG_VIDEODISPLAY (WM_CAP_START + 43)
#Define WM_CAP_GET_VIDEOFORMAT (WM_CAP_START + 44)
#Define WM_CAP_SET_VIDEOFORMAT (WM_CAP_START + 45)
#Define WM_CAP_DLG_VIDEOCOMPRESSION (WM_CAP_START + 46)
#Define WM_CAP_SET_PREVIEW (WM_CAP_START + 50)
#Define WM_CAP_SET_OVERLAY (WM_CAP_START + 51)
#Define WM_CAP_SET_PREVIEWRATE (WM_CAP_START + 52)
#Define WM_CAP_SET_SCALE (WM_CAP_START + 53)
#Define WM_CAP_GET_STATUS (WM_CAP_START + 54)
#Define WM_CAP_SET_SCROLL (WM_CAP_START + 55)
#Define WM_CAP_GRAB_FRAME (WM_CAP_START + 60)
#Define WM_CAP_GRAB_FRAME_NOSTOP (WM_CAP_START + 61)
#Define WM_CAP_SEQUENCE (WM_CAP_START + 62)
#Define WM_CAP_SEQUENCE_NOFILE (WM_CAP_START + 63)
#Define WM_CAP_SET_SEQUENCE_SETUP (WM_CAP_START + 64)
#Define WM_CAP_GET_SEQUENCE_SETUP (WM_CAP_START + 65)
#Define WM_CAP_SET_MCI_DEVICEA (WM_CAP_START + 66)
#Define WM_CAP_GET_MCI_DEVICEA (WM_CAP_START + 67)
#Define WM_CAP_SET_MCI_DEVICEW (WM_CAP_UNICODE_START + 66)
#Define WM_CAP_GET_MCI_DEVICEW (WM_CAP_UNICODE_START + 67)
#Define WM_CAP_SET_MCI_DEVICE WM_CAP_SET_MCI_DEVICEW
#Define WM_CAP_GET_MCI_DEVICE WM_CAP_GET_MCI_DEVICEW
#Define WM_CAP_STOP (WM_CAP_START + 68)
#Define WM_CAP_ABORT (WM_CAP_START + 69)
#Define WM_CAP_SINGLE_FRAME_OPEN (WM_CAP_START + 70)
#Define WM_CAP_SINGLE_FRAME_CLOSE (WM_CAP_START + 71)
#Define WM_CAP_SINGLE_FRAME (WM_CAP_START + 72)
#Define WM_CAP_PAL_OPENA (WM_CAP_START + 80)
#Define WM_CAP_PAL_SAVEA (WM_CAP_START + 81)
#Define WM_CAP_PAL_OPENW (WM_CAP_UNICODE_START + 80)
#Define WM_CAP_PAL_SAVEW (WM_CAP_UNICODE_START + 81)
#Define WM_CAP_PAL_OPEN WM_CAP_PAL_OPENW
#Define WM_CAP_PAL_SAVE WM_CAP_PAL_SAVEW
#Define WM_CAP_PAL_PASTE (WM_CAP_START + 82)
#Define WM_CAP_PAL_AUTOCREATE (WM_CAP_START + 83)
#Define WM_CAP_PAL_MANUALCREATE (WM_CAP_START + 84)
#Define WM_CAP_SET_CALLBACK_CAPCONTROL (WM_CAP_START + 85)

Width = 800
Height = 300
AutoCenter = .T.
Caption = "Usando Captura de Video"
MinButton = .F.
MaxButton = .F.
hWindow = 0
hCapture = 0
hCapture1 = 0
capWidth = 0
capHeight = 0
capOverlay = 0

Procedure Activate
LOCAL La_Array

DIMENSION La_Array[1]

If This.hWindow = 0
Declare Integer GetFocus In user32
This.hWindow = GetFocus()

Declare Integer capCreateCaptureWindow In avicap32;
STRING lpszWindowName, Long dwStyle,;
INTEGER x, Integer Y,;
INTEGER nWidth, Integer nHeight,;
INTEGER hParent, Integer nID

This.hCapture = capCreateCaptureWindow("Cap",WS_CHILD+WS_VISIBLE,
10,10,320,240, This.hWindow, 1)
This.hCapture1 = capCreateCaptureWindow("Cap2",WS_CHILD+WS_VISIBLE,
400,10,320,240, This.hWindow, 1)

Declare Integer SendMessage In user32 INTEGER HWnd, Integer Msg,
INTEGER wParam, Integer Lparam

SendMessage(This.hCapture,WM_CAP_DRIVER_CONNECT,0,0)
SendMessage(This.hCapture,WM_CAP_SET_SCALE,.F.,0)
SendMessage(This.hCapture,WM_CAP_SET_PREVIEW,.T.,0)
SendMessage(This.hCapture,WM_CAP_SET_PREVIEWRATE,30,0)
*!* SendMessage(This.hCapture,WM_CAP_DLG_VIDEOFORMAT,0,0)
*!* SendMessage(This.hCapture,WM_CAP_DLG_VIDEOSOURCE,1,0)
ENDIF
ENDPROC

ENDDEFINE



Hasta ahí todo va bien, me muestra una ventana con la captura de video
de la primera entrada...

El problema es cuando intento crear una segunda ventana para capturar
la segunda entrada de video

This.hCapture1 = capCreateCaptureWindow("Cap2",WS_CHILD+WS_VISIBLE,
400,10,320,240, This.hWindow, 1)
SendMessage(This.hCapture1,WM_CAP_DRIVER_CONNECT,0,0)

inmediatamente sale un error que dice que el dispositivo ya está en
uso. Además, no encontré una forma de especificarle al sistema desde
cuál entreda quiero capturar el video sin intervensión del usuario, la
única forma que encontré es utilizando el comando:

SendMessage(This.hCapture,WM_CAP_DLG_VIDEOSOURCE,1,0)

que lanza una ventana donde se puede elegir el dispositivo y el origen
de video (la entrada) pero lo debe hacer el usuario, no encontré como
enviarle estos parámetros a través de una función.


Por favor si alguien conoce alguna manera de hacerlo por favor me
ayudan, si existen aplicaciones que pueden hacerlo me imagino que
desde Fox también sería posible, o si existe alguna otra API pues
mejor...


Muchas gracias...
Reply all
Reply to author
Forward
0 new messages