【问题标题】:How to synchronize multiple appsinks如何同步多个appsink
【发布时间】:2014-08-05 15:33:42
【问题描述】:

我一直在学习 gstreamer,试图编写一个应用程序,它需要多个视频文件并同步处理其中的每一帧(特别是我需要比较这些帧,直到转向下一个)。 我已经建立了一个具有多个独立“分支”的管道:

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

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

...

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

我已经设法独立处理帧。 我的问题是:

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

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

【问题讨论】:

    标签: c parallel-processing synchronization gstreamer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 2011-02-12
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多