From: Helge Norberg Date: Fri, 9 Sep 2016 14:47:29 +0000 (+0200) Subject: #467 [framerate_producer] Fixed nb_frames() and frame_number() calculation X-Git-Tag: 2.1.0_Beta1~59 X-Git-Url: https://git.sesse.net/?p=casparcg;a=commitdiff_plain;h=829fcd07d635222421a83387e279c50bd9d81320 #467 [framerate_producer] Fixed nb_frames() and frame_number() calculation --- 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 diff --git a/core/producer/transition/transition_producer.cpp b/core/producer/transition/transition_producer.cpp index 34a5ef1bc..590aca44d 100644 --- a/core/producer/transition/transition_producer.cpp +++ b/core/producer/transition/transition_producer.cpp @@ -127,6 +127,11 @@ public: return dest_producer_->nb_frames(); } + uint32_t frame_number() const override + { + return dest_producer_->frame_number(); + } + std::wstring print() const override { return L"transition[" + source_producer_->print() + L"=>" + dest_producer_->print() + L"]";