2015-06-21 Carl Hetherington <cth@carlh.net>
+ * Prevent DCP creation if the project is set up to request
+ non-burnt-in subtitles with text-subtitle content (#606).
+
* Fix status message appearance on OS X (#615).
2015-06-19 Carl Hetherington <cth@carlh.net>
std::string identifier () const;
/* SubtitleContent */
- bool has_subtitles () const {
+
+ bool has_text_subtitles () const {
boost::mutex::scoped_lock lm (_mutex);
return _has_subtitles;
}
+ bool has_image_subtitles () const {
+ return false;
+ }
+
boost::filesystem::path directory () const;
bool encrypted () const {
DCPTime full_length () const;
/* SubtitleContent */
- bool has_subtitles () const {
+
+ bool has_text_subtitles () const {
return true;
}
+ bool has_image_subtitles () const {
+ return false;
+ }
+
private:
DCPTime _length;
};
}
bool
-FFmpegContent::has_subtitles () const
+FFmpegContent::has_text_subtitles () const
+{
+ return false;
+}
+
+bool
+FFmpegContent::has_image_subtitles () const
{
return !subtitle_streams().empty ();
}
std::vector<AudioStreamPtr> audio_streams () const;
/* SubtitleContent */
- bool has_subtitles () const;
+ bool has_text_subtitles () const;
+ bool has_image_subtitles () const;
void set_filters (std::vector<Filter const *> const &);
void
Film::make_dcp ()
{
- set_isdcf_date_today ();
-
if (dcp_name().find ("/") != string::npos) {
throw BadSettingError (_("name"), _("cannot contain slashes"));
}
+ bool must_burn = false;
+ ContentList cl = content ();
+ BOOST_FOREACH (shared_ptr<Content> c, cl) {
+ shared_ptr<SubtitleContent> sc = dynamic_pointer_cast<SubtitleContent> (c);
+ if (sc && sc->has_image_subtitles() && sc->use_subtitles() && !burn_subtitles()) {
+ must_burn = true;
+ }
+ }
+
+ if (must_burn) {
+ throw EncodeError (_("this project has content with image-based subtitles, which this version of DCP-o-matic cannot include as separate DCP subtitles. To use subtitles with this project you must burn them into the image (tick the box on the DCP Video tab)."));
+ }
+
+ set_isdcf_date_today ();
+
environment_info (log ());
- ContentList cl = content ();
for (ContentList::const_iterator i = cl.begin(); i != cl.end(); ++i) {
LOG_GENERAL ("Content: %1", (*i)->technical_summary());
}
DCPTime full_length () const;
/* SubtitleContent */
- bool has_subtitles () const {
+
+ bool has_text_subtitles () const {
return true;
}
+ bool has_image_subtitles () const {
+ return false;
+ }
+
static std::string const font_id;
private:
signal_changed (SubtitleContentProperty::FONTS);
}
+bool
+SubtitleContent::has_subtitles () const
+{
+ return has_text_subtitles() || has_image_subtitles();
+}
void as_xml (xmlpp::Node *) const;
std::string identifier () const;
- virtual bool has_subtitles () const = 0;
+ bool has_subtitles () const;
+ virtual bool has_text_subtitles () const = 0;
+ virtual bool has_image_subtitles () const = 0;
void add_font (boost::shared_ptr<Font> font);