summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-05-13 12:36:39 +0100
committerCarl Hetherington <cth@carlh.net>2017-05-13 12:36:39 +0100
commit229f0b824d2aaa1d3780197034b49e21494e761d (patch)
tree541fd24d0da32d633fde6ba05bd1621329838d49
parent4079beaa74c67e81ae8e40bd715dcc68cdbdf676 (diff)
Get initial colour conversion from FFmpeg header, if it's understood (#993).
-rw-r--r--ChangeLog5
-rw-r--r--src/lib/ffmpeg_content.cc30
2 files changed, 31 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index e7e968454..b95bb611f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-13 Carl Hetherington <cth@carlh.net>
+
+ * Start off video content using the colour conversion
+ from their header, if present (#993).
+
2017-05-12 Carl Hetherington <cth@carlh.net>
* Add option for default scale-to (#664).
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index 44e1b2afb..3cd9d66e2 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -243,7 +243,6 @@ FFmpegContent::examine (shared_ptr<Job> job)
if (examiner->has_video ()) {
video.reset (new VideoContent (this));
video->take_from_examiner (examiner);
- set_default_colour_conversion ();
}
boost::filesystem::path first_path = path (0);
@@ -281,6 +280,10 @@ FFmpegContent::examine (shared_ptr<Job> job)
}
+ if (examiner->has_video ()) {
+ set_default_colour_conversion ();
+ }
+
signal_changed (FFmpegContentProperty::SUBTITLE_STREAMS);
signal_changed (FFmpegContentProperty::SUBTITLE_STREAM);
}
@@ -420,10 +423,29 @@ FFmpegContent::set_default_colour_conversion ()
boost::mutex::scoped_lock lm (_mutex);
- if (s.width < 1080) {
- video->set_colour_conversion (PresetColourConversion::from_id ("rec601").conversion);
- } else {
+ switch (_colorspace) {
+ case AVCOL_SPC_RGB:
+ video->set_colour_conversion (PresetColourConversion::from_id ("srgb").conversion);
+ break;
+ case AVCOL_SPC_BT709:
video->set_colour_conversion (PresetColourConversion::from_id ("rec709").conversion);
+ break;
+ case AVCOL_SPC_BT470BG:
+ case AVCOL_SPC_SMPTE170M:
+ case AVCOL_SPC_SMPTE240M:
+ video->set_colour_conversion (PresetColourConversion::from_id ("rec601").conversion);
+ break;
+ case AVCOL_SPC_BT2020_CL:
+ case AVCOL_SPC_BT2020_NCL:
+ video->set_colour_conversion (PresetColourConversion::from_id ("rec2020").conversion);
+ break;
+ default:
+ if (s.width < 1080) {
+ video->set_colour_conversion (PresetColourConversion::from_id ("rec601").conversion);
+ } else {
+ video->set_colour_conversion (PresetColourConversion::from_id ("rec709").conversion);
+ }
+ break;
}
}