From 821b556975c44bcb2c8607fc26462b7b79db2fe6 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 3 Jan 2014 00:47:32 +0000 Subject: Various fix-ups. --- src/lib/decoded.h | 52 +++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) (limited to 'src/lib/decoded.h') diff --git a/src/lib/decoded.h b/src/lib/decoded.h index 1de2ff79e..ff32e43f2 100644 --- a/src/lib/decoded.h +++ b/src/lib/decoded.h @@ -22,6 +22,7 @@ #include "types.h" #include "rect.h" +#include "util.h" class Image; @@ -29,20 +30,13 @@ class Decoded { public: Decoded () - : content_time (0) - , dcp_time (0) - {} - - Decoded (DCPTime ct) - : content_time (ct) - , dcp_time (0) + : dcp_time (0) {} virtual ~Decoded () {} - virtual void set_dcp_times (float speed_up, DCPTime offset) = 0; + virtual void set_dcp_times (VideoFrame, AudioFrame, FrameRateChange, DCPTime) = 0; - ContentTime content_time; DCPTime dcp_time; }; @@ -53,62 +47,70 @@ public: DecodedVideo () : eyes (EYES_BOTH) , same (false) + , frame (0) {} - DecodedVideo (boost::shared_ptr im, Eyes e, bool s, ContentTime ct) - : Decoded (ct) - , image (im) + DecodedVideo (boost::shared_ptr im, Eyes e, bool s, VideoFrame f) + : image (im) , eyes (e) , same (s) + , frame (f) {} - void set_dcp_times (float speed_up, DCPTime offset) { - dcp_time = rint (content_time / speed_up) + offset; + void set_dcp_times (VideoFrame video_frame_rate, AudioFrame, FrameRateChange frc, DCPTime offset) + { + dcp_time = frame * TIME_HZ * frc.factor() / video_frame_rate + offset; } boost::shared_ptr image; Eyes eyes; bool same; + VideoFrame frame; }; class DecodedAudio : public Decoded { public: - DecodedAudio (boost::shared_ptr d, ContentTime ct) - : Decoded (ct) - , data (d) + DecodedAudio (boost::shared_ptr d, AudioFrame f) + : data (d) + , frame (f) {} - void set_dcp_times (float speed_up, DCPTime offset) { - dcp_time = rint (content_time / speed_up) + offset; + void set_dcp_times (VideoFrame, AudioFrame audio_frame_rate, FrameRateChange, DCPTime offset) + { + dcp_time = frame * TIME_HZ / audio_frame_rate + offset; } boost::shared_ptr data; + AudioFrame frame; }; class DecodedSubtitle : public Decoded { public: DecodedSubtitle () - : content_time_to (0) + : content_time (0) + , content_time_to (0) , dcp_time_to (0) {} DecodedSubtitle (boost::shared_ptr im, dcpomatic::Rect r, ContentTime f, ContentTime t) - : Decoded (f) - , image (im) + : image (im) , rect (r) + , content_time (f) , content_time_to (t) , dcp_time_to (0) {} - void set_dcp_times (float speed_up, DCPTime offset) { - dcp_time = rint (content_time / speed_up) + offset; - dcp_time_to = rint (content_time_to / speed_up) + offset; + void set_dcp_times (VideoFrame, AudioFrame, FrameRateChange frc, DCPTime offset) + { + dcp_time = rint (content_time / frc.speed_up) + offset; + dcp_time_to = rint (content_time_to / frc.speed_up) + offset; } boost::shared_ptr image; dcpomatic::Rect rect; + ContentTime content_time; ContentTime content_time_to; DCPTime dcp_time_to; }; -- cgit v1.2.3