X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fpiece.h;h=60adb23e7d7a13684a88b3d103ed627daa153862;hb=refs%2Fheads%2F1771-resample-glitches-take3;hp=976409381d3a8744c69f5f14e53f67a5ca688e08;hpb=b6c780d3107557d452c6612d715d01e2be52dbda;p=dcpomatic.git diff --git a/src/lib/piece.h b/src/lib/piece.h index 976409381..60adb23e7 100644 --- a/src/lib/piece.h +++ b/src/lib/piece.h @@ -1,43 +1,110 @@ /* - Copyright (C) 2013-2014 Carl Hetherington + Copyright (C) 2013-2020 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ #ifndef DCPOMATIC_PIECE_H #define DCPOMATIC_PIECE_H + +#include "audio_stream.h" +#include "colour_conversion.h" +#include "content_atmos.h" +#include "content_audio.h" +#include "content_text.h" +#include "content_video.h" +#include "font.h" +#include "dcpomatic_time.h" +#include "frame_rate_change.h" #include "types.h" -#include "video_content.h" + class Content; class Decoder; +struct check_reuse_old_data_test; + class Piece { public: - Piece (boost::shared_ptr c, boost::shared_ptr d, FrameRateChange f) - : content (c) - , decoder (d) - , frc (f) - {} - - boost::shared_ptr content; - boost::shared_ptr decoder; - FrameRateChange frc; + Piece ( + boost::shared_ptr film, + ContentList content, + bool fast, + bool tolerant, + bool ignore_video, + bool ignore_audio, + bool ignore_text, + bool play_referenced, + boost::optional dcp_decode_reduction + ); + + Piece (boost::shared_ptr c, boost::shared_ptr d, FrameRateChange f); + + void update_pull_to (dcpomatic::DCPTime& pull_to) const; + void set_last_push_end (AudioStreamPtr stream, dcpomatic::DCPTime last_push_end); + boost::optional decoder_position (boost::shared_ptr film); + bool has_text () const; + bool reference_audio () const; + + void pass (); + void seek (boost::shared_ptr film, dcpomatic::DCPTime time, bool accurate); + + dcpomatic::DCPTime position () const; + dcpomatic::DCPTime end (boost::shared_ptr film) const; + FrameRateChange frame_rate_change () const { + return _frc; + } + + bool video_use () const; + Crop video_crop () const; + boost::optional video_fade (boost::shared_ptr film, Frame) const; + boost::optional video_colour_conversion () const; + VideoRange video_range () const; + dcp::Size video_scaled_size (dcp::Size container_size) const; + + int audio_resampled_frame_rate (boost::shared_ptr film) const; + double audio_gain () const; + + dcpomatic::DCPTime content_video_to_dcp (Frame f) const; + dcpomatic::DCPTime resampled_audio_to_dcp (boost::shared_ptr film, Frame f) const; + dcpomatic::ContentTime dcp_to_content_time (boost::shared_ptr film, dcpomatic::DCPTime t) const; + dcpomatic::DCPTime content_time_to_dcp (dcpomatic::ContentTime t) const; + boost::optional content_time_to_dcp (boost::shared_ptr content, dcpomatic::ContentTime t) const; + + void add_fonts (std::list >& fonts) const; + + boost::signals2::signal Video; + boost::signals2::signal Audio; + boost::signals2::signal, ContentBitmapText)> BitmapTextStart; + boost::signals2::signal, ContentStringText)> PlainTextStart; + boost::signals2::signal, dcpomatic::ContentTime)> TextStop; + boost::signals2::signal Atmos; + +private: + friend struct ::check_reuse_old_data_test; + + std::vector > _content; + std::vector > _decoder; + FrameRateChange _frc; + bool _done; + + std::map _stream_last_push_end; }; #endif