X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fvideo_mxf_content.cc;h=c7ee69d8932c647b62835ef5d12b5a82ab0ea391;hb=9a97c1b4116d7fb80e8ab145c0cc738dbf14d617;hp=8e762ae14f6d8545993f185d370a630dae1436eb;hpb=f12587df699a72655230ac737ece31a5436a5a5e;p=dcpomatic.git diff --git a/src/lib/video_mxf_content.cc b/src/lib/video_mxf_content.cc index 8e762ae14..c7ee69d89 100644 --- a/src/lib/video_mxf_content.cc +++ b/src/lib/video_mxf_content.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 Carl Hetherington + Copyright (C) 2016-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,6 +18,7 @@ */ + #include "video_mxf_examiner.h" #include "video_mxf_content.h" #include "video_content.h" @@ -32,43 +33,49 @@ #include "i18n.h" + using std::list; using std::string; -using boost::shared_ptr; +using std::shared_ptr; +using std::make_shared; +using namespace dcpomatic; + -VideoMXFContent::VideoMXFContent (shared_ptr film, boost::filesystem::path path) - : Content (film, path) +VideoMXFContent::VideoMXFContent (boost::filesystem::path path) + : Content (path) { } -VideoMXFContent::VideoMXFContent (shared_ptr film, cxml::ConstNodePtr node, int version) - : Content (film, node) + +VideoMXFContent::VideoMXFContent (cxml::ConstNodePtr node, int version) + : Content (node) { video = VideoContent::from_xml (this, node, version); } + bool VideoMXFContent::valid_mxf (boost::filesystem::path path) { Kumu::DefaultLogSink().UnsetFilterFlag(Kumu::LOG_ALLOW_ALL); try { - shared_ptr mp (new dcp::MonoPictureAsset (path)); + dcp::MonoPictureAsset mp (path); return true; } catch (dcp::MXFFileError& e) { - } catch (dcp::DCPReadError& e) { + } catch (dcp::ReadError& e) { } try { Kumu::DefaultLogSink().SetFilterFlag(0); - shared_ptr sp (new dcp::StereoPictureAsset (path)); + dcp::StereoPictureAsset sp (path); return true; } catch (dcp::MXFFileError& e) { - } catch (dcp::DCPReadError& e) { + } catch (dcp::ReadError& e) { } @@ -77,54 +84,69 @@ VideoMXFContent::valid_mxf (boost::filesystem::path path) return false; } + void -VideoMXFContent::examine (shared_ptr job) +VideoMXFContent::examine (shared_ptr film, shared_ptr job) { job->set_progress_unknown (); - Content::examine (job); + Content::examine (film, job); video.reset (new VideoContent (this)); - shared_ptr examiner (new VideoMXFExaminer (shared_from_this ())); + auto examiner = make_shared(shared_from_this()); video->take_from_examiner (examiner); video->unset_colour_conversion (); } + string VideoMXFContent::summary () const { return String::compose (_("%1 [video]"), path_summary()); } + string VideoMXFContent::technical_summary () const { - return Content::technical_summary() + " - " + video->technical_summary (); + return Content::technical_summary() + " - " + video->technical_summary(); } + string VideoMXFContent::identifier () const { return Content::identifier() + "_" + video->identifier(); } + void VideoMXFContent::as_xml (xmlpp::Node* node, bool with_paths) const { - node->add_child("Type")->add_child_text ("VideoMXF"); + node->add_child("Type")->add_child_text("VideoMXF"); Content::as_xml (node, with_paths); video->as_xml (node); } + +DCPTime +VideoMXFContent::full_length (shared_ptr film) const +{ + FrameRateChange const frc (film, shared_from_this()); + return DCPTime::from_frames (llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate()); +} + + DCPTime -VideoMXFContent::full_length () const +VideoMXFContent::approximate_length () const { - FrameRateChange const frc (active_video_frame_rate(), film()->video_frame_rate()); - return DCPTime::from_frames (llrint (video->length_after_3d_combine() * frc.factor()), film()->video_frame_rate()); + return DCPTime::from_frames (video->length_after_3d_combine(), 24); } + void -VideoMXFContent::add_properties (list& p) const +VideoMXFContent::add_properties (shared_ptr film, list& p) const { + Content::add_properties (film, p); video->add_properties (p); }