From 829fcd07d635222421a83387e279c50bd9d81320 Mon Sep 17 00:00:00 2001 From: Helge Norberg Date: Fri, 9 Sep 2016 16:47:29 +0200 Subject: [PATCH] #467 [framerate_producer] Fixed nb_frames() and frame_number() calculation --- core/producer/framerate/framerate_producer.cpp | 10 ++++++++-- core/producer/transition/transition_producer.cpp | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) 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"]"; -- 2.39.2