Некорректный pts при декодировании видеопотока
Пробовал запускать разные видосы для тестирования вывода. И вот наткнулся на такой avi-контейнер, который выдаёт невалидный pts. Он, через кадр, равен либо номеру кадра, либо просто мусорному числу.
При этом avformat_find_stream_info и последующий av_dump_format находит и выводит средний FPS. Понятно, что он, видимо, ориентируется просто по общей продолжительности потока и примерному количеству кадров. Но, скажем, тот же VLC Player видос то проигрывает на нормальой скорости.
Вопрос: Это нормальная ситуация? Я должен ориентироваться на средний FPS, если кадры имеют некорректный pts? И как тогда лучше определить, что у потока невалидные pts?
Вот логи:
Frame: B (144), pts 144, dts 144, keyframe 0, coded 144, display 0
PixFmt: from yuv420p to rgb24 FPS: cur 59.94, avg 64.81
Packet: buf 0x56425ca77200, pts 144, dts 144, data 0x56425cab9a80, size 7485, dur 1, pos 1112544
Original video frame
uint8_t* data[]: 0x56425c70c740, 0x56425c7547c0, 0x56425c766840, (nil), (nil), (nil), (nil), (nil)
int linesize[]: 768, 384, 384, 0, 0, 0, 0, 0
Converted video frame
uint8_t* data[]: 0x7fe1ed9dd040, (nil), (nil), (nil), (nil), (nil), (nil), (nil)
int linesize[]: 2112, 0, 0, 0, 0, 0, 0, 0
Frame: P (145), pts -9223372036854775808, dts 145, keyframe 0, coded 143, display 0
PixFmt: from yuv420p to rgb24 FPS: cur 59.94, avg 64.81
Packet: buf 0x56425caa61c0, pts -9223372036854775808, dts 145, data 0x56425cabc4c0, size 43497, dur 1, pos 1122382
Original video frame
uint8_t* data[]: 0x56425c63fa40, 0x56425c687ac0, 0x56425c699b40, (nil), (nil), (nil), (nil), (nil)
int linesize[]: 768, 384, 384, 0, 0, 0, 0, 0
Converted video frame
uint8_t* data[]: 0x7fe1ed9dd040, (nil), (nil), (nil), (nil), (nil), (nil), (nil)
int linesize[]: 2112, 0, 0, 0, 0, 0, 0, 0
PS: В логах FPS выдаёт просто на максимальной скорости, с которой его декодирует и выводит через SDL.
PPS: И ещё вопрос. А бывают видосы со значительно неравномерным выводом кадров. Скажем, если на одном интервале будет 25 FPS, а на другом 50 FPS.