Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gstreamer:如何将结构作为参数传递给g_object_set()?_C++_C_Gobject - Fatal编程技术网

C++ gstreamer:如何将结构作为参数传递给g_object_set()?

C++ gstreamer:如何将结构作为参数传递给g_object_set()?,c++,c,gobject,C++,C,Gobject,大家好,我现在可以一次设置一个属性到gstreamer插件,就像fallow一样 GstElement *source = gst_bin_get_by_name (GST_BIN (m_pu_pipeline), "ue"); g_object_set(G_OBJECT(source), "objectLeftEnabled", settings.m_b_left, NULL); g_object_set(G_OBJECT(source), "objectRemoved

大家好,我现在可以一次设置一个属性到gstreamer插件,就像fallow一样

GstElement *source = gst_bin_get_by_name (GST_BIN (m_pu_pipeline), "ue");

g_object_set(G_OBJECT(source), "objectLeftEnabled", settings.m_b_left, NULL);           
g_object_set(G_OBJECT(source), "objectRemovedEnabled", settings.m_b_removed, NULL);
g_object_set (G_OBJECT (source), "lettremoved-settings", settings,  NULL); 
但我想在休耕的时候设置整个结构

GstElement *source = gst_bin_get_by_name (GST_BIN (m_pu_pipeline), "ue");

g_object_set(G_OBJECT(source), "objectLeftEnabled", settings.m_b_left, NULL);           
g_object_set(G_OBJECT(source), "objectRemovedEnabled", settings.m_b_removed, NULL);
g_object_set (G_OBJECT (source), "lettremoved-settings", settings,  NULL); 
以下是我到目前为止所做的直接为gstreamer插件设置结构的工作

struct _LeftRemoved
{
    bool left;
    bool removed;
}; 

//Declaration of copy and free function.
static gpointer lr_copy (gpointer data);
static void lr_free (gpointer data);

G_DEFINE_BOXED_TYPE (_Leftremoved, lettremoved_settings,
                     lr_copy,
                     lr_free);  

//Defination of copy and free.
static gpointer lr_copy (gpointer data)
{
  struct _LeftRemoved *details = (struct _LeftRemoved *)data;
  struct _LeftRemoved *copy = g_new (struct _LeftRemoved, 1);

  // We need to copy 
  copy->left= details->left;
  copy->removed = details->removed;

  g_print("Set Property From Copy left=%d\n",copy->left);
  g_print("Set Property From Copy removed=%d\n",copy->removed);

  return (gpointer) copy;
}


static void lr_free (gpointer data)
{
        //code for free memory.
}

enum ePropertyType
{
   PROP_OBJ_LR
}

static void gst_ivue_class_init (GstIVUEClass * klass)
{  
  GObjectClass *gobject_class;
  GstElementClass *gstelement_class;

  gobject_class = (GObjectClass *) klass;
  gstelement_class = (GstElementClass *) klass;

  gobject_class->set_property = gst_ivue_set_property;
  gobject_class->get_property = gst_ivue_get_property;
  gobject_class->finalize = gst_ivue_finalize;

  GParamSpec *pspec;
  pspec = g_param_spec_boxed ("lettremoved_settings",     "lettremoved_settings", "Left Removed Settings",lettremoved_settings_get_type(), (GParamFlags)G_PARAM_READWRITE);
  g_object_class_install_property (gobject_class, PROP_OBJ_LR, pspec);

}

static void gst_ivue_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec)
{
   GstIVUE *filter = GST_IVUE (object);

    switch (prop_id)
    {
       case PROP_OBJ_LR:
            g_boxed_copy(lettremoved_settings_get_type(),&value);
            break;
       default:
            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
    }
} 

static void gst_ivue_get_property( GObject* object, guint prop_id, GValue* value, GParamSpec* pspec )
{
     GstIVUE* filter = GST_IVUE (object);
     switch (prop_id) 
     {
         case PROP_OBJ_LR:
             // Also I don't know how to get value
     } 
}
以上代码运行成功,但不是我提供的设置值。 例如,如果我将g_object_set()函数调用为:

   settings.left=true;
   settings.removed=true;
   g_object_set (G_OBJECT (source), "lettremoved-settings", settings,  NULL); 
然后在复制函数中,此代码将left和removed的默认值设置为false。
请告诉我哪里出了问题。

g\u object\u set和g\u object\u get是varrag函数。这意味着您可以在一次通话中同时设置:

g_object_set(G_OBJECT(source),
  "objectLeftEnabled", settings.m_b_left,
  "objectRemovedEnabled", settings.m_b_removed,
  NULL);
仅供参考。在中,您可以使用g_memdup()代替g_new和手动复制

当你试着用盒式打字时,你有没有传递一个指针?可能是你需要打电话


g_对象集(g_对象(源),“lettremoved设置”、&settings,NULL)

请将问题重新标记为“gobject:”这不是gstreamer specific.thanx用于回答,我在问题中也提到了如何从函数gst_ivue_get_property()获取值,例如,如果我们想要获取int值,我们称之为g_value_set_int(value,filter->maxH_object);对于一个值,但现在我想得到_leftremovedstructure,那么我应该调用哪个函数?您的gst_ivue_set_property()impl不正确,您没有在那里获取g_boxed_copy的结果。但请理解,这不是一个为您编写代码的论坛。您可以查看gnomegit上的所有项目,并使用g_装箱类型搜索项目(例如,在github镜像上:)