Estoy desarrollando una aplicación que recibirá imágenes de un dispositivo de cámara y las mostrará en una ventana GTK.C, GTK: muestra la secuencia de imágenes RGB a <60 fps
La cámara ofrece imágenes RGB sin formato (3 bytes por píxel, sin canal alfa, tamaño fijo) a una velocidad de cuadro variable (1-50 fps).
Ya he hecho todas las cosas de hardware y ahora tengo una función de devolución de llamada que se llama con cada nueva imagen capturada por la cámara.
¿Cuál es la forma más fácil pero rápida de mostrar esas imágenes en mi ventana?
Esto es lo que yo ya probé:
usando
gdk_draw_rgb_image()
en un área de dibujo GTK: básicamente trabajaban, pero si se ven tan lento que los procesos de embutición solapan y se bloqueó la aplicación después de los primeros fotogramas, incluso a una velocidad de captura de 1 fps.la asignación de un GdkPixbuf para cada nueva trama y llamando
gtk_image_set_from_pixbuf()
en un widget GTK imagen: sólo muestra el primer cuadro, entonces no veo ningún cambio en la ventana. Puede ser un error en mi código, pero no sé si será lo suficientemente rápido.usando Cairo (
cairo_set_source_surface()
, entoncescairo_paint()
): parecía bastante rápido, pero la imagen parecían rayas, no sé si el formato de imagen es compatible.
Actualmente estoy pensando en probar algo así como gstreamer y el tratamiento de esas imágenes como una secuencia de vídeo, pero no estoy seguro de si esto es como una exageración para mi sencillo mecanismo.
Gracias de antemano por cualquier consejo!
Cairo define sus píxeles de superficie de imagen CAIRO_FORMAT_RGB24 en términos de palabras de 32 bits, por lo que en la memoria de una pequeña máquina endian, los píxeles serán BGR0BGR0, probablemente esté utilizando el reverso, o no estén poniendo 0 byte, de ahí pelar. – ergosys
@lynix Necesito codificar la misma cosa. ¿Puedes compartir cómo hacer cairo para obtener la alimentación de la cámara web? – inckka
@inckka: Han pasado 4 años desde entonces, y su pregunta es demasiado general para que cualquiera pueda darle una respuesta precisa. Mi problema específico ha sido resuelto [de esta manera] (http://pastebin.com/QMCgaaUT). – lynix