Gstreamer变化状态函数
我是Gstreamer的新手。我有一个关于插件的change_state函数的问题。 正如我在本指南中所读到的: 我真的不知道如何使用parent\u class和调用parent\u class->change\u state 因为在该元素的init函数中:Gstreamer变化状态函数,gstreamer,Gstreamer,我是Gstreamer的新手。我有一个关于插件的change_state函数的问题。 正如我在本指南中所读到的: 我真的不知道如何使用parent\u class和调用parent\u class->change\u state 因为在该元素的init函数中: gst_my_filter_class_init (GstMyFilterClass *klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); e
gst_my_filter_class_init (GstMyFilterClass *klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
element_class->change_state = gst_my_filter_change_state;**strong text**
}
元素\u类->更改\u状态已分配给gst\u我的\u过滤器\u更改\u状态。当元素类->更改状态分配给另一个函数时,为什么我们仍然可以在gst\u my\u filter\u change\u state中调用元素类->更改状态。
谢谢大家! 将
gst\u my\u filter\u class\u init(GstMyFilterClass*klass)
更改为如下内容:
gst_my_filter_class_init (GstMyFilterClass *klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
parent_class = (GstXyzClass *) g_type_class_peek_parent (klass);
element_class->change_state = gst_my_filter_change_state;**strong text**
}
并添加一个
static
全局变量GstXyzClass*父类代码>插件顶部附近的某个位置。仅GstXyzClass
将是您从中继承的元素的类型,例如GstElementClass
。请查看其他插件源以获取示例。谢谢您的回答。实际上,我从那个指南中引用的代码可以正常运行,但我不明白的是在我们声明的头文件中:GstMyFilterClass{GstElementClass parent_class;}
这意味着GstElementClass是GstMyFilterClass的父类
但是为什么我们可以在这个插件的源文件(.c文件)中使用parent_class?很抱歉我在Gobject缺乏知识,但是我知道< GstMyFilterClass > <强>是一个结构,(不是类C++),在插件的函数中不能使用属性<强> PARTRONGROUP 。C++中,我们可以很容易地使用类方法中的属性。在gst\u my\u filter\u class\u init中:
gst_my_filter_class_init (GstMyFilterClass *klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
element_class->change_state = gst_my_filter_change_state;//assign to function pointer state change
}
执行以下语句:GstElementClass*element\u class=GST\u element\u class(klass)意味着我们将GST_元素_类(klass)转换为其父类(GstElementClass父类)?
如果为true,则父类的更改\u状态函数指针不为空。所以在
gst_my_filter_change_state (GstElement *element, GstStateChange transition)
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
GstMyFilter *filter = GST_MY_FILTER (element);
switch (transition) {
**//Downwards state change;**
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
if (ret == GST_STATE_CHANGE_FAILURE)
return ret;
**//upward state change**
}
return ret;
}
什么是GST元素类(父类)->更改状态(元素、转换)
?
正如我所知,每个GstElementClass都有一个默认函数change\u state,但在这种情况下,函数change\u state已分配给另一个指针函数(gst\u my\u filter\u class\u init执行此分配)对吗?希望很快收到你的答复。多谢各位
gst_my_filter_change_state (GstElement *element, GstStateChange transition)
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
GstMyFilter *filter = GST_MY_FILTER (element);
switch (transition) {
**//Downwards state change;**
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
if (ret == GST_STATE_CHANGE_FAILURE)
return ret;
**//upward state change**
}
return ret;
}