[Jde-dev] CameraServer y WebCam Philips
Roberto Calvo
rocapal en libresoft.es
Dom Mar 14 23:18:24 CET 2010
Al fin he conseguido hacerlo funcionar. La solución, como no soporta
YUY2, es mirar que formato soporta, y lo que he encontrado es que esta
cámara soporte I420
Label FOURCC in Hex Bits per pixel Description
I420 0x30323449 12 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes.
Más info en [1]
Por lo que el código, lo único que cambia es lo siguiente:
v4l2caps = gst_caps_new_simple ("video/x-raw-yuv",
"format", GST_TYPE_FOURCC,
GST_MAKE_FOURCC('I','4','2','0'),
NULL);
David, quizás deberÃamos añadir al fichero de conf de camera server este
parámetro (formato en el que queremos recoger la imagen de la cámara,
para optimizar el proceso como has dicho), y añadirlo al que ya tenemos,
que es formato que ofrece el servidor. ¿Te parece?
Por cierto, funciona todo bien ya sobre el módulo vloopback, que ya era
hora :-))
Algunos datos interesantes probados en la miniITX (1.5Ghz)
CameraServer + Vloopback = ~ 5% de CPU
CameraServer + Vloopback + ffmpeg grabando = ~ 20% de CPU
un saludete!
[1] http://www.fourcc.org/yuv.php
El dom, 14-03-2010 a las 22:05 +0100, Roberto Calvo escribió:
> Thanks por la explicación!!, ahora lo voy teniendo más claro.
>
> Lo primero que he hecho es ejecutar el comando desde consola, para ver
> si es capaz de negociar gstreamer con esta cámara. Y si es capaz, ya que
> termina por mostrar la imagen y negociar con los siguientes parámetros:
>
> /GstPipeline:pipeline0/GstXImageSink:ximagesink0.GstPad:sink:
> caps = video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234,
> red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)320,
> height=(int)240, framerate=(fraction)15/2, pixel-aspect-ratio=(fraction)1/1
>
>
> He modificado el código para la parte donde se generar los pipelines, en
> el caso que conectamos un dispositivo v4l2 (descomentado la parte de
> v4l2caps y caps, también he probado sólo dejando caps);
>
>
> else if (config_.uri.find("v4l://") == 0){/*handle v4l2 source*/
> std::string dev = config_.uri.substr(6);/*after v4l2://*/
> source = gst_element_factory_make("v4lsrc","source");
> g_object_set(G_OBJECT(source),"device",dev.c_str(),NULL);
> sink = gst_element_factory_make("appsink","sink");
> g_object_set(G_OBJECT(sink),"drop",1,NULL);
> g_object_set(G_OBJECT(sink),"max-buffers",16,NULL);
>
> videocolor = gst_element_factory_make("ffmpegcolorspace","videocolor");
> gst_bin_add_many(GST_BIN(pipeline),source,videocolor,sink,NULL);
> //gst_element_link_filtered(source,videocolor,v4l2caps);
> //gst_element_link_filtered(videocolor,sink,caps);
> }
>
>
> Después de estar un rato negociando, sale el siguiente mensaje.
>
> info: Starting thread for camera: cameraA
> error: Error: Error en el flujo de datos interno.
>
>
> Sigo probado configuraciones, a ver que puede estar pasando ....
>
> El sáb, 13-03-2010 a las 17:10 -0500, David Lobato escribió:
> > Hola,
> >
> >
> > El error "Could not negociate format" sale cuando alguno de los
> > componentes del pipeline no puede funcionar en el formato que le
> > estamos pidiendo.
> >
> >
> > El pipeline que hay para v4l2 está bastante optimizado para a las
> > cámaras logitech, ya que es la que tengo mas a mano. Para que funcione
> > con otras cámaras tenemos que hacer un poco mas genérico. Lo que
> > tenemos ahora es:
> >
> >
> > camara -----> ffmpegcolorspaces ------> appsink
> > | |
> > v4l2caps caps
> >
> >
> >
> >
> > Gstreamer es capaz de negociar el formato de los datos que cada
> > componente intercambia entre si, pero también te deja especificar
> > dicho formato con lo que se denominan "capabilities" que vienen a ser
> > una descripción del formato.
> >
> >
> > Asà en nuestro pipeline tenemos un componente camara, el componente
> > ffmpegcolorspaces que es capaz de traducir de un espacio de color a
> > otro y el componente appsink, que es un buffer que almacena los frames
> > hasta que se los pedimos. Además, "caps" seleccionan el formato que
> > hemos configurado en el fichero cfg, de modo que los frames que
> > appsink nos da van en el formato que queremos (YUY2, RGB888, GRAY8 por
> > el momento).
> >
> >
> > Para el caso concreto de las cámaras logitech, estas son capaces de
> > generar datos en yuy2 (YUV422) y jpeg de forma nativa sin ninguna
> > transformación software. Pero por alguna razón que desconozco cuando
> > montas el pipeline con los elementos comentados (sin contar v4l2caps)
> > el formato que negocia la cámara con ffmpegcolorspaces no es ninguno
> > de los nativos por lo que se hace una conversión extra (ver ejecución
> > al final del mail). Para evitar esto añadà al pipeline "v4l2caps" que
> > fijan el formato a YUY2 eliminando la conversión extra.
> >
> >
> > Esto se hace concretamente aquÃ:
> > st_element_link_filtered(source,videocolor,v4l2caps);
> >
> >
> > El problema viene cuando pones una cámara que no puede generar dicho
> > formato, como parece ser el problema de la philips. AsÃ, creo que la
> > solución es simplemente quitar v4l2caps y dejar que se negocie el
> > formato, a costa de que no sea el mas optimo, pero ganando el soporte
> > de mas cámaras.
> >
> >
> > También cabe la posibilidad de que haya alguna manera mejor de
> > hacerlo, que yo de momento no he descubierto. En cuanto tenga mas
> > tiempo, me gustarÃa descubrir un poco mas de gstreamer, que parece
> > bastante interesante y potente para lo que buscamos.
> >
> >
> > Espero haber aclarado el asunto.
> >
> >
> > Un saludo,
> > David.
> >
> >
> >
> >
> >
> > Ejecución que muestra la negociación camara ffmpegcolorspaces:
> >
> >
> > gst-launch-0.10 -v v4l2src device=/dev/video2 ! ffmpegcolorspace !
> > video/x-raw-rgb,width=320,height=240 ! ximagesink
> >
> >
> > (gst-launch-0.10:2960): GLib-WARNING **: g_set_prgname() called
> > multiple times
> > Setting pipeline to PAUSED ...
> > Xlib: extension "Generic Event Extension" missing on display
> > "localhost:10.0".
> > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps =
> > video/x-raw-yuv, format=(fourcc)I420, width=(int)320, height=(int)240,
> > framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
> > Pipeline is live and does not need PREROLL ...
> > Setting pipeline to PLAYING ...
> > New clock: GstSystemClock
> > /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:src: caps =
> > video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321,
> > red_mask=(int)65280, green_mask=(int)16711680,
> > blue_mask=(int)-16777216, width=(int)320, height=(int)240,
> > framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
> > /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:sink: caps =
> > video/x-raw-yuv, format=(fourcc)I420, width=(int)320, height=(int)240,
> > framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
> > /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps =
> > video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321,
> > red_mask=(int)65280, green_mask=(int)16711680,
> > blue_mask=(int)-16777216, width=(int)320, height=(int)240,
> > framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
> > /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps =
> > video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321,
> > red_mask=(int)65280, green_mask=(int)16711680,
> > blue_mask=(int)-16777216, width=(int)320, height=(int)240,
> > framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
> > /GstPipeline:pipeline0/GstXImageSink:ximagesink0.GstPad:sink: caps =
> > video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321,
> > red_mask=(int)65280, green_mask=(int)16711680,
> > blue_mask=(int)-16777216, width=(int)320, height=(int)240,
> > framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
> >
> >
> >
> > 2010/3/13 Roberto Calvo <rocapal en libresoft.es>
> >
> > Buenas,
> >
> > Al arrancar el CameraServer contra la webcam Philips V4l , me
> > da este error:
> >
> > error: Error: Could not negotiate format
> >
> > Y en el dmesg sale esto (parece que no consigue poner los fps
> > adecuados).
> >
> > [14566.456664] pwc: Failed to set video mode SIF en 1 fps; return
> > code = -22
> > [14566.613554] pwc: Failed to set video mode SIF en 2 fps; return
> > code = -22
> > [14566.766625] pwc: Failed to set video mode SIF en 3 fps; return
> > code = -22
> > [14566.927300] pwc: Failed to set video mode SIF en 4 fps; return
> > code = -22
> > [14571.280324] pwc: Failed to set video mode SIF en 31 fps;
> > return code = -22
> >
> > David, añadà la opción para v4l al cameraserver:
> >
> > else if (config_.uri.find("v4l://") == 0){/*handle v4l2
> > source*/
> > std::string dev = config_.uri.substr(6);/*after v4l2://*/
> > source = gst_element_factory_make("v4lsrc","source");
> > g_object_set(G_OBJECT(source),"device",dev.c_str(),NULL);
> > sink = gst_element_factory_make("appsink","sink");
> > g_object_set(G_OBJECT(sink),"drop",1,NULL);
> > g_object_set(G_OBJECT(sink),"max-buffers",16,NULL);
> >
> > videocolor =
> > gst_element_factory_make("ffmpegcolorspace","videocolor");
> >
> > gst_bin_add_many(GST_BIN(pipeline),source,videocolor,sink,NULL);
> > gst_element_link_filtered(source,videocolor,v4l2caps);
> > gst_element_link_filtered(videocolor,sink,caps);
> > }
> >
> > ¿Ves que puede estar pasando?
> >
> > un saludete!
> >
> > --
> > Roberto Calvo Palomino | Libre Software Engineering
> > Lab (GSyC)
> > Tel: (+34) 91 488 85 23 | Universidad Rey Juan Carlos
> > rocapal en libresoft.es | Edif. Departamental II -
> > Despacho 116
> > http://libresoft.es/ | c/Tulipán s/n 28933 Móstoles
> > (Madrid)
> >
> > GPG-KEY: http://gsyc.es/~rocapal/rocapal.gpg
> >
> >
> > _______________________________________________
> > Jde-developers mailing list
> > Jde-developers en gsyc.es
> > http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
--
Roberto Calvo Palomino | Libre Software Engineering Lab (GSyC)
Tel: (+34) 91 488 85 23 | Universidad Rey Juan Carlos
rocapal en libresoft.es | Edif. Departamental II - Despacho 116
http://libresoft.es/ | c/Tulipán s/n 28933 Móstoles (Madrid)
GPG-KEY: http://gsyc.es/~rocapal/rocapal.gpg
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre : no disponible
Tipo : application/pgp-signature
Tamaño : 198 bytes
Descripción: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada
digitalmente
Url : http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20100314/ec265071/attachment-0001.pgp
More information about the Jde-developers
mailing list