Gst::QueryDuration issue

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

Gst::QueryDuration issue

Jiergir Ogoerg
Hi,
I'm using the C++ backend of gstreamer (0.10)

The problem is that Gst::QueryDuration::create(Format format) returns Glib::RefPtr<Gst::Query> instead of Glib::RefPtr<Gst::QueryDuration> which makes it impossible to use the parse() method of the returned object since parse() only exists in Gst::QueryDuration.

As a workaround I thought I'd cast the returned value to Glib::RefPtr<Gst::QueryDuration> but the compiler refuses to do so.

Using Ubuntu 12.04 amd64, the documentation (libgstreamermm-0.10-doc) doesn't tell how to do it.

However, in Ubuntu 12.10 (yet to be released), the documentation is updated with an example but it doesn't compile because the example calls parse() on a Gst::Query object which doesn't have such a method.

So how do I create a Gst::QueryDuration object to be able to call parse() to get the duration? Is it a broken C++ bindings design?

_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Gst::QueryDuration issue

José Alburquerque-3
On Thu, 2012-09-06 at 19:14 +0300, Jiergir Ogoerg wrote:
> Hi,
> I'm using the C++ backend of gstreamer (0.10)
>
> The problem is that Gst::QueryDuration::create(Format format) returns
> Glib::RefPtr<Gst::Query> instead of Glib::RefPtr<Gst::QueryDuration>
> which makes it impossible to use the parse() method of the returned
> object since parse() only exists in Gst::QueryDuration.

The create() methods of the Gst::Query* classes wrap the
gst_query_new_*() functions and they return a GstQuery so the create()
methods similarly return a Gst::Query.
>
> As a workaround I thought I'd cast the returned value to
> Glib::RefPtr<Gst::QueryDuration> but the compiler refuses to do so.

The proper way to cast it would be something like:

Glib::RefPtr<Gst::QueryDuration> durQuery =
      Glib::RefPtr<Gst::QueryDuration>::cast_dynamic(query);

The ogg_player, ogg_player_gtkmm and the media_player_gtkmm examples
show how this is done when querying the pipeline for the position of the
stream.
>
> Using Ubuntu 12.04 amd64, the documentation (libgstreamermm-0.10-doc)
> doesn't tell how to do it.
>
> However, in Ubuntu 12.10 (yet to be released), the documentation is
> updated with an example but it doesn't compile because the example
> calls parse() on a Gst::Query object which doesn't have such a method.

Really?  What example would that be?  The gstreamermm examples should
compile and work fine with gstreamermm.
>
> So how do I create a Gst::QueryDuration object to be able to call
> parse() to get the duration? Is it a broken C++ bindings design?
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

--
José

_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Gst::QueryDuration issue

Jiergir Ogoerg
Thanks,
your cast works!

The code I'm talking about which doesn't compile is at the bottom
of this screenshot:
http://f35f22fan.blogspot.com/2012/09/gstreamer.html

As one can see
1) The guy who wrote it calls "parse()" on a Gst::Query object
2) He uses "." to refer to the "parse()" method instead of "->"
So clearly it wouldn't compile, so I didn't even try.

I wish that create() method just returned Glib::RefPtr<Gst::QueryDuration>



On Thu, Sep 6, 2012 at 10:50 PM, José Alburquerque <[hidden email]> wrote:
On Thu, 2012-09-06 at 19:14 +0300, Jiergir Ogoerg wrote:
> Hi,
> I'm using the C++ backend of gstreamer (0.10)
>
> The problem is that Gst::QueryDuration::create(Format format) returns
> Glib::RefPtr<Gst::Query> instead of Glib::RefPtr<Gst::QueryDuration>
> which makes it impossible to use the parse() method of the returned
> object since parse() only exists in Gst::QueryDuration.

The create() methods of the Gst::Query* classes wrap the
gst_query_new_*() functions and they return a GstQuery so the create()
methods similarly return a Gst::Query.
>
> As a workaround I thought I'd cast the returned value to
> Glib::RefPtr<Gst::QueryDuration> but the compiler refuses to do so.

The proper way to cast it would be something like:

