Tony Invitado
|
Publicado: Lun 09 Jun, 2003 5:38 pm Asunto: ¡¡Problemas con captura de video¡¡ |
|
|
Hola amigos a ver si me podeis ayudar:
Necesito capturar video en dos formularios distintos y en cada uno de ellos lo hago asi:
LRESULT CALLBACK fcb(HWND w, LPVIDEOHDR h)
{
typedef struct {BYTE b,g,r;} PIXEL;
for (DWORD i=0; i<h->dwBytesUsed/3; i++)
{
PIXEL *pixel = &((PIXEL*)h->lpData)[i];
pixel->r = pixel->r;
pixel->g = pixel->g;
pixel->b = pixel->b;
} // devolvemos TRUE para que la función siga capturando mas fotogramas
return TRUE;
}
void __fastcall TForm3::FormActivate(TObject *Sender)
{
// Selecciona la ventana de captura
win = capCreateCaptureWindow("Mi Video", WS_CHILD | WS_VISIBLE,
1, 1, 320, 240, Form3->Panel1->Handle, 0);
if (!win)
throw Exception("No se pudo seleccionar una ventana de captura"); // Se conecta con el primer dispositivo de captura que encuentra
bool bRet;
for (int iCapDrv=0; iCapDrv<10; iCapDrv++) {
bRet = capDriverConnect(win, iCapDrv);
if (bRet) break;
}
if (!bRet)
throw Exception("Error: no se encontraron dispositivos."); // Mostramos en el titulo del form el nombre del driver seleccionado
char szNombreDrv[256];
if ( capDriverGetName(win, szNombreDrv, sizeof(szNombreDrv)) )
Caption = szNombreDrv; // Cambiar formato de video a 320x240 24bits de color // tambien podriamos ponerlo manualmente en esta // resolución usando la función 'capDlgVideoFormat(w);'
BITMAPINFO bi;
ZeroMemory(&bi, sizeof(bi));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = 320;
bi.bmiHeader.biHeight = 240;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biCompression = BI_RGB;
if (!capSetVideoFormat(win, &bi, sizeof(bi)))
throw Exception("No se puede cambiar el formato de video"); // Definimos la función que sera // llamada antes de visualizar cada fotograma
if (!capSetCallbackOnFrame(win, fcb))
throw Exception("callback no instalado"); // Previsualizar captura
capPreviewScale(win, true);
capPreviewRate(win, 40);
capPreview(win, true);
btnCapturar->Enabled = true;
}
Esto funciona perfectamente con un formulario pero cuando intento capturar desde otro no encuentra dispositivos de captura. A ver si me deciis la manera de cerrar una captura para que la otra pueda iniciarse.
Muchas gracias por adelantado. |
|