summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/content.cc15
-rw-r--r--src/lib/content.h3
-rw-r--r--src/lib/dcp_content.cc28
-rw-r--r--src/lib/dcp_content.h2
-rw-r--r--src/lib/player_video.cc2
-rw-r--r--src/wx/video_panel.cc5
6 files changed, 54 insertions, 1 deletions
diff --git a/src/lib/content.cc b/src/lib/content.cc
index 4242477d4..79f50d985 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -511,3 +511,18 @@ Content::add_path (boost::filesystem::path p)
_paths.push_back (p);
_last_write_times.push_back (boost::filesystem::last_write_time(p));
}
+
+
+string
+Content::video_processing_description (boost::shared_ptr<const Film> film) const
+{
+ return video ? video->processing_description(film) : "";
+}
+
+
+string
+Content::audio_processing_description (boost::shared_ptr<const Film> film) const
+{
+ return audio ? audio->processing_description(film) : "";
+}
+
diff --git a/src/lib/content.h b/src/lib/content.h
index a2d78aa68..543e3cba0 100644
--- a/src/lib/content.h
+++ b/src/lib/content.h
@@ -98,6 +98,9 @@ public:
*/
virtual std::list<dcpomatic::DCPTime> reel_split_points (boost::shared_ptr<const Film>) const;
+ virtual std::string video_processing_description (boost::shared_ptr<const Film> film) const;
+ virtual std::string audio_processing_description (boost::shared_ptr<const Film> film) const;
+
boost::shared_ptr<Content> clone () const;
void set_paths (std::vector<boost::filesystem::path> paths);
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc
index ca210b558..07bd946b0 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -760,3 +760,31 @@ DCPContent::resolution () const
return RESOLUTION_2K;
}
+string
+DCPContent::video_processing_description (shared_ptr<const Film> film) const
+{
+ /* This and PlayerVideo::has_j2k() need to be kept in sync */
+
+ if (!video) {
+ return "";
+ }
+
+ string s = video->processing_description (film);
+
+ /* XXX: overlapping burnt subs... */
+
+ if (video->crop() != Crop()) {
+ s += _("JPEG2000 video will be re-compressed because the image is cropped.");
+ } else if (film->frame_size() != video->size()) {
+ s += _("JPEG2000 video will be re-compressed because the project's container is different to the DCP's.");
+ } else if (video->fade_in() || video->fade_out()) {
+ s += _("JPEG2000 video will be re-compressed because fades have been set up.");
+ } else if (video->colour_conversion()) {
+ s += _("JPEG2000 video will be re-compressed because the colour conversion is not set to 'None'");
+ } else {
+ s += _("JPEG2000 video will be passed through without any change.");
+ }
+
+ return s;
+}
+
diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h
index 6d707670f..16c546e96 100644
--- a/src/lib/dcp_content.h
+++ b/src/lib/dcp_content.h
@@ -74,6 +74,8 @@ public:
void set_default_colour_conversion ();
std::list<dcpomatic::DCPTime> reel_split_points (boost::shared_ptr<const Film> film) const;
+ std::string video_processing_description (boost::shared_ptr<const Film> film) const;
+
std::vector<boost::filesystem::path> directories () const;
bool encrypted () const {
diff --git a/src/lib/player_video.cc b/src/lib/player_video.cc
index 10e798ed5..1dd64540a 100644
--- a/src/lib/player_video.cc
+++ b/src/lib/player_video.cc
@@ -224,6 +224,8 @@ PlayerVideo::has_j2k () const
{
/* XXX: maybe other things */
+ /* This and DCPContent::processing_description() need to be kept in sync */
+
shared_ptr<const J2KImageProxy> j2k = dynamic_pointer_cast<const J2KImageProxy> (_in);
if (!j2k) {
return false;
diff --git a/src/wx/video_panel.cc b/src/wx/video_panel.cc
index 4be9a741f..56d995e9c 100644
--- a/src/wx/video_panel.cc
+++ b/src/wx/video_panel.cc
@@ -398,6 +398,7 @@ VideoPanel::film_content_changed (int property)
} else {
checked_set (_colour_conversion, 0);
}
+ setup_description ();
} else if (check.size() > 1) {
/* Add a "many" entry and select it as an indication that multiple different
* colour conversions are present in the selection.
@@ -436,6 +437,7 @@ VideoPanel::film_content_changed (int property)
} else {
_fade_in->clear ();
}
+ setup_description ();
} else if (property == VideoContentProperty::FADE_OUT) {
set<Frame> check;
BOOST_FOREACH (shared_ptr<const Content> i, vc) {
@@ -450,6 +452,7 @@ VideoPanel::film_content_changed (int property)
} else {
_fade_out->clear ();
}
+ setup_description ();
} else if (property == DCPContentProperty::REFERENCE_VIDEO) {
if (vc.size() == 1) {
shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent> (vc.front ());
@@ -511,7 +514,7 @@ VideoPanel::setup_description ()
return;
}
- string d = vc.front()->video->processing_description (_parent->film());
+ string d = vc.front()->video_processing_description (_parent->film());
size_t lines = count (d.begin(), d.end(), '\n');
for (int i = lines; i < 6; ++i) {