Skip to content

Commit 691e4fe

Browse files
committed
StreamTranscoder: check end of positive offset based on number of generated frames
1 parent c06898b commit 691e4fe

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/AvTranscoder/transcoder/StreamTranscoder.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -588,15 +588,6 @@ void StreamTranscoder::preProcessCodecLatency()
588588
wasARewrapCase = true;
589589
}
590590

591-
if(_offset > 0) {
592-
const double fps = 1.0 * _outputEncoder->getCodec().getAVCodecContext().time_base.den /
593-
(_outputEncoder->getCodec().getAVCodecContext().time_base.num * _outputEncoder->getCodec().getAVCodecContext().ticks_per_frame);
594-
const double frame_duration = 1.0 / fps;
595-
const double output_latency_duration = frame_duration * (latency - 1);
596-
LOG_WARN("Compensate for offset with codec latency by " << output_latency_duration << " seconds (fps=" << fps << ", latency=" << latency << ")");
597-
_offset -= output_latency_duration;
598-
}
599-
600591
while((latency--) > 0)
601592
{
602593
processFrame();
@@ -626,7 +617,20 @@ bool StreamTranscoder::processFrame()
626617
// Manage offset
627618
if(_offset > 0)
628619
{
629-
const bool endOfOffset = _outputStream->getStreamDuration() >= _offset;
620+
bool endOfOffset = false;
621+
if(_currentDecoder == _generators.at(0))
622+
{
623+
const double fps = 1.0 * _outputEncoder->getCodec().getAVCodecContext().time_base.den /
624+
(_outputEncoder->getCodec().getAVCodecContext().time_base.num * _outputEncoder->getCodec().getAVCodecContext().ticks_per_frame);
625+
const double frame_duration = 1.0 / fps;
626+
const double generated_duration = _currentDecoder->getNbDecodedFrames() * frame_duration;
627+
endOfOffset = generated_duration >= _offset;
628+
}
629+
else
630+
{
631+
endOfOffset = _outputStream->getStreamDuration() >= _offset;
632+
}
633+
630634
if(endOfOffset)
631635
{
632636
LOG_INFO("End of positive offset")

0 commit comments

Comments
 (0)