Specifying a different context for gst_bus_add_watch()

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

Specifying a different context for gst_bus_add_watch()

Karthik V-2
Hello All,

I would like to run my g_main_loop in a separate context, so did something like this

GMainContext *c = g_main_context_new();
GMainLoop *l = g_main_loop_new(c, false);
g_main_loop_run(l);

My bus watch code goes like this:
GstBus *bus = gst_pipeline_get_bus(pipe);
gst_bus_add_watch(bus, BusHandler, NULL);

If I run my main loop in the default context (by passing NULL), I receive call backs when there is an event on the bus. But after I moved it to a new context, I don't get the events anymore. Looking into the documentation, it looks like gst_bus_add_watch() adds watch only to the default context. 

Could someone tell me how to add watch to my own context, please?

Thanks
Karthik


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Specifying a different context for gst_bus_add_watch()

Wim Taymans
On Thu, 2008-11-13 at 10:16 -0800, Karthik V wrote:

> Hello All,
>
>
> I would like to run my g_main_loop in a separate context, so did
> something like this
>
>
> GMainContext *c = g_main_context_new();
> GMainLoop *l = g_main_loop_new(c, false);
> g_main_loop_run(l);
>
>
> My bus watch code goes like this:
> GstBus *bus = gst_pipeline_get_bus(pipe);
> gst_bus_add_watch(bus, BusHandler, NULL);
>
>
> If I run my main loop in the default context (by passing NULL), I
> receive call backs when there is an event on the bus. But after I
> moved it to a new context, I don't get the events anymore. Looking
> into the documentation, it looks like gst_bus_add_watch() adds watch
> only to the default context.
>
>
> Could someone tell me how to add watch to my own context, please?

You want something like this:

  GSource *source;

  source = gst_bus_create_watch (bus);

  g_source_set_callback (source, (GSourceFunc) func, user_data, notify);

  /* now attach to the custom context c */
  id = g_source_attach (source, c);
  g_source_unref (source);
  ...

Wim




>
>
> Thanks
> Karthik
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Specifying a different context for gst_bus_add_watch()

Karthik V-2
Thanks Wim.

I did the same but still didn't get the pipeline events. I confirmed that I do get the events if I use the default context. My code now looks like this:

             GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipe));
if ( ( source = gst_bus_create_watch(bus) ) == NULL )
{
cout << "Unable to create sourced for bus watch";
}
cout << "Created source";
g_source_set_callback(source, (GSourceFunc) BusHandler, data, NULL);
cout << "Set callback";
busWatchId = g_source_attach(source, loopContext);
cout << "Attached source. Id = " << busWatchId;
g_source_unref(source);
gst_object_unref (bus);


The handler function (I retained what I had earlier when I used gst_bus_add_watch() ),
gboolean BusHandler(GstBus *bus, GstMessage *message, gpointer data)
{
 cout << "Handler called";
}


And elsewhere in the code,

             GMainContext *context = g_main_context_new();
             GMainLoop *loop = g_main_loop_new(context, false);
             g_main_loop_run(loop);




On Thu, Nov 13, 2008 at 10:33 AM, Wim Taymans <[hidden email]> wrote:
On Thu, 2008-11-13 at 10:16 -0800, Karthik V wrote:
> Hello All,
>
>
> I would like to run my g_main_loop in a separate context, so did
> something like this
>
>
> GMainContext *c = g_main_context_new();
> GMainLoop *l = g_main_loop_new(c, false);
> g_main_loop_run(l);
>
>
> My bus watch code goes like this:
> GstBus *bus = gst_pipeline_get_bus(pipe);
> gst_bus_add_watch(bus, BusHandler, NULL);
>
>
> If I run my main loop in the default context (by passing NULL), I
> receive call backs when there is an event on the bus. But after I
> moved it to a new context, I don't get the events anymore. Looking
> into the documentation, it looks like gst_bus_add_watch() adds watch
> only to the default context.
>
>
> Could someone tell me how to add watch to my own context, please?

You want something like this:

 GSource *source;

 source = gst_bus_create_watch (bus);

 g_source_set_callback (source, (GSourceFunc) func, user_data, notify);

 /* now attach to the custom context c */
 id = g_source_attach (source, c);
 g_source_unref (source);
 ...

Wim




>
>
> Thanks
> Karthik
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Specifying a different context for gst_bus_add_watch()

Karthik V-2
I noticed that the BusHandler function does get called a few times in the beginning, but the 'end of stream' event fails to trigger a callback, for some reason. If I replace g_main_context_new() by g_main_context_default(), I get callback during when end of stream occurs.

Does anyone have any idea what could be wrong with EOS alone?



On Thu, Nov 13, 2008 at 2:40 PM, Karthik V <[hidden email]> wrote:
Thanks Wim.

I did the same but still didn't get the pipeline events. I confirmed that I do get the events if I use the default context. My code now looks like this:

             GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipe));
if ( ( source = gst_bus_create_watch(bus) ) == NULL )
{
cout << "Unable to create sourced for bus watch";
}
cout << "Created source";
g_source_set_callback(source, (GSourceFunc) BusHandler, data, NULL);
cout << "Set callback";
busWatchId = g_source_attach(source, loopContext);
cout << "Attached source. Id = " << busWatchId;
g_source_unref(source);
gst_object_unref (bus);


The handler function (I retained what I had earlier when I used gst_bus_add_watch() ),
gboolean BusHandler(GstBus *bus, GstMessage *message, gpointer data)
{
 cout << "Handler called";
}


And elsewhere in the code,

             GMainContext *context = g_main_context_new();
             GMainLoop *loop = g_main_loop_new(context, false);
             g_main_loop_run(loop);




On Thu, Nov 13, 2008 at 10:33 AM, Wim Taymans <[hidden email]> wrote:
On Thu, 2008-11-13 at 10:16 -0800, Karthik V wrote:
> Hello All,
>
>
> I would like to run my g_main_loop in a separate context, so did
> something like this
>
>
> GMainContext *c = g_main_context_new();
> GMainLoop *l = g_main_loop_new(c, false);
> g_main_loop_run(l);
>
>
> My bus watch code goes like this:
> GstBus *bus = gst_pipeline_get_bus(pipe);
> gst_bus_add_watch(bus, BusHandler, NULL);
>
>
> If I run my main loop in the default context (by passing NULL), I
> receive call backs when there is an event on the bus. But after I
> moved it to a new context, I don't get the events anymore. Looking
> into the documentation, it looks like gst_bus_add_watch() adds watch
> only to the default context.
>
>
> Could someone tell me how to add watch to my own context, please?

You want something like this:

 GSource *source;

 source = gst_bus_create_watch (bus);

 g_source_set_callback (source, (GSourceFunc) func, user_data, notify);

 /* now attach to the custom context c */
 id = g_source_attach (source, c);
 g_source_unref (source);
 ...

Wim




>
>
> Thanks
> Karthik
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Specifying a different context for gst_bus_add_watch()

Karthik V-2
Any thoughts?


On Thu, Nov 13, 2008 at 3:02 PM, Karthik V <[hidden email]> wrote:
I noticed that the BusHandler function does get called a few times in the beginning, but the 'end of stream' event fails to trigger a callback, for some reason. If I replace g_main_context_new() by g_main_context_default(), I get callback during when end of stream occurs.

Does anyone have any idea what could be wrong with EOS alone?



On Thu, Nov 13, 2008 at 2:40 PM, Karthik V <[hidden email]> wrote:
Thanks Wim.

I did the same but still didn't get the pipeline events. I confirmed that I do get the events if I use the default context. My code now looks like this:

             GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipe));
if ( ( source = gst_bus_create_watch(bus) ) == NULL )
{
cout << "Unable to create sourced for bus watch";
}
cout << "Created source";
g_source_set_callback(source, (GSourceFunc) BusHandler, data, NULL);
cout << "Set callback";
busWatchId = g_source_attach(source, loopContext);
cout << "Attached source. Id = " << busWatchId;
g_source_unref(source);
gst_object_unref (bus);


The handler function (I retained what I had earlier when I used gst_bus_add_watch() ),
gboolean BusHandler(GstBus *bus, GstMessage *message, gpointer data)
{
 cout << "Handler called";
}


And elsewhere in the code,

             GMainContext *context = g_main_context_new();
             GMainLoop *loop = g_main_loop_new(context, false);
             g_main_loop_run(loop);




On Thu, Nov 13, 2008 at 10:33 AM, Wim Taymans <[hidden email]> wrote:
On Thu, 2008-11-13 at 10:16 -0800, Karthik V wrote:
> Hello All,
>
>
> I would like to run my g_main_loop in a separate context, so did
> something like this
>
>
> GMainContext *c = g_main_context_new();
> GMainLoop *l = g_main_loop_new(c, false);
> g_main_loop_run(l);
>
>
> My bus watch code goes like this:
> GstBus *bus = gst_pipeline_get_bus(pipe);
> gst_bus_add_watch(bus, BusHandler, NULL);
>
>
> If I run my main loop in the default context (by passing NULL), I
> receive call backs when there is an event on the bus. But after I
> moved it to a new context, I don't get the events anymore. Looking
> into the documentation, it looks like gst_bus_add_watch() adds watch
> only to the default context.
>
>
> Could someone tell me how to add watch to my own context, please?

You want something like this:

 GSource *source;

 source = gst_bus_create_watch (bus);

 g_source_set_callback (source, (GSourceFunc) func, user_data, notify);

 /* now attach to the custom context c */
 id = g_source_attach (source, c);
 g_source_unref (source);
 ...

Wim




>
>
> Thanks
> Karthik
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel




-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel