How to get the real capabilities of a v4l2src element

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

How to get the real capabilities of a v4l2src element

Dave Tarkowski
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
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to get the real capabilities of a v4l2src element

Zheng, Huan
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:[hidden email]]
Sent: 2010年1月6日 3:21
To: [hidden email]
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
[hidden email]
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
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to get the real capabilities of a v4l2src element

Dave Tarkowski
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:[hidden email]]
> 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:[hidden email]]
> Sent: 2010年1月6日 3:21
> To: [hidden email]
> 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
> [hidden email]
> 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
> [hidden email]
> 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
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to get the real capabilities of a v4l2src element

Stefan Sauer
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:[hidden email]]
>> 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:[hidden email]]
>> Sent: 2010年1月6日 3:21
>> To: [hidden email]
>> 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
>> [hidden email]
>> 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
>> [hidden email]
>> 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
> [hidden email]
> 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
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel