c - 如何同步多个appsink

标签 c parallel-processing synchronization gstreamer

我一直在学习 gstreamer,尝试编写一个应用程序,该应用程序获取多个视频文件并同步处理其中的每个帧(具体来说,我需要比较这些帧,直到转向下一个帧)。 我构建了一个具有多个独立“分支”的管道:

filesrc ---> decodebin ---> videoconvert ---> appsink

filesrc ---> decodebin ---> videoconvert ---> appsink

...

filesrc ---> decodebin ---> videoconvert ---> appsink

我已经成功地处理彼此独立的帧。 我的问题是:

如何同步每个应用程序接收器,以便可以将一个应用程序接收器的帧与其他应用程序接收器的帧进行比较?

我想到的就是在新示例回调函数中轮询其他应用程序接收器是否已将其缓冲区存储在某些共享内存中,然后这些回调之一开始对所有缓冲区进行工作。然而,这似乎是相当残酷和困惑的方法。你能帮我找到一个更好的吗?

最佳答案

GStreamer 中的所有接收器(继承自 GstBaseSink)都有一个属性“sync”。这意味着它将把缓冲区时间戳与时钟时间同步,并且在时间到了之前不会给你缓冲区。如果启用了此功能,则可以简单地使用缓冲区上的 GST_BUFFER_TIMESTAMP 来比较它们。

关于c - 如何同步多个appsink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142781/

相关文章:

java - Java并行流的性能影响

javascript - 如何在for循环中顺序调用JavaScript函数?

java - 在没有打印语句的情况下,循环看不到其他线程更改的值

c - 为什么 GObject 属性从 1 开始编号?

c - 字符串末尾的奇怪值

java - 使用 testNG 并行化测试时,类中的测试不会在同一线程中执行

java - 比较人名以检测相同性的算法

C 至 Y86 组件

c - 什么是有偏符号?

winforms - 在应用程序中打开太多线程是否不好?