X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fffmpeg_content.cc;h=2c2d36a986c6eb3b725b40c9222e38d5f9e043d6;hp=f8a1a142a75b40dcb5877ec33d5097319d00f400;hb=aeb835a18c8df347e0ed68fb24631b320abeb611;hpb=a04e7f3054f0d99c8f54863142d096bc655a4bc9 diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index f8a1a142a..2c2d36a98 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -36,11 +36,13 @@ extern "C" { #include #include } +#include #include +#include #include "i18n.h" -#define LOG_GENERAL(...) film->log()->log (String::compose (__VA_ARGS__), Log::TYPE_GENERAL); +#define LOG_GENERAL(...) film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL); using std::string; using std::vector; @@ -109,7 +111,7 @@ FFmpegContent::FFmpegContent (shared_ptr film, cxml::ConstNodePtr no node->optional_number_child("ColorTransferCharacteristic").get_value_or (AVCOL_TRC_UNSPECIFIED) ); _colorspace = static_cast (node->optional_number_child("Colorspace").get_value_or (AVCOL_SPC_UNSPECIFIED)); - _bits_per_pixel = static_cast (node->number_child ("BitsPerPixel")); + _bits_per_pixel = node->optional_number_child ("BitsPerPixel"); } @@ -170,7 +172,9 @@ FFmpegContent::as_xml (xmlpp::Node* node) const node->add_child("ColorPrimaries")->add_child_text (raw_convert (_color_primaries)); node->add_child("ColorTransferCharacteristic")->add_child_text (raw_convert (_color_trc)); node->add_child("Colorspace")->add_child_text (raw_convert (_colorspace)); - node->add_child("BitsPerPixel")->add_child_text (raw_convert (_bits_per_pixel)); + if (_bits_per_pixel) { + node->add_child("BitsPerPixel")->add_child_text (raw_convert (_bits_per_pixel.get ())); + } } void @@ -279,7 +283,7 @@ FFmpegContent::full_length () const shared_ptr film = _film.lock (); DCPOMATIC_ASSERT (film); FrameRateChange const frc (video_frame_rate (), film->video_frame_rate ()); - return DCPTime::from_frames (rint (video_length_after_3d_combine() * frc.factor()), film->video_frame_rate()); + return DCPTime::from_frames (llrint (video_length_after_3d_combine() * frc.factor()), film->video_frame_rate()); } void @@ -366,21 +370,37 @@ FFmpegContent::add_properties (list >& 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 +458,7 @@ FFmpegContent::add_properties (list >& 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 (_bits_per_pixel))); + if (_bits_per_pixel) { + p.push_back (make_pair (_("Bits per pixel"), raw_convert (_bits_per_pixel.get ()))); + } }