GStreamer Bus的一个细节
来源:互联网 发布:c高性能编程 pdf 编辑:程序博客网 时间:2024/04/28 18:04
GStreamer的Bus系统主要用于向用户提供内部Elements的事件信息。使用GStreamer的Bus系统,只要调用gst_bus_add_watch,并且注册一个Callback即可。但问题在于调用这个接口的时机,及用于处理Bus事件的线程。Callback内部以glib的Source机制实现,Source要attach到一个GMainContext上,且需要有一个GMainloop来侦听这个Context。通常,调用gst_bus_add_watch的线程,在未做过任何处理的情况下,这个Source attach的GMainContext是NULL,也就是Default Main Context。而侦听Default Main Context的线程未必就是调用者线程,这样在做资源回收时,会出现多线程互斥问题。
需要回调函数在调用者线程中执行的方法如下:
1. 在创建调用者线程之后,创建该线程自己的GMainContext与GMainloop,然后调用g_main_context_push_thread_default,将该Context作为线程自己的默认Context,并使用GMainloop侦听;
2. 之后再在该线程中调用gst_bus_add_watch,则Callback会在调用者线程中执行,避免了多线程互斥的问题。
此方法同时避免了应用的主线程负担过重的问题。另外,所有基于gio的应用,也会由于使用了g_main_context_push_thread_default,使得各线程的负载分散化。
0 0
- GStreamer Bus的一个细节
- WriteProcessMemory的一个细节
- 一个基于Gstreamer的Linux下的简单媒体播放器
- GStreamer 编写一个简单的MP3播放器
- 使用GStreamer 编写一个简单的MP3播放器
- 关于I2C总线介绍的一个重要网站 http://www.i2c-bus.org/i2c-bus/
- 一个细节引发的思考
- incrediBuild的一个细节问题
- 关于引用的一个细节
- cin的一个小细节
- 一个有意思的小细节
- 最短路一个的细节
- @protocol的一个小细节
- URLClassLoader 的一个小细节
- java优先级的一个细节
- Java中泛型的一个细节
- 关于TCP_CORK的一个细节
- ORA-28002的一个细节
- HTML meta viewport属性说明
- ssh2项目中文件的上传和下载的初步认识
- Myeclipse出现 java文件中文乱码问题
- 谷歌示好中国?Google Play或将推出本地版本
- C# 6.0 的那些事
- GStreamer Bus的一个细节
- .net datatable 查找一行时的方法比较datatable.rows.find vs datable.select vs dataview vs for loop
- C/C++字符串查找函数
- C#中ListBox控件设置Item字体并居中显示
- sdut Find a girl friend(结构体的二级排序)
- 内存分配——静态存储区 栈 堆
- Web前端应用常用技术大盘点
- 采用反射获取包名
- 業務システムの開発ドキュメント標準化 第2回:機能一覧表とI/O関連図