Gstreamer之GstObject

目录

GstObject

父-子关系

命名

锁顺序

路径生成

标志


GstObject

整个GStreamer层次结构的基类是GstObject。

父-子关系

一个指针可用来存储对象的当前父对象。这是GStreamer等分级系统的两个基本需求之一(对于另一个,请参阅GstBin)。提供了三个函数:_set_parent()、_get_parent()和_unparent()。第三个是必需的,因为在_set_parent()中有一个显式的检查:如果您希望设置一个对象的父对象,在设置之前它必须不具有父对象。因此首先必须取消对象的父对象。才允许以后添加新的父对象。

  • GstObject可以作为父对象的:GstElement(在bin内)GstPad(在element内)

命名

  • 父对象的名称不能更改
  • 对象名称在整个父对象中应该是唯一的
       #set_name() 可能会因此而失败
       #同样gst_element_add_pad()/gst_bin_add_element()也会有此问题
  • gst_object_set_name() 仅更改对象的名称
  • 对象还具有name_prefix,用于在调试和标识过程中为对象名称添加前缀
  • 还有对象特定的set_name(),它也设置了对象的name_prefix。这对于调试来说很有用,可以给对象一个更可识别的名称。通常父类会在子类上调用_set_name_prefix(),并获得它们的锁。

该GstObject包含以线程安全的方式锁定对象所必要的原语。这将用于根据需要提供常规的线程安全性。但是,此锁是通用的,即它涵盖了整个对象。

对象LOCK是一个非常低级的锁,应仅在短期代码段内保留该对象以访问对象属性。

GstObject结构中所有被/**< public >**/ /* with LOCK */标记的成员均受此锁保护。仅在持有锁的情况下才能访问这些成员以进行读取或写入。如果在释放LOCK之后使用了这些成员,则应该复制或拒绝它们。

请注意,这并不意味着在持有锁的同时没有其他线程可以修改该对象。它只意味着遵守锁的任何两个代码段保证不会同时运行。“锁是自愿合作的”。

理想情况下,这个锁将用于父级、标志和命名,这是合理的,因为它们是GstObject中唯一可能保护的东西。

锁顺序

在父子情况下,必须始终先取得父对象的锁,然后再取得子对象的锁。在取得父对象的锁之前,不允许持有子对象的锁。

此策略允许父类迭代其子类并设置其子类的属性。

每当需要对不涉及父子关系的对象(例如pads)进行嵌套锁定时,都必须定义明确的锁定顺序。

路径生成

由于GstObject的基本性质,它成为放置这个特定函数(_get_path_string())的唯一合理位置。它将生成一个字符串来描述给定GstObject的父层次结构。

标志

GStreamer对象层次结构中的每个对象都可以具有与其关联的标志,这些标志用于描述其状态或特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值