diff --git a/src/torchcodec/_core/SingleStreamDecoder.cpp b/src/torchcodec/_core/SingleStreamDecoder.cpp index 2fbc111c1..cd117bf64 100644 --- a/src/torchcodec/_core/SingleStreamDecoder.cpp +++ b/src/torchcodec/_core/SingleStreamDecoder.cpp @@ -1569,7 +1569,16 @@ std::optional SingleStreamDecoder::getNumFrames( case SeekMode::exact: return streamMetadata.numFramesFromContent.value(); case SeekMode::approximate: { - return streamMetadata.numFramesFromHeader; + if (streamMetadata.numFramesFromHeader.has_value()) { + return streamMetadata.numFramesFromHeader; + } else if ( + streamMetadata.averageFpsFromHeader.has_value() && + streamMetadata.durationSecondsFromHeader.has_value()) { + return static_cast(std::lround( + streamMetadata.averageFpsFromHeader.value() * + streamMetadata.durationSecondsFromHeader.value())); + } + return std::nullopt; } default: TORCH_CHECK(false, "Unknown SeekMode");