Glib::RefPtr<Gst::QueryDuration> durQuery =
      Glib::RefPtr<Gst::QueryDuration>::cast_dynamic(query);

The ogg_player, ogg_player_gtkmm and the media_player_gtkmm examples
show how this is done when querying the pipeline for the position of the
stream.
>
> Using Ubuntu 12.04 amd64, the documentation (libgstreamermm-0.10-doc)
> doesn't tell how to do it.
>
> However, in Ubuntu 12.10 (yet to be released), the documentation is
> updated with an example but it doesn't compile because the example
> calls parse() on a Gst::Query object which doesn't have such a method.

Really?  What example would that be?  The gstreamermm examples should
compile and work fine with gstreamermm.
>
> So how do I create a Gst::QueryDuration object to be able to call
> parse() to get the duration? Is it a broken C++ bindings design?
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

--
José

_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Gst::QueryDuration issue

José Alburquerque-3
On Fri, 2012-09-07 at 07:20 +0300, Jiergir Ogoerg wrote:

> Thanks,
> your cast works!
>
> The code I'm talking about which doesn't compile is at the bottom
> of this screenshot:
> http://f35f22fan.blogspot.com/2012/09/gstreamer.html
>
> As one can see
> 1) The guy who wrote it calls "parse()" on a Gst::Query object
> 2) He uses "." to refer to the "parse()" method instead of "->"
> So clearly it wouldn't compile, so I didn't even try.

Ah, that's a beginner's attempt at a crude C++ translation of the usage
example found in GstQuery's description section.  It was placed in the
Gst::Query class docs as an attempt to also show how the class could be
used.  I guess little thought was put into the need to cast correctly
before using the parse() method as you describe.

The line which should cast has been fixed in this commit:
http://git.gnome.org/browse/gstreamermm/commit/?id=a6933d2012fbe626eb110320ab6c4338c583e7bc

Please feel free to report any errors you find here:
https://bugzilla.gnome.org/enter_bug.cgi?product=gstreamermm

>
> I wish that create() method just returned
> Glib::RefPtr<Gst::QueryDuration>
>
Feel free to file a bug about that also.

>
> On Thu, Sep 6, 2012 at 10:50 PM, José Alburquerque
> <[hidden email]> wrote:
>         On Thu, 2012-09-06 at 19:14 +0300, Jiergir Ogoerg wrote:
>         > Hi,
>         > I'm using the C++ backend of gstreamer (0.10)
>         >
>         > The problem is that Gst::QueryDuration::create(Format
>         format) returns
>         > Glib::RefPtr<Gst::Query> instead of
>         Glib::RefPtr<Gst::QueryDuration>
>         > which makes it impossible to use the parse() method of the
>         returned
>         > object since parse() only exists in Gst::QueryDuration.
>        
>        
>         The create() methods of the Gst::Query* classes wrap the
>         gst_query_new_*() functions and they return a GstQuery so the
>         create()
>         methods similarly return a Gst::Query.
>         >
>         > As a workaround I thought I'd cast the returned value to
>         > Glib::RefPtr<Gst::QueryDuration> but the compiler refuses to
>         do so.
>        
>        
>         The proper way to cast it would be something like:
>        
>         Glib::RefPtr<Gst::QueryDuration> durQuery =
>               Glib::RefPtr<Gst::QueryDuration>::cast_dynamic(query);
>        
>         The ogg_player, ogg_player_gtkmm and the media_player_gtkmm
>         examples
>         show how this is done when querying the pipeline for the
>         position of the
>         stream.
>         >
>         > Using Ubuntu 12.04 amd64, the documentation
>         (libgstreamermm-0.10-doc)
>         > doesn't tell how to do it.
>         >
>         > However, in Ubuntu 12.10 (yet to be released), the
>         documentation is
>         > updated with an example but it doesn't compile because the
>         example
>         > calls parse() on a Gst::Query object which doesn't have such
>         a method.
>        
>        
>         Really?  What example would that be?  The gstreamermm examples
>         should
>         compile and work fine with gstreamermm.
>         >
>         > So how do I create a Gst::QueryDuration object to be able to
>         call
>         > parse() to get the duration? Is it a broken C++ bindings
>         design?
>        
>         > _______________________________________________
>         > gstreamer-devel mailing list
>         > [hidden email]
>         >
>         http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>        
>         --
>         José
>        
>         _______________________________________________
>         gstreamer-devel mailing list
>         [hidden email]
>         http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

