2

我有一个 while 循环,它通过检索每一帧来解码视频文件,所以是这样的:

while (get_frame(codec_ctx, format_ctx, video_stream, frame) != 0) {
      ...
 }

现在,一旦检索到帧,就需要在未来的某个时间点将其绘制到屏幕上(根据帧的时间戳)。这如何实现?有什么方法可以设置在特定时间执行的回调吗?

4

2 回答 2

1

您可以将(帧,时间)对推送到队列中,然后让单独的线程执行以下算法:

loop {
    time, frame = pop(queue);
    wait_until(time);
    display(frame);
}

wherepop等待一个项目被推入队列,如果它是空的。

于 2012-04-12T15:35:38.440 回答
0

用于select(2)等到您需要绘制框架(或直到您需要执行其他操作,由传递给select()被戳的 FD 之一指示)。

于 2012-04-12T15:34:33.897 回答