Stack Overflow на русском Asked by ZeusBios on February 28, 2021
есть вектор, который содержит кадры и временные метки, соответствующие кадру:
std::vector<std::pair<QByteArray, int64_t>> rawData;
Кадры это просто QImage
.
Временные метки получаются так:
const int64_t timestamp = QDateTime::currentMSecsSinceEpoch();
Настройка контекста:
pCodecCxt->time_base = AVRational{1, m_fps};
pCodecCxt->framerate = AVRational{m_fps, 1};
как правильно вычислить с учетом временных меток кадра?:
pkt.pts = ?;
pkt.dts = ?;
pkt.duration = m_currentFrameTimestamp - m_previousFrameTimestamp;
UPD:
Итак, зная метки кадров, я могу вычислять продолжительность кадра и начало каждого кадра.
int64_t frameTime;
int64_t frameDuration;
int count = m_frameCounter++;
frameDuration = m_currentFrameTimestamp - m_previousFrameTimestamp;
frameTime = count * frameDuration;
pkt.pts = frameTime;
pkt.dts = pkt.pts;
pkt.duration = frameDuration;
Остался вопрос по поводу настройки контекста tame_base. Так как временные метки в миллисекундах, то видимо должно быть так:
pCodecCxt->time_base = AVRational{1000, m_fps};
UPD:
Это по прежнему не работает.
int64_t frameTime;
int64_t frameDuration;
int count = m_frameCounter;
frameDuration = (m_currentFrameTimestamp - m_previousFrameTimestamp) / (1000 / 60);
frameTime = count * frameDuration;
pkt.pts = frameTime;
pkt.dts = pkt.pts;
pkt.duration = frameDuration;
time_base - задает базовую единицу измерения времени как дробь, где в числителе стоит количество тактов, а в знаменателе - частота тактового генератора (например 2997);
pts - Presentation Time Stamp - время показа кадра в базовых единицах;
dts - Decoding Time Stamp - время декодирования опорного кадра (который требуется для отображения текущего) в базовых единицах; может совпадать с pts если текущий кадр - опорный;
duration - продолжительность отображения кадра в базовых единицах;
Correct answer by user7860670 on February 28, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP