[Jde-dev] CameraServer y WebCam Philips

JoseMaria jmplaza en gsyc.es
Lun Mar 15 09:34:47 CET 2010


Estupendo!!

Sip, habr�a que a�adir al fichero de configuraci�n ese nuevo par�metro. 

David est� preparando la descripci�n en el manual 5.0 de cameraServer,
cameraViewer, etc. Buen sitio para comentar c�mo se usan estos
componentes, c�mo se configuran, brevemente c�mo est�n hechos por
dentro, etc. A ver si esta semana conseguimos cerrar una descripci�n
buena en el manual de ellos, que ya somos bastantes los que estamos
us�ndolos.

�nimo,

JoseMaria
On Sun, 2010-03-14 at 23:18 +0100, Roberto Calvo wrote:
> 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
> 
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers


-- 
http://gsyc.es/jmplaza 
Universidad Rey Juan Carlos




More information about the Jde-developers mailing list