A mi me parece, que el formato va ligado a la fuente y me parece que tiene mas sentido ponerlo en la propia uri.<div><div><br></div><div>Independientemente del lugar, si ponemos el formato con un string que nosotros definimos habrá que parsealo y encontrar el equivalente con gstreamer. A priori, yo iría con el que usa gstreamer, salvo que resulte que no hay funciones para parsearlo y tengamos que hacerlas nosotros.</div>
<div><br></div><div><div class="im"><br></div><br><div class="gmail_quote">2010/3/20 Roberto Calvo <span dir="ltr">&lt;<a href="mailto:rocapal@libresoft.es">rocapal@libresoft.es</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Y que te parece si ponemos lo siguiente, siguiendo con el estilo que<br>
hiciste del fichero de conf<br>
<div class="im"><br>
CameraSrv.Camera.0.Uri=v4l2:///dev/video0<br>
</div>CameraSrv.Camera.0.Uri.Format=I420<br>
<br>
¿Cómo lo ves?<br>
<br>
El vie, 19-03-2010 a las 10:15 -0400, David Lobato escribió:<br>
<div><div></div><div class="h5">&gt; Dado que el parametro está relacionado concretamente con las cámaras<br>
&gt; yo lo pondría como opción al especificar una uri que empiece con v4l o<br>
&gt; v4l2.<br>
&gt;<br>
&gt;<br>
&gt; Además dado que está ligado a gstreamer usaría el formato que ellos<br>
&gt; usan para especificar capabilities de video( algo así<br>
&gt; video/x-raw-yuv,width=320,height=240,...)  cuando las indicas desde<br>
&gt; linea de comandos. No estoy seguro, pero supongo que la librería tiene<br>
&gt; funciones para transformar un string en caps y viceversa. Habría que<br>
&gt; buscarlo.<br>
&gt;<br>
&gt;<br>
&gt; Así la manera de especificar que una cámara concreta debe sacar los<br>
&gt; frames con un formato indicado sería:<br>
&gt;<br>
&gt;<br>
&gt; CameraSrv.Camera.0.Uri=v4l2:///dev/video0?formato<br>
&gt;<br>
&gt;<br>
&gt; He puesto ? por analogia con las url, pero vamos podemos poner otra<br>
&gt; cosa si os parece mejor.<br>
&gt;<br>
&gt;<br>
&gt; Cómo lo véis?<br>
&gt;<br>
&gt;<br>
&gt; David.<br>
&gt;<br>
&gt; 2010/3/18 JoseMaria &lt;<a href="mailto:jmplaza@gsyc.es">jmplaza@gsyc.es</a>&gt;<br>
&gt;         Idem. Lo veo bien como parámetro opcional, de modo que si no<br>
&gt;         se pone<br>
&gt;         nada el componente CameraServer lo hace lo mejor que puede por<br>
&gt;         defecto.<br>
&gt;         Muchas aplicaciones usarán justo el componente así, sin saber<br>
&gt;         muchos<br>
&gt;         detalles de las cámaras que tiene debajo.<br>
&gt;<br>
&gt;         Pero si para cierta cámara viene mejor tal o cual combinación,<br>
&gt;         es muy<br>
&gt;         útil que se pueda especificar vía fichero de configuración y<br>
&gt;         saltarse el<br>
&gt;         &quot;por defecto&quot; para que la captura se ajuste mejor a las<br>
&gt;         características<br>
&gt;         especiales de tal o cual cámara o los requisitos de tal o cual<br>
&gt;         aplicación.<br>
&gt;<br>
&gt;         JoseMaria<br>
&gt;<br>
&gt;         On Mon, 2010-03-15 at 14:35 +0100, Roberto Calvo wrote:<br>
&gt;         &gt; El lun, 15-03-2010 a las 09:18 -0400, David Lobato escribió:<br>
&gt;         &gt; &gt; No veo tan claro que la solución sea añadir otro<br>
&gt;         parámetro. Esto nos<br>
&gt;         &gt; &gt; obliga a caracterizar cada una de las cámaras que queramos<br>
&gt;         conectar y<br>
&gt;         &gt; &gt; apañar el código para cada cámara. Una cosa es que<br>
&gt;         soportemos<br>
&gt;         &gt; &gt; diferentes formatos de salida (RGB888, YUY2,...)<br>
&gt;          estandarizados para<br>
&gt;         &gt; &gt; que el que reciba al otro lado sepa a que atenerse, y otra<br>
&gt;         es que haya<br>
&gt;         &gt; &gt; que controlar al milímetro que entra y que sale. A mi<br>
&gt;         parecer deja de<br>
&gt;         &gt; &gt; hacer simple el uso del componente.<br>
&gt;         &gt;<br>
&gt;         &gt; Podemos ponerlo como parámetro opcional en el fichero de<br>
&gt;         conf. No<br>
&gt;         &gt; siempre es necesario utilizarlo, pero hay veces que viene<br>
&gt;         bien para no<br>
&gt;         &gt; tener que compilar código. Un parámetro opcional lo veo<br>
&gt;         bastante bien.<br>
&gt;         &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt; Como solución para ir tirando lo acepto, pero creo que<br>
&gt;         tenemos que<br>
&gt;         &gt; &gt; investigar un poco mas sobre gstreamer para ver como<br>
&gt;         detectar las<br>
&gt;         &gt; &gt; &quot;capabilities&quot; que da la cámara con código (99% seguro de<br>
&gt;         que se<br>
&gt;         &gt; &gt; puede) y seleccionar aquella que mejor se adapte a la que<br>
&gt;         se espera<br>
&gt;         &gt; &gt; como salida (en principio con no cambiar de espacio de<br>
&gt;         colores seria<br>
&gt;         &gt; &gt; suficiente).<br>
&gt;         &gt;<br>
&gt;         &gt; Totalmente de acuerdo, si con gst-launch es capaz de<br>
&gt;         negociarlo, desde<br>
&gt;         &gt; C++ también se puede hacer.<br>
&gt;         &gt;<br>
&gt;         &gt; Aún así, veo muy bueno y versátil disponer de este parámetro<br>
&gt;         opcional en<br>
&gt;         &gt; el fichero de configuración, ya que nos permite modificar el<br>
&gt;         &gt; comportamiento de cameraserver sin necesidad de cambiar<br>
&gt;         código. Aunque<br>
&gt;         &gt; nos de gstreamer las &quot;capabilities&quot;, dejaría la opción de<br>
&gt;         detallarle en<br>
&gt;         &gt; el fichero de conf el formato que queremos.<br>
&gt;         &gt;<br>
&gt;         &gt; Cada cámara y cada linux es un mundo, por lo que creo que<br>
&gt;         nos vendrá muy<br>
&gt;         &gt; bien disponer del máximo detalle en los ficheros de conf.<br>
&gt;         Eso si, con<br>
&gt;         &gt; parámetros opcionales, que podamos arrancar un cameraserver<br>
&gt;         con las<br>
&gt;         &gt; mínimas líneas de conf tambien es importante.<br>
&gt;         &gt;<br>
&gt;         &gt; un saludo!<br>
&gt;         &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt; En cuanto al vloopback funcionando con todo, enhorabuena!<br>
&gt;         Los números<br>
&gt;         &gt; &gt; pintan bastante bien.<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt; David.<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt; 2010/3/15 JoseMaria &lt;<a href="mailto:jmplaza@gsyc.es">jmplaza@gsyc.es</a>&gt;<br>
&gt;         &gt; &gt;         Estupendo!!<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         Sip, habría que añadir al fichero de configuración<br>
&gt;         ese nuevo<br>
&gt;         &gt; &gt;         parámetro.<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         David está preparando la descripción en el manual<br>
&gt;         5.0 de<br>
&gt;         &gt; &gt;         cameraServer,<br>
&gt;         &gt; &gt;         cameraViewer, etc. Buen sitio para comentar cómo<br>
&gt;         se usan estos<br>
&gt;         &gt; &gt;         componentes, cómo se configuran, brevemente cómo<br>
&gt;         están hechos<br>
&gt;         &gt; &gt;         por<br>
&gt;         &gt; &gt;         dentro, etc. A ver si esta semana conseguimos<br>
&gt;         cerrar una<br>
&gt;         &gt; &gt;         descripción<br>
&gt;         &gt; &gt;         buena en el manual de ellos, que ya somos<br>
&gt;         bastantes los que<br>
&gt;         &gt; &gt;         estamos<br>
&gt;         &gt; &gt;         usándolos.<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         Ánimo,<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         JoseMaria<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         On Sun, 2010-03-14 at 23:18 +0100, Roberto Calvo<br>
&gt;         wrote:<br>
&gt;         &gt; &gt;         &gt; Al fin he conseguido hacerlo funcionar. La<br>
&gt;         solución, como no<br>
&gt;         &gt; &gt;         soporta<br>
&gt;         &gt; &gt;         &gt; YUY2, es mirar que formato soporta, y lo que he<br>
&gt;         encontrado<br>
&gt;         &gt; &gt;         es que esta<br>
&gt;         &gt; &gt;         &gt; cámara soporte I420<br>
&gt;         &gt; &gt;         &gt; Label         FOURCC in Hex           Bits per<br>
&gt;         pixel<br>
&gt;         &gt; &gt;            Description<br>
&gt;         &gt; &gt;         &gt; I420          0x30323449              12<br>
&gt;         &gt; &gt;            8 bit Y plane followed by 8 bit 2x2 subsampled<br>
&gt;         U and V<br>
&gt;         &gt; &gt;         planes.<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; Más info en [1]<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; Por lo que el código, lo único que cambia es lo<br>
&gt;         siguiente:<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt;      v4l2caps = gst_caps_new_simple<br>
&gt;         (&quot;video/x-raw-yuv&quot;,<br>
&gt;         &gt; &gt;         &gt;                                      &quot;format&quot;,<br>
&gt;         &gt; &gt;         GST_TYPE_FOURCC,<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;          GST_MAKE_FOURCC(&#39;I&#39;,&#39;4&#39;,&#39;2&#39;,&#39;0&#39;),<br>
&gt;         &gt; &gt;         &gt;                                      NULL);<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; David, quizás deberíamos añadir al fichero de<br>
&gt;         conf de camera<br>
&gt;         &gt; &gt;         server este<br>
&gt;         &gt; &gt;         &gt; parámetro (formato en el que queremos recoger la<br>
&gt;         imagen de<br>
&gt;         &gt; &gt;         la cámara,<br>
&gt;         &gt; &gt;         &gt; para optimizar el proceso como has dicho), y<br>
&gt;         añadirlo al que<br>
&gt;         &gt; &gt;         ya tenemos,<br>
&gt;         &gt; &gt;         &gt; que es formato que ofrece el servidor. ¿Te<br>
&gt;         parece?<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; Por cierto, funciona todo bien ya sobre el<br>
&gt;         módulo vloopback,<br>
&gt;         &gt; &gt;         que ya era<br>
&gt;         &gt; &gt;         &gt; hora :-))<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; Algunos datos interesantes probados en la<br>
&gt;         miniITX (1.5Ghz)<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; CameraServer + Vloopback = ~ 5% de CPU<br>
&gt;         &gt; &gt;         &gt; CameraServer + Vloopback + ffmpeg grabando = ~<br>
&gt;         20% de CPU<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; un saludete!<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; [1] <a href="http://www.fourcc.org/yuv.php" target="_blank">http://www.fourcc.org/yuv.php</a><br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; El dom, 14-03-2010 a las 22:05 +0100, Roberto<br>
&gt;         Calvo<br>
&gt;         &gt; &gt;         escribió:<br>
&gt;         &gt; &gt;         &gt; &gt; Thanks por la explicación!!, ahora lo voy<br>
&gt;         teniendo más<br>
&gt;         &gt; &gt;         claro.<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; Lo primero que he hecho es ejecutar el comando<br>
&gt;         desde<br>
&gt;         &gt; &gt;         consola, para ver<br>
&gt;         &gt; &gt;         &gt; &gt; si es capaz de negociar gstreamer con esta<br>
&gt;         cámara. Y si es<br>
&gt;         &gt; &gt;         capaz, ya que<br>
&gt;         &gt; &gt;         &gt; &gt; termina por mostrar la imagen y negociar con<br>
&gt;         los<br>
&gt;         &gt; &gt;         siguientes parámetros:<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; /GstPipeline:pipeline0/GstXImageSink:ximagesink0.GstPad:sink:<br>
&gt;         &gt; &gt;         &gt; &gt;     caps = video/x-raw-rgb, bpp=(int)16,<br>
&gt;         depth=(int)16,<br>
&gt;         &gt; &gt;         endianness=(int)1234,<br>
&gt;         &gt; &gt;         &gt; &gt;     red_mask=(int)63488, green_mask=(int)2016,<br>
&gt;         &gt; &gt;         blue_mask=(int)31, width=(int)320,<br>
&gt;         &gt; &gt;         &gt; &gt;     height=(int)240, framerate=(fraction)15/2,<br>
&gt;         &gt; &gt;         pixel-aspect-ratio=(fraction)1/1<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; He modificado el código para la parte donde se<br>
&gt;         generar los<br>
&gt;         &gt; &gt;         pipelines, en<br>
&gt;         &gt; &gt;         &gt; &gt; el caso que conectamos un dispositivo v4l2<br>
&gt;         (descomentado<br>
&gt;         &gt; &gt;         la parte de<br>
&gt;         &gt; &gt;         &gt; &gt; v4l2caps y caps, también he probado sólo<br>
&gt;         dejando caps);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt;   else if (config_.uri.find(&quot;v4l://&quot;) ==<br>
&gt;         0){/*handle v4l2<br>
&gt;         &gt; &gt;         source*/<br>
&gt;         &gt; &gt;         &gt; &gt;       std::string dev =<br>
&gt;         config_.uri.substr(6);/*after<br>
&gt;         &gt; &gt;         v4l2://*/<br>
&gt;         &gt; &gt;         &gt; &gt;       source =<br>
&gt;         &gt; &gt;         gst_element_factory_make(&quot;v4lsrc&quot;,&quot;source&quot;);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         g_object_set(G_OBJECT(source),&quot;device&quot;,dev.c_str(),NULL);<br>
&gt;         &gt; &gt;         &gt; &gt;       sink =<br>
&gt;         gst_element_factory_make(&quot;appsink&quot;,&quot;sink&quot;);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         g_object_set(G_OBJECT(sink),&quot;drop&quot;,1,NULL);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         g_object_set(G_OBJECT(sink),&quot;max-buffers&quot;,16,NULL);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt;       videocolor =<br>
&gt;         &gt; &gt;<br>
&gt;         gst_element_factory_make(&quot;ffmpegcolorspace&quot;,&quot;videocolor&quot;);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         gst_bin_add_many(GST_BIN(pipeline),source,videocolor,sink,NULL);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;           //gst_element_link_filtered(source,videocolor,v4l2caps);<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;           //gst_element_link_filtered(videocolor,sink,caps);<br>
&gt;         &gt; &gt;         &gt; &gt;     }<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; Después de estar un rato negociando, sale el<br>
&gt;         siguiente<br>
&gt;         &gt; &gt;         mensaje.<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; info: Starting thread for camera: cameraA<br>
&gt;         &gt; &gt;         &gt; &gt; error: Error: Error en el flujo de datos<br>
&gt;         interno.<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; Sigo probado configuraciones, a ver que puede<br>
&gt;         estar<br>
&gt;         &gt; &gt;         pasando ....<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; El sáb, 13-03-2010 a las 17:10 -0500, David<br>
&gt;         Lobato<br>
&gt;         &gt; &gt;         escribió:<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Hola,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; El error &quot;Could not negociate format&quot; sale<br>
&gt;         cuando alguno<br>
&gt;         &gt; &gt;         de los<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; componentes del pipeline no puede funcionar<br>
&gt;         en el<br>
&gt;         &gt; &gt;         formato que le<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; estamos pidiendo.<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; El pipeline que hay para v4l2 está bastante<br>
&gt;         optimizado<br>
&gt;         &gt; &gt;         para a las<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; cámaras logitech, ya que es la que tengo mas<br>
&gt;         a mano.<br>
&gt;         &gt; &gt;         Para que funcione<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; con otras cámaras tenemos que hacer un poco<br>
&gt;         mas<br>
&gt;         &gt; &gt;         genérico. Lo que<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; tenemos ahora es:<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; camara -----&gt; ffmpegcolorspaces ------&gt;<br>
&gt;         appsink<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;               |<br>
&gt;                |<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;           v4l2caps<br>
&gt;         caps<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Gstreamer es capaz de negociar el formato de<br>
&gt;         los datos<br>
&gt;         &gt; &gt;         que cada<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; componente intercambia entre si, pero<br>
&gt;         también te deja<br>
&gt;         &gt; &gt;         especificar<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; dicho formato con lo que se denominan<br>
&gt;         &quot;capabilities&quot; que<br>
&gt;         &gt; &gt;         vienen a ser<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; una descripción del formato.<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Así en nuestro pipeline tenemos un<br>
&gt;         componente camara, el<br>
&gt;         &gt; &gt;         componente<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; ffmpegcolorspaces que es capaz de traducir<br>
&gt;         de un espacio<br>
&gt;         &gt; &gt;         de color a<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; otro y el componente appsink, que es un<br>
&gt;         buffer que<br>
&gt;         &gt; &gt;         almacena los frames<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; hasta que se los pedimos. Además, &quot;caps&quot;<br>
&gt;         seleccionan el<br>
&gt;         &gt; &gt;         formato que<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; hemos configurado en el fichero cfg, de modo<br>
&gt;         que los<br>
&gt;         &gt; &gt;         frames que<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; appsink nos da van en el formato que<br>
&gt;         queremos (YUY2,<br>
&gt;         &gt; &gt;         RGB888, GRAY8 por<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; el momento).<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Para el caso concreto de las cámaras<br>
&gt;         logitech, estas son<br>
&gt;         &gt; &gt;         capaces de<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; generar datos en yuy2 (YUV422) y jpeg de<br>
&gt;         forma nativa<br>
&gt;         &gt; &gt;         sin ninguna<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; transformación software. Pero por alguna<br>
&gt;         razón que<br>
&gt;         &gt; &gt;         desconozco cuando<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; montas el pipeline con los elementos<br>
&gt;         comentados (sin<br>
&gt;         &gt; &gt;         contar v4l2caps)<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; el formato que negocia la cámara con<br>
&gt;         ffmpegcolorspaces<br>
&gt;         &gt; &gt;         no es ninguno<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; de los nativos por lo que se hace una<br>
&gt;         conversión extra<br>
&gt;         &gt; &gt;         (ver ejecución<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; al final del mail). Para evitar esto añadí<br>
&gt;         al pipeline<br>
&gt;         &gt; &gt;         &quot;v4l2caps&quot; que<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; fijan el formato a YUY2 eliminando la<br>
&gt;         conversión extra.<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Esto se hace concretamente aquí:<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         st_element_link_filtered(source,videocolor,v4l2caps);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; El problema viene cuando pones una cámara<br>
&gt;         que no puede<br>
&gt;         &gt; &gt;         generar dicho<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; formato, como parece ser el problema de la<br>
&gt;         philips. Así,<br>
&gt;         &gt; &gt;         creo que la<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; solución es simplemente quitar v4l2caps y<br>
&gt;         dejar que se<br>
&gt;         &gt; &gt;         negocie el<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; formato, a costa de que no sea el mas<br>
&gt;         optimo, pero<br>
&gt;         &gt; &gt;         ganando el soporte<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; de mas cámaras.<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; También cabe la posibilidad de que haya<br>
&gt;         alguna manera<br>
&gt;         &gt; &gt;         mejor de<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; hacerlo, que yo de momento no he<br>
&gt;         descubierto. En cuanto<br>
&gt;         &gt; &gt;         tenga mas<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; tiempo, me gustaría descubrir un poco mas de<br>
&gt;         gstreamer,<br>
&gt;         &gt; &gt;         que parece<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; bastante interesante y potente para lo que<br>
&gt;         buscamos.<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Espero haber aclarado el asunto.<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Un saludo,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; David.<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Ejecución que muestra la negociación camara<br>
&gt;         &gt; &gt;         ffmpegcolorspaces:<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; gst-launch-0.10 -v v4l2src<br>
&gt;         device=/dev/video2 !<br>
&gt;         &gt; &gt;         ffmpegcolorspace !<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; video/x-raw-rgb,width=320,height=240 !<br>
&gt;         ximagesink<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; (gst-launch-0.10:2960): GLib-WARNING **:<br>
&gt;         g_set_prgname()<br>
&gt;         &gt; &gt;         called<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; multiple times<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Setting pipeline to PAUSED ...<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Xlib:  extension &quot;Generic Event Extension&quot;<br>
&gt;         missing on<br>
&gt;         &gt; &gt;         display<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; &quot;localhost:10.0&quot;.<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; /GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src:<br>
&gt;         &gt; &gt;         caps =<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; video/x-raw-yuv, format=(fourcc)I420,<br>
&gt;         width=(int)320,<br>
&gt;         &gt; &gt;         height=(int)240,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; framerate=(fraction)30/1,<br>
&gt;         &gt; &gt;         pixel-aspect-ratio=(fraction)1/1<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Pipeline is live and does not need<br>
&gt;         PREROLL ...<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Setting pipeline to PLAYING ...<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; New clock: GstSystemClock<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:src:<br>
&gt;         &gt; &gt;         caps =<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; video/x-raw-rgb, bpp=(int)32, depth=(int)24,<br>
&gt;         &gt; &gt;         endianness=(int)4321,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; red_mask=(int)65280,<br>
&gt;         green_mask=(int)16711680,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; blue_mask=(int)-16777216, width=(int)320,<br>
&gt;         &gt; &gt;         height=(int)240,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; framerate=(fraction)30/1,<br>
&gt;         &gt; &gt;         pixel-aspect-ratio=(fraction)1/1<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:sink:<br>
&gt;         &gt; &gt;         caps =<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; video/x-raw-yuv, format=(fourcc)I420,<br>
&gt;         width=(int)320,<br>
&gt;         &gt; &gt;         height=(int)240,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; framerate=(fraction)30/1,<br>
&gt;         &gt; &gt;         pixel-aspect-ratio=(fraction)1/1<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src:<br>
&gt;         &gt; &gt;         caps =<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; video/x-raw-rgb, bpp=(int)32, depth=(int)24,<br>
&gt;         &gt; &gt;         endianness=(int)4321,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; red_mask=(int)65280,<br>
&gt;         green_mask=(int)16711680,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; blue_mask=(int)-16777216, width=(int)320,<br>
&gt;         &gt; &gt;         height=(int)240,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; framerate=(fraction)30/1,<br>
&gt;         &gt; &gt;         pixel-aspect-ratio=(fraction)1/1<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps =<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; video/x-raw-rgb, bpp=(int)32, depth=(int)24,<br>
&gt;         &gt; &gt;         endianness=(int)4321,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; red_mask=(int)65280,<br>
&gt;         green_mask=(int)16711680,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; blue_mask=(int)-16777216, width=(int)320,<br>
&gt;         &gt; &gt;         height=(int)240,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; framerate=(fraction)30/1,<br>
&gt;         &gt; &gt;         pixel-aspect-ratio=(fraction)1/1<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; /GstPipeline:pipeline0/GstXImageSink:ximagesink0.GstPad:sink: caps =<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; video/x-raw-rgb, bpp=(int)32, depth=(int)24,<br>
&gt;         &gt; &gt;         endianness=(int)4321,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; red_mask=(int)65280,<br>
&gt;         green_mask=(int)16711680,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; blue_mask=(int)-16777216, width=(int)320,<br>
&gt;         &gt; &gt;         height=(int)240,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; framerate=(fraction)30/1,<br>
&gt;         &gt; &gt;         pixel-aspect-ratio=(fraction)1/1<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; 2010/3/13 Roberto Calvo<br>
&gt;         &lt;<a href="mailto:rocapal@libresoft.es">rocapal@libresoft.es</a>&gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         Buenas,<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         Al arrancar el CameraServer contra<br>
&gt;         la webcam<br>
&gt;         &gt; &gt;         Philips V4l , me<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         da este error:<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         error: Error: Could not negotiate<br>
&gt;         format<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         Y en el dmesg sale esto (parece que<br>
&gt;         no consigue<br>
&gt;         &gt; &gt;         poner los fps<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         adecuados).<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         [14566.456664] pwc: Failed to set<br>
&gt;         video mode<br>
&gt;         &gt; &gt;         SIF@1 fps; return<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         code = -22<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         [14566.613554] pwc: Failed to set<br>
&gt;         video mode<br>
&gt;         &gt; &gt;         SIF@2 fps; return<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         code = -22<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         [14566.766625] pwc: Failed to set<br>
&gt;         video mode<br>
&gt;         &gt; &gt;         SIF@3 fps; return<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         code = -22<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         [14566.927300] pwc: Failed to set<br>
&gt;         video mode<br>
&gt;         &gt; &gt;         SIF@4 fps; return<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         code = -22<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         [14571.280324] pwc: Failed to set<br>
&gt;         video mode<br>
&gt;         &gt; &gt;         SIF@31 fps;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         return code = -22<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         David, añadí la opción para v4l al<br>
&gt;         cameraserver:<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;          else if (config_.uri.find(&quot;v4l://&quot;)<br>
&gt;         ==<br>
&gt;         &gt; &gt;         0){/*handle v4l2<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         source*/<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;              std::string dev =<br>
&gt;         &gt; &gt;         config_.uri.substr(6);/*after v4l2://*/<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;              source =<br>
&gt;         &gt; &gt;         gst_element_factory_make(&quot;v4lsrc&quot;,&quot;source&quot;);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;          g_object_set(G_OBJECT(source),&quot;device&quot;,dev.c_str(),NULL);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;              sink =<br>
&gt;         &gt; &gt;         gst_element_factory_make(&quot;appsink&quot;,&quot;sink&quot;);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;          g_object_set(G_OBJECT(sink),&quot;drop&quot;,1,NULL);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;          g_object_set(G_OBJECT(sink),&quot;max-buffers&quot;,16,NULL);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;              videocolor =<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         gst_element_factory_make(&quot;ffmpegcolorspace&quot;,&quot;videocolor&quot;);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;          gst_bin_add_many(GST_BIN(pipeline),source,videocolor,sink,NULL);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;          gst_element_link_filtered(source,videocolor,v4l2caps);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;          gst_element_link_filtered(videocolor,sink,caps);<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;            }<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         ¿Ves que puede estar pasando?<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         un saludete!<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         --<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         Roberto Calvo Palomino          |<br>
&gt;         Libre<br>
&gt;         &gt; &gt;         Software Engineering<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         Lab (GSyC)<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         Tel: (+34) 91 488 85 23         |<br>
&gt;         Universidad<br>
&gt;         &gt; &gt;         Rey Juan Carlos<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         <a href="mailto:rocapal@libresoft.es">rocapal@libresoft.es</a>            |<br>
&gt;         Edif.<br>
&gt;         &gt; &gt;         Departamental II -<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         Despacho 116<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         <a href="http://libresoft.es/" target="_blank">http://libresoft.es/</a>            |<br>
&gt;         c/Tulipán s/n<br>
&gt;         &gt; &gt;         28933 Móstoles<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         (Madrid)<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;         GPG-KEY:<br>
&gt;         <a href="http://gsyc.es/~rocapal/rocapal.gpg" target="_blank">http://gsyc.es/~rocapal/rocapal.gpg</a><br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         _______________________________________________<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; Jde-developers mailing list<br>
&gt;         &gt; &gt;         &gt; &gt; &gt; <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
&gt;         &gt; &gt;         &gt; &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         _______________________________________________<br>
&gt;         &gt; &gt;         &gt; &gt; Jde-developers mailing list<br>
&gt;         &gt; &gt;         &gt; &gt; <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
&gt;         &gt; &gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;         &gt; _______________________________________________<br>
&gt;         &gt; &gt;         &gt; Jde-developers mailing list<br>
&gt;         &gt; &gt;         &gt; <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
&gt;         &gt; &gt;         &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;         --<br>
&gt;         &gt; &gt;         <a href="http://gsyc.es/jmplaza" target="_blank">http://gsyc.es/jmplaza</a><br>
&gt;         &gt; &gt;         Universidad Rey Juan Carlos<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt;<br>
&gt;         &gt; &gt; _______________________________________________<br>
&gt;         &gt; &gt; Jde-developers mailing list<br>
&gt;         &gt; &gt; <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
&gt;         &gt; &gt;<br>
&gt;         <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
&gt;         &gt;<br>
&gt;<br>
&gt;<br>
&gt;         --<br>
&gt;         <a href="http://gsyc.es/jmplaza" target="_blank">http://gsyc.es/jmplaza</a><br>
&gt;         Universidad Rey Juan Carlos<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div>--<br>
<div><div></div><div class="h5">Roberto Calvo Palomino          | Libre Software Engineering Lab (GSyC)<br>
Tel: (+34) 91 488 85 23         | Universidad Rey Juan Carlos<br>
<a href="mailto:rocapal@libresoft.es">rocapal@libresoft.es</a>            | Edif. Departamental II - Despacho 116<br>
<a href="http://libresoft.es/" target="_blank">http://libresoft.es/</a>            | c/Tulipán s/n 28933 Móstoles (Madrid)<br>
<br>
GPG-KEY: <a href="http://gsyc.es/~rocapal/rocapal.gpg" target="_blank">http://gsyc.es/~rocapal/rocapal.gpg</a><br>
</div></div></blockquote></div><br></div></div>