2012-04-12 4 views
2

у меня есть время цикла, который декодирует видео файла путем извлечения каждого кадра, так что-то вроде этого:Выполнение действия в определенное время в C

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

Теперь, когда кадр извлекается, он должен нарисовать на экране в определенный момент в будущем (в соответствии с меткой времени кадра). Как это можно реализовать? Есть ли какие-то средства, с помощью которых я могу установить обратный вызов для выполнения в определенное время?

ответ

1

Вы можете нажать пару (рама, время) на очередь, то есть отдельный поток выполнить следующий алгоритм:

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

где pop жду элемента для толкания на очередь, если это пустой.

0

Используйте select(2), чтобы подождать, пока вам не понадобится нарисовать рамку (или пока вам не понадобится сделать что-то еще, обозначенное одним из FDs, переданным select(), будучи вытолкнутым).

+0

Я бы предпочел использовать 'poll', который я считаю более современным, чем' select' –

Смежные вопросы