Gstreamer变化状态函数

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

我是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);

  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;
}