X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=core%2Fproducer%2Fframerate%2Fframerate_producer.cpp;h=dc40ea97472dd36b89318785fccdb84539981e8b;hb=829fcd07d635222421a83387e279c50bd9d81320;hp=031e99524fba50945a99ff7190e45407c213ca6b;hpb=9e6b4e8c7b0119f334b66966f0ea8ab84f288d4b;p=casparcg diff --git a/core/producer/framerate/framerate_producer.cpp b/core/producer/framerate/framerate_producer.cpp index 031e99524..dc40ea974 100644 --- a/core/producer/framerate/framerate_producer.cpp +++ b/core/producer/framerate/framerate_producer.cpp @@ -351,12 +351,18 @@ public: uint32_t nb_frames() const override { - return static_cast(source_->nb_frames() * boost::rational_cast(1 / get_speed() / (output_repeat_ != 0 ? 2 : 1))); + auto source_nb_frames = source_->nb_frames(); + auto multiple = boost::rational_cast(1 / get_speed() * (output_repeat_ != 0 ? 2 : 1)); + + return static_cast(source_nb_frames * multiple); } uint32_t frame_number() const override { - return static_cast(source_->frame_number() * boost::rational_cast(1 / get_speed() / (output_repeat_ != 0 ? 2 : 1))); + auto source_frame_number = source_->frame_number() - 1; // next frame already received + auto multiple = boost::rational_cast(1 / get_speed() * (output_repeat_ != 0 ? 2 : 1)); + + return static_cast(source_frame_number * multiple); } constraints& pixel_constraints() override