gstreamer:我如何传递结构作为参数g_object_set()
gstreamer : how do I pass structure as a argument to g_object_set()?
大家好,我目前能够一次设置一个属性到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);
但是我想一次设置整个结构,就像fallow。
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=%dn",copy->left);
g_print("Set Property From Copy removed=%dn",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_object_set和g_object_get是varrag函数。这意味着您可以在一个调用中设置这两个:
g_object_set(G_OBJECT(source),
"objectLeftEnabled", settings.m_b_left,
"objectRemovedEnabled", settings.m_b_removed,
NULL);
也仅供参考。你可以使用g_memdup()来代替g_new和手动复制。
当您尝试盒装类型时,是否传递了一个指针?可能需要调用
g_object_set (G_OBJECT (source), "lettremoved-settings", &settings, NULL);
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 使用运算符调用 void 函数时出错<set>
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 修改"std::set"中用户定义类型的值
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 生成提升::hana::set 的常量表达式问题
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 重构使用动态强制转换的 std::set 的比较运算符
- set::find 查找不存在的元素
- 如何理解 C++17 标准参考中的 [intro.object]/3? N4659 的
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- 将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法