--
José

_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Gst::QueryDuration issue

Jiergir Ogoerg
Thanks for your efforts,
I submitted the bug here:
https://bugzilla.gnome.org/show_bug.cgi?id=683580


On Fri, Sep 7, 2012 at 3:03 PM, José Alburquerque <[hidden email]> wrote:
On Fri, 2012-09-07 at 07:20 +0300, Jiergir Ogoerg wrote:
> Thanks,
> your cast works!
>
> The code I'm talking about which doesn't compile is at the bottom
> of this screenshot:
> http://f35f22fan.blogspot.com/2012/09/gstreamer.html
>
> As one can see
> 1) The guy who wrote it calls "parse()" on a Gst::Query object
> 2) He uses "." to refer to the "parse()" method instead of "->"
> So clearly it wouldn't compile, so I didn't even try.

Ah, that's a beginner's attempt at a crude C++ translation of the usage
example found in GstQuery's description section.  It was placed in the
Gst::Query class docs as an attempt to also show how the class could be
used.  I guess little thought was put into the need to cast correctly
before using the parse() method as you describe.

The line which should cast has been fixed in this commit:
http://git.gnome.org/browse/gstreamermm/commit/?id=a6933d2012fbe626eb110320ab6c4338c583e7bc

Please feel free to report any errors you find here:
https://bugzilla.gnome.org/enter_bug.cgi?product=gstreamermm

>
> I wish that create() method just returned
> Glib::RefPtr<Gst::QueryDuration>
>
Feel free to file a bug about that also.

>
> On Thu, Sep 6, 2012 at 10:50 PM, José Alburquerque
> <[hidden email]> wrote:
>         On Thu, 2012-09-06 at 19:14 +0300, Jiergir Ogoerg wrote:
>         > Hi,
>         > I'm using the C++ backend of gstreamer (0.10)
>         >
>         > The problem is that Gst::QueryDuration::create(Format
>         format) returns
>         > Glib::RefPtr<Gst::Query> instead of
>         Glib::RefPtr<Gst::QueryDuration>
>         > which makes it impossible to use the parse() method of the
>         returned
>         > object since parse() only exists in Gst::QueryDuration.
>
>
>         The create() methods of the Gst::Query* classes wrap the
>         gst_query_new_*() functions and they return a GstQuery so the
>         create()
>         methods similarly return a Gst::Query.
>         >
>         > As a workaround I thought I'd cast the returned value to
>         > Glib::RefPtr<Gst::QueryDuration> but the compiler refuses to
>         do so.
>
>
>         The proper way to cast it would be something like:
>
>         Glib::RefPtr<Gst::QueryDuration> durQuery =
>               Glib::RefPtr<Gst::QueryDuration>::cast_dynamic(query);
>
>         The ogg_player, ogg_player_gtkmm and the media_player_gtkmm
>         examples
>         show how this is done when querying the pipeline for the
>         position of the
>         stream.
>         >
>         > Using Ubuntu 12.04 amd64, the documentation
>         (libgstreamermm-0.10-doc)
>         > doesn't tell how to do it.
>         >
>         > However, in Ubuntu 12.10 (yet to be released), the
>         documentation is
>         > updated with an example but it doesn't compile because the
>         example
>         > calls parse() on a Gst::Query object which doesn't have such
>         a method.
>
>
>         Really?  What example would that be?  The gstreamermm examples
>         should
>         compile and work fine with gstreamermm.
>         >
>         > So how do I create a Gst::QueryDuration object to be able to
>         call
>         > parse() to get the duration? Is it a broken C++ bindings
>         design?
>
>         > _______________________________________________
>         > gstreamer-devel mailing list
>         > [hidden email]
>         >
>         http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>         --
>         José
>
>         _______________________________________________
>         gstreamer-devel mailing list
>         [hidden email]
>         http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

--
José

_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel