<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The approach I finally took was to access the bus of the filter’s parent from within itself and register a bus callback on it.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>GstBus* bus = gst_element_get_bus(GST_ELEMENT_PARENT(GST_ELEMENT_CAST(myFilterObject)));<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>watchID = gst_bus_add_watch(bus, bus_call, NULL);<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This enables handling GstMessages from within the filter. However, if an app creating this filter also has a bus handler method, both don’t co-exist. In other words, once the first bus handler (say the app’s) gets registered the other fails saying the first one still exists.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>So the bus instance we got inside the filter using the above statement, actually seems to be the same instance as the pipeline’s? How can this be avoided? It is definitely better to do this from inside a filter since it gives greater control. Removing GST_ELEMENT_PARENT from that above call returns a null/invalid bus.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks<br>Kamal<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Srinath, Kamaldeep [mailto:kasrinat@akamai.com] <br><b>Sent:</b> Monday, November 03, 2014 8:19 PM<br><b>To:</b> gstreamer-devel@lists.freedesktop.org<br><b>Subject:</b> Accessing the bus of an element in the pipeline<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:black'>Hello,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:black'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:black'>I have a gstreamer application and have added a bus watch to the GstBus of the pipeline. In  the call back method for this bus watch, I am detecting the message type GST_<i>MESSAGE_</i>BUFFERING. The goal is to “post” this message to the bus of a particular GstElement in the running pipeline.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:black'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:black'>My questions:<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:black'>- Is this possible?<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:black'>- Is it possible instead to access the bus of the running pipeline from inside a gstreamer filter and post a message to the pipeline’s bus directly from the filter?<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Calibri","sans-serif"'>- Why do gst_<i>bus_post(element’s bus, msg) AND gst_element_</i>post_message(element, message) not work?</span><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Here’s my sample code:<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Inside the app:<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><p class=MsoNormal>        case GST_MESSAGE_BUFFERING:<o:p></o:p></p></div><div><p class=MsoNormal>        {<o:p></o:p></p></div><div><p class=MsoNormal>            gint percent;<o:p></o:p></p></div><div><p class=MsoNormal>            GstElement* filter = NULL;<o:p></o:p></p></div><div><p class=MsoNormal>            GstBus* mybus = NULL;<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>            gst_message_parse_buffering(msg, &percent);<o:p></o:p></p></div><div><p class=MsoNormal>            if (pipeline != NULL)<o:p></o:p></p></div><div><p class=MsoNormal>            {<o:p></o:p></p></div><div><p class=MsoNormal>                filter = gst_bin_get_by_name(GST_BIN(pipeline), gst_element_get_name(myfilter));<o:p></o:p></p></div></div><div><div><p class=MsoNormal>                mybus = gst_element_get_bus(filter);<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>                gst_bus_post(mybus, msg);  // Wont work.<o:p></o:p></p></div><div><p class=MsoNormal>                gst_element_post_message(filter, msg); //Wont work either.<o:p></o:p></p></div><div><p class=MsoNormal>                gst_object_unref(mabus);<o:p></o:p></p></div><div><p class=MsoNormal>                g_free(filter);<o:p></o:p></p></div></div><div><p class=MsoNormal>            }<o:p></o:p></p></div><div><p class=MsoNormal>        }<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Thanks for pointing out what’s not right here.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Kamal<o:p></o:p></p></div></div></body></html>