X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsubrip_content.cc;h=ba081624ac6ba166d0152ba2d5f8e3e0921823ff;hb=b299bc81a265d1934bab2c4bce2c8aa48452bbb0;hp=14cb50b86718eb3a25e0a3516a5cea9f823261e1;hpb=5dc2dbdb6639f8d617a40209ad603d2a38f9df2a;p=dcpomatic.git diff --git a/src/lib/subrip_content.cc b/src/lib/subrip_content.cc index 14cb50b86..ba081624a 100644 --- a/src/lib/subrip_content.cc +++ b/src/lib/subrip_content.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2015 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,16 +21,20 @@ #include "util.h" #include "subrip.h" #include "film.h" -#include +#include "font.h" +#include "raw_convert.h" +#include +#include #include "i18n.h" using std::string; using std::cout; -using dcp::raw_convert; using boost::shared_ptr; using boost::lexical_cast; +std::string const SubRipContent::font_id = "font"; + SubRipContent::SubRipContent (shared_ptr film, boost::filesystem::path path) : Content (film, path) , SubtitleContent (film, path) @@ -41,7 +45,8 @@ SubRipContent::SubRipContent (shared_ptr film, boost::filesystem::pa SubRipContent::SubRipContent (shared_ptr film, cxml::ConstNodePtr node, int version) : Content (film, node) , SubtitleContent (film, node, version) - , _length (node->number_child ("Length")) + , _length (node->number_child ("Length")) + , _frame_rate (node->optional_number_child("SubtitleFrameRate")) { } @@ -52,13 +57,12 @@ SubRipContent::examine (boost::shared_ptr job) Content::examine (job); SubRip s (shared_from_this ()); - shared_ptr film = _film.lock (); - assert (film); - - DCPTime len (s.length (), film->active_frame_rate_change (position ())); + /* Default to turning these subtitles on */ + set_use_subtitles (true); boost::mutex::scoped_lock lm (_mutex); - _length = len; + _length = s.length (); + add_font (shared_ptr (new Font (font_id))); } string @@ -73,12 +77,6 @@ SubRipContent::technical_summary () const return Content::technical_summary() + " - " + _("SubRip subtitles"); } -string -SubRipContent::information () const -{ - -} - void SubRipContent::as_xml (xmlpp::Node* node) const { @@ -91,8 +89,37 @@ SubRipContent::as_xml (xmlpp::Node* node) const DCPTime SubRipContent::full_length () const { - /* XXX: this assumes that the timing of the SubRip file is appropriate - for the DCP's frame rate. + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + FrameRateChange const frc (subtitle_video_frame_rate(), film->video_frame_rate ()); + return DCPTime (_length, frc); +} + +void +SubRipContent::set_subtitle_video_frame_rate (int r) +{ + { + boost::mutex::scoped_lock lm (_mutex); + _frame_rate = r; + } + + signal_changed (SubtitleContentProperty::SUBTITLE_VIDEO_FRAME_RATE); +} + +double +SubRipContent::subtitle_video_frame_rate () const +{ + { + boost::mutex::scoped_lock lm (_mutex); + if (_frame_rate) { + return _frame_rate.get (); + } + } + + /* No frame rate specified, so assume this content has been + prepared for any concurrent video content. */ - return _length; + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + return film->active_frame_rate_change(position()).source; }