[Jde-dev] CameraServer y WebCam Philips
JoseMaria
jmplaza en gsyc.es
Jue Mar 18 21:20:02 CET 2010
Idem. Lo veo bien como par�metro opcional, de modo que si no se pone
nada el componente CameraServer lo hace lo mejor que puede por defecto.
Muchas aplicaciones usar�n justo el componente as�, sin saber muchos
detalles de las c�maras que tiene debajo.
Pero si para cierta c�mara viene mejor tal o cual combinaci�n, es muy
�til que se pueda especificar v�a fichero de configuraci�n y saltarse el
"por defecto" para que la captura se ajuste mejor a las caracter�sticas
especiales de tal o cual c�mara o los requisitos de tal o cual
aplicaci�n.
JoseMaria
On Mon, 2010-03-15 at 14:35 +0100, Roberto Calvo wrote:
> El lun, 15-03-2010 a las 09:18 -0400, David Lobato escribi�:
> > No veo tan claro que la soluci�n sea a�adir otro par�metro. Esto nos
> > obliga a caracterizar cada una de las c�maras que queramos conectar y
> > apa�ar el c�digo para cada c�mara. Una cosa es que soportemos
> > diferentes formatos de salida (RGB888, YUY2,...) estandarizados para
> > que el que reciba al otro lado sepa a que atenerse, y otra es que haya
> > que controlar al mil�metro que entra y que sale. A mi parecer deja de
> > hacer simple el uso del componente.
>
> Podemos ponerlo como par�metro opcional en el fichero de conf. No
> siempre es necesario utilizarlo, pero hay veces que viene bien para no
> tener que compilar c�digo. Un par�metro opcional lo veo bastante bien.
>
> >
> >
> > Como soluci�n para ir tirando lo acepto, pero creo que tenemos que
> > investigar un poco mas sobre gstreamer para ver como detectar las
> > "capabilities" que da la c�mara con c�digo (99% seguro de que se
> > puede) y seleccionar aquella que mejor se adapte a la que se espera
> > como salida (en principio con no cambiar de espacio de colores seria
> > suficiente).
>
> Totalmente de acuerdo, si con gst-launch es capaz de negociarlo, desde
> C++ tambi�n se puede hacer.
>
> A�n as�, veo muy bueno y vers�til disponer de este par�metro opcional en
> el fichero de configuraci�n, ya que nos permite modificar el
> comportamiento de cameraserver sin necesidad de cambiar c�digo. Aunque
> nos de gstreamer las "capabilities", dejar�a la opci�n de detallarle en
> el fichero de conf el formato que queremos.
>
> Cada c�mara y cada linux es un mundo, por lo que creo que nos vendr� muy
> bien disponer del m�ximo detalle en los ficheros de conf. Eso si, con
> par�metros opcionales, que podamos arrancar un cameraserver con las
> m�nimas l�neas de conf tambien es importante.
>
> un saludo!
>
> >
> >
> > En cuanto al vloopback funcionando con todo, enhorabuena! Los n�meros
> > pintan bastante bien.
> >
> >
> > David.
> >
> > 2010/3/15 JoseMaria <jmplaza en gsyc.es>
> > 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
> >
> >
> >
> >
> >
> > _______________________________________________
> > 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