ffmpegdecoder: offset target timestamp by start timestamp

Fixes #2054
This commit is contained in:
itsmattkc
2022-10-10 18:54:45 -07:00
parent bb63b6968c
commit 4f6dd6aeb1
2 changed files with 4 additions and 5 deletions
-3
View File
@@ -294,9 +294,6 @@ protected:
return stream_;
}
static int64_t GetTimeInTimebaseUnits(const rational& time, const rational& timebase, int64_t start_time);
static rational GetTimestampInTimeUnits(int64_t time, const rational& timebase, int64_t start_time);
virtual rational GetAudioStartOffset() const { return 0; }
signals:
+4 -2
View File
@@ -798,13 +798,15 @@ void FFmpegDecoder::ClearFrameCache()
AVFramePtr FFmpegDecoder::RetrieveFrame(const rational& time, VideoParams::Interlacing interlacing, CancelAtom *cancelled)
{
int64_t target_ts = GetTimeInTimebaseUnits(time, instance_.avstream()->time_base, instance_.avstream()->start_time);
int64_t target_ts = Timecode::time_to_timestamp(time, instance_.avstream()->time_base);
if (interlacing != VideoParams::kInterlaceNone && !IsPixelFormatGLSLCompatible(static_cast<AVPixelFormat>(instance_.avstream()->codecpar->format))) {
target_ts *= 2;
}
const int64_t min_seek = -instance_.avstream()->start_time;
target_ts += instance_.avstream()->start_time;
const int64_t min_seek = 0;
int64_t seek_ts = std::max(min_seek, target_ts - MaximumQueueSize());
bool still_seeking = false;