X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fffmpeg_content.cc;h=20fe7776bd9aafb80ca12c0fbd035875c0551aaf;hb=213afdc4e9399e3f2aaea3df54ab79535d43045e;hp=515b58cd0fbaa82eac39ec95d2194525b2f39406;hpb=5799460dc38bafa1da1ce9f7bf43621d3fadf442;p=dcpomatic.git diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index 515b58cd0..20fe7776b 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -19,22 +19,22 @@ */ -#include "ffmpeg_content.h" -#include "video_content.h" #include "audio_content.h" -#include "ffmpeg_examiner.h" -#include "ffmpeg_subtitle_stream.h" -#include "ffmpeg_audio_stream.h" #include "compose.hpp" -#include "job.h" -#include "util.h" -#include "filter.h" -#include "film.h" -#include "log.h" #include "config.h" +#include "constants.h" #include "exceptions.h" +#include "ffmpeg_audio_stream.h" +#include "ffmpeg_content.h" +#include "ffmpeg_examiner.h" +#include "ffmpeg_subtitle_stream.h" +#include "film.h" +#include "filter.h" #include "frame_rate_change.h" +#include "job.h" +#include "log.h" #include "text_content.h" +#include "video_content.h" #include #include extern "C" { @@ -115,9 +115,8 @@ FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list } for (auto i: node->node_children("Filter")) { - Filter const * f = Filter::from_id(i->content()); - if (f) { - _filters.push_back (f); + if (auto filter = Filter::from_id(i->content())) { + _filters.push_back(*filter); } else { notes.push_back (String::compose (_("DCP-o-matic no longer supports the `%1' filter, so it has been turned off."), i->content())); } @@ -232,7 +231,7 @@ FFmpegContent::as_xml (xmlpp::Node* node, bool with_paths) const } for (auto i: _filters) { - node->add_child("Filter")->add_child_text(i->id()); + node->add_child("Filter")->add_child_text(i.id()); } if (_first_video) { @@ -292,14 +291,17 @@ FFmpegContent::examine (shared_ptr film, shared_ptr job) if (examiner->rotation()) { auto rot = *examiner->rotation (); if (fabs (rot - 180) < 1.0) { - _filters.push_back (Filter::from_id ("vflip")); - _filters.push_back (Filter::from_id ("hflip")); + _filters.push_back(*Filter::from_id("vflip")); + _filters.push_back(*Filter::from_id("hflip")); } else if (fabs (rot - 90) < 1.0) { - _filters.push_back (Filter::from_id ("90clock")); + _filters.push_back(*Filter::from_id("90clock")); } else if (fabs (rot - 270) < 1.0) { - _filters.push_back (Filter::from_id ("90anticlock")); + _filters.push_back(*Filter::from_id("90anticlock")); } } + if (examiner->has_alpha()) { + _filters.push_back(*Filter::from_id("premultiply")); + } } if (!examiner->audio_streams().empty()) { @@ -455,7 +457,7 @@ FFmpegContent::approximate_length () const void -FFmpegContent::set_filters (vector const & filters) +FFmpegContent::set_filters(vector const& filters) { ContentChangeSignaller cc (this, FFmpegContentProperty::FILTERS); @@ -486,7 +488,7 @@ FFmpegContent::identifier () const } for (auto i: _filters) { - s += "_" + i->id(); + s += "_" + i.id(); } return s;