当前位置: 首页 > news >正文

[Gstreamer] 消息处理handler的设置

前言:

Gstreamer 提供以 GstMessage 和 GstBus 为基础的消息传递机制,所有GstMessage 发送的时候都需要指定 GstBus 用来明确当前 message 将在哪条 Bus 上流转。所有的 GstMessage 最终都会进入一个handler,这个handler函数可以通过两种方式设置 gst_bus_set_sync_handler 和 gst_bus_add_watch。 如果没有设置 handler 函数,那么GstMessage将永远不会被处理,从而造成内存泄漏。

gst_bus_set_sync_handler

handler函数被同步执行,所谓的同步是指 handler的运行线程element里调用 gst_bus_post 发送 Message 的线程 是同一个线程。

或者说,调用 gst_bus_post 会直接同步进入 handler 处理函数
 

gst_bus_add_watch

通过此函数添加的handler函数不会在 gst_bus_post 调用时被同步唤起,而是在某个其他时间点在 g_mainloop 里被唤起从而处理 GstMessage。而g_mainloop一般都是主线程。所以这种情况用的不多。原因如下:

  1. 实时性较差,gst_bus_post会立刻返回,此时调用发送 GstMessage 的线程并不知道外界是否按照自己的意图处理完 message。有时候甚至很久都不会被处理,因为主线程一般比较忙。
  2. 占用主线程资源,主线程一般都是ui线程,因此阻塞主线程会导致ui卡住。

还有一种异步的方法是 gst_bus_add_signal_watch , 这种方法会把 message 转换为 signal , 有什么特点???

http://www.lryc.cn/news/389938.html

相关文章:

  • 线性代数笔记
  • 未公开 GeoServer开源服务器wfs远程命令执行漏洞 已复现(CVE-2024-36401)
  • 【WebGIS干货分享】Webgis 面试题-浙江中海达
  • ES 修改索引字段类型
  • 恢复的实现技术-日志和数据转储
  • 全网最全最细的jmeter接口测试教程,建议收藏
  • Raspbian命令行连接WiFi网络
  • 王佩丰 Excel 基础二十四讲——目录
  • Qt扫盲-QRect矩形描述类
  • Android系统adb shell怎么执行checksum 来判断文件是否变更?
  • JS中的上下文
  • 【深度学习】注意力机制
  • 安卓开发自定义时间日期显示组件
  • IT行业入门,如何假期逆袭,实现抢跑
  • Pyramid 中混合认证策略
  • 深度学习经典检测方法概述
  • <sa8650>sa8650 qcxserver-之-摄像头传感器VB56G4A驱动开发<1>
  • 推荐8款超实用的ComfyUI绘画插件,帮助我们的AI绘画质量和效率提升几个档次!
  • MATLAB-振动问题:两自由度耦合系统自由振动
  • 人工智能-NLP简单知识汇总01
  • Spring Boot中的异步编程技巧
  • 深度解密Spark性能优化之道
  • 在U盘/移动硬盘上安装热插拔式Ubuntu系统,并将Docker目录挂载到NTFS硬盘
  • 商城小程序论文(设计)开题报告
  • 15. Java的 CAS 操作原理
  • 修改element-ui日期下拉框datetimePicker的背景色样式
  • Linux—— 逻辑运算符,压缩和解压缩
  • 音视频入门基础:H.264专题(6)——FFmpeg源码:从H.264码流中提取NALU Header、EBSP、RBSP和SODB
  • STM32实现按键单击、双击、长按、连按功能,使用状态机,无延时,不阻塞
  • C#之Delta并联机械手的视觉同步分拣