diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-07-09 10:42:18 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-07-09 10:42:18 +0100 |
| commit | 13878a9ff227d66729f185a5bac5985f14d6cac7 (patch) | |
| tree | 2290360503d91e17df0ff6dc6670829aa0b5a0fa /src | |
| parent | bde021ea72b374c3f729f499acb614d505331574 (diff) | |
Make BitsPerPixel tag optional; fix some confusions with colour range reporting in properties.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/ffmpeg_content.cc | 56 | ||||
| -rw-r--r-- | src/lib/ffmpeg_content.h | 2 |
2 files changed, 39 insertions, 19 deletions
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index f8a1a142a..071f98612 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -109,7 +109,7 @@ FFmpegContent::FFmpegContent (shared_ptr<const Film> film, cxml::ConstNodePtr no node->optional_number_child<int>("ColorTransferCharacteristic").get_value_or (AVCOL_TRC_UNSPECIFIED) ); _colorspace = static_cast<AVColorSpace> (node->optional_number_child<int>("Colorspace").get_value_or (AVCOL_SPC_UNSPECIFIED)); - _bits_per_pixel = static_cast<int> (node->number_child<int> ("BitsPerPixel")); + _bits_per_pixel = node->optional_number_child<int> ("BitsPerPixel"); } @@ -170,7 +170,9 @@ FFmpegContent::as_xml (xmlpp::Node* node) const node->add_child("ColorPrimaries")->add_child_text (raw_convert<string> (_color_primaries)); node->add_child("ColorTransferCharacteristic")->add_child_text (raw_convert<string> (_color_trc)); node->add_child("Colorspace")->add_child_text (raw_convert<string> (_colorspace)); - node->add_child("BitsPerPixel")->add_child_text (raw_convert<string> (_bits_per_pixel)); + if (_bits_per_pixel) { + node->add_child("BitsPerPixel")->add_child_text (raw_convert<string> (_bits_per_pixel.get ())); + } } void @@ -366,21 +368,37 @@ FFmpegContent::add_properties (list<pair<string, string> >& p) const { VideoContent::add_properties (p); - int const sub = 219 * pow (2, _bits_per_pixel - 8); - int const total = pow (2, _bits_per_pixel); - - switch (_color_range) { - case AVCOL_RANGE_UNSPECIFIED: - p.push_back (make_pair (_("Colour range"), _("Unspecified"))); - break; - case AVCOL_RANGE_MPEG: - p.push_back (make_pair (_("Colour range"), String::compose ("Limited (%1-%2)", (total - sub) / 2, (total + sub) / 2))); - break; - case AVCOL_RANGE_JPEG: - p.push_back (make_pair (_("Colour range"), String::compose ("Full (0-total)", (total - sub) / 2, (total + sub) / 2))); - break; - default: - DCPOMATIC_ASSERT (false); + if (_bits_per_pixel) { + int const sub = 219 * pow (2, _bits_per_pixel.get() - 8); + int const total = pow (2, _bits_per_pixel.get()); + + switch (_color_range) { + case AVCOL_RANGE_UNSPECIFIED: + p.push_back (make_pair (_("Colour range"), _("Unspecified"))); + break; + case AVCOL_RANGE_MPEG: + p.push_back (make_pair (_("Colour range"), String::compose (_("Limited (%1-%2)"), (total - sub) / 2, (total + sub) / 2))); + break; + case AVCOL_RANGE_JPEG: + p.push_back (make_pair (_("Colour range"), String::compose (_("Full (0-%1)"), total))); + break; + default: + DCPOMATIC_ASSERT (false); + } + } else { + switch (_color_range) { + case AVCOL_RANGE_UNSPECIFIED: + p.push_back (make_pair (_("Colour range"), _("Unspecified"))); + break; + case AVCOL_RANGE_MPEG: + p.push_back (make_pair (_("Colour range"), _("Limited"))); + break; + case AVCOL_RANGE_JPEG: + p.push_back (make_pair (_("Colour range"), _("Full"))); + break; + default: + DCPOMATIC_ASSERT (false); + } } char const * primaries[] = { @@ -438,5 +456,7 @@ FFmpegContent::add_properties (list<pair<string, string> >& p) const DCPOMATIC_ASSERT (AVCOL_SPC_NB == 11); p.push_back (make_pair (_("Colourspace"), spaces[_colorspace])); - p.push_back (make_pair (_("Bits per pixel"), raw_convert<string> (_bits_per_pixel))); + if (_bits_per_pixel) { + p.push_back (make_pair (_("Bits per pixel"), raw_convert<string> (_bits_per_pixel.get ()))); + } } diff --git a/src/lib/ffmpeg_content.h b/src/lib/ffmpeg_content.h index b2a492e68..09f8ed558 100644 --- a/src/lib/ffmpeg_content.h +++ b/src/lib/ffmpeg_content.h @@ -122,7 +122,7 @@ private: AVColorPrimaries _color_primaries; AVColorTransferCharacteristic _color_trc; AVColorSpace _colorspace; - int _bits_per_pixel; + boost::optional<int> _bits_per_pixel; }; #endif |
