日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

gstreamer的消息傳遞機(jī)制

作者:茄子船長(zhǎng) 更新時(shí)間: 2022-07-11 編程語(yǔ)言

//創(chuàng)建bin的同時(shí)會(huì)創(chuàng)建一個(gè)bus,用于接收子插件的消息。 ? ? ?
gst_bin_init (GstBin * bin)
{
? bus = g_object_new (GST_TYPE_BUS, "enable-async", FALSE, NULL);
? bin->child_bus = bus; ?//childbus是用來接受子元素的消息。
}
? ? ? ??
//添加子元素,將child_bus設(shè)給子元素
gst_bin_add
--bclass->add_element
-----gst_bin_add_func
-------gst_element_set_bus (element, bin->child_bus);

//具體給子元素設(shè)置bus的函數(shù)。
gst_element_set_bus
--gst_element_set_bus_func
----gst_object_replace ((GstObject **) bus_p, GST_OBJECT_CAST (bus));

子元素發(fā)送消息,以為basesink的eos消息為例。
static gboolean
gst_base_sink_default_event (GstBaseSink * basesink, GstEvent * event)
{
? ? case GST_EVENT_EOS:
? ? {
? ? ? //向bus發(fā)送eos消息,所在bin會(huì)收到。
? ? ? seqnum = basesink->priv->seqnum = gst_event_get_seqnum (event);
? ? ? GST_DEBUG_OBJECT (basesink, "Got seqnum #%" G_GUINT32_FORMAT, seqnum);

? ? ? message = gst_message_new_eos (GST_OBJECT_CAST (basesink));
? ? ? gst_message_set_seqnum (message, seqnum);
? ? ? gst_element_post_message (GST_ELEMENT_CAST (basesink), message);
? ? }
}

//bin收到消息后,往上級(jí)bin轉(zhuǎn)發(fā)消息。
bin_bus_handler{
? bclass->handle_message
? --gst_bin_handle_message_func
? ----bin_do_message_forward
}??

原文鏈接:https://blog.csdn.net/evsqiezi/article/details/125707929

欄目分類
最近更新