c - 在 class_init 函数中设置 change_state 后,没有其他工作
问题描述
我遵循了gstreamer 的关于如何编写插件的教程,我的目标是创建一个视频接收器。现在我只会发布相关代码,但如果需要,我可以将整个插件代码上传到某个地方。无论如何,这将是一个开源项目。
类结构如下所示:
struct _GstIviOpenglSinkClass
{
GstVideoSinkClass base_iviopenglsink_class;
};
我的 class_init() 函数如下所示:
static void
gst_iviopenglsink_class_init (GstIviOpenglSinkClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GstBaseSinkClass *gstbasesink_class = GST_BASE_SINK_CLASS (klass);
GstVideoSinkClass *gstvideosink_class = GST_VIDEO_SINK_CLASS (klass);
GST_DEBUG ("START");
gobject_class->set_property = gst_iviopenglsink_set_property;
gobject_class->get_property = gst_iviopenglsink_get_property;
gobject_class->finalize = gst_iviopenglsink_finalize;
gst_element_class_add_pad_template (gstelement_class,
gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
gst_caps_from_string (VIDEO_SINK_CAPS)));
gst_element_class_set_static_metadata (gstelement_class,
"desc", "Sink/Video",
"desc",
"me <me@com.com>");
gstbasesink_class->get_caps = gst_iviopenglsink_get_caps;
gstbasesink_class->set_caps = gst_iviopenglsink_set_caps;
/* makes problems?!? */
gstelement_class->change_state = gst_iviopenglsink_change_state;
gstvideosink_class->show_frame = gst_iviopenglsink_show_frame;
GST_DEBUG ("END");
}
如果我像这样离开 class_init 函数,那么回调 set_caps、get_caps 和 show_frame 将不起作用(根本不会被调用)。如果我评价 change_state 的分配,则将调用这 3 个回调。
我在 class_init 函数中做错了什么,还是问题出在其他地方?我能做些什么来调试这个?
解决方案
这条评论是正确的——问题确实出在处理 change_state 的函数中。我查看了 waylandsink 的源代码,发现了这条奇怪的行:
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
我不知道那条线在做什么,但显然它是必需的。在插件教程和描述 GstElementClass 的页面中都没有解释。
如果有人可以解释为什么需要这样做,我将不胜感激:)
推荐阅读
- reactjs - 在另一个页面 redux 中重用组件
- java - 生成对象的身份指纹
- python - 程序将字符读取为换行符
- r - “x”是一个列表,但在 R 上的无监督分类中没有组件“x”和“y”
- python-3.x - how to connect api to label widget in python tkinter?
- qt - QML 图像不拉伸/适合 SVG
- python - 如何摆脱 matpotlib 子图中的双打印轴
- android - android中BLE设备的蓝牙配对问题
- python - 延迟 python 日志记录和 pylint 日志记录格式插值
- postgresql - 从 Postgresql 中的多个数据库中检索表名?