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

Stefan Kost ensonic at hora-obscura.de
Sun Jan 10 12:24:14 CET 2010


Am 06.01.2010 22:02, schrieb Dave Tarkowski:
> Thanks,
> 
> The key is to set the state to GST_STATE_PLAYING before querying the capabilities.  I wasn't doing that.

READY woudl be enough, earlier the device has not been opened and the real
capabilities are not yet known.

Stefan

> 
> -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
> 
> ------------------------------------------------------------------------------
> 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