X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Ffilm.cc;h=6b3625d9e727d34faec4effa67da7304aa1d832f;hp=b80962ead59c47a5bb11f64f5aefae34192d66a9;hb=3828baf56467224f5d44049bf1e7a7ed11f43a05;hpb=31f491c0f13d23506fd810f61982976a9a60e44d diff --git a/src/lib/film.cc b/src/lib/film.cc index b80962ead..6b3625d9e 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -1,19 +1,20 @@ /* Copyright (C) 2012-2016 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 . */ @@ -245,13 +246,12 @@ Film::audio_analysis_path (shared_ptr playlist) const MD5Digester digester; BOOST_FOREACH (shared_ptr i, playlist->content ()) { - shared_ptr ac = dynamic_pointer_cast (i); - if (!ac) { + if (!i->audio) { continue; } - digester.add (ac->digest ()); - digester.add (ac->audio_mapping().digest ()); + digester.add (i->digest ()); + digester.add (i->audio->mapping().digest ()); if (playlist->content().size() != 1) { /* Analyses should be considered equal regardless of gain if they were made from just one piece of content. This @@ -259,7 +259,7 @@ Film::audio_analysis_path (shared_ptr playlist) const analysis at the plotting stage rather than having to recompute it. */ - digester.add (ac->audio_gain ()); + digester.add (i->audio->gain ()); } } @@ -505,9 +505,8 @@ Film::mapped_audio_channels () const } } else { BOOST_FOREACH (shared_ptr i, content ()) { - shared_ptr ac = dynamic_pointer_cast (i); - if (ac) { - list c = ac->audio_mapping().mapped_output_channels (); + if (i->audio) { + list c = i->audio->mapping().mapped_output_channels (); copy (c.begin(), c.end(), back_inserter (mapped)); } } @@ -617,13 +616,12 @@ Film::isdcf_name (bool if_created_now) const if (dcp_content_type() && dcp_content_type()->libdcp_kind() != dcp::TRAILER) { Ratio const * content_ratio = 0; BOOST_FOREACH (shared_ptr i, content ()) { - shared_ptr vc = dynamic_pointer_cast (i); - if (vc) { + if (i->video) { /* Here's the first piece of video content */ - if (vc->scale().ratio ()) { - content_ratio = vc->scale().ratio (); + if (i->video->scale().ratio ()) { + content_ratio = i->video->scale().ratio (); } else { - content_ratio = Ratio::from_ratio (vc->video_size().ratio ()); + content_ratio = Ratio::from_ratio (i->video->size().ratio ()); } break; } @@ -638,20 +636,19 @@ Film::isdcf_name (bool if_created_now) const d << "_" << dm.audio_language; if (!dm.subtitle_language.empty()) { - bool burnt_in = false; + bool burnt_in = true; BOOST_FOREACH (shared_ptr i, content ()) { - shared_ptr sc = dynamic_pointer_cast (i); - if (!sc) { + if (!i->subtitle) { continue; } - if (sc->use_subtitles() && sc->burn_subtitles()) { - burnt_in = true; + if (i->subtitle->use() && !i->subtitle->burn()) { + burnt_in = false; } } string language = dm.subtitle_language; - if (burnt_in) { + if (burnt_in && language != "XX") { transform (language.begin(), language.end(), language.begin(), ::tolower); } else { transform (language.begin(), language.end(), language.begin(), ::toupper); @@ -891,7 +888,7 @@ Film::signal_changed (Property p) switch (p) { case Film::CONTENT: - set_video_frame_rate (_playlist->best_dcp_frame_rate ()); + set_video_frame_rate (_playlist->best_video_frame_rate ()); break; case Film::VIDEO_FRAME_RATE: case Film::SEQUENCE: @@ -1034,7 +1031,7 @@ Film::maybe_add_content (weak_ptr j, weak_ptr c) } add_content (content); - if (Config::instance()->automatic_audio_analysis() && dynamic_pointer_cast (content)) { + if (Config::instance()->automatic_audio_analysis() && content->audio) { shared_ptr playlist (new Playlist); playlist->add (content); boost::signals2::connection c; @@ -1049,9 +1046,9 @@ void Film::add_content (shared_ptr c) { /* Add {video,subtitle} content after any existing {video,subtitle} content */ - if (dynamic_pointer_cast (c)) { + if (c->video) { c->set_position (_playlist->video_end ()); - } else if (dynamic_pointer_cast (c)) { + } else if (c->subtitle) { c->set_position (_playlist->subtitle_end ()); } @@ -1086,7 +1083,7 @@ Film::length () const int Film::best_video_frame_rate () const { - return _playlist->best_dcp_frame_rate (); + return _playlist->best_video_frame_rate (); } FrameRateChange @@ -1100,9 +1097,9 @@ Film::playlist_content_changed (weak_ptr c, int p, bool frequent) { _dirty = true; - if (p == VideoContentProperty::VIDEO_FRAME_RATE) { - set_video_frame_rate (_playlist->best_dcp_frame_rate ()); - } else if (p == AudioContentProperty::AUDIO_STREAMS) { + if (p == ContentProperty::VIDEO_FRAME_RATE) { + set_video_frame_rate (_playlist->best_video_frame_rate ()); + } else if (p == AudioContentProperty::STREAMS) { signal_changed (NAME); } @@ -1126,8 +1123,7 @@ int Film::audio_frame_rate () const { BOOST_FOREACH (shared_ptr i, content ()) { - shared_ptr a = dynamic_pointer_cast (i); - if (a && a->has_rate_above_48k ()) { + if (i->audio && i->audio->has_rate_above_48k ()) { return 96000; } } @@ -1185,7 +1181,7 @@ Film::make_kdm ( } return dcp::DecryptedKDM ( - cpl, key(), from, until, "DCP-o-matic", cpl->content_title_text(), dcp::LocalTime().as_string() + cpl, key(), from, until, cpl->content_title_text(), cpl->content_title_text(), dcp::LocalTime().as_string() ).encrypt (signer, recipient, trusted_devices, formulation); } @@ -1272,9 +1268,8 @@ Film::subtitle_language () const ContentList cl = content (); BOOST_FOREACH (shared_ptr& c, cl) { - shared_ptr sc = dynamic_pointer_cast (c); - if (sc) { - languages.insert (sc->subtitle_language ()); + if (c->subtitle) { + languages.insert (c->subtitle->language ()); } } @@ -1377,18 +1372,17 @@ Film::reels () const case REELTYPE_BY_VIDEO_CONTENT: { optional last_split; - shared_ptr last_video; + shared_ptr last_video; ContentList cl = content (); BOOST_FOREACH (shared_ptr c, content ()) { - shared_ptr v = dynamic_pointer_cast (c); - if (v) { - BOOST_FOREACH (DCPTime t, v->reel_split_points()) { + if (c->video) { + BOOST_FOREACH (DCPTime t, c->reel_split_points()) { if (last_split) { p.push_back (DCPTimePeriod (last_split.get(), t)); } last_split = t; } - last_video = v; + last_video = c; } }