各フレームを取得してビデオファイルをデコードするwhileループがあるので、次のようになります。
while (get_frame(codec_ctx, format_ctx, video_stream, frame) != 0) {
...
}
これで、フレームが取得されたら、将来の特定の時点で(フレームのタイムスタンプに従って)画面に描画する必要があります。これをどのように実装できますか?特定の時間に実行されるコールバックを設定できる方法はありますか?
(フレーム、時間)ペアをキューにプッシュしてから、別のスレッドに次のアルゴリズムを実行させることができます。
loop {
time, frame = pop(queue);
wait_until(time);
display(frame);
}
アイテムがpop
空の場合、アイテムがキューにプッシュされるのを待ちます。
フレームを描画する必要があるまで(または、突かれるようにselect(2)
渡されたFDの1つによって示される、何か他のことをする必要があるまで)待機するために使用します。select()