Флаг "re" устанавливает флажок InputFile-> rate_emu. Его появление можно увидеть в файле ffmpeg_opt.c.
InputFile - это локальная структура для ffmpeg.h, которая указывает, что флаг «re» не используется ни в libavcodec, ни в libavformat.
В соответствии, как использовать эту функциональность, если вы смотрите в ffmpeg_opt.c
{ "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
OPT_INPUT, { .off = OFFSET(rate_emu) },
"read input at native frame rate", "" },
, а затем посмотреть в
ffmpeg.c
static int get_input_packet(InputFile *f, AVPacket *pkt)
{
if (f->rate_emu) {
int i;
for (i = 0; i < f->nb_streams; i++) {
InputStream *ist = input_streams[f->ist_index + i];
int64_t pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE);
int64_t now = av_gettime_relative() - ist->start;
if (pts > now)
return AVERROR(EAGAIN);
}
}
#if HAVE_PTHREADS
if (nb_input_files > 1)
return get_input_packet_mt(f, pkt);
#endif
return av_read_frame(f->ctx, pkt);
}
Если "rate_emu" флаг установлен, get_input_packet выполняет масштабирование pts и проверяет, имеет ли его время считывание фрейма. Если время правильное, оно считывает кадр else, оно возвращает пустую передачу. поэтому он чувствует, что мы получаем его на родной частоте кадров. если rate_emu не установлен, код переходит непосредственно к «av_read_frame