Dos cámaras en paralelo
Estimados, estoy intentando hacer una aplicación en DXE3, que necesita capturar video, en principio de 2 cámaras (que pueden ser la misma mostrada dos veces). Como no sé nada del tema de video, encontré en internet un código bastante simple con el que se podía capturar una cámara que funciona bien (en realidad más que capturar la cámara toma fotogramas con un timer y los muestra en un TPanel.
Para el objetivo de las dos cámaras, lo que hice fue duplicar las partes relevantes y el timer para mostrar las dos capturas, pero lo que me pasa es que solo se ve una y la otra se muestra un plano verde. Les pongo el código a ver qué opinan. Código:
unit TwoCamsMain; |
¿Cuál es la pregunta o la duda?
|
¿Esta cadena ' Video' de dónde sale?
¿Qué valen los 2 handles (hWndC, hWndC_B) una vez capturadas? |
Cita:
Cita:
Cita:
Pero igualmente, si alguien conoce otra forma de acceder a dos cámaras de video en paralelo y tiene de donde aprender agradezco la referencia. Yo solo he encontrado explicaciones para una cámara sola. Gracias. |
Cita:
Una vez que has hecho la llamada a la función los 2 handles deben ser diferentes y positivos, por eso te preguntaba. Si hay algun problema con esa captura, o serán los 2 iguales o alguno será negativo o cero (imagino). Lo que veo extraño es que haces las 2 llamadas a la función de forma igual (parámetros) cambiando simplemente el panel para recibir las capturas. Con esas 2 llamadas no veo forma de que tu programa Delphi sepa discernir entre las 2 cámaras que tienes instaladas. NOTA: Sólo para probar, prueba a pasar un valor distinto en el primer parámetro cuando haces la conexion y/o la captura:
|
Gracias chicos. Probé cambiar ese parámetro, cambiar el último parámetro (el identificador de windows) en capCreateCaptureWindowA, cambiar algunos, cambiarlos todos, pero siempre obtengo el mismo resultado, solo una cámara funciona.
Aclaro que el código que puse arriba está completo y aislado porque es lo único que me resta resolver, es un form con dos TPanel y dos TTimer . Lo digo porque capaz que algún experto en procesos de windows de tantos que hay aquí aprovecha un rato de ocio activo, lo puede probar y dejarlo funcionando. Harían feliz a un pobre programador aficcionado ya entrado en años :). |
Cita:
Revisa los valores en rojo (de más arriba). Aqui: https://learn.microsoft.com/en-us/wi...driver-connect Habla de esto: Index of the capture driver. The index can range from 0 through 9. |
Thread-safe postmessage
Sigo con mi asunto de las dos cámaras en paralelo. Para empezar digo que estoy usando la librería VFrames de GRBLize de aquí:
https://github.com/MakeMagazinDE/GRB...er/VFrames.pas Lo que me pasa es que si yo llamo a ambas cámaras desde el hilo principal de la aplicación funciona correctamente (veo las dos cámaras) pero el programa es una carreta y refrescan cada 5 segundos. Lo que se me ocurrió es meter cada llamada en un hilo. El problema es que haciéndolo así cuando seteo la fuente de la segunda cámara me cambia las dos y me muestran la misma imagen (de la segunda cámara). Me da la sensación que esto es porque esta biblioteca VFrames no es Thread safe. En mi ignorancia (hago agua en threads y océanos en procesos de windows, mi excusa es que programo como hobby nada más :cool:) me da la sensación que el problema está en la linea Código:
PostMessage(fMessageHWND, fMsgNewFrame, Size, integer(fImagePtr[i])); // This routine is called by the video software and therefore runs within their thread. // Posting a message to our own HWND will transport the information to the main thread. No me queda claro por qué si fMessageHWND para cada hilo se carga en el constructor, como el segundo hilo puede cambiar el identificador del primero. |
La franja horaria es GMT +2. Ahora son las 15:43:33. |
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