[gst-devel] How to get the real capabilities of a v4l2src element

Dave Tarkowski Dave.Tarkowski at mathworks.com
Wed Jan 6 21:02:13 CET 2010


Thanks,

The key is to set the state to GST_STATE_PLAYING before querying the capabilities.  I wasn't doing that.

-Dave

> -----Original Message-----
> From: Zheng, Huan [mailto:huan.zheng at intel.com]
> Sent: Wednesday, January 06, 2010 3:30 AM
> To: Discussion of the development of GStreamer
> Subject: Re: [gst-devel] How to get the real capabilities of a v4l2src
> element
> 
> Cheated from cheese, have fun. :)
> 
> static void
> cheese_webcam_get_webcam_device_data (CheeseWebcam       *webcam,
>                                       CheeseWebcamDevice *webcam_device)
> {
>   char                *pipeline_desc;
>   GstElement          *pipeline;
>   GError              *err;
>   GstStateChangeReturn ret;
>   GstMessage          *msg;
>   GstBus              *bus;
> 
>   {
>     pipeline_desc = g_strdup_printf ("%s name=source device=%s ! fakesink",
>                                      webcam_device->gstreamer_src,
>                                      webcam_device->video_device);
>     err      = NULL;
>     pipeline = gst_parse_launch (pipeline_desc, &err);
>     if ((pipeline != NULL) && (err == NULL))
>     {
>       /* Start the pipeline and wait for max. 10 seconds for it to start up
> */
>       gst_element_set_state (pipeline, GST_STATE_PLAYING);
>       ret = gst_element_get_state (pipeline, NULL, NULL, 10 * GST_SECOND);
> 
>       /* Check if any error messages were posted on the bus */
>       bus = gst_element_get_bus (pipeline);
>       msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
>       gst_object_unref (bus);
> 
>       if ((msg == NULL) && (ret == GST_STATE_CHANGE_SUCCESS))
>       {
>         GstElement *src;
>         GstPad     *pad;
>         char       *name;
>         GstCaps    *caps;
> 
>         gst_element_set_state (pipeline, GST_STATE_PAUSED);
> 
>         src = gst_bin_get_by_name (GST_BIN (pipeline), "source");
> 
>         g_object_get (G_OBJECT (src), "device-name", &name, NULL);
>         if (name == NULL)
>           name = "Unknown";
> 
>         g_print ("Device: %s (%s)\n", name, webcam_device->video_device);
>         pad  = gst_element_get_pad (src, "src");
>         caps = gst_pad_get_caps (pad);
>         gst_object_unref (pad);
>         cheese_webcam_get_supported_video_formats (webcam_device, caps);
>         gst_caps_unref (caps);
>       }
>       gst_element_set_state (pipeline, GST_STATE_NULL);
>       gst_object_unref (pipeline);
>     }
>     if (err)
>       g_error_free (err);
> 
>     g_free (pipeline_desc);
>   }
> }
> 
> Best Regards, Zheng, Huan(ZBT)
> OTC/SSD/SSG
> Intel Asia-Pacific Research & Developement Ltd
> Tel: 021-6116 6435
> Inet: 8821 6435
> Cub: 3W035
> 
> -----Original Message-----
> From: Dave Tarkowski [mailto:Dave.Tarkowski at mathworks.com]
> Sent: 2010年1月6日 3:21
> To: gstreamer-devel at lists.sourceforge.net
> Subject: [gst-devel] How to get the real capabilities of a v4l2src element
> 
> Hi all,
> 
> I'm trying to write a program to interface with webcams via gstreamer and
> I'm having a bit of a problem understanding how to get the real
> capabilities of the webcam.
> 
> What I'm doing is basically the following:
> 
> GstElement* source = gst_element_factory_make("v4l2src", "v4l2source");
> GstPad* pad = gst_element_get_pad(source, "src");
> GstCaps* padCaps = gst_pad_get_caps(pad);
> g_print("The caps for the first source pad are:\n%s\n",
> gst_caps_to_string(padCaps));
> 
> This prints the various generic capabilities of the pad, basically what I
> get when I run "gst-inspect-0.10 v4l2src", but not the actual capabilities
> of the currently connected camera.
> 
> If I run "gst-launch-0.10 --gst-debug=v4l2src:3 v4l2src num_buffers=0 !
> fakesink" I can see that the information that I want is obtained
> internally:
> 
> v4l2src gstv4l2src.c:710:gst_v4l2src_get_caps:<v4l2src0> probed caps:
> 
> Is there any way to get at this information without going directly to the
> v4l2 apis?
> 
> BTW, I'm building on Debian 5.0 and the version of GStreamer installed is
> 0.10.19.
> 
> Thanks,
> Dave
> 
> ---------------------------------------------------------------------------
> ---
> This SF.Net email is sponsored by the Verizon Developer Community
> Take advantage of Verizon's best-in-class app development support
> A streamlined, 14 day to market process makes app distribution fast and
> easy
> Join now and get one step closer to millions of Verizon customers
> http://p.sf.net/sfu/verizon-dev2dev
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
> ---------------------------------------------------------------------------
> ---
> This SF.Net email is sponsored by the Verizon Developer Community
> Take advantage of Verizon's best-in-class app development support
> A streamlined, 14 day to market process makes app distribution fast and
> easy
> Join now and get one step closer to millions of Verizon customers
> http://p.sf.net/sfu/verizon-dev2dev
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel




More information about the gstreamer-devel mailing list