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
36 virtual ~Decoded () {}
38 virtual void set_dcp_times (VideoFrame, AudioFrame, FrameRateChange, DCPTime) = 0;
43 /** One frame of video from a VideoDecoder */
44 class DecodedVideo : public Decoded
53 DecodedVideo (boost::shared_ptr<const Image> im, Eyes e, bool s, VideoFrame f)
60 void set_dcp_times (VideoFrame video_frame_rate, AudioFrame, FrameRateChange frc, DCPTime offset)
62 dcp_time = frame * TIME_HZ * frc.factor() / video_frame_rate + offset;
65 boost::shared_ptr<const Image> image;
71 class DecodedAudio : public Decoded
74 DecodedAudio (boost::shared_ptr<const AudioBuffers> d, AudioFrame f)
79 void set_dcp_times (VideoFrame, AudioFrame audio_frame_rate, FrameRateChange, DCPTime offset)
81 dcp_time = frame * TIME_HZ / audio_frame_rate + offset;
84 boost::shared_ptr<const AudioBuffers> data;
88 class DecodedSubtitle : public Decoded
97 DecodedSubtitle (boost::shared_ptr<Image> im, dcpomatic::Rect<double> r, ContentTime f, ContentTime t)
101 , content_time_to (t)
105 void set_dcp_times (VideoFrame, AudioFrame, FrameRateChange frc, DCPTime offset)
107 dcp_time = rint (content_time / frc.speed_up) + offset;
108 dcp_time_to = rint (content_time_to / frc.speed_up) + offset;
111 boost::shared_ptr<Image> image;
112 dcpomatic::Rect<double> rect;
113 ContentTime content_time;
114 ContentTime content_time_to;