[Jde-dev] CameraServer y WebCam Philips

Roberto Calvo rocapal en libresoft.es
Dom Mar 14 22:05:55 CET 2010


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

-- 
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/5fea840e/attachment.pgp 


More information about the Jde-developers mailing list