2 Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef DCPOMATIC_LIB_DECODED_H
21 #define DCPOMATIC_LIB_DECODED_H
23 #include <dcp/subtitle_string.h>
37 virtual ~Decoded () {}
39 virtual void set_dcp_times (VideoFrame, AudioFrame, FrameRateChange, DCPTime) = 0;
44 /** One frame of video from a VideoDecoder */
45 class DecodedVideo : public Decoded
54 DecodedVideo (boost::shared_ptr<const Image> im, Eyes e, bool s, VideoFrame f)
61 void set_dcp_times (VideoFrame video_frame_rate, AudioFrame, FrameRateChange frc, DCPTime offset)
63 dcp_time = frame * TIME_HZ * frc.factor() / video_frame_rate + offset;
66 boost::shared_ptr<const Image> image;
72 class DecodedAudio : public Decoded
75 DecodedAudio (boost::shared_ptr<const AudioBuffers> d, AudioFrame f)
80 void set_dcp_times (VideoFrame, AudioFrame audio_frame_rate, FrameRateChange, DCPTime offset)
82 dcp_time = frame * TIME_HZ / audio_frame_rate + offset;
85 boost::shared_ptr<const AudioBuffers> data;
89 class DecodedImageSubtitle : public Decoded
92 DecodedImageSubtitle ()
98 DecodedImageSubtitle (boost::shared_ptr<Image> im, dcpomatic::Rect<double> r, ContentTime f, ContentTime t)
102 , content_time_to (t)
106 void set_dcp_times (VideoFrame, AudioFrame, FrameRateChange frc, DCPTime offset)
108 dcp_time = rint (content_time / frc.speed_up) + offset;
109 dcp_time_to = rint (content_time_to / frc.speed_up) + offset;
112 boost::shared_ptr<Image> image;
113 dcpomatic::Rect<double> rect;
114 ContentTime content_time;
115 ContentTime content_time_to;
119 class DecodedTextSubtitle : public Decoded
122 DecodedTextSubtitle ()
126 DecodedTextSubtitle (std::list<dcp::SubtitleString> s)
130 void set_dcp_times (VideoFrame, AudioFrame, FrameRateChange frc, DCPTime offset)
136 /* Assuming that all subs are at the same time */
137 dcp_time = rint (subs.front().in().to_ticks() * 4 * TIME_HZ / frc.speed_up) + offset;
138 dcp_time_to = rint (subs.front().out().to_ticks() * 4 * TIME_HZ / frc.speed_up) + offset;
141 std::list<dcp::SubtitleString> subs;