diff options
Diffstat (limited to 'src/lib')
244 files changed, 18337 insertions, 11590 deletions
diff --git a/src/lib/analytics.cc b/src/lib/analytics.cc index 39c80330f..9dcfdcd31 100644 --- a/src/lib/analytics.cc +++ b/src/lib/analytics.cc @@ -22,6 +22,7 @@ #include "analytics.h" #include "compose.hpp" #include "exceptions.h" +#include "variant.h" #include <dcp/filesystem.h> #include <dcp/raw_convert.h> #include <dcp/warnings.h> @@ -61,18 +62,18 @@ Analytics::successful_dcp_encode () boost::bind( boost::ref(Message), _("Congratulations!"), - String::compose (_( - "<h2>You have made %1 DCPs with DCP-o-matic!</h2>" + String::compose(_( + "<h2>You have made %1 DCPs with %2!</h2>" "<img width=\"20%%\" src=\"memory:me.jpg\" align=\"center\">" "<font size=\"+1\">" "<p>Hello. I'm Carl and I'm the " - "developer of DCP-o-matic. I work on it in my spare time (with the help " + "developer of %3. I work on it in my spare time (with the help " "of a fine volunteer team of testers and translators) and I release it " "as free software." - "<p>If you find DCP-o-matic useful, please consider a donation to the " + "<p>If you find %4 useful, please consider a donation to the " "project. Financial support will help me to spend more " - "time developing DCP-o-matic and making it better!" + "time developing %5 and making it better!" "<p><ul>" "<li><a href=\"https://dcpomatic.com/donate_amount?amount=40\">Go to Paypal to donate €40</a>" @@ -81,7 +82,12 @@ Analytics::successful_dcp_encode () "</ul>" "<p>Thank you!" - "</font>"), _successful_dcp_encodes + "</font>"), + _successful_dcp_encodes, + variant::dcpomatic(), + variant::dcpomatic(), + variant::dcpomatic(), + variant::dcpomatic() ) ) ); @@ -95,8 +101,8 @@ Analytics::write () const xmlpp::Document doc; auto root = doc.create_root_node ("Analytics"); - root->add_child("Version")->add_child_text(raw_convert<string>(_current_version)); - root->add_child("SuccessfulDCPEncodes")->add_child_text(raw_convert<string>(_successful_dcp_encodes)); + cxml::add_text_child(root, "Version", raw_convert<string>(_current_version)); + cxml::add_text_child(root, "SuccessfulDCPEncodes", raw_convert<string>(_successful_dcp_encodes)); try { doc.write_to_file_formatted(write_path("analytics.xml").string()); diff --git a/src/lib/atmos_content.cc b/src/lib/atmos_content.cc index ada304dad..22bd431a2 100644 --- a/src/lib/atmos_content.cc +++ b/src/lib/atmos_content.cc @@ -63,10 +63,10 @@ AtmosContent::from_xml (Content* parent, cxml::ConstNodePtr node) void -AtmosContent::as_xml (xmlpp::Node* node) const +AtmosContent::as_xml(xmlpp::Element* element) const { - node->add_child("AtmosLength")->add_child_text(dcp::raw_convert<string>(_length)); - node->add_child("AtmosEditRate")->add_child_text(_edit_rate.as_string()); + cxml::add_text_child(element, "AtmosLength", dcp::raw_convert<string>(_length)); + cxml::add_text_child(element, "AtmosEditRate", _edit_rate.as_string()); } diff --git a/src/lib/atmos_content.h b/src/lib/atmos_content.h index afa3c75a2..ffa181497 100644 --- a/src/lib/atmos_content.h +++ b/src/lib/atmos_content.h @@ -42,7 +42,7 @@ public: static std::shared_ptr<AtmosContent> from_xml (Content* parent, cxml::ConstNodePtr node); - void as_xml (xmlpp::Node* node) const; + void as_xml(xmlpp::Element* element) const; void set_length (Frame len); diff --git a/src/lib/atmos_mxf_content.cc b/src/lib/atmos_mxf_content.cc index 82c20e88f..403f98933 100644 --- a/src/lib/atmos_mxf_content.cc +++ b/src/lib/atmos_mxf_content.cc @@ -37,6 +37,7 @@ using std::list; using std::make_shared; using std::string; using std::shared_ptr; +using boost::optional; using namespace dcpomatic; @@ -47,8 +48,8 @@ AtmosMXFContent::AtmosMXFContent (boost::filesystem::path path) } -AtmosMXFContent::AtmosMXFContent (cxml::ConstNodePtr node, int) - : Content (node) +AtmosMXFContent::AtmosMXFContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int) + : Content(node, film_directory) { atmos = AtmosContent::from_xml (this, node); } @@ -98,11 +99,11 @@ AtmosMXFContent::summary () const void -AtmosMXFContent::as_xml (xmlpp::Node* node, bool with_paths) const +AtmosMXFContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { - node->add_child("Type")->add_child_text("AtmosMXF"); - Content::as_xml (node, with_paths); - atmos->as_xml (node); + cxml::add_text_child(element, "Type", "AtmosMXF"); + Content::as_xml(element, with_paths, path_behaviour, film_directory); + atmos->as_xml(element); } diff --git a/src/lib/atmos_mxf_content.h b/src/lib/atmos_mxf_content.h index 57f041774..b0bdeb92f 100644 --- a/src/lib/atmos_mxf_content.h +++ b/src/lib/atmos_mxf_content.h @@ -27,7 +27,7 @@ class AtmosMXFContent : public Content { public: AtmosMXFContent (boost::filesystem::path path); - AtmosMXFContent (cxml::ConstNodePtr node, int version); + AtmosMXFContent (cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version); std::shared_ptr<AtmosMXFContent> shared_from_this () { return std::dynamic_pointer_cast<AtmosMXFContent> (Content::shared_from_this()); @@ -39,7 +39,14 @@ public: void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job> job) override; std::string summary () const override; - void as_xml (xmlpp::Node* node, bool with_path) const override; + + void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const override; + dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override; dcpomatic::DCPTime approximate_length () const override; diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc index b8c2e072d..ac990ee18 100644 --- a/src/lib/audio_analysis.cc +++ b/src/lib/audio_analysis.cc @@ -84,11 +84,8 @@ AudioAnalysis::AudioAnalysis (boost::filesystem::path filename) } for (auto i: f.node_children ("SamplePeak")) { - _sample_peak.push_back ( - PeakTime( - dcp::raw_convert<float>(i->content()), DCPTime(i->number_attribute<Frame>("Time")) - ) - ); + auto const time = number_attribute<Frame>(i, "Time", "time"); + _sample_peak.push_back(PeakTime(dcp::raw_convert<float>(i->content()), DCPTime(time))); } for (auto i: f.node_children("TruePeak")) { @@ -141,44 +138,44 @@ void AudioAnalysis::write (boost::filesystem::path filename) { auto doc = make_shared<xmlpp::Document>(); - xmlpp::Element* root = doc->create_root_node ("AudioAnalysis"); + auto root = doc->create_root_node("AudioAnalysis"); - root->add_child("Version")->add_child_text(raw_convert<string>(_current_state_version)); + cxml::add_text_child(root, "Version", raw_convert<string>(_current_state_version)); for (auto& i: _data) { - auto channel = root->add_child ("Channel"); + auto channel = cxml::add_child(root, "Channel"); for (auto& j: i) { - j.as_xml (channel->add_child ("Point")); + j.as_xml(cxml::add_child(channel, "Point")); } } for (size_t i = 0; i < _sample_peak.size(); ++i) { - auto n = root->add_child("SamplePeak"); + auto n = cxml::add_child(root, "SamplePeak"); n->add_child_text (raw_convert<string> (_sample_peak[i].peak)); - n->set_attribute ("Time", raw_convert<string> (_sample_peak[i].time.get())); + n->set_attribute("time", raw_convert<string> (_sample_peak[i].time.get())); } for (auto i: _true_peak) { - root->add_child("TruePeak")->add_child_text (raw_convert<string> (i)); + cxml::add_text_child(root, "TruePeak", raw_convert<string>(i)); } if (_integrated_loudness) { - root->add_child("IntegratedLoudness")->add_child_text (raw_convert<string> (_integrated_loudness.get ())); + cxml::add_text_child(root, "IntegratedLoudness", raw_convert<string>(_integrated_loudness.get())); } if (_loudness_range) { - root->add_child("LoudnessRange")->add_child_text (raw_convert<string> (_loudness_range.get ())); + cxml::add_text_child(root, "LoudnessRange", raw_convert<string>(_loudness_range.get())); } if (_analysis_gain) { - root->add_child("AnalysisGain")->add_child_text (raw_convert<string> (_analysis_gain.get ())); + cxml::add_text_child(root, "AnalysisGain", raw_convert<string>(_analysis_gain.get())); } - root->add_child("SamplesPerPoint")->add_child_text (raw_convert<string> (_samples_per_point)); - root->add_child("SampleRate")->add_child_text (raw_convert<string> (_sample_rate)); + cxml::add_text_child(root, "SamplesPerPoint", raw_convert<string>(_samples_per_point)); + cxml::add_text_child(root, "SampleRate", raw_convert<string>(_sample_rate)); if (_leqm) { - root->add_child("Leqm")->add_child_text(raw_convert<string>(*_leqm)); + cxml::add_text_child(root, "Leqm", raw_convert<string>(*_leqm)); } doc->write_to_file_formatted (filename.string ()); diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index 16f2bd5f1..2569e1cf0 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -124,14 +124,14 @@ AudioContent::AudioContent (Content* parent, vector<shared_ptr<Content>> c) void -AudioContent::as_xml (xmlpp::Node* node) const +AudioContent::as_xml(xmlpp::Element* element) const { boost::mutex::scoped_lock lm (_mutex); - node->add_child("AudioGain")->add_child_text(raw_convert<string>(_gain)); - node->add_child("AudioDelay")->add_child_text(raw_convert<string>(_delay)); - node->add_child("AudioFadeIn")->add_child_text(raw_convert<string>(_fade_in.get())); - node->add_child("AudioFadeOut")->add_child_text(raw_convert<string>(_fade_out.get())); - node->add_child("AudioUseSameFadesAsVideo")->add_child_text(_use_same_fades_as_video ? "1" : "0"); + cxml::add_text_child(element, "AudioGain", raw_convert<string>(_gain)); + cxml::add_text_child(element, "AudioDelay", raw_convert<string>(_delay)); + cxml::add_text_child(element, "AudioFadeIn", raw_convert<string>(_fade_in.get())); + cxml::add_text_child(element, "AudioFadeOut", raw_convert<string>(_fade_out.get())); + cxml::add_text_child(element, "AudioUseSameFadesAsVideo", _use_same_fades_as_video ? "1" : "0"); } diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h index 084871c8b..2a140b3e4 100644 --- a/src/lib/audio_content.h +++ b/src/lib/audio_content.h @@ -56,7 +56,7 @@ public: AudioContent (Content* parent, std::vector<std::shared_ptr<Content>>); AudioContent (Content* parent, cxml::ConstNodePtr); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; std::string technical_summary () const; void take_settings_from (std::shared_ptr<const AudioContent> c); diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc index 61ff5d265..60b0f07ad 100644 --- a/src/lib/audio_decoder.cc +++ b/src/lib/audio_decoder.cc @@ -64,9 +64,10 @@ AudioDecoder::emit(shared_ptr<const Film> film, AudioStreamPtr stream, shared_pt } /* Amount of error we will tolerate on audio timestamps; see comment below. - * We'll use 1 24fps video frame as this seems to be roughly how ffplay does it. + * ffplay seems to use 1 24fps video frame, but I was sent a file that played + * fine in VLC but not here until the slack was increased to 4 frames @ 24fps. */ - Frame const slack_frames = resampled_rate / 24; + Frame const slack_frames = 4 * resampled_rate / 24; /* first_since_seek is set to true if this is the first data we have received since initialisation or seek. We'll set the position based @@ -83,10 +84,11 @@ AudioDecoder::emit(shared_ptr<const Film> film, AudioStreamPtr stream, shared_pt if (need_reset) { LOG_GENERAL ( - "Reset audio position: was %1, new data at %2, slack: %3 frames", + "Reset audio position: was %1, new data at %2, slack: %3 frames (more than threshold %4)", _positions[stream], time.frames_round(resampled_rate), - std::abs(_positions[stream] - time.frames_round(resampled_rate)) + std::abs(_positions[stream] - time.frames_round(resampled_rate)), + slack_frames ); } diff --git a/src/lib/audio_filter_graph.cc b/src/lib/audio_filter_graph.cc index 4e3052d57..55a26cdb2 100644 --- a/src/lib/audio_filter_graph.cc +++ b/src/lib/audio_filter_graph.cc @@ -48,11 +48,7 @@ AudioFilterGraph::AudioFilterGraph (int sample_rate, int channels) /* FFmpeg doesn't know any channel layouts for any counts between 8 and 16, so we need to tell it we're using 16 channels if we are using more than 8. */ - if (_channels > 8) { - _channel_layout = av_get_default_channel_layout (16); - } else { - _channel_layout = av_get_default_channel_layout (_channels); - } + av_channel_layout_default(&_channel_layout, _channels > 8 ? 16 : _channels); _in_frame = av_frame_alloc (); if (_in_frame == nullptr) { @@ -69,7 +65,7 @@ string AudioFilterGraph::src_parameters () const { char layout[64]; - av_get_channel_layout_string (layout, sizeof(layout), 0, _channel_layout); + av_channel_layout_describe(&_channel_layout, layout, sizeof(layout)); char buffer[256]; snprintf ( @@ -88,8 +84,9 @@ AudioFilterGraph::set_parameters (AVFilterContext* context) const int r = av_opt_set_int_list (context, "sample_fmts", sample_fmts, AV_SAMPLE_FMT_NONE, AV_OPT_SEARCH_CHILDREN); DCPOMATIC_ASSERT (r >= 0); - int64_t channel_layouts[] = { _channel_layout, -1 }; - r = av_opt_set_int_list (context, "channel_layouts", channel_layouts, -1, AV_OPT_SEARCH_CHILDREN); + char ch_layout[64]; + av_channel_layout_describe(&_channel_layout, ch_layout, sizeof(ch_layout)); + r = av_opt_set(context, "ch_layouts", ch_layout, AV_OPT_SEARCH_CHILDREN); DCPOMATIC_ASSERT (r >= 0); int sample_rates[] = { _sample_rate, -1 }; @@ -114,7 +111,7 @@ void AudioFilterGraph::process (shared_ptr<AudioBuffers> buffers) { DCPOMATIC_ASSERT (buffers->frames() > 0); - int const process_channels = av_get_channel_layout_nb_channels (_channel_layout); + int const process_channels = _channel_layout.nb_channels; DCPOMATIC_ASSERT (process_channels >= buffers->channels()); if (buffers->channels() < process_channels) { @@ -144,8 +141,7 @@ AudioFilterGraph::process (shared_ptr<AudioBuffers> buffers) _in_frame->nb_samples = buffers->frames (); _in_frame->format = AV_SAMPLE_FMT_FLTP; _in_frame->sample_rate = _sample_rate; - _in_frame->channel_layout = _channel_layout; - _in_frame->channels = process_channels; + _in_frame->ch_layout = _channel_layout; int r = av_buffersrc_write_frame (_buffer_src_context, _in_frame); diff --git a/src/lib/audio_filter_graph.h b/src/lib/audio_filter_graph.h index e5c55fa27..6d09f15be 100644 --- a/src/lib/audio_filter_graph.h +++ b/src/lib/audio_filter_graph.h @@ -26,6 +26,7 @@ #include "filter_graph.h" extern "C" { #include <libavfilter/buffersink.h> +#include <libavutil/channel_layout.h> } class AudioBuffers; @@ -47,7 +48,7 @@ protected: private: int _sample_rate; int _channels; - int64_t _channel_layout; + AVChannelLayout _channel_layout; AVFrame* _in_frame; }; diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc index b8aa6249f..37929001d 100644 --- a/src/lib/audio_mapping.cc +++ b/src/lib/audio_mapping.cc @@ -24,6 +24,7 @@ #include "constants.h" #include "dcpomatic_assert.h" #include "digester.h" +#include "util.h" #include <dcp/raw_convert.h> #include <dcp/warnings.h> #include <libcxml/cxml.h> @@ -169,8 +170,8 @@ AudioMapping::AudioMapping (cxml::ConstNodePtr node, int state_version) ); } else { set ( - i->number_attribute<int>("Input"), - i->number_attribute<int>("Output"), + number_attribute<int>(i, "Input", "input"), + number_attribute<int>(i, "Output", "output"), raw_convert<float>(i->content()) ); } @@ -219,19 +220,19 @@ AudioMapping::get (int input_channel, int output_channel) const void -AudioMapping::as_xml (xmlpp::Node* node) const +AudioMapping::as_xml(xmlpp::Element* element) const { auto const input = input_channels(); auto const output = output_channels(); - node->add_child("InputChannels")->add_child_text(raw_convert<string>(input)); - node->add_child("OutputChannels")->add_child_text(raw_convert<string>(output)); + cxml::add_text_child(element, "InputChannels", raw_convert<string>(input)); + cxml::add_text_child(element, "OutputChannels", raw_convert<string>(output)); for (int c = 0; c < input; ++c) { for (int d = 0; d < output; ++d) { - auto t = node->add_child ("Gain"); - t->set_attribute ("Input", raw_convert<string> (c)); - t->set_attribute ("Output", raw_convert<string> (d)); + auto t = cxml::add_child(element, "Gain"); + t->set_attribute("input", raw_convert<string>(c)); + t->set_attribute("output", raw_convert<string>(d)); t->add_child_text (raw_convert<string> (get (c, d))); } } diff --git a/src/lib/audio_mapping.h b/src/lib/audio_mapping.h index fe9a79789..68487d908 100644 --- a/src/lib/audio_mapping.h +++ b/src/lib/audio_mapping.h @@ -52,7 +52,7 @@ public: /* Default copy constructor is fine */ - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; void make_zero (); void make_default (AudioProcessor const * processor, boost::optional<boost::filesystem::path> filename = boost::optional<boost::filesystem::path>()); diff --git a/src/lib/audio_point.cc b/src/lib/audio_point.cc index 1f32d25fc..036904520 100644 --- a/src/lib/audio_point.cc +++ b/src/lib/audio_point.cc @@ -72,6 +72,6 @@ AudioPoint::operator= (AudioPoint const & other) void AudioPoint::as_xml (xmlpp::Element* parent) const { - parent->add_child("Peak")->add_child_text(raw_convert<string>(_data[PEAK])); - parent->add_child("RMS")->add_child_text(raw_convert<string>(_data[RMS])); + cxml::add_text_child(parent, "Peak", raw_convert<string>(_data[PEAK])); + cxml::add_text_child(parent, "RMS", raw_convert<string>(_data[RMS])); } diff --git a/src/lib/butler.cc b/src/lib/butler.cc index b2fbc6c60..dd9874587 100644 --- a/src/lib/butler.cc +++ b/src/lib/butler.cc @@ -138,7 +138,7 @@ Butler::should_run () const { if (_video.size() >= MAXIMUM_VIDEO_READAHEAD * 10) { /* This is way too big */ - optional<DCPTime> pos = _audio.peek(); + auto pos = _audio.peek(); if (pos) { throw ProgrammingError (__FILE__, __LINE__, String::compose ("Butler video buffers reached %1 frames (audio is %2 at %3)", _video.size(), _audio.size(), pos->get())); diff --git a/src/lib/check_content_job.cc b/src/lib/check_content_job.cc index f37890abf..2028b01ac 100644 --- a/src/lib/check_content_job.cc +++ b/src/lib/check_content_job.cc @@ -70,7 +70,7 @@ CheckContentJob::run () std::vector<shared_ptr<Content>> changed; std::copy_if (content.begin(), content.end(), std::back_inserter(changed), [](shared_ptr<Content> c) { return c->changed(); }); - if (_film->last_written_by_earlier_than(2, 16, 15)) { + if (_film->last_written_by_earlier_than(2, 17, 17)) { for (auto c: content) { if (auto stf = dynamic_pointer_cast<StringTextFileContent>(c)) { stf->check_font_ids(); diff --git a/src/lib/cinema.cc b/src/lib/cinema.cc deleted file mode 100644 index 3b4b9d7b6..000000000 --- a/src/lib/cinema.cc +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net> - - This file is part of DCP-o-matic. - - DCP-o-matic is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - DCP-o-matic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. - -*/ - - -#include "cinema.h" -#include "screen.h" -#include "dcpomatic_assert.h" -#include <libcxml/cxml.h> -#include <dcp/raw_convert.h> -#include <libxml++/libxml++.h> - - -using std::make_shared; -using std::shared_ptr; -using std::string; -using dcp::raw_convert; -using dcpomatic::Screen; - - -Cinema::Cinema (cxml::ConstNodePtr node) - : name (node->string_child ("Name")) - , notes (node->optional_string_child("Notes").get_value_or("")) -{ - for (auto i: node->node_children("Email")) { - emails.push_back (i->content ()); - } - - if (node->optional_number_child<int>("UTCOffset")) { - _utc_offset_hour = node->number_child<int>("UTCOffset"); - } else { - _utc_offset_hour = node->optional_number_child<int>("UTCOffsetHour").get_value_or (0); - } - - _utc_offset_minute = node->optional_number_child<int>("UTCOffsetMinute").get_value_or (0); -} - -/* This is necessary so that we can use shared_from_this in add_screen (which cannot be done from - a constructor) -*/ -void -Cinema::read_screens (cxml::ConstNodePtr node) -{ - for (auto i: node->node_children("Screen")) { - add_screen (make_shared<Screen>(i)); - } -} - -void -Cinema::as_xml (xmlpp::Element* parent) const -{ - parent->add_child("Name")->add_child_text (name); - - for (auto i: emails) { - parent->add_child("Email")->add_child_text (i); - } - - parent->add_child("Notes")->add_child_text (notes); - - parent->add_child("UTCOffsetHour")->add_child_text (raw_convert<string> (_utc_offset_hour)); - parent->add_child("UTCOffsetMinute")->add_child_text (raw_convert<string> (_utc_offset_minute)); - - for (auto i: _screens) { - i->as_xml (parent->add_child ("Screen")); - } -} - -void -Cinema::add_screen (shared_ptr<Screen> s) -{ - s->cinema = shared_from_this (); - _screens.push_back (s); -} - -void -Cinema::remove_screen (shared_ptr<Screen> s) -{ - auto iter = std::find(_screens.begin(), _screens.end(), s); - if (iter != _screens.end()) { - _screens.erase(iter); - } -} - -void -Cinema::set_utc_offset_hour (int h) -{ - DCPOMATIC_ASSERT (h >= -11 && h <= 12); - _utc_offset_hour = h; -} - -void -Cinema::set_utc_offset_minute (int m) -{ - DCPOMATIC_ASSERT (m >= 0 && m <= 59); - _utc_offset_minute = m; -} diff --git a/src/lib/cinema.h b/src/lib/cinema.h index 6c202a7bf..44f232f91 100644 --- a/src/lib/cinema.h +++ b/src/lib/cinema.h @@ -18,76 +18,35 @@ */ + /** @file src/lib/cinema.h * @brief Cinema class. */ -#include <libcxml/cxml.h> +#include <dcp/utc_offset.h> #include <memory> +#include <string> +#include <vector> -namespace xmlpp { - class Element; -} - -namespace dcpomatic { - class Screen; -} - /** @class Cinema * @brief A description of a Cinema for KDM generation. * - * This is a cinema name, some metadata and a list of - * Screen objects. + * This is a cinema name and some metadata. */ -class Cinema : public std::enable_shared_from_this<Cinema> +class Cinema { public: - Cinema(std::string const & name_, std::vector<std::string> const & e, std::string notes_, int utc_offset_hour, int utc_offset_minute) + Cinema(std::string const & name_, std::vector<std::string> const & e, std::string notes_, dcp::UTCOffset utc_offset_) : name (name_) , emails (e) , notes (notes_) - , _utc_offset_hour (utc_offset_hour) - , _utc_offset_minute (utc_offset_minute) + , utc_offset(std::move(utc_offset_)) {} - explicit Cinema (cxml::ConstNodePtr); - - void read_screens (cxml::ConstNodePtr); - - void as_xml (xmlpp::Element *) const; - - void add_screen (std::shared_ptr<dcpomatic::Screen>); - void remove_screen (std::shared_ptr<dcpomatic::Screen>); - - void set_utc_offset_hour (int h); - void set_utc_offset_minute (int m); - std::string name; std::vector<std::string> emails; std::string notes; - - int utc_offset_hour () const { - return _utc_offset_hour; - } - - int utc_offset_minute () const { - return _utc_offset_minute; - } - - std::vector<std::shared_ptr<dcpomatic::Screen>> screens() const { - return _screens; - } - -private: - std::vector<std::shared_ptr<dcpomatic::Screen>> _screens; - /** Offset such that the equivalent time in UTC can be determined - by subtracting the offset from the local time. - */ - int _utc_offset_hour; - /** Additional minutes to add to _utc_offset_hour if _utc_offset_hour is - positive, or to subtract if _utc_offset_hour is negative. - */ - int _utc_offset_minute; + dcp::UTCOffset utc_offset; }; diff --git a/src/lib/cinema_list.cc b/src/lib/cinema_list.cc new file mode 100644 index 000000000..41b9dbab3 --- /dev/null +++ b/src/lib/cinema_list.cc @@ -0,0 +1,466 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "cinema.h" +#include "cinema_list.h" +#include "config.h" +#include "dcpomatic_assert.h" +#include "exceptions.h" +#include "screen.h" +#include "sqlite_statement.h" +#include "sqlite_transaction.h" +#include "util.h" +#include <dcp/certificate.h> +#include <sqlite3.h> +#include <boost/algorithm/string.hpp> +#include <iostream> +#include <numeric> + + +using std::pair; +using std::make_pair; +using std::string; +using std::vector; +using boost::optional; + + +CinemaList::CinemaList() + : _cinemas("cinemas") + , _screens("screens") + , _trusted_devices("trusted_devices") +{ + setup_tables(); + setup(Config::instance()->cinemas_file()); +} + + +CinemaList::CinemaList(boost::filesystem::path db_file) + : _cinemas("cinemas") + , _screens("screens") + , _trusted_devices("trusted_devices") +{ + setup_tables(); + setup(db_file); +} + + +void +CinemaList::setup_tables() +{ + _cinemas.add_column("name", "TEXT"); + _cinemas.add_column("emails", "TEXT"); + _cinemas.add_column("notes", "TEXT"); + _cinemas.add_column("utc_offset_hour", "INTEGER"); + _cinemas.add_column("utc_offset_minute", "INTEGER"); + + _screens.add_column("cinema", "INTEGER"); + _screens.add_column("name", "TEXT"); + _screens.add_column("notes", "TEXT"); + _screens.add_column("recipient", "TEXT"); + _screens.add_column("recipient_file", "TEXT"); + + _trusted_devices.add_column("screen", "INTEGER"); + _trusted_devices.add_column("certificate_or_thumbprint", "TEXT"); +} + + +void +CinemaList::read_legacy_file(boost::filesystem::path xml_file) +{ + cxml::Document doc("Cinemas"); + doc.read_file(xml_file); + read_legacy_document(doc); +} + + +void +CinemaList::read_legacy_string(std::string const& xml) +{ + cxml::Document doc("Cinemas"); + doc.read_string(xml); + read_legacy_document(doc); +} + + +void +CinemaList::read_legacy_document(cxml::Document const& doc) +{ + for (auto cinema_node: doc.node_children("Cinema")) { + vector<string> emails; + for (auto email_node: cinema_node->node_children("Email")) { + emails.push_back(email_node->content()); + } + + int hour = 0; + if (cinema_node->optional_number_child<int>("UTCOffset")) { + hour = cinema_node->number_child<int>("UTCOffset"); + } else { + hour = cinema_node->optional_number_child<int>("UTCOffsetHour").get_value_or(0); + } + + int minute = cinema_node->optional_number_child<int>("UTCOffsetMinute").get_value_or(0); + + Cinema cinema( + cinema_node->string_child("Name"), + emails, + cinema_node->string_child("Notes"), + dcp::UTCOffset(hour, minute) + ); + + auto cinema_id = add_cinema(cinema); + + for (auto screen_node: cinema_node->node_children("Screen")) { + optional<dcp::Certificate> recipient; + if (auto recipient_string = screen_node->optional_string_child("Recipient")) { + recipient = dcp::Certificate(*recipient_string); + } + vector<TrustedDevice> trusted_devices; + for (auto trusted_device_node: screen_node->node_children("TrustedDevice")) { + trusted_devices.push_back(TrustedDevice(trusted_device_node->content())); + } + dcpomatic::Screen screen( + screen_node->string_child("Name"), + screen_node->string_child("Notes"), + recipient, + screen_node->optional_string_child("RecipientFile"), + trusted_devices + ); + add_screen(cinema_id, screen); + } + } +} + + +void +CinemaList::clear() +{ + for (auto table: { "cinemas", "screens", "trusted_devices" }) { + SQLiteStatement sql(_db, String::compose("DELETE FROM %1", table)); + sql.execute(); + } +} + + +void +CinemaList::setup(boost::filesystem::path db_file) +{ +#ifdef DCPOMATIC_WINDOWS + auto rc = sqlite3_open16(db_file.c_str(), &_db); +#else + auto rc = sqlite3_open(db_file.c_str(), &_db); +#endif + if (rc != SQLITE_OK) { + throw FileError("Could not open SQLite database", db_file); + } + + sqlite3_busy_timeout(_db, 500); + + SQLiteStatement cinemas(_db, _cinemas.create()); + cinemas.execute(); + + SQLiteStatement screens(_db, _screens.create()); + screens.execute(); + + SQLiteStatement devices(_db, _trusted_devices.create()); + devices.execute(); +} + + +CinemaList::CinemaList(CinemaList&& other) + : _db(other._db) + , _cinemas(std::move(other._cinemas)) + , _screens(std::move(other._screens)) + , _trusted_devices(std::move(other._trusted_devices)) +{ + other._db = nullptr; +} + + +CinemaList& +CinemaList::operator=(CinemaList&& other) +{ + if (this != &other) { + _db = other._db; + other._db = nullptr; + } + return *this; +} + + +CinemaID +CinemaList::add_cinema(Cinema const& cinema) +{ + SQLiteStatement statement(_db, _cinemas.insert()); + + statement.bind_text(1, cinema.name); + statement.bind_text(2, join_strings(cinema.emails)); + statement.bind_text(3, cinema.notes); + statement.bind_int64(4, cinema.utc_offset.hour()); + statement.bind_int64(5, cinema.utc_offset.minute()); + + statement.execute(); + + return sqlite3_last_insert_rowid(_db); +} + + +void +CinemaList::update_cinema(CinemaID id, Cinema const& cinema) +{ + SQLiteStatement statement(_db, _cinemas.update("WHERE id=?")); + + statement.bind_text(1, cinema.name); + statement.bind_text(2, join_strings(cinema.emails)); + statement.bind_text(3, cinema.notes); + statement.bind_int64(4, cinema.utc_offset.hour()); + statement.bind_int64(5, cinema.utc_offset.minute()); + statement.bind_int64(6, id.get()); + + statement.execute(); +} + + +void +CinemaList::remove_cinema(CinemaID id) +{ + SQLiteStatement statement(_db, "DELETE FROM cinemas WHERE ID=?"); + statement.bind_int64(1, id.get()); + statement.execute(); +} + + +CinemaList::~CinemaList() +{ + if (_db) { + sqlite3_close(_db); + } +} + + +static +vector<pair<CinemaID, Cinema>> +cinemas_from_result(SQLiteStatement& statement) +{ + vector<pair<CinemaID, Cinema>> output; + + statement.execute([&output](SQLiteStatement& statement) { + DCPOMATIC_ASSERT(statement.data_count() == 6); + CinemaID const id = statement.column_int64(0); + auto const name = statement.column_text(1); + auto const join_strings = statement.column_text(2); + vector<string> emails; + boost::algorithm::split(emails, join_strings, boost::is_any_of(" ")); + auto const notes = statement.column_text(3); + auto const utc_offset_hour = static_cast<int>(statement.column_int64(4)); + auto const utc_offset_minute = static_cast<int>(statement.column_int64(5)); + output.push_back(make_pair(id, Cinema(name, { emails }, notes, dcp::UTCOffset{utc_offset_hour, utc_offset_minute}))); + }); + + return output; +} + + +vector<pair<CinemaID, Cinema>> +CinemaList::cinemas() const +{ + SQLiteStatement statement(_db, _cinemas.select("ORDER BY name ASC")); + return cinemas_from_result(statement); +} + + +optional<Cinema> +CinemaList::cinema(CinemaID id) const +{ + SQLiteStatement statement(_db, _cinemas.select("WHERE id=?")); + statement.bind_int64(1, id.get()); + auto result = cinemas_from_result(statement); + if (result.empty()) { + return {}; + } + return result[0].second; +} + +ScreenID +CinemaList::add_screen(CinemaID cinema_id, dcpomatic::Screen const& screen) +{ + SQLiteTransaction transaction(_db); + + SQLiteStatement add_screen(_db, _screens.insert()); + + add_screen.bind_int64(1, cinema_id.get()); + add_screen.bind_text(2, screen.name); + add_screen.bind_text(3, screen.notes); + add_screen.bind_text(4, screen.recipient->certificate(true)); + add_screen.bind_text(5, screen.recipient_file.get_value_or("")); + + add_screen.execute(); + + auto const screen_id = sqlite3_last_insert_rowid(_db); + + for (auto device: screen.trusted_devices) { + SQLiteStatement add_device(_db, _trusted_devices.insert()); + add_device.bind_int64(1, screen_id); + add_device.bind_text(2, device.as_string()); + } + + transaction.commit(); + + return screen_id; +} + + +dcpomatic::Screen +CinemaList::screen_from_result(SQLiteStatement& statement, ScreenID screen_id) const +{ + auto certificate_string = statement.column_text(4); + optional<dcp::Certificate> certificate = certificate_string.empty() ? optional<dcp::Certificate>() : dcp::Certificate(certificate_string); + auto recipient_file_string = statement.column_text(5); + optional<string> recipient_file = recipient_file_string.empty() ? optional<string>() : recipient_file_string; + + SQLiteStatement trusted_devices_statement(_db, _trusted_devices.select("WHERE screen=?")); + trusted_devices_statement.bind_int64(1, screen_id.get()); + vector<TrustedDevice> trusted_devices; + trusted_devices_statement.execute([&trusted_devices](SQLiteStatement& statement) { + DCPOMATIC_ASSERT(statement.data_count() == 1); + auto description = statement.column_text(1); + if (boost::algorithm::starts_with(description, "-----BEGIN CERTIFICATE")) { + trusted_devices.push_back(TrustedDevice(dcp::Certificate(description))); + } else { + trusted_devices.push_back(TrustedDevice(description)); + } + }); + + return dcpomatic::Screen(statement.column_text(2), statement.column_text(3), certificate, recipient_file, trusted_devices); +} + + +optional<dcpomatic::Screen> +CinemaList::screen(ScreenID screen_id) const +{ + SQLiteStatement statement(_db, _screens.select("WHERE id=?")); + statement.bind_int64(1, screen_id.get()); + + optional<dcpomatic::Screen> output; + + statement.execute([this, &output, screen_id](SQLiteStatement& statement) { + DCPOMATIC_ASSERT(statement.data_count() == 6); + output = screen_from_result(statement, screen_id); + }); + + return output; +} + + + +vector<pair<ScreenID, dcpomatic::Screen>> +CinemaList::screens_from_result(SQLiteStatement& statement) const +{ + vector<pair<ScreenID, dcpomatic::Screen>> output; + + statement.execute([this, &output](SQLiteStatement& statement) { + DCPOMATIC_ASSERT(statement.data_count() == 6); + ScreenID const screen_id = statement.column_int64(0); + output.push_back({screen_id, screen_from_result(statement, screen_id)}); + }); + + return output; +} + + +vector<pair<ScreenID, dcpomatic::Screen>> +CinemaList::screens(CinemaID cinema_id) const +{ + SQLiteStatement statement(_db, _screens.select("WHERE cinema=?")); + statement.bind_int64(1, cinema_id.get()); + return screens_from_result(statement); +} + + +vector<pair<ScreenID, dcpomatic::Screen>> +CinemaList::screens_by_cinema_and_name(CinemaID id, std::string const& name) const +{ + SQLiteStatement statement(_db, _screens.select("WHERE cinema=? AND name=?")); + statement.bind_int64(1, id.get()); + statement.bind_text(2, name); + return screens_from_result(statement); +} + + +optional<std::pair<CinemaID, Cinema>> +CinemaList::cinema_by_name_or_email(std::string const& text) const +{ + SQLiteStatement statement(_db, _cinemas.select("WHERE name LIKE ? OR EMAILS LIKE ?")); + auto const wildcard = string("%") + text + "%"; + statement.bind_text(1, wildcard); + statement.bind_text(2, wildcard); + + auto all = cinemas_from_result(statement); + if (all.empty()) { + return {}; + } + return all[0]; +} + + +void +CinemaList::update_screen(ScreenID id, dcpomatic::Screen const& screen) +{ + SQLiteStatement statement(_db, _screens.update("WHERE id=?")); + + statement.bind_text(1, screen.name); + statement.bind_text(2, screen.notes); + statement.bind_text(3, screen.recipient->certificate(true)); + statement.bind_text(4, screen.recipient_file.get_value_or("")); + statement.bind_int64(5, id.get()); + + statement.execute(); +} + + +void +CinemaList::remove_screen(ScreenID id) +{ + SQLiteStatement statement(_db, "DELETE FROM screens WHERE ID=?"); + statement.bind_int64(1, id.get()); + statement.execute(); +} + + +optional<dcp::UTCOffset> +CinemaList::unique_utc_offset(std::set<CinemaID> const& cinemas_to_check) +{ + optional<dcp::UTCOffset> offset; + + for (auto const& cinema: cinemas()) { + if (cinemas_to_check.find(cinema.first) == cinemas_to_check.end()) { + continue; + } + + if (!offset) { + offset = cinema.second.utc_offset; + } else if (cinema.second.utc_offset != *offset) { + return dcp::UTCOffset(); + } + } + + return offset; +} + diff --git a/src/lib/cinema_list.h b/src/lib/cinema_list.h new file mode 100644 index 000000000..c91f29476 --- /dev/null +++ b/src/lib/cinema_list.h @@ -0,0 +1,126 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_CINEMA_LIST_H +#define DCPOMATIC_CINEMA_LIST_H + + +#include "id.h" +#include "sqlite_table.h" +#include <libcxml/cxml.h> +#include <dcp/utc_offset.h> +#include <boost/filesystem.hpp> +#include <boost/optional.hpp> +#include <sqlite3.h> +#include <set> + + +class Cinema; +namespace dcpomatic { + class Screen; +} +class SQLiteStatement; + + +class CinemaID : public ID +{ +public: + CinemaID(sqlite3_int64 id) + : ID(id) {} + + bool operator<(CinemaID const& other) const { + return get() < other.get(); + } +}; + + +class ScreenID : public ID +{ +public: + ScreenID(sqlite3_int64 id) + : ID(id) {} + + bool operator==(ScreenID const& other) const { + return get() == other.get(); + } + + bool operator!=(ScreenID const& other) const { + return get() != other.get(); + } + + bool operator<(ScreenID const& other) const { + return get() < other.get(); + } +}; + + +class CinemaList +{ +public: + CinemaList(); + CinemaList(boost::filesystem::path db_file); + ~CinemaList(); + + CinemaList(CinemaList const&) = delete; + CinemaList& operator=(CinemaList const&) = delete; + + CinemaList(CinemaList&& other); + CinemaList& operator=(CinemaList&& other); + + void read_legacy_file(boost::filesystem::path xml_file); + void read_legacy_string(std::string const& xml); + + void clear(); + + CinemaID add_cinema(Cinema const& cinema); + void update_cinema(CinemaID id, Cinema const& cinema); + void remove_cinema(CinemaID id); + std::vector<std::pair<CinemaID, Cinema>> cinemas() const; + boost::optional<Cinema> cinema(CinemaID id) const; + boost::optional<std::pair<CinemaID, Cinema>> cinema_by_partial_name(std::string const& text) const; + boost::optional<std::pair<CinemaID, Cinema>> cinema_by_name_or_email(std::string const& text) const; + + ScreenID add_screen(CinemaID cinema_id, dcpomatic::Screen const& screen); + void update_screen(ScreenID id, dcpomatic::Screen const& screen); + void remove_screen(ScreenID id); + boost::optional<dcpomatic::Screen> screen(ScreenID screen_id) const; + std::vector<std::pair<ScreenID, dcpomatic::Screen>> screens(CinemaID cinema_id) const; + std::vector<std::pair<ScreenID, dcpomatic::Screen>> screens_by_cinema_and_name(CinemaID id, std::string const& name) const; + + boost::optional<dcp::UTCOffset> unique_utc_offset(std::set<CinemaID> const& cinemas); + +private: + dcpomatic::Screen screen_from_result(SQLiteStatement& statement, ScreenID screen_id) const; + std::vector<std::pair<ScreenID, dcpomatic::Screen>> screens_from_result(SQLiteStatement& statement) const; + void setup_tables(); + void setup(boost::filesystem::path db_file); + void read_legacy_document(cxml::Document const& doc); + + sqlite3* _db = nullptr; + SQLiteTable _cinemas; + SQLiteTable _screens; + SQLiteTable _trusted_devices; +}; + + + +#endif + diff --git a/src/lib/colour_conversion.cc b/src/lib/colour_conversion.cc index bd1b47cb1..f1e625812 100644 --- a/src/lib/colour_conversion.cc +++ b/src/lib/colour_conversion.cc @@ -151,41 +151,40 @@ ColourConversion::from_xml (cxml::NodePtr node, int version) } void -ColourConversion::as_xml (xmlpp::Node* node) const +ColourConversion::as_xml(xmlpp::Element* element) const { - auto in_node = node->add_child ("InputTransferFunction"); + auto in_node = cxml::add_child(element, "InputTransferFunction"); if (dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in)) { auto tf = dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in); - in_node->add_child("Type")->add_child_text ("Gamma"); - in_node->add_child("Gamma")->add_child_text (raw_convert<string> (tf->gamma ())); + cxml::add_text_child(in_node, "Type", "Gamma"); + cxml::add_text_child(in_node, "Gamma", raw_convert<string>(tf->gamma())); } else if (dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in)) { auto tf = dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in); - in_node->add_child("Type")->add_child_text ("ModifiedGamma"); - in_node->add_child("Power")->add_child_text (raw_convert<string> (tf->power ())); - in_node->add_child("Threshold")->add_child_text (raw_convert<string> (tf->threshold ())); - in_node->add_child("A")->add_child_text (raw_convert<string> (tf->A ())); - in_node->add_child("B")->add_child_text (raw_convert<string> (tf->B ())); - } else if (dynamic_pointer_cast<const dcp::SGamut3TransferFunction> (_in)) { - in_node->add_child("Type")->add_child_text ("SGamut3"); + cxml::add_text_child(in_node, "Type", "ModifiedGamma"); + cxml::add_text_child(in_node, "Power", raw_convert<string>(tf->power ())); + cxml::add_text_child(in_node, "Threshold", raw_convert<string>(tf->threshold ())); + cxml::add_text_child(in_node, "A", raw_convert<string>(tf->A())); + cxml::add_text_child(in_node, "B", raw_convert<string>(tf->B())); + } else if (dynamic_pointer_cast<const dcp::SGamut3TransferFunction>(_in)) { + cxml::add_text_child(in_node, "Type", "SGamut3"); } - node->add_child("YUVToRGB")->add_child_text (raw_convert<string> (static_cast<int> (_yuv_to_rgb))); - node->add_child("RedX")->add_child_text (raw_convert<string> (_red.x)); - node->add_child("RedY")->add_child_text (raw_convert<string> (_red.y)); - node->add_child("GreenX")->add_child_text (raw_convert<string> (_green.x)); - node->add_child("GreenY")->add_child_text (raw_convert<string> (_green.y)); - node->add_child("BlueX")->add_child_text (raw_convert<string> (_blue.x)); - node->add_child("BlueY")->add_child_text (raw_convert<string> (_blue.y)); - node->add_child("WhiteX")->add_child_text (raw_convert<string> (_white.x)); - node->add_child("WhiteY")->add_child_text (raw_convert<string> (_white.y)); + cxml::add_text_child(element, "YUVToRGB", raw_convert<string>(static_cast<int>(_yuv_to_rgb))); + cxml::add_text_child(element, "RedX", raw_convert<string>(_red.x)); + cxml::add_text_child(element, "RedY", raw_convert<string>(_red.y)); + cxml::add_text_child(element, "GreenX", raw_convert<string>(_green.x)); + cxml::add_text_child(element, "GreenY", raw_convert<string>(_green.y)); + cxml::add_text_child(element, "BlueX", raw_convert<string>(_blue.x)); + cxml::add_text_child(element, "BlueY", raw_convert<string>(_blue.y)); + cxml::add_text_child(element, "WhiteX", raw_convert<string>(_white.x)); + cxml::add_text_child(element, "WhiteY", raw_convert<string>(_white.y)); if (_adjusted_white) { - node->add_child("AdjustedWhiteX")->add_child_text (raw_convert<string> (_adjusted_white.get().x)); - node->add_child("AdjustedWhiteY")->add_child_text (raw_convert<string> (_adjusted_white.get().y)); + cxml::add_text_child(element, "AdjustedWhiteX", raw_convert<string>(_adjusted_white.get().x)); + cxml::add_text_child(element, "AdjustedWhiteY", raw_convert<string>(_adjusted_white.get().y)); } - if (dynamic_pointer_cast<const dcp::GammaTransferFunction> (_out)) { - shared_ptr<const dcp::GammaTransferFunction> gf = dynamic_pointer_cast<const dcp::GammaTransferFunction> (_out); - node->add_child("OutputGamma")->add_child_text (raw_convert<string> (gf->gamma ())); + if (auto gf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_out)) { + cxml::add_text_child(element, "OutputGamma", raw_convert<string>(gf->gamma())); } } diff --git a/src/lib/colour_conversion.h b/src/lib/colour_conversion.h index 73b6ad23c..0c07ddbac 100644 --- a/src/lib/colour_conversion.h +++ b/src/lib/colour_conversion.h @@ -41,7 +41,7 @@ public: ColourConversion (cxml::NodePtr, int version); virtual ~ColourConversion () {} - virtual void as_xml (xmlpp::Node *) const; + virtual void as_xml(xmlpp::Element*) const; std::string identifier () const; boost::optional<size_t> preset () const; diff --git a/src/lib/config.cc b/src/lib/config.cc index 5dafd5785..cd285abd1 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -19,20 +19,21 @@ */ -#include "cinema.h" +#include "cinema_list.h" #include "colour_conversion.h" #include "compose.hpp" #include "config.h" #include "constants.h" #include "cross.h" #include "dcp_content_type.h" -#include "dkdm_recipient.h" +#include "dkdm_recipient_list.h" #include "dkdm_wrapper.h" #include "film.h" #include "filter.h" #include "log.h" #include "ratio.h" #include "unzipper.h" +#include "variant.h" #include "zipper.h" #include <dcp/certificate_chain.h> #include <dcp/name_format.h> @@ -107,7 +108,8 @@ Config::set_defaults () _default_still_length = 10; _default_dcp_content_type = DCPContentType::from_isdcf_name ("FTR"); _default_dcp_audio_channels = 8; - _default_j2k_bandwidth = 150000000; + _default_video_bit_rate[VideoEncoding::JPEG2000] = 150000000; + _default_video_bit_rate[VideoEncoding::MPEG2] = 5000000; _default_audio_delay = 0; _default_interop = false; _default_metadata.clear (); @@ -126,7 +128,8 @@ Config::set_defaults () _notification_bcc = ""; _check_for_updates = false; _check_for_test_updates = false; - _maximum_j2k_bandwidth = 250000000; + _maximum_video_bit_rate[VideoEncoding::JPEG2000] = 250000000; + _maximum_video_bit_rate[VideoEncoding::MPEG2] = 50000000; _log_types = LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR | LogEntry::TYPE_DISK; _analyse_ebur128 = true; _automatic_audio_analysis = false; @@ -136,8 +139,8 @@ Config::set_defaults () /* At the moment we don't write these files anywhere new after a version change, so they will be read from * ~/.config/dcpomatic2 (or equivalent) and written back there. */ - _cinemas_file = read_path ("cinemas.xml"); - _dkdm_recipients_file = read_path ("dkdm_recipients.xml"); + _cinemas_file = read_path("cinemas.sqlite3"); + _dkdm_recipients_file = read_path("dkdm_recipients.sqlite3"); _show_hints_before_make_dcp = true; _confirm_kdm_email = true; _kdm_container_name_format = dcp::NameFormat("KDM_%f_%c"); @@ -177,6 +180,8 @@ Config::set_defaults () _gdc_username = optional<string>(); _gdc_password = optional<string>(); _player_mode = PLAYER_MODE_WINDOW; + _player_restricted_menus = false; + _playlist_editor_restricted_menus = false; _image_display = 0; _video_view_type = VIDEO_VIEW_SIMPLE; _respect_kdm_validity_periods = true; @@ -198,6 +203,8 @@ Config::set_defaults () _initial_paths["CinemaDatabasePath"] = boost::none; _initial_paths["ConfigFilePath"] = boost::none; _initial_paths["Preferences"] = boost::none; + _initial_paths["SaveVerificationReport"] = boost::none; + _initial_paths["CopySettingsPath"] = boost::none; _use_isdcf_name_by_default = true; _write_kdms_to_disk = true; _email_kdms = false; @@ -207,6 +214,9 @@ Config::set_defaults () _last_release_notes_version = boost::none; _allow_smpte_bv20 = false; _isdcf_name_part_length = 14; + _enable_player_http_server = false; + _player_http_server_port = 8080; + _relative_paths = false; _allowed_dcp_frame_rates.clear (); _allowed_dcp_frame_rates.push_back (24); @@ -220,6 +230,10 @@ Config::set_defaults () set_notification_email_to_default (); set_cover_sheet_to_default (); +#ifdef DCPOMATIC_GROK + _grok = boost::none; +#endif + _main_divider_sash_position = {}; _main_content_divider_sash_position = {}; @@ -266,7 +280,7 @@ Config::backup () copy_file(path_to_copy, add_number(path_to_copy, n), ec); }; - /* Make a backup copy of any config.xml, cinemas.xml, dkdm_recipients.xml that we might be about + /* Make a backup copy of any config.xml, cinemas.sqlite3, dkdm_recipients.sqlite3 that we might be about * to write over. This is more intended for the situation where we have a corrupted config.xml, * and decide to overwrite it with a new one (possibly losing important details in the corrupted * file). But we might as well back up the other files while we're about it. @@ -286,15 +300,6 @@ Config::backup () void Config::read () -{ - read_config(); - read_cinemas(); - read_dkdm_recipients(); -} - - -void -Config::read_config() try { cxml::Document f ("Config"); @@ -367,7 +372,12 @@ try _dcp_j2k_comment = f.optional_string_child("DCPJ2KComment").get_value_or(""); _default_still_length = f.optional_number_child<int>("DefaultStillLength").get_value_or (10); - _default_j2k_bandwidth = f.optional_number_child<int>("DefaultJ2KBandwidth").get_value_or (200000000); + if (auto j2k = f.optional_number_child<int>("DefaultJ2KBandwidth")) { + _default_video_bit_rate[VideoEncoding::JPEG2000] = *j2k; + } else { + _default_video_bit_rate[VideoEncoding::JPEG2000] = f.optional_number_child<int64_t>("DefaultJ2KVideoBitRate").get_value_or(200000000); + } + _default_video_bit_rate[VideoEncoding::MPEG2] = f.optional_number_child<int64_t>("DefaultMPEG2VideoBitRate").get_value_or(5000000); _default_audio_delay = f.optional_number_child<int>("DefaultAudioDelay").get_value_or (0); _default_interop = f.optional_bool_child("DefaultInterop").get_value_or (false); @@ -391,11 +401,6 @@ try _default_kdm_directory = f.optional_string_child("DefaultKDMDirectory"); - /* Read any cinemas that are still lying around in the config file - * from an old version. - */ - read_cinemas (f); - _mail_server = f.string_child ("MailServer"); _mail_port = f.optional_number_child<int> ("MailPort").get_value_or (25); @@ -426,7 +431,7 @@ try _kdm_bcc = f.optional_string_child ("KDMBCC").get_value_or (""); _kdm_email = f.string_child ("KDMEmail"); - _notification_subject = f.optional_string_child("NotificationSubject").get_value_or(_("DCP-o-matic notification")); + _notification_subject = f.optional_string_child("NotificationSubject").get_value_or(variant::insert_dcpomatic(_("%1 notification"))); _notification_from = f.optional_string_child("NotificationFrom").get_value_or(""); _notification_to = f.optional_string_child("NotificationTo").get_value_or(""); for (auto i: f.node_children("NotificationCC")) { @@ -442,7 +447,12 @@ try _check_for_updates = f.optional_bool_child("CheckForUpdates").get_value_or (false); _check_for_test_updates = f.optional_bool_child("CheckForTestUpdates").get_value_or (false); - _maximum_j2k_bandwidth = f.optional_number_child<int> ("MaximumJ2KBandwidth").get_value_or (250000000); + if (auto j2k = f.optional_number_child<int>("MaximumJ2KBandwidth")) { + _maximum_video_bit_rate[VideoEncoding::JPEG2000] = *j2k; + } else { + _maximum_video_bit_rate[VideoEncoding::JPEG2000] = f.optional_number_child<int64_t>("MaximumJ2KVideoBitRate").get_value_or(250000000); + } + _maximum_video_bit_rate[VideoEncoding::MPEG2] = f.optional_number_child<int64_t>("MaximumMPEG2VideoBitRate").get_value_or(50000000); _allow_any_dcp_frame_rate = f.optional_bool_child ("AllowAnyDCPFrameRate").get_value_or (false); _allow_any_container = f.optional_bool_child ("AllowAnyContainer").get_value_or (false); _allow_96khz_audio = f.optional_bool_child("Allow96kHzAudio").get_value_or(false); @@ -494,7 +504,7 @@ try of the nags. */ for (auto i: f.node_children("Nagged")) { - auto const id = i->number_attribute<int>("Id"); + auto const id = number_attribute<int>(i, "Id", "id"); if (id >= 0 && id < NAG_COUNT) { _nagged[id] = raw_convert<int>(i->content()); } @@ -528,8 +538,8 @@ try _dkdms->add (DKDMBase::read (i)); } } - _cinemas_file = f.optional_string_child("CinemasFile").get_value_or(read_path("cinemas.xml").string()); - _dkdm_recipients_file = f.optional_string_child("DKDMRecipientsFile").get_value_or(read_path("dkdm_recipients.xml").string()); + _cinemas_file = f.optional_string_child("CinemasFile").get_value_or(read_path("cinemas.sqlite3").string()); + _dkdm_recipients_file = f.optional_string_child("DKDMRecipientsFile").get_value_or(read_path("dkdm_recipients.sqlite3").string()); _show_hints_before_make_dcp = f.optional_bool_child("ShowHintsBeforeMakeDCP").get_value_or (true); _confirm_kdm_email = f.optional_bool_child("ConfirmKDMEmail").get_value_or (true); _kdm_container_name_format = dcp::NameFormat (f.optional_string_child("KDMContainerNameFormat").get_value_or ("KDM %f %c")); @@ -566,7 +576,7 @@ try _default_notify = f.optional_bool_child("DefaultNotify").get_value_or(false); for (auto i: f.node_children("Notification")) { - int const id = i->number_attribute<int>("Id"); + int const id = number_attribute<int>(i, "Id", "id"); if (id >= 0 && id < NOTIFICATION_COUNT) { _notification[id] = raw_convert<int>(i->content()); } @@ -588,6 +598,9 @@ try _player_mode = PLAYER_MODE_DUAL; } + _player_restricted_menus = f.optional_bool_child("PlayerRestrictedMenus").get_value_or(false); + _playlist_editor_restricted_menus = f.optional_bool_child("PlaylistEditorRestrictedMenus").get_value_or(false); + _image_display = f.optional_number_child<int>("ImageDisplay").get_value_or(0); auto vc = f.optional_string_child("VideoViewType"); if (vc && *vc == "opengl") { @@ -641,6 +654,15 @@ try _allow_smpte_bv20 = f.optional_bool_child("AllowSMPTEBv20").get_value_or(false); _isdcf_name_part_length = f.optional_number_child<int>("ISDCFNamePartLength").get_value_or(14); + _enable_player_http_server = f.optional_bool_child("EnablePlayerHTTPServer").get_value_or(false); + _player_http_server_port = f.optional_number_child<int>("PlayerHTTPServerPort").get_value_or(8080); + _relative_paths = f.optional_bool_child("RelativePaths").get_value_or(false); + +#ifdef DCPOMATIC_GROK + if (auto grok = f.optional_node_child("Grok")) { + _grok = Grok(grok); + } +#endif _export.read(f.optional_node_child("Export")); } @@ -659,40 +681,6 @@ catch (...) { } -void -Config::read_cinemas() -{ - if (dcp::filesystem::exists(_cinemas_file)) { - try { - cxml::Document f("Cinemas"); - f.read_file(dcp::filesystem::fix_long_path(_cinemas_file)); - read_cinemas(f); - } catch (...) { - backup(); - FailedToLoad(LoadFailure::CINEMAS); - write_cinemas(); - } - } -} - - -void -Config::read_dkdm_recipients() -{ - if (dcp::filesystem::exists(_dkdm_recipients_file)) { - try { - cxml::Document f("DKDMRecipients"); - f.read_file(dcp::filesystem::fix_long_path(_dkdm_recipients_file)); - read_dkdm_recipients(f); - } catch (...) { - backup(); - FailedToLoad(LoadFailure::DKDM_RECIPIENTS); - write_dkdm_recipients(); - } - } -} - - /** @return Singleton instance */ Config * Config::instance () @@ -700,6 +688,32 @@ Config::instance () if (_instance == nullptr) { _instance = new Config; _instance->read (); + + auto cinemas_file = _instance->cinemas_file(); + if (cinemas_file.extension() == ".xml") { + auto sqlite = cinemas_file; + sqlite.replace_extension(".sqlite3"); + bool const had_sqlite = dcp::filesystem::exists(sqlite); + + _instance->set_cinemas_file(sqlite); + + if (dcp::filesystem::exists(cinemas_file) && !had_sqlite) { + CinemaList cinemas; + cinemas.read_legacy_file(cinemas_file); + } + } + + auto dkdm_recipients_file = _instance->dkdm_recipients_file(); + if (dkdm_recipients_file.extension() == ".xml") { + auto sqlite = dkdm_recipients_file; + sqlite.replace_extension(".sqlite3"); + + if (dcp::filesystem::exists(dkdm_recipients_file) && !dcp::filesystem::exists(sqlite)) { + _instance->set_dkdm_recipients_file(sqlite); + DKDMRecipientList recipients; + recipients.read_legacy_file(dkdm_recipients_file); + } + } } return _instance; @@ -710,8 +724,6 @@ void Config::write () const { write_config (); - write_cinemas (); - write_dkdm_recipients (); } void @@ -721,218 +733,199 @@ Config::write_config () const auto root = doc.create_root_node ("Config"); /* [XML] Version The version number of the configuration file format. */ - root->add_child("Version")->add_child_text (raw_convert<string>(_current_version)); + cxml::add_text_child(root, "Version", raw_convert<string>(_current_version)); /* [XML] MasterEncodingThreads Number of encoding threads to use when running as master. */ - root->add_child("MasterEncodingThreads")->add_child_text (raw_convert<string> (_master_encoding_threads)); + cxml::add_text_child(root, "MasterEncodingThreads", raw_convert<string>(_master_encoding_threads)); /* [XML] ServerEncodingThreads Number of encoding threads to use when running as server. */ - root->add_child("ServerEncodingThreads")->add_child_text (raw_convert<string> (_server_encoding_threads)); + cxml::add_text_child(root, "ServerEncodingThreads", raw_convert<string>(_server_encoding_threads)); if (_default_directory) { /* [XML:opt] DefaultDirectory Default directory when creating a new film in the GUI. */ - root->add_child("DefaultDirectory")->add_child_text (_default_directory->string ()); + cxml::add_text_child(root, "DefaultDirectory", _default_directory->string()); } /* [XML] ServerPortBase Port number to use for frame encoding requests. <code>ServerPortBase</code> + 1 and <code>ServerPortBase</code> + 2 are used for querying servers. <code>ServerPortBase</code> + 3 is used by the batch converter to listen for job requests. */ - root->add_child("ServerPortBase")->add_child_text (raw_convert<string> (_server_port_base)); + cxml::add_text_child(root, "ServerPortBase", raw_convert<string>(_server_port_base)); /* [XML] UseAnyServers 1 to broadcast to look for encoding servers to use, 0 to use only those configured. */ - root->add_child("UseAnyServers")->add_child_text (_use_any_servers ? "1" : "0"); + cxml::add_text_child(root, "UseAnyServers", _use_any_servers ? "1" : "0"); for (auto i: _servers) { /* [XML:opt] Server IP address or hostname of an encoding server to use; you can use as many of these tags as you like. */ - root->add_child("Server")->add_child_text (i); + cxml::add_text_child(root, "Server", i); } /* [XML] OnlyServersEncode 1 to set the master to do decoding of source content no JPEG2000 encoding; all encoding is done by the encoding servers. 0 to set the master to do some encoding as well as coordinating the job. */ - root->add_child("OnlyServersEncode")->add_child_text (_only_servers_encode ? "1" : "0"); + cxml::add_text_child(root, "OnlyServersEncode", _only_servers_encode ? "1" : "0"); /* [XML] TMSProtocol Protocol to use to copy files to a TMS; 0 to use SCP, 1 for FTP. */ - root->add_child("TMSProtocol")->add_child_text (raw_convert<string> (static_cast<int> (_tms_protocol))); + cxml::add_text_child(root, "TMSProtocol", raw_convert<string>(static_cast<int>(_tms_protocol))); /* [XML] TMSPassive True to use PASV mode with TMS FTP connections. */ - root->add_child("TMSPassive")->add_child_text(_tms_passive ? "1" : "0"); + cxml::add_text_child(root, "TMSPassive", _tms_passive ? "1" : "0"); /* [XML] TMSIP IP address of TMS. */ - root->add_child("TMSIP")->add_child_text (_tms_ip); + cxml::add_text_child(root, "TMSIP", _tms_ip); /* [XML] TMSPath Path on the TMS to copy files to. */ - root->add_child("TMSPath")->add_child_text (_tms_path); + cxml::add_text_child(root, "TMSPath", _tms_path); /* [XML] TMSUser Username to log into the TMS with. */ - root->add_child("TMSUser")->add_child_text (_tms_user); + cxml::add_text_child(root, "TMSUser", _tms_user); /* [XML] TMSPassword Password to log into the TMS with. */ - root->add_child("TMSPassword")->add_child_text (_tms_password); + cxml::add_text_child(root, "TMSPassword", _tms_password); if (_language) { /* [XML:opt] Language Language to use in the GUI e.g. <code>fr_FR</code>. */ - root->add_child("Language")->add_child_text (_language.get()); - } - if (_default_dcp_content_type) { - /* [XML:opt] DefaultDCPContentType Default content type to use when creating new films (<code>FTR</code>, <code>SHR</code>, - <code>TLR</code>, <code>TST</code>, <code>XSN</code>, <code>RTG</code>, <code>TSR</code>, <code>POL</code>, - <code>PSA</code> or <code>ADV</code>). */ - root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ()); + cxml::add_text_child(root, "Language", _language.get()); } - /* [XML] DefaultDCPAudioChannels Default number of audio channels to use when creating new films. */ - root->add_child("DefaultDCPAudioChannels")->add_child_text (raw_convert<string> (_default_dcp_audio_channels)); /* [XML] DCPIssuer Issuer text to write into CPL files. */ - root->add_child("DCPIssuer")->add_child_text (_dcp_issuer); + cxml::add_text_child(root, "DCPIssuer", _dcp_issuer); /* [XML] DCPCreator Creator text to write into CPL files. */ - root->add_child("DCPCreator")->add_child_text (_dcp_creator); + cxml::add_text_child(root, "DCPCreator", _dcp_creator); /* [XML] Company name to write into MXF files. */ - root->add_child("DCPCompanyName")->add_child_text (_dcp_company_name); + cxml::add_text_child(root, "DCPCompanyName", _dcp_company_name); /* [XML] Product name to write into MXF files. */ - root->add_child("DCPProductName")->add_child_text (_dcp_product_name); + cxml::add_text_child(root, "DCPProductName", _dcp_product_name); /* [XML] Product version to write into MXF files. */ - root->add_child("DCPProductVersion")->add_child_text (_dcp_product_version); + cxml::add_text_child(root, "DCPProductVersion", _dcp_product_version); /* [XML] Comment to write into JPEG2000 data. */ - root->add_child("DCPJ2KComment")->add_child_text (_dcp_j2k_comment); + cxml::add_text_child(root, "DCPJ2KComment", _dcp_j2k_comment); /* [XML] UploadAfterMakeDCP 1 to upload to a TMS after making a DCP, 0 for no upload. */ - root->add_child("UploadAfterMakeDCP")->add_child_text (_upload_after_make_dcp ? "1" : "0"); + cxml::add_text_child(root, "UploadAfterMakeDCP", _upload_after_make_dcp ? "1" : "0"); /* [XML] DefaultStillLength Default length (in seconds) for still images in new films. */ - root->add_child("DefaultStillLength")->add_child_text (raw_convert<string> (_default_still_length)); - /* [XML] DefaultJ2KBandwidth Default bitrate (in bits per second) for JPEG2000 data in new films. */ - root->add_child("DefaultJ2KBandwidth")->add_child_text (raw_convert<string> (_default_j2k_bandwidth)); + cxml::add_text_child(root, "DefaultStillLength", raw_convert<string>(_default_still_length)); /* [XML] DefaultAudioDelay Default delay to apply to audio (positive moves audio later) in milliseconds. */ - root->add_child("DefaultAudioDelay")->add_child_text (raw_convert<string> (_default_audio_delay)); - /* [XML] DefaultInterop 1 to default new films to Interop, 0 for SMPTE. */ - root->add_child("DefaultInterop")->add_child_text (_default_interop ? "1" : "0"); + cxml::add_text_child(root, "DefaultAudioDelay", raw_convert<string>(_default_audio_delay)); if (_default_audio_language) { /* [XML] DefaultAudioLanguage Default audio language to use for new films */ - root->add_child("DefaultAudioLanguage")->add_child_text(_default_audio_language->to_string()); - } - if (_default_territory) { - /* [XML] DefaultTerritory Default territory to use for new films */ - root->add_child("DefaultTerritory")->add_child_text(_default_territory->subtag()); - } - for (auto const& i: _default_metadata) { - auto c = root->add_child("DefaultMetadata"); - c->set_attribute("key", i.first); - c->add_child_text(i.second); + cxml::add_text_child(root, "DefaultAudioLanguage", _default_audio_language->to_string()); } if (_default_kdm_directory) { /* [XML:opt] DefaultKDMDirectory Default directory to write KDMs to. */ - root->add_child("DefaultKDMDirectory")->add_child_text (_default_kdm_directory->string ()); + cxml::add_text_child(root, "DefaultKDMDirectory", _default_kdm_directory->string ()); } - _default_kdm_duration.as_xml(root->add_child("DefaultKDMDuration")); + _default_kdm_duration.as_xml(cxml::add_child(root, "DefaultKDMDuration")); /* [XML] MailServer Hostname of SMTP server to use. */ - root->add_child("MailServer")->add_child_text (_mail_server); + cxml::add_text_child(root, "MailServer", _mail_server); /* [XML] MailPort Port number to use on SMTP server. */ - root->add_child("MailPort")->add_child_text (raw_convert<string> (_mail_port)); + cxml::add_text_child(root, "MailPort", raw_convert<string>(_mail_port)); /* [XML] MailProtocol Protocol to use on SMTP server (Auto, Plain, STARTTLS or SSL) */ switch (_mail_protocol) { case EmailProtocol::AUTO: - root->add_child("MailProtocol")->add_child_text("Auto"); + cxml::add_text_child(root, "MailProtocol", "Auto"); break; case EmailProtocol::PLAIN: - root->add_child("MailProtocol")->add_child_text("Plain"); + cxml::add_text_child(root, "MailProtocol", "Plain"); break; case EmailProtocol::STARTTLS: - root->add_child("MailProtocol")->add_child_text("STARTTLS"); + cxml::add_text_child(root, "MailProtocol", "STARTTLS"); break; case EmailProtocol::SSL: - root->add_child("MailProtocol")->add_child_text("SSL"); + cxml::add_text_child(root, "MailProtocol", "SSL"); break; } /* [XML] MailUser Username to use on SMTP server. */ - root->add_child("MailUser")->add_child_text (_mail_user); + cxml::add_text_child(root, "MailUser", _mail_user); /* [XML] MailPassword Password to use on SMTP server. */ - root->add_child("MailPassword")->add_child_text (_mail_password); + cxml::add_text_child(root, "MailPassword", _mail_password); /* [XML] KDMSubject Subject to use for KDM emails. */ - root->add_child("KDMSubject")->add_child_text (_kdm_subject); + cxml::add_text_child(root, "KDMSubject", _kdm_subject); /* [XML] KDMFrom From address to use for KDM emails. */ - root->add_child("KDMFrom")->add_child_text (_kdm_from); + cxml::add_text_child(root, "KDMFrom", _kdm_from); for (auto i: _kdm_cc) { /* [XML] KDMCC CC address to use for KDM emails; you can use as many of these tags as you like. */ - root->add_child("KDMCC")->add_child_text (i); + cxml::add_text_child(root, "KDMCC", i); } /* [XML] KDMBCC BCC address to use for KDM emails. */ - root->add_child("KDMBCC")->add_child_text (_kdm_bcc); + cxml::add_text_child(root, "KDMBCC", _kdm_bcc); /* [XML] KDMEmail Text of KDM email. */ - root->add_child("KDMEmail")->add_child_text (_kdm_email); + cxml::add_text_child(root, "KDMEmail", _kdm_email); /* [XML] NotificationSubject Subject to use for notification emails. */ - root->add_child("NotificationSubject")->add_child_text (_notification_subject); + cxml::add_text_child(root, "NotificationSubject", _notification_subject); /* [XML] NotificationFrom From address to use for notification emails. */ - root->add_child("NotificationFrom")->add_child_text (_notification_from); + cxml::add_text_child(root, "NotificationFrom", _notification_from); /* [XML] NotificationFrom To address to use for notification emails. */ - root->add_child("NotificationTo")->add_child_text (_notification_to); + cxml::add_text_child(root, "NotificationTo", _notification_to); for (auto i: _notification_cc) { /* [XML] NotificationCC CC address to use for notification emails; you can use as many of these tags as you like. */ - root->add_child("NotificationCC")->add_child_text (i); + cxml::add_text_child(root, "NotificationCC", i); } /* [XML] NotificationBCC BCC address to use for notification emails. */ - root->add_child("NotificationBCC")->add_child_text (_notification_bcc); + cxml::add_text_child(root, "NotificationBCC", _notification_bcc); /* [XML] NotificationEmail Text of notification email. */ - root->add_child("NotificationEmail")->add_child_text (_notification_email); + cxml::add_text_child(root, "NotificationEmail", _notification_email); /* [XML] CheckForUpdates 1 to check dcpomatic.com for new versions, 0 to check only on request. */ - root->add_child("CheckForUpdates")->add_child_text (_check_for_updates ? "1" : "0"); + cxml::add_text_child(root, "CheckForUpdates", _check_for_updates ? "1" : "0"); /* [XML] CheckForUpdates 1 to check dcpomatic.com for new text versions, 0 to check only on request. */ - root->add_child("CheckForTestUpdates")->add_child_text (_check_for_test_updates ? "1" : "0"); + cxml::add_text_child(root, "CheckForTestUpdates", _check_for_test_updates ? "1" : "0"); - /* [XML] MaximumJ2KBandwidth Maximum J2K bandwidth (in bits per second) that can be specified in the GUI. */ - root->add_child("MaximumJ2KBandwidth")->add_child_text (raw_convert<string> (_maximum_j2k_bandwidth)); + /* [XML] MaximumJ2KVideoBitRate Maximum video bit rate (in bits per second) that can be specified in the GUI for JPEG2000 encodes. */ + cxml::add_text_child(root, "MaximumJ2KVideoBitRate", raw_convert<string>(_maximum_video_bit_rate[VideoEncoding::JPEG2000])); + /* [XML] MaximumMPEG2VideoBitRate Maximum video bit rate (in bits per second) that can be specified in the GUI for MPEG2 encodes. */ + cxml::add_text_child(root, "MaximumMPEG2VideoBitRate", raw_convert<string>(_maximum_video_bit_rate[VideoEncoding::MPEG2])); /* [XML] AllowAnyDCPFrameRate 1 to allow users to specify any frame rate when creating DCPs, 0 to limit the GUI to standard rates. */ - root->add_child("AllowAnyDCPFrameRate")->add_child_text (_allow_any_dcp_frame_rate ? "1" : "0"); + cxml::add_text_child(root, "AllowAnyDCPFrameRate", _allow_any_dcp_frame_rate ? "1" : "0"); /* [XML] AllowAnyContainer 1 to allow users to user any container ratio for their DCP, 0 to limit the GUI to DCI Flat/Scope */ - root->add_child("AllowAnyContainer")->add_child_text (_allow_any_container ? "1" : "0"); + cxml::add_text_child(root, "AllowAnyContainer", _allow_any_container ? "1" : "0"); /* [XML] Allow96kHzAudio 1 to allow users to make DCPs with 96kHz audio, 0 to always make 48kHz DCPs */ - root->add_child("Allow96kHzAudio")->add_child_text(_allow_96khz_audio ? "1" : "0"); + cxml::add_text_child(root, "Allow96kHzAudio", _allow_96khz_audio ? "1" : "0"); /* [XML] UseAllAudioChannels 1 to allow users to map audio to all 16 DCP channels, 0 to limit to the channels used in standard DCPs */ - root->add_child("UseAllAudioChannels")->add_child_text(_use_all_audio_channels ? "1" : "0"); + cxml::add_text_child(root, "UseAllAudioChannels", _use_all_audio_channels ? "1" : "0"); /* [XML] ShowExperimentalAudioProcessors 1 to offer users the (experimental) audio upmixer processors, 0 to hide them */ - root->add_child("ShowExperimentalAudioProcessors")->add_child_text (_show_experimental_audio_processors ? "1" : "0"); + cxml::add_text_child(root, "ShowExperimentalAudioProcessors", _show_experimental_audio_processors ? "1" : "0"); /* [XML] LogTypes Types of logging to write; a bitfield where 1 is general notes, 2 warnings, 4 errors, 8 debug information related to 3D, 16 debug information related to encoding, 32 debug information for timing purposes, 64 debug information related to sending email, 128 debug information related to the video view, 256 information about disk writing, 512 debug information related to the player, 1024 debug information related to audio analyses. */ - root->add_child("LogTypes")->add_child_text (raw_convert<string> (_log_types)); + cxml::add_text_child(root, "LogTypes", raw_convert<string> (_log_types)); /* [XML] AnalyseEBUR128 1 to do EBUR128 analyses when analysing audio, otherwise 0. */ - root->add_child("AnalyseEBUR128")->add_child_text (_analyse_ebur128 ? "1" : "0"); + cxml::add_text_child(root, "AnalyseEBUR128", _analyse_ebur128 ? "1" : "0"); /* [XML] AutomaticAudioAnalysis 1 to run audio analysis automatically when audio content is added to the film, otherwise 0. */ - root->add_child("AutomaticAudioAnalysis")->add_child_text (_automatic_audio_analysis ? "1" : "0"); + cxml::add_text_child(root, "AutomaticAudioAnalysis", _automatic_audio_analysis ? "1" : "0"); #ifdef DCPOMATIC_WINDOWS if (_win32_console) { /* [XML] Win32Console 1 to open a console when running on Windows, otherwise 0. * We only write this if it's true, which is a bit of a hack to allow unit tests to work * more easily on Windows (without a platform-specific reference in config_write_utf8_test) */ - root->add_child("Win32Console")->add_child_text ("1"); + cxml::add_text_child(root, "Win32Console", "1"); } #endif /* [XML] Signer Certificate chain and private key to use when signing DCPs and KDMs. Should contain <code><Certificate></code> tags in order and a <code><PrivateKey></code> tag all containing PEM-encoded certificates or private keys as appropriate. */ - auto signer = root->add_child ("Signer"); + auto signer = cxml::add_child(root, "Signer"); DCPOMATIC_ASSERT (_signer_chain); for (auto const& i: _signer_chain->unordered()) { - signer->add_child("Certificate")->add_child_text (i.certificate (true)); + cxml::add_text_child(signer, "Certificate", i.certificate (true)); } - signer->add_child("PrivateKey")->add_child_text (_signer_chain->key().get ()); + cxml::add_text_child(signer, "PrivateKey", _signer_chain->key().get ()); /* [XML] Decryption Certificate chain and private key to use when decrypting KDMs */ - auto decryption = root->add_child ("Decryption"); + auto decryption = cxml::add_child(root, "Decryption"); DCPOMATIC_ASSERT (_decryption_chain); for (auto const& i: _decryption_chain->unordered()) { - decryption->add_child("Certificate")->add_child_text (i.certificate (true)); + cxml::add_text_child(decryption, "Certificate", i.certificate (true)); } - decryption->add_child("PrivateKey")->add_child_text (_decryption_chain->key().get ()); + cxml::add_text_child(decryption, "PrivateKey", _decryption_chain->key().get()); /* [XML] History Filename of DCP to present in the <guilabel>File</guilabel> menu of the GUI; there can be more than one of these tags. */ for (auto i: _history) { - root->add_child("History")->add_child_text (i.string ()); + cxml::add_text_child(root, "History", i.string()); } /* [XML] History Filename of DCP to present in the <guilabel>File</guilabel> menu of the player; there can be more than one of these tags. */ for (auto i: _player_history) { - root->add_child("PlayerHistory")->add_child_text (i.string ()); + cxml::add_text_child(root, "PlayerHistory", i.string()); } /* [XML] DKDMGroup A group of DKDMs, each with a <code>Name</code> attribute, containing other <code><DKDMGroup></code> @@ -942,53 +935,53 @@ Config::write_config () const _dkdms->as_xml (root); /* [XML] CinemasFile Filename of cinemas list file. */ - root->add_child("CinemasFile")->add_child_text (_cinemas_file.string()); + cxml::add_text_child(root, "CinemasFile", _cinemas_file.string()); /* [XML] DKDMRecipientsFile Filename of DKDM recipients list file. */ - root->add_child("DKDMRecipientsFile")->add_child_text (_dkdm_recipients_file.string()); + cxml::add_text_child(root, "DKDMRecipientsFile", _dkdm_recipients_file.string()); /* [XML] ShowHintsBeforeMakeDCP 1 to show hints in the GUI before making a DCP, otherwise 0. */ - root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0"); + cxml::add_text_child(root, "ShowHintsBeforeMakeDCP", _show_hints_before_make_dcp ? "1" : "0"); /* [XML] ConfirmKDMEmail 1 to confirm before sending KDM emails in the GUI, otherwise 0. */ - root->add_child("ConfirmKDMEmail")->add_child_text (_confirm_kdm_email ? "1" : "0"); + cxml::add_text_child(root, "ConfirmKDMEmail", _confirm_kdm_email ? "1" : "0"); /* [XML] KDMFilenameFormat Format for KDM filenames. */ - root->add_child("KDMFilenameFormat")->add_child_text (_kdm_filename_format.specification ()); + cxml::add_text_child(root, "KDMFilenameFormat", _kdm_filename_format.specification()); /* [XML] KDMFilenameFormat Format for DKDM filenames. */ - root->add_child("DKDMFilenameFormat")->add_child_text(_dkdm_filename_format.specification()); + cxml::add_text_child(root, "DKDMFilenameFormat", _dkdm_filename_format.specification()); /* [XML] KDMContainerNameFormat Format for KDM containers (directories or ZIP files). */ - root->add_child("KDMContainerNameFormat")->add_child_text (_kdm_container_name_format.specification ()); + cxml::add_text_child(root, "KDMContainerNameFormat", _kdm_container_name_format.specification()); /* [XML] DCPMetadataFilenameFormat Format for DCP metadata filenames. */ - root->add_child("DCPMetadataFilenameFormat")->add_child_text (_dcp_metadata_filename_format.specification ()); + cxml::add_text_child(root, "DCPMetadataFilenameFormat", _dcp_metadata_filename_format.specification()); /* [XML] DCPAssetFilenameFormat Format for DCP asset filenames. */ - root->add_child("DCPAssetFilenameFormat")->add_child_text (_dcp_asset_filename_format.specification ()); + cxml::add_text_child(root, "DCPAssetFilenameFormat", _dcp_asset_filename_format.specification()); /* [XML] JumpToSelected 1 to make the GUI jump to the start of content when it is selected, otherwise 0. */ - root->add_child("JumpToSelected")->add_child_text (_jump_to_selected ? "1" : "0"); + cxml::add_text_child(root, "JumpToSelected", _jump_to_selected ? "1" : "0"); /* [XML] Nagged 1 if a particular nag screen has been shown and should not be shown again, otherwise 0. */ for (int i = 0; i < NAG_COUNT; ++i) { - xmlpp::Element* e = root->add_child ("Nagged"); - e->set_attribute ("Id", raw_convert<string>(i)); + auto e = cxml::add_child(root, "Nagged"); + e->set_attribute("id", raw_convert<string>(i)); e->add_child_text (_nagged[i] ? "1" : "0"); } /* [XML] PreviewSound 1 to use sound in the GUI preview and player, otherwise 0. */ - root->add_child("PreviewSound")->add_child_text (_sound ? "1" : "0"); + cxml::add_text_child(root, "PreviewSound", _sound ? "1" : "0"); if (_sound_output) { /* [XML:opt] PreviewSoundOutput Name of the audio output to use. */ - root->add_child("PreviewSoundOutput")->add_child_text (_sound_output.get()); + cxml::add_text_child(root, "PreviewSoundOutput", _sound_output.get()); } /* [XML] CoverSheet Text of the cover sheet to write when making DCPs. */ - root->add_child("CoverSheet")->add_child_text (_cover_sheet); + cxml::add_text_child(root, "CoverSheet", _cover_sheet); if (_last_player_load_directory) { - root->add_child("LastPlayerLoadDirectory")->add_child_text(_last_player_load_directory->string()); + cxml::add_text_child(root, "LastPlayerLoadDirectory", _last_player_load_directory->string()); } /* [XML] LastKDMWriteType Last type of KDM-write: <code>flat</code> for a flat file, <code>folder</code> for a folder or <code>zip</code> for a ZIP file. */ if (_last_kdm_write_type) { switch (_last_kdm_write_type.get()) { case KDM_WRITE_FLAT: - root->add_child("LastKDMWriteType")->add_child_text("flat"); + cxml::add_text_child(root, "LastKDMWriteType", "flat"); break; case KDM_WRITE_FOLDER: - root->add_child("LastKDMWriteType")->add_child_text("folder"); + cxml::add_text_child(root, "LastKDMWriteType", "folder"); break; case KDM_WRITE_ZIP: - root->add_child("LastKDMWriteType")->add_child_text("zip"); + cxml::add_text_child(root, "LastKDMWriteType", "zip"); break; } } @@ -996,58 +989,58 @@ Config::write_config () const if (_last_dkdm_write_type) { switch (_last_dkdm_write_type.get()) { case DKDM_WRITE_INTERNAL: - root->add_child("LastDKDMWriteType")->add_child_text("internal"); + cxml::add_text_child(root, "LastDKDMWriteType", "internal"); break; case DKDM_WRITE_FILE: - root->add_child("LastDKDMWriteType")->add_child_text("file"); + cxml::add_text_child(root, "LastDKDMWriteType", "file"); break; } } /* [XML] FramesInMemoryMultiplier value to multiply the encoding threads count by to get the maximum number of frames to be held in memory at once. */ - root->add_child("FramesInMemoryMultiplier")->add_child_text(raw_convert<string>(_frames_in_memory_multiplier)); + cxml::add_text_child(root, "FramesInMemoryMultiplier", raw_convert<string>(_frames_in_memory_multiplier)); /* [XML] DecodeReduction power of 2 to reduce DCP images by before decoding in the player. */ if (_decode_reduction) { - root->add_child("DecodeReduction")->add_child_text(raw_convert<string>(_decode_reduction.get())); + cxml::add_text_child(root, "DecodeReduction", raw_convert<string>(_decode_reduction.get())); } /* [XML] DefaultNotify 1 to default jobs to notify when complete, otherwise 0. */ - root->add_child("DefaultNotify")->add_child_text(_default_notify ? "1" : "0"); + cxml::add_text_child(root, "DefaultNotify", _default_notify ? "1" : "0"); /* [XML] Notification 1 if a notification type is enabled, otherwise 0. */ for (int i = 0; i < NOTIFICATION_COUNT; ++i) { - xmlpp::Element* e = root->add_child ("Notification"); - e->set_attribute ("Id", raw_convert<string>(i)); + auto e = cxml::add_child(root, "Notification"); + e->set_attribute ("id", raw_convert<string>(i)); e->add_child_text (_notification[i] ? "1" : "0"); } if (_barco_username) { /* [XML] BarcoUsername Username for logging into Barco's servers when downloading server certificates. */ - root->add_child("BarcoUsername")->add_child_text(*_barco_username); + cxml::add_text_child(root, "BarcoUsername", *_barco_username); } if (_barco_password) { /* [XML] BarcoPassword Password for logging into Barco's servers when downloading server certificates. */ - root->add_child("BarcoPassword")->add_child_text(*_barco_password); + cxml::add_text_child(root, "BarcoPassword", *_barco_password); } if (_christie_username) { /* [XML] ChristieUsername Username for logging into Christie's servers when downloading server certificates. */ - root->add_child("ChristieUsername")->add_child_text(*_christie_username); + cxml::add_text_child(root, "ChristieUsername", *_christie_username); } if (_christie_password) { /* [XML] ChristiePassword Password for logging into Christie's servers when downloading server certificates. */ - root->add_child("ChristiePassword")->add_child_text(*_christie_password); + cxml::add_text_child(root, "ChristiePassword", *_christie_password); } if (_gdc_username) { /* [XML] GDCUsername Username for logging into GDC's servers when downloading server certificates. */ - root->add_child("GDCUsername")->add_child_text(*_gdc_username); + cxml::add_text_child(root, "GDCUsername", *_gdc_username); } if (_gdc_password) { /* [XML] GDCPassword Password for logging into GDC's servers when downloading server certificates. */ - root->add_child("GDCPassword")->add_child_text(*_gdc_password); + cxml::add_text_child(root, "GDCPassword", *_gdc_password); } /* [XML] PlayerMode <code>window</code> for a single window, <code>full</code> for full-screen and <code>dual</code> for full screen playback @@ -1055,80 +1048,100 @@ Config::write_config () const */ switch (_player_mode) { case PLAYER_MODE_WINDOW: - root->add_child("PlayerMode")->add_child_text("window"); + cxml::add_text_child(root, "PlayerMode", "window"); break; case PLAYER_MODE_FULL: - root->add_child("PlayerMode")->add_child_text("full"); + cxml::add_text_child(root, "PlayerMode", "full"); break; case PLAYER_MODE_DUAL: - root->add_child("PlayerMode")->add_child_text("dual"); + cxml::add_text_child(root, "PlayerMode", "dual"); break; } + if (_player_restricted_menus) { + cxml::add_text_child(root, "PlayerRestrictedMenus", "1"); + } + + if (_playlist_editor_restricted_menus) { + cxml::add_text_child(root, "PlaylistEditorRestrictedMenus", "1"); + } + /* [XML] ImageDisplay Screen number to put image on in dual-screen player mode. */ - root->add_child("ImageDisplay")->add_child_text(raw_convert<string>(_image_display)); + cxml::add_text_child(root, "ImageDisplay", raw_convert<string>(_image_display)); switch (_video_view_type) { case VIDEO_VIEW_SIMPLE: - root->add_child("VideoViewType")->add_child_text("simple"); + cxml::add_text_child(root, "VideoViewType", "simple"); break; case VIDEO_VIEW_OPENGL: - root->add_child("VideoViewType")->add_child_text("opengl"); + cxml::add_text_child(root, "VideoViewType", "opengl"); break; } /* [XML] RespectKDMValidityPeriods 1 to refuse to use KDMs that are out of date, 0 to ignore KDM dates. */ - root->add_child("RespectKDMValidityPeriods")->add_child_text(_respect_kdm_validity_periods ? "1" : "0"); + cxml::add_text_child(root, "RespectKDMValidityPeriods", _respect_kdm_validity_periods ? "1" : "0"); if (_player_debug_log_file) { /* [XML] PlayerLogFile Filename to use for player debug logs. */ - root->add_child("PlayerDebugLogFile")->add_child_text(_player_debug_log_file->string()); + cxml::add_text_child(root, "PlayerDebugLogFile", _player_debug_log_file->string()); } if (_player_content_directory) { /* [XML] PlayerContentDirectory Directory to use for player content in the dual-screen mode. */ - root->add_child("PlayerContentDirectory")->add_child_text(_player_content_directory->string()); + cxml::add_text_child(root, "PlayerContentDirectory", _player_content_directory->string()); } if (_player_playlist_directory) { /* [XML] PlayerPlaylistDirectory Directory to use for player playlists in the dual-screen mode. */ - root->add_child("PlayerPlaylistDirectory")->add_child_text(_player_playlist_directory->string()); + cxml::add_text_child(root, "PlayerPlaylistDirectory", _player_playlist_directory->string()); } if (_player_kdm_directory) { /* [XML] PlayerKDMDirectory Directory to use for player KDMs in the dual-screen mode. */ - root->add_child("PlayerKDMDirectory")->add_child_text(_player_kdm_directory->string()); + cxml::add_text_child(root, "PlayerKDMDirectory", _player_kdm_directory->string()); } if (_audio_mapping) { - _audio_mapping->as_xml (root->add_child("AudioMapping")); + _audio_mapping->as_xml(cxml::add_child(root, "AudioMapping")); } for (auto const& i: _custom_languages) { - root->add_child("CustomLanguage")->add_child_text(i.to_string()); + cxml::add_text_child(root, "CustomLanguage", i.to_string()); } for (auto const& initial: _initial_paths) { if (initial.second) { - root->add_child(initial.first)->add_child_text(initial.second->string()); + cxml::add_text_child(root, initial.first, initial.second->string()); } } - root->add_child("UseISDCFNameByDefault")->add_child_text(_use_isdcf_name_by_default ? "1" : "0"); - root->add_child("WriteKDMsToDisk")->add_child_text(_write_kdms_to_disk ? "1" : "0"); - root->add_child("EmailKDMs")->add_child_text(_email_kdms ? "1" : "0"); - root->add_child("DefaultKDMType")->add_child_text(dcp::formulation_to_string(_default_kdm_type)); - root->add_child("AutoCropThreshold")->add_child_text(raw_convert<string>(_auto_crop_threshold)); + cxml::add_text_child(root, "UseISDCFNameByDefault", _use_isdcf_name_by_default ? "1" : "0"); + cxml::add_text_child(root, "WriteKDMsToDisk", _write_kdms_to_disk ? "1" : "0"); + cxml::add_text_child(root, "EmailKDMs", _email_kdms ? "1" : "0"); + cxml::add_text_child(root, "DefaultKDMType", dcp::formulation_to_string(_default_kdm_type)); + cxml::add_text_child(root, "AutoCropThreshold", raw_convert<string>(_auto_crop_threshold)); if (_last_release_notes_version) { - root->add_child("LastReleaseNotesVersion")->add_child_text(*_last_release_notes_version); + cxml::add_text_child(root, "LastReleaseNotesVersion", *_last_release_notes_version); } if (_main_divider_sash_position) { - root->add_child("MainDividerSashPosition")->add_child_text(raw_convert<string>(*_main_divider_sash_position)); + cxml::add_text_child(root, "MainDividerSashPosition", raw_convert<string>(*_main_divider_sash_position)); } if (_main_content_divider_sash_position) { - root->add_child("MainContentDividerSashPosition")->add_child_text(raw_convert<string>(*_main_content_divider_sash_position)); + cxml::add_text_child(root, "MainContentDividerSashPosition", raw_convert<string>(*_main_content_divider_sash_position)); } - root->add_child("DefaultAddFileLocation")->add_child_text( + cxml::add_text_child(root, "DefaultAddFileLocation", _default_add_file_location == DefaultAddFileLocation::SAME_AS_LAST_TIME ? "last" : "project" ); /* [XML] AllowSMPTEBv20 1 to allow the user to choose SMPTE (Bv2.0 only) as a standard, otherwise 0 */ - root->add_child("AllowSMPTEBv20")->add_child_text(_allow_smpte_bv20 ? "1" : "0"); + cxml::add_text_child(root, "AllowSMPTEBv20", _allow_smpte_bv20 ? "1" : "0"); /* [XML] ISDCFNamePartLength Maximum length of the "name" part of an ISDCF name, which should be 14 according to the standard */ - root->add_child("ISDCFNamePartLength")->add_child_text(raw_convert<string>(_isdcf_name_part_length)); + cxml::add_text_child(root, "ISDCFNamePartLength", raw_convert<string>(_isdcf_name_part_length)); + /* [XML] EnablePlayerHTTPServer 1 to enable a HTTP server to control the player, otherwise 0 */ + cxml::add_text_child(root, "EnablePlayerHTTPServer", _enable_player_http_server ? "1" : "0"); + /* [XML] PlayerHTTPServerPort Port to use for player HTTP server (if enabled) */ + cxml::add_text_child(root, "PlayerHTTPServerPort", raw_convert<string>(_player_http_server_port)); + /* [XML] RelativePaths 1 to write relative paths to project metadata files, 0 to use absolute paths */ + cxml::add_text_child(root, "RelativePaths", _relative_paths ? "1" : "0"); + +#ifdef DCPOMATIC_GROK + if (_grok) { + _grok->as_xml(cxml::add_child(root, "Grok")); + } +#endif - _export.write(root->add_child("Export")); + _export.write(cxml::add_child(root, "Export")); auto target = config_write_file(); @@ -1157,10 +1170,10 @@ write_file (string root_node, string node, string version, list<shared_ptr<T>> t { xmlpp::Document doc; auto root = doc.create_root_node (root_node); - root->add_child("Version")->add_child_text(version); + cxml::add_text_child(root, "Version", version); for (auto i: things) { - i->as_xml (root->add_child(node)); + i->as_xml(cxml::add_child(root, node)); } try { @@ -1175,20 +1188,6 @@ write_file (string root_node, string node, string version, list<shared_ptr<T>> t } -void -Config::write_cinemas () const -{ - write_file ("Cinemas", "Cinema", "1", _cinemas, _cinemas_file); -} - - -void -Config::write_dkdm_recipients () const -{ - write_file ("DKDMRecipients", "DKDMRecipient", "1", _dkdm_recipients, _dkdm_recipients_file); -} - - boost::filesystem::path Config::default_directory_or (boost::filesystem::path a) const { @@ -1235,20 +1234,20 @@ Config::set_kdm_email_to_default () { _kdm_subject = _("KDM delivery: $CPL_NAME"); - _kdm_email = _( + _kdm_email = variant::insert_dcpomatic(_( "Dear Projectionist\n\n" "Please find attached KDMs for $CPL_NAME.\n\n" "Cinema: $CINEMA_NAME\n" "Screen(s): $SCREENS\n\n" "The KDMs are valid from $START_TIME until $END_TIME.\n\n" - "Best regards,\nDCP-o-matic" - ); + "Best regards,\n%1" + )); } void Config::set_notification_email_to_default () { - _notification_subject = _("DCP-o-matic notification"); + _notification_subject = variant::insert_dcpomatic(_("%1 notification")); _notification_email = _( "$JOB_NAME: $JOB_STATUS" @@ -1319,7 +1318,7 @@ Config::add_to_history_internal (vector<boost::filesystem::path>& h, boost::file h.insert (h.begin (), p); if (h.size() > HISTORY_SIZE) { - h.pop_back (); + h.resize(HISTORY_SIZE); } changed (HISTORY); @@ -1350,20 +1349,6 @@ Config::have_existing (string file) void -Config::read_cinemas (cxml::Document const & f) -{ - _cinemas.clear (); - for (auto i: f.node_children("Cinema")) { - /* Slightly grotty two-part construction of Cinema here so that we can use - shared_from_this. - */ - auto cinema = make_shared<Cinema>(i); - cinema->read_screens (i); - _cinemas.push_back (cinema); - } -} - -void Config::set_cinemas_file (boost::filesystem::path file) { if (file == _cinemas_file) { @@ -1372,25 +1357,27 @@ Config::set_cinemas_file (boost::filesystem::path file) _cinemas_file = file; - if (dcp::filesystem::exists(_cinemas_file)) { - /* Existing file; read it in */ - cxml::Document f ("Cinemas"); - f.read_file(dcp::filesystem::fix_long_path(_cinemas_file)); - read_cinemas (f); - } - - changed (CINEMAS); changed (OTHER); } void -Config::read_dkdm_recipients (cxml::Document const & f) +Config::set_dkdm_recipients_file(boost::filesystem::path file) { - _dkdm_recipients.clear (); - for (auto i: f.node_children("DKDMRecipient")) { - _dkdm_recipients.push_back (make_shared<DKDMRecipient>(i)); + if (file == _dkdm_recipients_file) { + return; } + + _dkdm_recipients_file = file; + + changed(OTHER); +} + + +void +Config::save_default_template(shared_ptr<const Film> film) const +{ + film->write_template(write_path("default.xml")); } @@ -1401,14 +1388,14 @@ Config::save_template (shared_ptr<const Film> film, string name) const } -list<string> +vector<string> Config::templates () const { if (!dcp::filesystem::exists(read_path("templates"))) { return {}; } - list<string> n; + vector<string> n; for (auto const& i: dcp::filesystem::directory_iterator(read_path("templates"))) { n.push_back (i.path().filename().string()); } @@ -1430,6 +1417,18 @@ Config::template_read_path (string name) const boost::filesystem::path +Config::default_template_read_path() const +{ + if (!boost::filesystem::exists(read_path("default.xml"))) { + auto film = std::make_shared<const Film>(optional<boost::filesystem::path>()); + save_default_template(film); + } + + return read_path("default.xml"); +} + + +boost::filesystem::path Config::template_write_path (string name) const { return write_path("templates") / tidy_for_filename (name); @@ -1500,7 +1499,7 @@ void Config::link (boost::filesystem::path new_file) const { xmlpp::Document doc; - doc.create_root_node("Config")->add_child("Link")->add_child_text(new_file.string()); + cxml::add_text_child(doc.create_root_node("Config"), "Link", new_file.string()); try { doc.write_to_file_formatted(write_path("config.xml").string()); } catch (xmlpp::exception& e) { @@ -1623,10 +1622,10 @@ save_all_config_as_zip (boost::filesystem::path zip_file) auto config = Config::instance(); zipper.add ("config.xml", dcp::file_to_string(config->config_read_file())); if (dcp::filesystem::exists(config->cinemas_file())) { - zipper.add ("cinemas.xml", dcp::file_to_string(config->cinemas_file())); + zipper.add("cinemas.sqlite3", dcp::file_to_string(config->cinemas_file())); } if (dcp::filesystem::exists(config->dkdm_recipients_file())) { - zipper.add ("dkdm_recipients.xml", dcp::file_to_string(config->dkdm_recipients_file())); + zipper.add("dkdm_recipients.sqlite3", dcp::file_to_string(config->dkdm_recipients_file())); } zipper.close (); @@ -1634,22 +1633,58 @@ save_all_config_as_zip (boost::filesystem::path zip_file) void -Config::load_from_zip(boost::filesystem::path zip_file) +Config::load_from_zip(boost::filesystem::path zip_file, CinemasAction action) { + backup(); + + auto const current_cinemas = cinemas_file(); + /* This is (unfortunately) a full path, and the user can't change it, so + * we always want to use that same path in the future no matter what is in the + * config.xml that we are about to load. + */ + auto const current_dkdm_recipients = dkdm_recipients_file(); + Unzipper unzipper(zip_file); dcp::write_string_to_file(unzipper.get("config.xml"), config_write_file()); - try { - dcp::write_string_to_file(unzipper.get("cinemas.xml"), cinemas_file()); - dcp::write_string_to_file(unzipper.get("dkdm_recipient.xml"), dkdm_recipients_file()); - } catch (std::runtime_error&) {} + if (action == CinemasAction::WRITE_TO_PATH_IN_ZIPPED_CONFIG) { + /* Read the zipped config, so that the cinemas file path is the new one and + * we write the cinemas to it. + */ + read(); + boost::filesystem::create_directories(cinemas_file().parent_path()); + set_dkdm_recipients_file(current_dkdm_recipients); + } - read(); + if (unzipper.contains("cinemas.xml") && action != CinemasAction::IGNORE) { + CinemaList cinemas; + cinemas.clear(); + cinemas.read_legacy_string(unzipper.get("cinemas.xml")); + } + + if (unzipper.contains("dkdm_recipients.xml")) { + DKDMRecipientList recipients; + recipients.clear(); + recipients.read_legacy_string(unzipper.get("dkdm_recipients.xml")); + } + + if (unzipper.contains("cinemas.sqlite3") && action != CinemasAction::IGNORE) { + dcp::write_string_to_file(unzipper.get("cinemas.sqlite3"), cinemas_file()); + } + + if (unzipper.contains("dkdm_recipients.sqlite3")) { + dcp::write_string_to_file(unzipper.get("dkdm_recipients.sqlite3"), dkdm_recipients_file()); + } + + if (action != CinemasAction::WRITE_TO_PATH_IN_ZIPPED_CONFIG) { + /* Read the zipped config, then reset the cinemas file to be the old one */ + read(); + set_cinemas_file(current_cinemas); + set_dkdm_recipients_file(current_dkdm_recipients); + } changed(Property::USE_ANY_SERVERS); changed(Property::SERVERS); - changed(Property::CINEMAS); - changed(Property::DKDM_RECIPIENTS); changed(Property::SOUND); changed(Property::SOUND_OUTPUT); changed(Property::PLAYER_CONTENT_DIRECTORY); @@ -1685,3 +1720,57 @@ Config::initial_path(string id) const return iter->second; } + +bool +Config::zip_contains_cinemas(boost::filesystem::path zip) +{ + Unzipper unzipper(zip); + return unzipper.contains("cinemas.sqlite3") || unzipper.contains("cinemas.xml"); +} + + +boost::filesystem::path +Config::cinemas_file_from_zip(boost::filesystem::path zip) +{ + Unzipper unzipper(zip); + DCPOMATIC_ASSERT(unzipper.contains("config.xml")); + cxml::Document document("Config"); + document.read_string(unzipper.get("config.xml")); + return document.string_child("CinemasFile"); +} + + +#ifdef DCPOMATIC_GROK + +Config::Grok::Grok(cxml::ConstNodePtr node) + : enable(node->bool_child("Enable")) + , binary_location(node->string_child("BinaryLocation")) + , selected(node->number_child<int>("Selected")) + , licence_server(node->string_child("LicenceServer")) + , licence_port(node->number_child<int>("LicencePort")) + , licence(node->string_child("Licence")) +{ + +} + + +void +Config::Grok::as_xml(xmlpp::Element* node) const +{ + node->add_child("BinaryLocation")->add_child_text(binary_location.string()); + node->add_child("Enable")->add_child_text((enable ? "1" : "0")); + node->add_child("Selected")->add_child_text(raw_convert<string>(selected)); + node->add_child("LicenceServer")->add_child_text(licence_server); + node->add_child("LicencePort")->add_child_text(raw_convert<string>(licence_port)); + node->add_child("Licence")->add_child_text(licence); +} + + +void +Config::set_grok(Grok const& grok) +{ + _grok = grok; + changed(GROK); +} + +#endif diff --git a/src/lib/config.h b/src/lib/config.h index 9e6b747a2..52fe47b3f 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -28,9 +28,11 @@ #include "audio_mapping.h" +#include "enum_indexed_vector.h" #include "export_config.h" #include "rough_duration.h" #include "state.h" +#include "video_encoding.h" #include <dcp/name_format.h> #include <dcp/certificate_chain.h> #include <dcp/encrypted_kdm.h> @@ -48,6 +50,8 @@ class DKDMRecipient; class Film; class Ratio; +#undef IGNORE + extern void save_all_config_as_zip (boost::filesystem::path zip_file); @@ -79,13 +83,28 @@ public: boost::filesystem::path default_directory_or (boost::filesystem::path a) const; boost::filesystem::path default_kdm_directory_or (boost::filesystem::path a) const; - void load_from_zip(boost::filesystem::path zip_file); + enum class CinemasAction + { + /** Copy the cinemas.{xml,sqlite3} in the ZIP file to the path + * specified in the current config, overwriting whatever is there, + * and use that path. + */ + WRITE_TO_CURRENT_PATH, + /** Copy the cinemas.{xml,sqlite3} in the ZIP file over the path + * specified in the config.xml from the ZIP, overwriting whatever + * is there and creating any required directories, and use + * that path. + */ + WRITE_TO_PATH_IN_ZIPPED_CONFIG, + /** Do nothing with the cinemas.{xml,sqlite3} in the ZIP file */ + IGNORE + }; + + void load_from_zip(boost::filesystem::path zip_file, CinemasAction action); enum Property { USE_ANY_SERVERS, SERVERS, - CINEMAS, - DKDM_RECIPIENTS, SOUND, SOUND_OUTPUT, PLAYER_CONTENT_DIRECTORY, @@ -97,6 +116,10 @@ public: AUTO_CROP_THRESHOLD, ALLOW_SMPTE_BV20, ISDCF_NAME_PART_LENGTH, + ALLOW_ANY_CONTAINER, +#ifdef DCPOMATIC_GROK + GROK, +#endif OTHER }; @@ -157,14 +180,6 @@ public: return _tms_password; } - std::list<std::shared_ptr<Cinema>> cinemas () const { - return _cinemas; - } - - std::list<std::shared_ptr<DKDMRecipient>> dkdm_recipients () const { - return _dkdm_recipients; - } - std::list<int> allowed_dcp_frame_rates () const { return _allowed_dcp_frame_rates; } @@ -229,8 +244,8 @@ public: return _dcp_j2k_comment; } - int default_j2k_bandwidth () const { - return _default_j2k_bandwidth; + int64_t default_video_bit_rate(VideoEncoding encoding) const { + return _default_video_bit_rate[encoding]; } int default_audio_delay () const { @@ -345,8 +360,8 @@ public: return _check_for_test_updates; } - int maximum_j2k_bandwidth () const { - return _maximum_j2k_bandwidth; + int64_t maximum_video_bit_rate(VideoEncoding encoding) const { + return _maximum_video_bit_rate[encoding]; } int log_types () const { @@ -531,6 +546,14 @@ public: return _player_mode; } + bool player_restricted_menus() const { + return _player_restricted_menus; + } + + bool playlist_editor_restricted_menus() const { + return _playlist_editor_restricted_menus; + } + int image_display () const { return _image_display; } @@ -621,10 +644,44 @@ public: return _allow_smpte_bv20; } +#ifdef DCPOMATIC_GROK + class Grok + { + public: + Grok() = default; + Grok(cxml::ConstNodePtr node); + + void as_xml(xmlpp::Element* node) const; + + bool enable = false; + boost::filesystem::path binary_location; + int selected = 0; + std::string licence_server; + int licence_port = 5000; + std::string licence; + }; + + boost::optional<Grok> grok() const { + return _grok; + } +#endif + int isdcf_name_part_length() const { return _isdcf_name_part_length; } + bool enable_player_http_server() const { + return _enable_player_http_server; + } + + int player_http_server_port() const { + return _player_http_server_port; + } + + bool relative_paths() const { + return _relative_paths; + } + /* SET (mostly) */ void set_master_encoding_threads (int n) { @@ -680,26 +737,6 @@ public: maybe_set (_tms_password, p); } - void add_cinema (std::shared_ptr<Cinema> c) { - _cinemas.push_back (c); - changed (CINEMAS); - } - - void remove_cinema (std::shared_ptr<Cinema> c) { - _cinemas.remove (c); - changed (CINEMAS); - } - - void add_dkdm_recipient (std::shared_ptr<DKDMRecipient> c) { - _dkdm_recipients.push_back (c); - changed (DKDM_RECIPIENTS); - } - - void remove_dkdm_recipient (std::shared_ptr<DKDMRecipient> c) { - _dkdm_recipients.remove (c); - changed (DKDM_RECIPIENTS); - } - void set_allowed_dcp_frame_rates (std::list<int> const & r) { maybe_set (_allowed_dcp_frame_rates, r); } @@ -709,7 +746,7 @@ public: } void set_allow_any_container (bool a) { - maybe_set (_allow_any_container, a); + maybe_set(_allow_any_container, a, ALLOW_ANY_CONTAINER); } void set_allow_96hhz_audio (bool a) { @@ -745,14 +782,6 @@ public: maybe_set (_default_still_length, s); } - void set_default_dcp_content_type (DCPContentType const * t) { - maybe_set (_default_dcp_content_type, t); - } - - void set_default_dcp_audio_channels (int c) { - maybe_set (_default_dcp_audio_channels, c); - } - void set_dcp_issuer (std::string i) { maybe_set (_dcp_issuer, i); } @@ -777,18 +806,10 @@ public: maybe_set (_dcp_j2k_comment, c); } - void set_default_j2k_bandwidth (int b) { - maybe_set (_default_j2k_bandwidth, b); - } - void set_default_audio_delay (int d) { maybe_set (_default_audio_delay, d); } - void set_default_interop (bool i) { - maybe_set (_default_interop, i); - } - void set_default_audio_language(dcp::LanguageTag tag) { maybe_set(_default_audio_language, tag); } @@ -797,18 +818,6 @@ public: maybe_set(_default_audio_language, boost::optional<dcp::LanguageTag>()); } - void set_default_territory(dcp::LanguageTag::RegionSubtag tag) { - maybe_set(_default_territory, tag); - } - - void unset_default_territory() { - maybe_set(_default_territory, boost::optional<dcp::LanguageTag::RegionSubtag>()); - } - - void set_default_metadata (std::map<std::string, std::string> const& metadata) { - maybe_set (_default_metadata, metadata); - } - void set_upload_after_make_dcp (bool u) { maybe_set (_upload_after_make_dcp, u); } @@ -900,8 +909,8 @@ public: maybe_set (_check_for_test_updates, c); } - void set_maximum_j2k_bandwidth (int b) { - maybe_set (_maximum_j2k_bandwidth, b); + void set_maximum_video_bit_rate(VideoEncoding encoding, int64_t b) { + maybe_set(_maximum_video_bit_rate[encoding], b); } void set_log_types (int t) { @@ -929,6 +938,8 @@ public: void set_cinemas_file (boost::filesystem::path file); + void set_dkdm_recipients_file(boost::filesystem::path file); + void set_show_hints_before_make_dcp (bool s) { maybe_set (_show_hints_before_make_dcp, s); } @@ -1202,10 +1213,27 @@ public: maybe_set(_allow_smpte_bv20, allow, ALLOW_SMPTE_BV20); } +#ifdef DCPOMATIC_GROK + void set_grok(Grok const& grok); +#endif + void set_isdcf_name_part_length(int length) { maybe_set(_isdcf_name_part_length, length, ISDCF_NAME_PART_LENGTH); } + void set_enable_player_http_server(bool enable) { + maybe_set(_enable_player_http_server, enable); + } + + void set_player_http_server_port(int port) { + maybe_set(_player_http_server_port, port); + } + + void set_relative_paths(bool relative) { + maybe_set(_relative_paths, relative); + } + + void changed (Property p = OTHER); boost::signals2::signal<void (Property)> Changed; /** Emitted if read() failed on an existing Config file. There is nothing @@ -1213,8 +1241,6 @@ public: */ enum class LoadFailure { CONFIG, - CINEMAS, - DKDM_RECIPIENTS }; static boost::signals2::signal<void (LoadFailure)> FailedToLoad; /** Emitted if read() issued a warning which the user might want to know about */ @@ -1234,17 +1260,17 @@ public: void write () const override; void write_config () const; - void write_cinemas () const; - void write_dkdm_recipients () const; void link (boost::filesystem::path new_file) const; void copy_and_link (boost::filesystem::path new_file) const; bool have_write_permission () const; + void save_default_template(std::shared_ptr<const Film> film) const; void save_template (std::shared_ptr<const Film> film, std::string name) const; bool existing_template (std::string name) const; - std::list<std::string> templates () const; + /** @return Template names (not including the default) */ + std::vector<std::string> templates() const; boost::filesystem::path template_read_path (std::string name) const; - boost::filesystem::path template_write_path (std::string name) const; + boost::filesystem::path default_template_read_path() const; void rename_template (std::string old_name, std::string new_name) const; void delete_template (std::string name) const; @@ -1256,6 +1282,9 @@ public: static bool have_existing (std::string); static boost::filesystem::path config_read_file (); static boost::filesystem::path config_write_file (); + static bool zip_contains_cinemas(boost::filesystem::path zip); + static boost::filesystem::path cinemas_file_from_zip(boost::filesystem::path zip); + template <class T> void maybe_set (T& member, T new_value, Property prop = OTHER) { @@ -1278,20 +1307,16 @@ public: private: Config (); void read () override; - void read_config(); - void read_cinemas(); - void read_dkdm_recipients(); void set_defaults (); void set_kdm_email_to_default (); void set_notification_email_to_default (); void set_cover_sheet_to_default (); - void read_cinemas (cxml::Document const & f); - void read_dkdm_recipients (cxml::Document const & f); std::shared_ptr<dcp::CertificateChain> create_certificate_chain (); boost::filesystem::path directory_or (boost::optional<boost::filesystem::path> dir, boost::filesystem::path a) const; void add_to_history_internal (std::vector<boost::filesystem::path>& h, boost::filesystem::path p); void clean_history_internal (std::vector<boost::filesystem::path>& h); void backup (); + boost::filesystem::path template_write_path(std::string name) const; /** number of threads which a master DoM should use for J2K encoding on the local machine */ int _master_encoding_threads; @@ -1342,7 +1367,7 @@ private: std::string _dcp_product_name; std::string _dcp_product_version; std::string _dcp_j2k_comment; - int _default_j2k_bandwidth; + EnumIndexedVector<int64_t, VideoEncoding> _default_video_bit_rate; int _default_audio_delay; bool _default_interop; boost::optional<dcp::LanguageTag> _default_audio_language; @@ -1353,8 +1378,6 @@ private: */ boost::optional<boost::filesystem::path> _default_kdm_directory; bool _upload_after_make_dcp; - std::list<std::shared_ptr<Cinema>> _cinemas; - std::list<std::shared_ptr<DKDMRecipient>> _dkdm_recipients; std::string _mail_server; int _mail_port; EmailProtocol _mail_protocol; @@ -1379,8 +1402,8 @@ private: /** true to check for updates on startup */ bool _check_for_updates; bool _check_for_test_updates; - /** maximum allowed J2K bandwidth in bits per second */ - int _maximum_j2k_bandwidth; + /** maximum allowed video bit rate in bits per second */ + EnumIndexedVector<int64_t, VideoEncoding> _maximum_video_bit_rate; int _log_types; bool _analyse_ebur128; bool _automatic_audio_analysis; @@ -1419,6 +1442,8 @@ private: boost::optional<std::string> _gdc_username; boost::optional<std::string> _gdc_password; PlayerMode _player_mode; + bool _player_restricted_menus = false; + bool _playlist_editor_restricted_menus = false; int _image_display; VideoViewType _video_view_type; bool _respect_kdm_validity_periods; @@ -1446,6 +1471,13 @@ private: DefaultAddFileLocation _default_add_file_location; bool _allow_smpte_bv20; int _isdcf_name_part_length; + bool _enable_player_http_server; + int _player_http_server_port; + bool _relative_paths; + +#ifdef DCPOMATIC_GROK + boost::optional<Grok> _grok; +#endif ExportConfig _export; diff --git a/src/lib/constants.h b/src/lib/constants.h index 3b1871554..cfa156778 100644 --- a/src/lib/constants.h +++ b/src/lib/constants.h @@ -29,7 +29,6 @@ #define DCPOMATIC_HELLO "I mean really, Ray, it's used." /** Number of films to keep in history */ #define HISTORY_SIZE 10 -#define REPORT_PROBLEM _("Please report this problem by using Help -> Report a problem or via email to carl@dcpomatic.com") #define TEXT_FONT_ID "font" /** Largest KDM size (in bytes) that will be accepted */ #define MAX_KDM_SIZE (256 * 1024) @@ -47,6 +46,7 @@ #define MAX_CLOSED_CAPTION_XML_SIZE (256 * 1024) #define MAX_CLOSED_CAPTION_XML_SIZE_TEXT "256KB" #define CERTIFICATE_VALIDITY_PERIOD (10 * 365) +#define SNAP_SUBDIVISION 64 #endif diff --git a/src/lib/content.cc b/src/lib/content.cc index f13201b93..be30ccf43 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -84,10 +84,14 @@ Content::Content (boost::filesystem::path p) } -Content::Content (cxml::ConstNodePtr node) +Content::Content(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory) { for (auto i: node->node_children("Path")) { - _paths.push_back (i->content()); + if (film_directory) { + _paths.push_back(boost::filesystem::weakly_canonical(boost::filesystem::absolute(i->content(), *film_directory))); + } else { + _paths.push_back(i->content()); + } auto const mod = i->optional_number_attribute<time_t>("mtime"); if (mod) { _last_write_times.push_back (*mod); @@ -140,23 +144,28 @@ Content::Content (vector<shared_ptr<Content>> c) void -Content::as_xml (xmlpp::Node* node, bool with_paths) const +Content::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { boost::mutex::scoped_lock lm (_mutex); if (with_paths) { for (size_t i = 0; i < _paths.size(); ++i) { - auto p = node->add_child("Path"); - p->add_child_text (_paths[i].string()); + auto path = _paths[i]; + if (path_behaviour == PathBehaviour::MAKE_RELATIVE) { + DCPOMATIC_ASSERT(film_directory); + path = boost::filesystem::relative(path, *film_directory); + } + auto p = cxml::add_child(element, "Path"); + p->add_child_text(path.string()); p->set_attribute ("mtime", raw_convert<string>(_last_write_times[i])); } } - node->add_child("Digest")->add_child_text(_digest); - node->add_child("Position")->add_child_text(raw_convert<string>(_position.get())); - node->add_child("TrimStart")->add_child_text(raw_convert<string>(_trim_start.get())); - node->add_child("TrimEnd")->add_child_text(raw_convert<string>(_trim_end.get())); + cxml::add_text_child(element, "Digest", _digest); + cxml::add_text_child(element, "Position", raw_convert<string>(_position.get())); + cxml::add_text_child(element, "TrimStart", raw_convert<string>(_trim_start.get())); + cxml::add_text_child(element, "TrimEnd", raw_convert<string>(_trim_end.get())); if (_video_frame_rate) { - node->add_child("VideoFrameRate")->add_child_text(raw_convert<string>(_video_frame_rate.get())); + cxml::add_text_child(element, "VideoFrameRate", raw_convert<string>(_video_frame_rate.get())); } } @@ -285,16 +294,16 @@ Content::set_trim_end (ContentTime t) shared_ptr<Content> -Content::clone () const +Content::clone() const { /* This is a bit naughty, but I can't think of a compelling reason not to do it ... */ xmlpp::Document doc; auto node = doc.create_root_node ("Content"); - as_xml (node, true); + as_xml(node, true, PathBehaviour::KEEP_ABSOLUTE, {}); /* notes is unused here (we assume) */ list<string> notes; - return content_factory (make_shared<cxml::Node>(node), Film::current_state_version, notes); + return content_factory(make_shared<cxml::Node>(node), {}, Film::current_state_version, notes); } @@ -355,7 +364,10 @@ Content::set_paths (vector<boost::filesystem::path> paths) { boost::mutex::scoped_lock lm (_mutex); - _paths = paths; + _paths.clear(); + for (auto path: paths) { + _paths.push_back(boost::filesystem::canonical(path)); + } _last_write_times.clear (); for (auto i: _paths) { boost::system::error_code ec; @@ -550,7 +562,7 @@ void Content::add_path (boost::filesystem::path p) { boost::mutex::scoped_lock lm (_mutex); - _paths.push_back (p); + _paths.push_back(boost::filesystem::canonical(p)); boost::system::error_code ec; auto last_write = dcp::filesystem::last_write_time(p, ec); _last_write_times.push_back (ec ? 0 : last_write); diff --git a/src/lib/content.h b/src/lib/content.h index 540abdd8a..29dce2c9e 100644 --- a/src/lib/content.h +++ b/src/lib/content.h @@ -30,6 +30,7 @@ #include "change_signaller.h" #include "dcpomatic_time.h" +#include "path_behaviour.h" #include "signaller.h" #include "user_property.h" #include "text_type.h" @@ -75,7 +76,7 @@ public: explicit Content (); Content (dcpomatic::DCPTime); Content (boost::filesystem::path); - Content (cxml::ConstNodePtr); + Content (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> directory); Content (std::vector<std::shared_ptr<Content>>); virtual ~Content () {} @@ -100,7 +101,13 @@ public: */ virtual std::string technical_summary () const; - virtual void as_xml (xmlpp::Node *, bool with_paths) const; + virtual void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const; + virtual dcpomatic::DCPTime full_length (std::shared_ptr<const Film>) const = 0; virtual dcpomatic::DCPTime approximate_length () const = 0; virtual std::string identifier () const; diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc index dfa1ba55e..5d36c2aea 100644 --- a/src/lib/content_factory.cc +++ b/src/lib/content_factory.cc @@ -41,14 +41,13 @@ #include "compose.hpp" #include <libcxml/cxml.h> #include <dcp/filesystem.h> -#include <dcp/smpte_subtitle_asset.h> +#include <dcp/smpte_text_asset.h> #include <boost/algorithm/string.hpp> #include "i18n.h" using std::list; -using std::make_shared; using std::shared_ptr; using std::string; using std::vector; @@ -56,29 +55,30 @@ using std::vector; /** Create a Content object from an XML node. * @param node XML description. + * @param directory "Current" directory for any relative file paths mentioned in the XML. * @param version XML state version. * @param notes A list to which is added descriptions of any non-critial warnings / messages. * @return Content object, or 0 if no content was recognised in the XML. */ shared_ptr<Content> -content_factory (cxml::ConstNodePtr node, int version, list<string>& notes) +content_factory(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes) { auto const type = node->string_child ("Type"); std::shared_ptr<Content> content; if (type == "FFmpeg") { - content = make_shared<FFmpegContent>(node, version, notes); + content = std::make_shared<FFmpegContent>(node, film_directory, version, notes); } else if (type == "Image") { - content = make_shared<ImageContent>(node, version); + content = std::make_shared<ImageContent>(node, film_directory, version); } else if (type == "Sndfile") { /* SndfileContent is now handled by the FFmpeg code rather than by separate libsndfile-based code. */ - content = make_shared<FFmpegContent>(node, version, notes); + content = std::make_shared<FFmpegContent>(node, film_directory, version, notes); content->audio->set_stream ( - make_shared<FFmpegAudioStream>( + std::make_shared<FFmpegAudioStream>( "Stream", 0, node->number_child<int> ("AudioFrameRate"), node->number_child<Frame> ("AudioLength"), @@ -88,15 +88,15 @@ content_factory (cxml::ConstNodePtr node, int version, list<string>& notes) ); } else if (type == "SubRip" || type == "TextSubtitle") { - content = make_shared<StringTextFileContent>(node, version, notes); + content = std::make_shared<StringTextFileContent>(node, film_directory, version, notes); } else if (type == "DCP") { - content = make_shared<DCPContent>(node, version); + content = std::make_shared<DCPContent>(node, film_directory, version); } else if (type == "DCPSubtitle") { - content = make_shared<DCPSubtitleContent>(node, version); + content = std::make_shared<DCPSubtitleContent>(node, film_directory, version); } else if (type == "VideoMXF") { - content = make_shared<VideoMXFContent>(node, version); + content = std::make_shared<VideoMXFContent>(node, film_directory, version); } else if (type == "AtmosMXF") { - content = make_shared<AtmosMXFContent>(node, version); + content = std::make_shared<AtmosMXFContent>(node, film_directory, version); } return content; @@ -153,10 +153,10 @@ content_factory (boost::filesystem::path path) } if (image_files > 0 && sound_files == 0) { - content.push_back (make_shared<ImageContent>(path)); + content.push_back(std::make_shared<ImageContent>(path)); } else if (image_files == 0 && sound_files > 0) { for (auto i: dcp::filesystem::directory_iterator(path)) { - content.push_back (make_shared<FFmpegContent>(i.path())); + content.push_back(std::make_shared<FFmpegContent>(i.path())); } } @@ -168,26 +168,26 @@ content_factory (boost::filesystem::path path) transform (ext.begin(), ext.end(), ext.begin(), ::tolower); if (valid_image_file (path)) { - single = make_shared<ImageContent>(path); + single = std::make_shared<ImageContent>(path); } else if (ext == ".srt" || ext == ".ssa" || ext == ".ass" || ext == ".stl" || ext == ".vtt") { - single = make_shared<StringTextFileContent>(path); + single = std::make_shared<StringTextFileContent>(path); } else if (ext == ".xml") { cxml::Document doc; doc.read_file(dcp::filesystem::fix_long_path(path)); if (doc.root_name() == "DCinemaSecurityMessage") { throw KDMAsContentError (); } - single = make_shared<DCPSubtitleContent>(path); - } else if (ext == ".mxf" && dcp::SMPTESubtitleAsset::valid_mxf(path)) { - single = make_shared<DCPSubtitleContent>(path); + single = std::make_shared<DCPSubtitleContent>(path); + } else if (ext == ".mxf" && dcp::SMPTETextAsset::valid_mxf(path)) { + single = std::make_shared<DCPSubtitleContent>(path); } else if (ext == ".mxf" && VideoMXFContent::valid_mxf(path)) { - single = make_shared<VideoMXFContent>(path); + single = std::make_shared<VideoMXFContent>(path); } else if (ext == ".mxf" && AtmosMXFContent::valid_mxf(path)) { - single = make_shared<AtmosMXFContent>(path); + single = std::make_shared<AtmosMXFContent>(path); } if (!single) { - single = make_shared<FFmpegContent>(path); + single = std::make_shared<FFmpegContent>(path); } content.push_back (single); diff --git a/src/lib/content_factory.h b/src/lib/content_factory.h index 2cef84034..b4ce161fb 100644 --- a/src/lib/content_factory.h +++ b/src/lib/content_factory.h @@ -28,9 +28,8 @@ #include <vector> -class Film; class Content; -extern std::shared_ptr<Content> content_factory (cxml::ConstNodePtr, int, std::list<std::string> &); +extern std::shared_ptr<Content> content_factory(cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int, std::list<std::string> &); extern std::vector<std::shared_ptr<Content>> content_factory (boost::filesystem::path); diff --git a/src/lib/content_text.h b/src/lib/content_text.h index 51d4e8009..4b59ac65f 100644 --- a/src/lib/content_text.h +++ b/src/lib/content_text.h @@ -27,7 +27,7 @@ #include "dcpomatic_time.h" #include "rect.h" #include "string_text.h" -#include <dcp/subtitle_string.h> +#include <dcp/text_string.h> #include <vector> diff --git a/src/lib/content_video.h b/src/lib/content_video.h index 4fdab717a..1c145f602 100644 --- a/src/lib/content_video.h +++ b/src/lib/content_video.h @@ -23,6 +23,7 @@ #define DCPOMATIC_CONTENT_VIDEO_H +#include "dcpomatic_time.h" #include "types.h" @@ -36,22 +37,22 @@ class ContentVideo { public: ContentVideo () - : frame (0) - , eyes (Eyes::LEFT) + : eyes (Eyes::LEFT) , part (Part::WHOLE) {} - ContentVideo (std::shared_ptr<const ImageProxy> i, Frame f, Eyes e, Part p) + ContentVideo (std::shared_ptr<const ImageProxy> i, dcpomatic::ContentTime t, Eyes e, Part p) : image (i) - , frame (f) + , time (t) , eyes (e) , part (p) {} std::shared_ptr<const ImageProxy> image; - Frame frame; + dcpomatic::ContentTime time; Eyes eyes; Part part; }; + #endif diff --git a/src/lib/cpu_j2k_encoder_thread.cc b/src/lib/cpu_j2k_encoder_thread.cc new file mode 100644 index 000000000..580facae9 --- /dev/null +++ b/src/lib/cpu_j2k_encoder_thread.cc @@ -0,0 +1,62 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "cpu_j2k_encoder_thread.h" +#include "cross.h" +#include "dcpomatic_log.h" +#include "dcp_video.h" +#include "j2k_encoder.h" +#include "util.h" + +#include "i18n.h" + + +using std::make_shared; +using std::shared_ptr; + + +CPUJ2KEncoderThread::CPUJ2KEncoderThread(J2KEncoder& encoder) + : J2KSyncEncoderThread(encoder) +{ + +} + + +void +CPUJ2KEncoderThread::log_thread_start() const +{ + start_of_thread("CPUJ2KEncoder"); + LOG_TIMING("start-encoder-thread thread=%1 server=localhost", thread_id()); +} + + +shared_ptr<dcp::ArrayData> +CPUJ2KEncoderThread::encode(DCPVideo const& frame) +{ + try { + return make_shared<dcp::ArrayData>(frame.encode_locally()); + } catch (std::exception& e) { + LOG_ERROR(N_("Local encode failed (%1)"), e.what()); + } + + return {}; +} + diff --git a/src/lib/cpu_j2k_encoder_thread.h b/src/lib/cpu_j2k_encoder_thread.h new file mode 100644 index 000000000..fb138f484 --- /dev/null +++ b/src/lib/cpu_j2k_encoder_thread.h @@ -0,0 +1,16 @@ +#include "j2k_sync_encoder_thread.h" +#include <dcp/data.h> + + +class DCPVideo; + + +class CPUJ2KEncoderThread : public J2KSyncEncoderThread +{ +public: + CPUJ2KEncoderThread(J2KEncoder& encoder); + + void log_thread_start() const override; + std::shared_ptr<dcp::ArrayData> encode(DCPVideo const& frame) override; +}; + diff --git a/src/lib/create_cli.cc b/src/lib/create_cli.cc index 3f80c81f2..3fb978f7c 100644 --- a/src/lib/create_cli.cc +++ b/src/lib/create_cli.cc @@ -26,6 +26,7 @@ #include "dcpomatic_log.h" #include "film.h" #include "ratio.h" +#include "variant.h" #include <dcp/raw_convert.h> #include <iostream> #include <string> @@ -40,8 +41,8 @@ using boost::optional; string CreateCLI::_help = - "\nSyntax: %1 [OPTION] <CONTENT> [OPTION] [<CONTENT> ...]\n" - " -v, --version show DCP-o-matic version\n" + string("\nSyntax: %1 [OPTION] <CONTENT> [OPTION] [<CONTENT> ...]\n") + + variant::insert_dcpomatic(" -v, --version show %1 version\n") + " -h, --help show this help\n" " -n, --name <name> film name\n" " -t, --template <name> template name\n" @@ -132,7 +133,7 @@ CreateCLI::CreateCLI (int argc, char* argv[]) optional<string> standard_string; int dcp_frame_rate_int = 0; string template_name_string; - int j2k_bandwidth_int = 0; + int64_t video_bit_rate_int = 0; auto next_frame_type = VideoFrameType::TWO_D; optional<dcp::Channel> channel; optional<float> gain; @@ -205,7 +206,7 @@ CreateCLI::CreateCLI (int argc, char* argv[]) argument_option(i, argc, argv, "", "--standard", &claimed, &error, &standard_string, string_to_string); argument_option(i, argc, argv, "", "--config", &claimed, &error, &config_dir, string_to_path); argument_option(i, argc, argv, "-o", "--output", &claimed, &error, &output_dir, string_to_path); - argument_option(i, argc, argv, "", "--j2k-bandwidth", &claimed, &error, &j2k_bandwidth_int); + argument_option(i, argc, argv, "", "--video-bit-rate", &claimed, &error, &video_bit_rate_int); std::function<optional<dcp::Channel> (string)> convert_channel = [](string channel) -> optional<dcp::Channel>{ if (channel == "L") { @@ -273,8 +274,8 @@ CreateCLI::CreateCLI (int argc, char* argv[]) dcp_frame_rate = dcp_frame_rate_int; } - if (j2k_bandwidth_int) { - _j2k_bandwidth = j2k_bandwidth_int * 1000000; + if (video_bit_rate_int) { + _video_bit_rate = video_bit_rate_int * 1000000; } if (dcp_content_type_string) { @@ -321,8 +322,8 @@ CreateCLI::CreateCLI (int argc, char* argv[]) _name = content[0].path.filename().string(); } - if (_j2k_bandwidth && (*_j2k_bandwidth < 10000000 || *_j2k_bandwidth > Config::instance()->maximum_j2k_bandwidth())) { - error = String::compose("%1: j2k-bandwidth must be between 10 and %2 Mbit/s", argv[0], (Config::instance()->maximum_j2k_bandwidth() / 1000000)); + if (_video_bit_rate && (*_video_bit_rate < 10000000 || *_video_bit_rate > Config::instance()->maximum_video_bit_rate(VideoEncoding::JPEG2000))) { + error = String::compose("%1: video-bit-rate must be between 10 and %2 Mbit/s", argv[0], (Config::instance()->maximum_video_bit_rate(VideoEncoding::JPEG2000) / 1000000)); return; } } @@ -373,8 +374,8 @@ CreateCLI::make_film() const if (_fourk) { film->set_resolution(Resolution::FOUR_K); } - if (_j2k_bandwidth) { - film->set_j2k_bandwidth(*_j2k_bandwidth); + if (_video_bit_rate) { + film->set_video_bit_rate(VideoEncoding::JPEG2000, *_video_bit_rate); } int channels = 6; diff --git a/src/lib/create_cli.h b/src/lib/create_cli.h index 782aaf974..850cddea9 100644 --- a/src/lib/create_cli.h +++ b/src/lib/create_cli.h @@ -72,7 +72,7 @@ private: bool _no_use_isdcf_name = false; bool _twok = false; bool _fourk = false; - boost::optional<int> _j2k_bandwidth; + boost::optional<int64_t> _video_bit_rate; static std::string _help; }; diff --git a/src/lib/crop.cc b/src/lib/crop.cc index d2d020a9f..a6f7d4bac 100644 --- a/src/lib/crop.cc +++ b/src/lib/crop.cc @@ -42,12 +42,12 @@ Crop::Crop(shared_ptr<cxml::Node> node) void -Crop::as_xml(xmlpp::Node* node) const +Crop::as_xml(xmlpp::Element* element) const { - node->add_child("LeftCrop")->add_child_text(raw_convert<string>(left)); - node->add_child("RightCrop")->add_child_text(raw_convert<string>(right)); - node->add_child("TopCrop")->add_child_text(raw_convert<string>(top)); - node->add_child("BottomCrop")->add_child_text(raw_convert<string>(bottom)); + cxml::add_text_child(element, "LeftCrop", raw_convert<string>(left)); + cxml::add_text_child(element, "RightCrop", raw_convert<string>(right)); + cxml::add_text_child(element, "TopCrop", raw_convert<string>(top)); + cxml::add_text_child(element, "BottomCrop", raw_convert<string>(bottom)); } diff --git a/src/lib/crop.h b/src/lib/crop.h index 00734d5e9..24330731d 100644 --- a/src/lib/crop.h +++ b/src/lib/crop.h @@ -65,7 +65,7 @@ struct Crop return s; } - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; }; diff --git a/src/lib/cross.h b/src/lib/cross.h index 884f3c79c..78a73b13e 100644 --- a/src/lib/cross.h +++ b/src/lib/cross.h @@ -139,29 +139,19 @@ private: void disk_write_finished (); -struct OSXMediaPath -{ - bool real; ///< true for a "real" disk, false for a synthesized APFS one - std::vector<std::string> parts; ///< parts of the media path after the : -}; - - struct OSXDisk { std::string device; boost::optional<std::string> vendor; boost::optional<std::string> model; - OSXMediaPath media_path; - bool whole; std::vector<boost::filesystem::path> mount_points; unsigned long size; + bool system; + bool writeable; + bool partition; }; -boost::optional<OSXMediaPath> analyse_osx_media_path (std::string path); -std::vector<Drive> osx_disks_to_drives (std::vector<OSXDisk> disks); - - class ArgFixer { public: diff --git a/src/lib/cross_common.cc b/src/lib/cross_common.cc index b4d322096..1e145c8fc 100644 --- a/src/lib/cross_common.cc +++ b/src/lib/cross_common.cc @@ -40,9 +40,6 @@ using std::vector; using boost::optional; -auto constexpr MEDIA_PATH_REQUIRED_MATCHES = 3; - - Drive::Drive (string xml) { cxml::Document doc; @@ -62,16 +59,16 @@ Drive::as_xml () const { xmlpp::Document doc; auto root = doc.create_root_node ("Drive"); - root->add_child("Device")->add_child_text(_device); + cxml::add_text_child(root, "Device", _device); for (auto i: _mount_points) { - root->add_child("MountPoint")->add_child_text(i.string()); + cxml::add_text_child(root, "MountPoint", i.string()); } - root->add_child("Size")->add_child_text(dcp::raw_convert<string>(_size)); + cxml::add_text_child(root, "Size", dcp::raw_convert<string>(_size)); if (_vendor) { - root->add_child("Vendor")->add_child_text(*_vendor); + cxml::add_text_child(root, "Vendor", *_vendor); } if (_model) { - root->add_child("Model")->add_child_text(*_model); + cxml::add_text_child(root, "Model", *_model); } return doc.write_to_string("UTF-8"); @@ -122,97 +119,3 @@ Drive::log_summary () const ); } - - -/* This is in _common so we can use it in unit tests */ -optional<OSXMediaPath> -analyse_osx_media_path (string path) -{ - if (path.find("/IOHDIXController") != string::npos) { - /* This is a disk image, so we completely ignore it */ - LOG_DISK_NC("Ignoring this as it seems to be a disk image"); - return {}; - } - - OSXMediaPath mp; - vector<string> parts; - split(parts, path, boost::is_any_of("/")); - std::copy(parts.begin() + 1, parts.end(), back_inserter(mp.parts)); - - if (!parts.empty() && parts[0] == "IODeviceTree:") { - mp.real = true; - if (mp.parts.size() < MEDIA_PATH_REQUIRED_MATCHES) { - /* Later we expect at least MEDIA_PATH_REQUIRED_MATCHES parts in a IODeviceTree */ - LOG_DISK_NC("Ignoring this as it has a strange media path"); - return {}; - } - } else if (!parts.empty() && parts[0] == "IOService:") { - mp.real = false; - } else { - return {}; - } - - return mp; -} - - -/* Take some OSXDisk objects, representing disks that `DARegisterDiskAppearedCallback` told us about, - * and find those drives that we could write a DCP to. The drives returned are "real" (not synthesized) - * and are whole disks (not partitions). They may be mounted, or contain mounted partitions, in which - * their mounted() method will return true. - */ -vector<Drive> -osx_disks_to_drives (vector<OSXDisk> disks) -{ - using namespace boost::algorithm; - - /* Mark disks containing mounted partitions as themselves mounted */ - for (auto& i: disks) { - if (!i.whole) { - continue; - } - for (auto& j: disks) { - if (&i != &j && !j.mount_points.empty() && starts_with(j.device, i.device)) { - LOG_DISK("Marking %1 as mounted because %2 is", i.device, j.device); - std::copy(j.mount_points.begin(), j.mount_points.end(), back_inserter(i.mount_points)); - } - } - } - - /* Mark containers of mounted synths as themselves mounted */ - for (auto& i: disks) { - if (i.media_path.real) { - for (auto& j: disks) { - if (!j.media_path.real && !j.mount_points.empty()) { - /* i is real, j is a mounted synth; if we see the first MEDIA_PATH_REQUIRED_MATCHES parts - * of i anywhere in j we assume they are related and so i shares j's mount points. - */ - bool one_missing = false; - string all_parts; - DCPOMATIC_ASSERT (i.media_path.parts.size() >= MEDIA_PATH_REQUIRED_MATCHES); - for (auto k = 0; k < MEDIA_PATH_REQUIRED_MATCHES; ++k) { - if (find(j.media_path.parts.begin(), j.media_path.parts.end(), i.media_path.parts[k]) == j.media_path.parts.end()) { - one_missing = true; - } - all_parts += i.media_path.parts[k] + " "; - } - - if (!one_missing) { - LOG_DISK("Marking %1 as mounted because %2 is (found %3)", i.device, j.device, all_parts); - std::copy(j.mount_points.begin(), j.mount_points.end(), back_inserter(i.mount_points)); - } - } - } - } - } - - vector<Drive> drives; - for (auto const& i: disks) { - if (i.whole && i.media_path.real) { - drives.push_back(Drive(i.device, i.mount_points, i.size, i.vendor, i.model)); - LOG_DISK_NC(drives.back().log_summary()); - } - } - - return drives; -} diff --git a/src/lib/cross_linux.cc b/src/lib/cross_linux.cc index 015158aa8..be3233b32 100644 --- a/src/lib/cross_linux.cc +++ b/src/lib/cross_linux.cc @@ -85,7 +85,12 @@ cpu_info () boost::filesystem::path resources_path () { - return directory_containing_executable().parent_path() / "share" / "dcpomatic2"; + auto installed = directory_containing_executable().parent_path() / "share" / "dcpomatic2"; + if (boost::filesystem::exists(installed)) { + return installed; + } + + return directory_containing_executable().parent_path().parent_path().parent_path(); } diff --git a/src/lib/cross_osx.cc b/src/lib/cross_osx.cc index 913b19103..6df2f959e 100644 --- a/src/lib/cross_osx.cc +++ b/src/lib/cross_osx.cc @@ -19,12 +19,13 @@ */ -#include "cross.h" #include "compose.hpp" -#include "log.h" -#include "dcpomatic_log.h" #include "config.h" +#include "cross.h" +#include "dcpomatic_log.h" #include "exceptions.h" +#include "log.h" +#include "variant.h" #include <dcp/filesystem.h> #include <dcp/raw_convert.h> #include <glib.h> @@ -168,6 +169,8 @@ Waker::~Waker () void start_tool (string executable, string app) { + boost::algorithm::replace_all(app, " ", "\\ "); + auto exe_path = directory_containing_executable(); exe_path = exe_path.parent_path(); // Contents exe_path = exe_path.parent_path(); // DCP-o-matic 2.app @@ -191,14 +194,14 @@ start_tool (string executable, string app) void start_batch_converter () { - start_tool ("dcpomatic2_batch", "DCP-o-matic\\ 2\\ Batch\\ Converter.app"); + start_tool("dcpomatic2_batch", variant::dcpomatic_batch_converter_app()); } void start_player () { - start_tool ("dcpomatic2_player", "DCP-o-matic\\ 2\\ Player.app"); + start_tool("dcpomatic2_player", variant::dcpomatic_player_app()); } @@ -240,44 +243,6 @@ get_model (CFDictionaryRef& description) } -static optional<OSXMediaPath> -analyse_media_path (CFDictionaryRef& description) -{ - using namespace boost::algorithm; - - void const* str = CFDictionaryGetValue (description, kDADiskDescriptionMediaPathKey); - if (!str) { - LOG_DISK_NC("There is no MediaPathKey (no dictionary value)"); - return {}; - } - - auto path_key_cstr = CFStringGetCStringPtr((CFStringRef) str, kCFStringEncodingUTF8); - if (!path_key_cstr) { - LOG_DISK_NC("There is no MediaPathKey (no cstring)"); - return {}; - } - - string path(path_key_cstr); - LOG_DISK("MediaPathKey is %1", path); - return analyse_osx_media_path (path); -} - - -static bool -is_whole_drive (DADiskRef& disk) -{ - io_service_t service = DADiskCopyIOMedia (disk); - CFTypeRef whole_media_ref = IORegistryEntryCreateCFProperty (service, CFSTR(kIOMediaWholeKey), kCFAllocatorDefault, 0); - bool whole_media = false; - if (whole_media_ref) { - whole_media = CFBooleanGetValue((CFBooleanRef) whole_media_ref); - CFRelease (whole_media_ref); - } - IOObjectRelease (service); - return whole_media; -} - - static optional<boost::filesystem::path> mount_point (CFDictionaryRef& description) { @@ -294,29 +259,17 @@ mount_point (CFDictionaryRef& description) } -/* Here follows some rather intricate and (probably) fragile code to find the list of available - * "real" drives on macOS that we might want to write a DCP to. - * - * We use the Disk Arbitration framework to give us a series of mount_points (/dev/disk0, /dev/disk1, - * /dev/disk1s1 and so on) and we use the API to gather useful information about these mount_points into - * a vector of Disk structs. - * - * Then we read the Disks that we found and try to derive a list of drives that we should offer to the - * user, with details of whether those drives are currently mounted or not. - * - * At the basic level we find the "disk"-level mount_points, looking at whether any of their partitions are mounted. - * - * This is complicated enormously by recent-ish macOS versions' habit of making `synthesized' volumes which - * reflect data in `real' partitions. So, for example, we might have a real (physical) drive /dev/disk2 with - * a partition /dev/disk2s2 whose content is made into a synthesized /dev/disk3, itself containing some partitions - * which are mounted. /dev/disk2s2 is not considered to be mounted, in this case. So we need to know that - * disk2s2 is related to disk3 so we can consider disk2s2 as mounted if any parts of disk3 are. In order to do - * this I am taking the first two parts of the IODeviceTree and seeing if they exist anywhere in a - * IOService identifier. If they do, I am assuming the IOService device is on the matching IODeviceTree device. - * - * Lots of this is guesswork and may be broken. In my defence the documentation that I have been able to - * unearth is, to put it impolitely, crap. - */ +static bool +get_bool(CFDictionaryRef& description, void const* key) +{ + auto value = CFDictionaryGetValue(description, key); + if (!value) { + return false; + } + + return CFBooleanGetValue(reinterpret_cast<CFBooleanRef>(value)); +} + static void disk_appeared (DADiskRef disk, void* context) @@ -339,32 +292,30 @@ disk_appeared (DADiskRef disk, void* context) this_disk.model = get_model (description); LOG_DISK("Vendor/model: %1 %2", this_disk.vendor.get_value_or("[none]"), this_disk.model.get_value_or("[none]")); - auto media_path = analyse_media_path (description); - if (!media_path) { - LOG_DISK("Finding media path for %1 failed", bsd_name); - return; - } - - this_disk.media_path = *media_path; - this_disk.whole = is_whole_drive (disk); auto mp = mount_point (description); if (mp) { this_disk.mount_points.push_back (*mp); } - LOG_DISK( - "%1 %2 mounted at %3", - this_disk.media_path.real ? "Real" : "Synth", - this_disk.whole ? "whole" : "part", - mp ? mp->string() : "[nowhere]" - ); - auto media_size_cstr = CFDictionaryGetValue (description, kDADiskDescriptionMediaSizeKey); if (!media_size_cstr) { LOG_DISK_NC("Could not read media size"); return; } + this_disk.system = get_bool(description, kDADiskDescriptionDeviceInternalKey) && !get_bool(description, kDADiskDescriptionMediaRemovableKey); + this_disk.writeable = get_bool(description, kDADiskDescriptionMediaWritableKey); + this_disk.partition = string(bsd_name).find("s", 5) != std::string::npos; + + LOG_DISK( + "%1 %2 %3 %4 mounted at %5", + bsd_name, + this_disk.system ? "system" : "non-system", + this_disk.writeable ? "writeable" : "read-only", + this_disk.partition ? "partition" : "drive", + mp ? mp->string() : "[nowhere]" + ); + CFNumberGetValue ((CFNumberRef) media_size_cstr, kCFNumberLongType, &this_disk.size); CFRelease (description); @@ -395,7 +346,12 @@ Drive::get () DAUnregisterCallback(session, (void *) disk_appeared, &disks); CFRelease(session); - auto drives = osx_disks_to_drives(disks); + vector<Drive> drives; + for (auto const& disk: disks) { + if (!disk.system && !disk.partition && disk.writeable) { + drives.push_back({disk.device, disk.mount_points, disk.size, disk.vendor, disk.model}); + } + } LOG_DISK("Drive::get() found %1 drives:", drives.size()); for (auto const& drive: drives) { diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 6e573c639..6a6ed0b0c 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -36,9 +36,8 @@ #include <dcp/dcp.h> #include <dcp/raw_convert.h> #include <dcp/exceptions.h> -#include <dcp/reel_closed_caption_asset.h> #include <dcp/reel_picture_asset.h> -#include <dcp/reel_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <dcp/reel.h> #include <dcp/scope_guard.h> #include <libxml++/libxml++.h> @@ -90,8 +89,8 @@ DCPContent::DCPContent (boost::filesystem::path p) set_default_colour_conversion (); } -DCPContent::DCPContent (cxml::ConstNodePtr node, int version) - : Content (node) +DCPContent::DCPContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version) + : Content(node, film_directory) { video = VideoContent::from_xml (this, node, version, VideoRange::FULL); audio = AudioContent::from_xml (this, node, version); @@ -139,6 +138,11 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version) DCPOMATIC_ASSERT (false); } } + + if (auto encoding = node->optional_string_child("VideoEncoding")) { + _video_encoding = video_encoding_from_string(*encoding); + } + _three_d = node->optional_bool_child("ThreeD").get_value_or (false); auto ck = node->optional_string_child("ContentKind"); @@ -163,6 +167,13 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version) } _active_audio_channels = node->optional_number_child<int>("ActiveAudioChannels"); + + for (auto non_zero: node->node_children("HasNonZeroEntryPoint")) { + try { + auto type = string_to_text_type(non_zero->string_attribute("type")); + _has_non_zero_entry_point[type] = non_zero->content() == "1"; + } catch (MetadataError&) {} + } } void @@ -284,9 +295,23 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job) new_text.push_back (c); } + for (int i = 0; i < examiner->text_count(TextType::OPEN_CAPTION); ++i) { + auto c = make_shared<TextContent>(this, TextType::OPEN_CAPTION, TextType::OPEN_CAPTION); + c->set_language(examiner->open_caption_language()); + examiner->add_fonts(c); + new_text.push_back(c); + } + + for (int i = 0; i < examiner->text_count(TextType::CLOSED_SUBTITLE); ++i) { + auto c = make_shared<TextContent>(this, TextType::CLOSED_SUBTITLE, TextType::CLOSED_SUBTITLE); + c->set_dcp_track(examiner->dcp_subtitle_track(i)); + examiner->add_fonts(c); + new_text.push_back(c); + } + for (int i = 0; i < examiner->text_count(TextType::CLOSED_CAPTION); ++i) { auto c = make_shared<TextContent>(this, TextType::CLOSED_CAPTION, TextType::CLOSED_CAPTION); - c->set_dcp_track (examiner->dcp_text_track(i)); + c->set_dcp_track(examiner->dcp_caption_track(i)); examiner->add_fonts(c); new_text.push_back (c); } @@ -299,6 +324,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job) _needs_assets = examiner->needs_assets (); _kdm_valid = examiner->kdm_valid (); _standard = examiner->standard (); + _video_encoding = examiner->video_encoding(); _three_d = examiner->three_d (); _content_kind = examiner->content_kind (); _cpl = examiner->cpl (); @@ -308,6 +334,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job) } _ratings = examiner->ratings (); _content_versions = examiner->content_versions (); + _has_non_zero_entry_point = examiner->has_non_zero_entry_point(); } if (needed_assets == needs_assets()) { @@ -347,88 +374,99 @@ DCPContent::technical_summary () const return s; } + void -DCPContent::as_xml (xmlpp::Node* node, bool with_paths) const +DCPContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { - node->add_child("Type")->add_child_text ("DCP"); + cxml::add_text_child(element, "Type", "DCP"); - Content::as_xml (node, with_paths); + Content::as_xml(element, with_paths, path_behaviour, film_directory); if (video) { - video->as_xml (node); + video->as_xml(element); } if (audio) { - audio->as_xml (node); - node->add_child("AudioFrameRate")->add_child_text (raw_convert<string> (audio->stream()->frame_rate())); - node->add_child("AudioLength")->add_child_text (raw_convert<string> (audio->stream()->length())); - audio->stream()->mapping().as_xml (node->add_child("AudioMapping")); + audio->as_xml(element); + cxml::add_text_child(element, "AudioFrameRate", raw_convert<string>(audio->stream()->frame_rate())); + cxml::add_text_child(element, "AudioLength", raw_convert<string>(audio->stream()->length())); + audio->stream()->mapping().as_xml(cxml::add_child(element, "AudioMapping")); } for (auto i: text) { - i->as_xml (node); + i->as_xml(element); } if (atmos) { - atmos->as_xml (node); + atmos->as_xml(element); } boost::mutex::scoped_lock lm (_mutex); - node->add_child("Name")->add_child_text (_name); - node->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0"); - node->add_child("NeedsAssets")->add_child_text (_needs_assets ? "1" : "0"); + cxml::add_text_child(element, "Name", _name); + cxml::add_text_child(element, "Encrypted", _encrypted ? "1" : "0"); + cxml::add_text_child(element, "NeedsAssets", _needs_assets ? "1" : "0"); if (_kdm) { - node->add_child("KDM")->add_child_text (_kdm->as_xml ()); + cxml::add_text_child(element, "KDM", _kdm->as_xml()); } - node->add_child("KDMValid")->add_child_text (_kdm_valid ? "1" : "0"); - node->add_child("ReferenceVideo")->add_child_text (_reference_video ? "1" : "0"); - node->add_child("ReferenceAudio")->add_child_text (_reference_audio ? "1" : "0"); - node->add_child("ReferenceOpenSubtitle")->add_child_text(_reference_text[TextType::OPEN_SUBTITLE] ? "1" : "0"); - node->add_child("ReferenceClosedCaption")->add_child_text(_reference_text[TextType::CLOSED_CAPTION] ? "1" : "0"); + cxml::add_text_child(element, "KDMValid", _kdm_valid ? "1" : "0"); + cxml::add_text_child(element, "ReferenceVideo", _reference_video ? "1" : "0"); + cxml::add_text_child(element, "ReferenceAudio", _reference_audio ? "1" : "0"); + cxml::add_text_child(element, "ReferenceOpenSubtitle", _reference_text[TextType::OPEN_SUBTITLE] ? "1" : "0"); + cxml::add_text_child(element, "ReferenceClosedCaption", _reference_text[TextType::CLOSED_CAPTION] ? "1" : "0"); if (_standard) { switch (_standard.get ()) { case dcp::Standard::INTEROP: - node->add_child("Standard")->add_child_text ("Interop"); + cxml::add_text_child(element, "Standard", "Interop"); break; case dcp::Standard::SMPTE: - node->add_child("Standard")->add_child_text ("SMPTE"); + cxml::add_text_child(element, "Standard", "SMPTE"); break; default: DCPOMATIC_ASSERT (false); } } - node->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0"); + cxml::add_text_child(element, "VideoEncoding", video_encoding_to_string(_video_encoding)); + cxml::add_text_child(element, "ThreeD", _three_d ? "1" : "0"); if (_content_kind) { - node->add_child("ContentKind")->add_child_text(_content_kind->name()); + cxml::add_text_child(element, "ContentKind", _content_kind->name()); } if (_cpl) { - node->add_child("CPL")->add_child_text (_cpl.get ()); + cxml::add_text_child(element, "CPL", _cpl.get()); } for (auto i: _reel_lengths) { - node->add_child("ReelLength")->add_child_text (raw_convert<string> (i)); + cxml::add_text_child(element, "ReelLength", raw_convert<string>(i)); } for (auto const& i: _markers) { - auto marker = node->add_child("Marker"); + auto marker = cxml::add_child(element, "Marker"); marker->set_attribute("type", dcp::marker_to_string(i.first)); marker->add_child_text(raw_convert<string>(i.second.get())); } for (auto i: _ratings) { - auto rating = node->add_child("Rating"); + auto rating = cxml::add_child(element, "Rating"); i.as_xml (rating); } for (auto i: _content_versions) { - node->add_child("ContentVersion")->add_child_text(i); + cxml::add_text_child(element, "ContentVersion", i); } if (_active_audio_channels) { - node->add_child("ActiveAudioChannels")->add_child_text(raw_convert<string>(*_active_audio_channels)); + cxml::add_text_child(element, "ActiveAudioChannels", raw_convert<string>(*_active_audio_channels)); + } + + for (auto i = 0; i < static_cast<int>(TextType::COUNT); ++i) { + if (_has_non_zero_entry_point[i]) { + auto has = cxml::add_child(element, "HasNonZeroEntryPoint"); + has->add_child_text("1"); + has->set_attribute("type", text_type_to_string(static_cast<TextType>(i))); + } } } + DCPTime DCPContent::full_length (shared_ptr<const Film> film) const { @@ -612,7 +650,7 @@ DCPContent::reel_split_points (shared_ptr<const Film> film) const } bool -DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_ptr<const Content>)> part, string overlapping, string& why_not) const +DCPContent::can_reference_anything(shared_ptr<const Film> film, string& why_not) const { /* We must be using the same standard as the film */ if (_standard) { @@ -658,15 +696,16 @@ DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_pt } } - auto a = overlaps (film, film->content(), part, position(), end(film)); - if (a.size() != 1 || a.front().get() != this) { - why_not = overlapping; - return false; - } - return true; } +bool +DCPContent::overlaps(shared_ptr<const Film> film, function<bool (shared_ptr<const Content>)> part) const +{ + auto const a = dcpomatic::overlaps(film, film->content(), part, position(), end(film)); + return a.size() != 1 || a.front().get() != this; +} + bool DCPContent::can_reference_video (shared_ptr<const Film> film, string& why_not) const @@ -691,35 +730,23 @@ DCPContent::can_reference_video (shared_ptr<const Film> film, string& why_not) c return false; } - /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - return can_reference( - film, - [](shared_ptr<const Content> c) { - return static_cast<bool>(c->video) && c->video->use(); - }, - _("it overlaps other video content; remove the other content."), - why_not - ); + auto part = [](shared_ptr<const Content> c) { + return static_cast<bool>(c->video) && c->video->use(); + }; + + if (overlaps(film, part)) { + /// TRANSLATORS: this string will follow "Cannot reference this DCP: " + why_not = _("it overlaps other video content."); + return false; + } + + return can_reference_anything(film, why_not); } bool DCPContent::can_reference_audio (shared_ptr<const Film> film, string& why_not) const { - shared_ptr<DCPDecoder> decoder; - try { - decoder = make_shared<DCPDecoder>(film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>()); - } catch (dcp::ReadError &) { - /* We couldn't read the DCP, so it's probably missing */ - return false; - } catch (DCPError &) { - /* We couldn't read the DCP, so it's probably missing */ - return false; - } catch (dcp::KDMDecryptionError &) { - /* We have an incorrect KDM */ - return false; - } - if (audio && audio->stream()) { auto const channels = audio->stream()->channels(); if (channels != film->audio_channels()) { @@ -728,51 +755,33 @@ DCPContent::can_reference_audio (shared_ptr<const Film> film, string& why_not) c } } - /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - return can_reference( - film, [](shared_ptr<const Content> c) { - return c->has_mapped_audio(); - }, - _("it overlaps other audio content; remove the other content."), - why_not - ); + auto part = [](shared_ptr<const Content> c) { + return c->has_mapped_audio(); + }; + + if (overlaps(film, part)) { + /// TRANSLATORS: this string will follow "Cannot reference this DCP: " + why_not = _("it overlaps other audio content."); + return false; + } + + return can_reference_anything(film, why_not); } bool DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, string& why_not) const { - shared_ptr<DCPDecoder> decoder; - try { - decoder = make_shared<DCPDecoder>(film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>()); - } catch (dcp::ReadError &) { - /* We couldn't read the DCP, so it's probably missing */ - return false; - } catch (DCPError &) { - /* We couldn't read the DCP, so it's probably missing */ - return false; - } catch (dcp::KDMDecryptionError &) { - /* We have an incorrect KDM */ + if (_has_non_zero_entry_point[TextType::OPEN_SUBTITLE]) { + /// TRANSLATORS: this string will follow "Cannot reference this DCP: " + why_not = _("one of its subtitle reels has a non-zero entry point so it must be re-written."); return false; } - for (auto i: decoder->reels()) { - if (type == TextType::OPEN_SUBTITLE) { - if (i->main_subtitle() && i->main_subtitle()->entry_point().get_value_or(0) != 0) { - /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - why_not = _("one of its subtitle reels has a non-zero entry point so it must be re-written."); - return false; - } - } - if (type == TextType::CLOSED_CAPTION) { - for (auto j: i->closed_captions()) { - if (j->entry_point().get_value_or(0) != 0) { - /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - why_not = _("one of its closed caption has a non-zero entry point so it must be re-written."); - return false; - } - } - } + if (_has_non_zero_entry_point[TextType::CLOSED_CAPTION]) { + /// TRANSLATORS: this string will follow "Cannot reference this DCP: " + why_not = _("one of its closed caption has a non-zero entry point so it must be re-written."); + return false; } if (trim_start() != dcpomatic::ContentTime()) { @@ -781,15 +790,17 @@ DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, stri return false; } - /// TRANSLATORS: this string will follow "Cannot reference this DCP: " - return can_reference( - film, - [type](shared_ptr<const Content> c) { - return std::find_if(c->text.begin(), c->text.end(), [type](shared_ptr<const TextContent> t) { return t->type() == type; }) != c->text.end(); - }, - _("they overlap other text content; remove the other content."), - why_not - ); + auto part = [type](shared_ptr<const Content> c) { + return std::find_if(c->text.begin(), c->text.end(), [type](shared_ptr<const TextContent> t) { return t->type() == type; }) != c->text.end(); + }; + + if (overlaps(film, part)) { + /// TRANSLATORS: this string will follow "Cannot reference this DCP: " + why_not = _("it overlaps other text content."); + return false; + } + + return can_reference_anything(film, why_not); } void @@ -853,8 +864,14 @@ DCPContent::check_font_ids() return; } + /* This might be called on a TextContent that already has some fonts + * (e.g. if run from a build with a LastWrittenBy containing only a git + * hash, or from a version between 2.16.15 and 2.17.17) so we'll get an + * error if we don't clear them out first. + */ + text[0]->clear_fonts(); DCPExaminer examiner(shared_from_this(), true); - examiner.add_fonts(text.front()); + examiner.add_fonts(text[0]); } diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h index 3753740a2..a866703f2 100644 --- a/src/lib/dcp_content.h +++ b/src/lib/dcp_content.h @@ -32,6 +32,7 @@ #include "enum_indexed_vector.h" #include "font.h" #include "resolution.h" +#include "video_encoding.h" #include <libcxml/cxml.h> #include <dcp/content_kind.h> #include <dcp/encrypted_kdm.h> @@ -59,7 +60,7 @@ class DCPContent : public Content { public: DCPContent (boost::filesystem::path p); - DCPContent (cxml::ConstNodePtr, int version); + DCPContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int version); std::shared_ptr<DCPContent> shared_from_this () { return std::dynamic_pointer_cast<DCPContent> (Content::shared_from_this ()); @@ -75,7 +76,14 @@ public: void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + + void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const override; + std::string identifier () const override; void take_settings_from (std::shared_ptr<const Content> c) override; @@ -100,6 +108,8 @@ public: bool needs_kdm () const; bool needs_assets () const; + bool can_reference_anything(std::shared_ptr<const Film> film, std::string& why_not) const; + void set_reference_video (bool r); bool reference_video () const { @@ -158,6 +168,11 @@ public: return _standard.get (); } + VideoEncoding video_encoding() const { + boost::mutex::scoped_lock lm (_mutex); + return _video_encoding; + } + std::map<dcp::Marker, dcpomatic::ContentTime> markers () const { return _markers; } @@ -186,12 +201,7 @@ private: void read_directory (boost::filesystem::path); void read_sub_directory (boost::filesystem::path); std::list<dcpomatic::DCPTimePeriod> reels (std::shared_ptr<const Film> film) const; - bool can_reference ( - std::shared_ptr<const Film> film, - std::function <bool (std::shared_ptr<const Content>)>, - std::string overlapping, - std::string& why_not - ) const; + bool overlaps(std::shared_ptr<const Film> film, std::function<bool (std::shared_ptr<const Content>)> part) const; std::string _name; /** true if our DCP is encrypted */ @@ -216,6 +226,7 @@ private: EnumIndexedVector<bool, TextType> _reference_text; boost::optional<dcp::Standard> _standard; + VideoEncoding _video_encoding; boost::optional<dcp::ContentKind> _content_kind; bool _three_d; /** ID of the CPL to use; older metadata might not specify this: in that case @@ -227,6 +238,7 @@ private: std::map<dcp::Marker, dcpomatic::ContentTime> _markers; std::vector<dcp::Rating> _ratings; std::vector<std::string> _content_versions; + EnumIndexedVector<bool, TextType> _has_non_zero_entry_point; boost::optional<int> _active_audio_channels; }; diff --git a/src/lib/dcp_content_type.cc b/src/lib/dcp_content_type.cc index bc9bf0d67..d689f138c 100644 --- a/src/lib/dcp_content_type.cc +++ b/src/lib/dcp_content_type.cc @@ -28,8 +28,9 @@ #include "i18n.h" +using std::string; +using std::vector; using boost::optional; -using namespace std; vector<DCPContentType> DCPContentType::_dcp_content_types; diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index 727dcbf26..cd792c0b7 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -26,32 +26,35 @@ #include "constants.h" #include "dcp_content.h" #include "dcp_decoder.h" +#include "dcpomatic_log.h" #include "digester.h" #include "ffmpeg_image_proxy.h" #include "frame_interval_checker.h" #include "image.h" #include "j2k_image_proxy.h" +#include "raw_image_proxy.h" #include "text_decoder.h" +#include "util.h" #include "video_decoder.h" #include <dcp/cpl.h> #include <dcp/dcp.h> #include <dcp/decrypted_kdm.h> -#include <dcp/mono_picture_asset.h> -#include <dcp/mono_picture_asset_reader.h> -#include <dcp/mono_picture_frame.h> +#include <dcp/mono_j2k_picture_asset.h> +#include <dcp/mono_j2k_picture_asset_reader.h> +#include <dcp/mono_j2k_picture_frame.h> +#include <dcp/mono_mpeg2_picture_asset.h> #include <dcp/reel.h> #include <dcp/reel_atmos_asset.h> -#include <dcp/reel_closed_caption_asset.h> #include <dcp/reel_picture_asset.h> #include <dcp/reel_sound_asset.h> -#include <dcp/reel_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <dcp/search.h> #include <dcp/sound_asset_reader.h> #include <dcp/sound_frame.h> -#include <dcp/stereo_picture_asset.h> -#include <dcp/stereo_picture_asset_reader.h> -#include <dcp/stereo_picture_frame.h> -#include <dcp/subtitle_image.h> +#include <dcp/stereo_j2k_picture_asset.h> +#include <dcp/stereo_j2k_picture_asset_reader.h> +#include <dcp/stereo_j2k_picture_frame.h> +#include <dcp/text_image.h> #include <iostream> #include "i18n.h" @@ -169,43 +172,60 @@ DCPDecoder::pass () */ pass_texts (_next, picture_asset->size()); - if ((_mono_reader || _stereo_reader) && (_decode_referenced || !_dcp_content->reference_video())) { + if ((_j2k_mono_reader || _j2k_stereo_reader || _mpeg2_mono_reader) && (_decode_referenced || !_dcp_content->reference_video())) { auto const entry_point = (*_reel)->main_picture()->entry_point().get_value_or(0); - if (_mono_reader) { + if (_j2k_mono_reader) { video->emit ( film(), std::make_shared<J2KImageProxy>( - _mono_reader->get_frame (entry_point + frame), + _j2k_mono_reader->get_frame(entry_point + frame), picture_asset->size(), AV_PIX_FMT_XYZ12LE, _forced_reduction ), - _offset + frame + ContentTime::from_frames(_offset + frame, vfr) ); - } else { + } else if (_j2k_stereo_reader) { video->emit ( film(), std::make_shared<J2KImageProxy>( - _stereo_reader->get_frame (entry_point + frame), + _j2k_stereo_reader->get_frame (entry_point + frame), picture_asset->size(), dcp::Eye::LEFT, AV_PIX_FMT_XYZ12LE, _forced_reduction ), - _offset + frame + ContentTime::from_frames(_offset + frame, vfr) ); video->emit ( film(), std::make_shared<J2KImageProxy>( - _stereo_reader->get_frame (entry_point + frame), + _j2k_stereo_reader->get_frame (entry_point + frame), picture_asset->size(), dcp::Eye::RIGHT, AV_PIX_FMT_XYZ12LE, _forced_reduction ), - _offset + frame + ContentTime::from_frames(_offset + frame, vfr) ); + } else if (_mpeg2_mono_reader) { + /* XXX: got to flush this at some point */ + try { + for (auto const& image: _mpeg2_decompressor->decompress_frame(_mpeg2_mono_reader->get_frame(entry_point + frame))) { + video->emit( + film(), + /* XXX: should this be PADDED? */ + std::make_shared<RawImageProxy>(std::make_shared<Image>(image.frame(), Image::Alignment::COMPACT)), + /* XXX: this will be wrong */ + ContentTime::from_frames(_offset + frame, vfr) + ); + } + } catch (dcp::MPEG2DecompressionError& e) { + LOG_ERROR("Failed to decompress MPEG video frame %1 (%2)", entry_point + frame, e.what()); + } catch (dcp::ReadError& e) { + LOG_ERROR("Failed to read MPEG2 video frame %1 (%2)", entry_point + frame, e.what()); + } } } @@ -214,15 +234,32 @@ DCPDecoder::pass () auto sf = _sound_reader->get_frame (entry_point + frame); auto from = sf->data (); - int const channels = _dcp_content->audio->stream()->channels (); - int const frames = sf->size() / (3 * channels); + int const channels = _dcp_content->audio->stream()->channels(); + int const frames = sf->size() / (sf->bits() * channels / 8); auto data = make_shared<AudioBuffers>(channels, frames); auto data_data = data->data(); - for (int i = 0; i < frames; ++i) { - for (int j = 0; j < channels; ++j) { - data_data[j][i] = static_cast<int> ((from[0] << 8) | (from[1] << 16) | (from[2] << 24)) / static_cast<float> (INT_MAX - 256); - from += 3; + + switch (sf->bits()) { + case 24: + { + for (int i = 0; i < frames; ++i) { + for (int j = 0; j < channels; ++j) { + data_data[j][i] = static_cast<int>((from[0] << 8) | (from[1] << 16) | (from[2] << 24)) / static_cast<float> (INT_MAX - 256); + from += 3; + } + } + break; + } + case 16: + { + for (int i = 0; i < frames; ++i) { + for (int j = 0; j < channels; ++j) { + data_data[j][i] = static_cast<int>(from[0] << 16 | (from[1] << 24)) / static_cast<float> (INT_MAX - 256); + from += 2; + } } + break; + } } audio->emit (film(), _dcp_content->audio->stream(), data, ContentTime::from_frames (_offset, vfr) + _next); @@ -280,7 +317,7 @@ DCPDecoder::pass_texts (ContentTime next, dcp::Size size) void DCPDecoder::pass_texts ( - ContentTime next, shared_ptr<dcp::SubtitleAsset> asset, bool reference, int64_t entry_point, shared_ptr<TextDecoder> decoder, dcp::Size size + ContentTime next, shared_ptr<dcp::TextAsset> asset, bool reference, int64_t entry_point, shared_ptr<TextDecoder> decoder, dcp::Size size ) { auto const vfr = _dcp_content->active_video_frame_rate (film()); @@ -288,16 +325,16 @@ DCPDecoder::pass_texts ( auto const frame = next.frames_round (vfr); if (_decode_referenced || !reference) { - auto subs = asset->subtitles_during ( + auto subs = asset->texts_during( dcp::Time (entry_point + frame, vfr, vfr), dcp::Time (entry_point + frame + 1, vfr, vfr), true ); - vector<dcp::SubtitleString> strings; + vector<dcp::TextString> strings; for (auto i: subs) { - auto is = dynamic_pointer_cast<const dcp::SubtitleString>(i); + auto is = dynamic_pointer_cast<const dcp::TextString>(i); if (is) { if (!strings.empty() && (strings.back().in() != is->in() || strings.back().out() != is->out())) { auto b = strings.back(); @@ -312,7 +349,7 @@ DCPDecoder::pass_texts ( strings.clear (); } - dcp::SubtitleString is_copy = *is; + auto is_copy = *is; if (is_copy.font()) { is_copy.set_font(_font_id_allocator.font_id(_reel - _reels.begin(), asset->id(), is_copy.font().get())); } else { @@ -325,7 +362,7 @@ DCPDecoder::pass_texts ( this would need to be done both here and in DCPSubtitleDecoder. */ - auto ii = dynamic_pointer_cast<const dcp::SubtitleImage>(i); + auto ii = dynamic_pointer_cast<const dcp::TextImage>(i); if (ii) { emit_subtitle_image ( ContentTimePeriod ( @@ -367,38 +404,40 @@ DCPDecoder::next_reel () void DCPDecoder::get_readers () { + _j2k_mono_reader.reset(); + _j2k_stereo_reader.reset(); + _mpeg2_mono_reader.reset(); + _sound_reader.reset(); + _atmos_reader.reset(); + _mpeg2_decompressor.reset(); + _atmos_metadata = boost::none; + if (_reel == _reels.end() || !_dcp_content->can_be_played ()) { - _mono_reader.reset (); - _stereo_reader.reset (); - _sound_reader.reset (); - _atmos_reader.reset (); return; } if (video && !video->ignore() && (*_reel)->main_picture()) { auto asset = (*_reel)->main_picture()->asset (); - auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset> (asset); - auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset> (asset); - DCPOMATIC_ASSERT (mono || stereo); - if (mono) { - _mono_reader = mono->start_read (); - _mono_reader->set_check_hmac (false); - _stereo_reader.reset (); + auto j2k_mono = dynamic_pointer_cast<dcp::MonoJ2KPictureAsset>(asset); + auto j2k_stereo = dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(asset); + auto mpeg2_mono = dynamic_pointer_cast<dcp::MonoMPEG2PictureAsset>(asset); + DCPOMATIC_ASSERT(j2k_mono || j2k_stereo || mpeg2_mono) + if (j2k_mono) { + _j2k_mono_reader = j2k_mono->start_read(); + _j2k_mono_reader->set_check_hmac(false); + } else if (j2k_stereo) { + _j2k_stereo_reader = j2k_stereo->start_read(); + _j2k_stereo_reader->set_check_hmac(false); } else { - _stereo_reader = stereo->start_read (); - _stereo_reader->set_check_hmac (false); - _mono_reader.reset (); + _mpeg2_mono_reader = mpeg2_mono->start_read(); + _mpeg2_mono_reader->set_check_hmac(false); + _mpeg2_decompressor = std::make_shared<dcp::MPEG2Decompressor>(); } - } else { - _mono_reader.reset (); - _stereo_reader.reset (); } if (audio && !audio->ignore() && (*_reel)->main_sound()) { _sound_reader = (*_reel)->main_sound()->asset()->start_read (); _sound_reader->set_check_hmac (false); - } else { - _sound_reader.reset (); } if ((*_reel)->atmos()) { @@ -406,9 +445,6 @@ DCPDecoder::get_readers () _atmos_reader = asset->start_read(); _atmos_reader->set_check_hmac (false); _atmos_metadata = AtmosMetadata (asset); - } else { - _atmos_reader.reset (); - _atmos_metadata = boost::none; } } diff --git a/src/lib/dcp_decoder.h b/src/lib/dcp_decoder.h index 2c0cd8f41..56a13874b 100644 --- a/src/lib/dcp_decoder.h +++ b/src/lib/dcp_decoder.h @@ -27,10 +27,12 @@ #include "atmos_metadata.h" #include "decoder.h" #include "font_id_allocator.h" -#include <dcp/mono_picture_asset_reader.h> -#include <dcp/stereo_picture_asset_reader.h> +#include <dcp/mono_j2k_picture_asset_reader.h> +#include <dcp/stereo_j2k_picture_asset_reader.h> +#include <dcp/mono_mpeg2_picture_asset_reader.h> +#include <dcp/mpeg2_transcode.h> #include <dcp/sound_asset_reader.h> -#include <dcp/subtitle_asset.h> +#include <dcp/text_asset.h> namespace dcp { @@ -77,7 +79,7 @@ private: void pass_texts (dcpomatic::ContentTime next, dcp::Size size); void pass_texts ( dcpomatic::ContentTime next, - std::shared_ptr<dcp::SubtitleAsset> asset, + std::shared_ptr<dcp::TextAsset> asset, bool reference, int64_t entry_point, std::shared_ptr<TextDecoder> decoder, @@ -94,15 +96,19 @@ private: std::vector<std::shared_ptr<dcp::Reel>>::iterator _reel; /** Offset of _reel from the start of the content in frames */ int64_t _offset = 0; - /** Reader for current mono picture asset, if applicable */ - std::shared_ptr<dcp::MonoPictureAssetReader> _mono_reader; - /** Reader for current stereo picture asset, if applicable */ - std::shared_ptr<dcp::StereoPictureAssetReader> _stereo_reader; + /** Reader for current J2K mono picture asset, if applicable */ + std::shared_ptr<dcp::MonoJ2KPictureAssetReader> _j2k_mono_reader; + /** Reader for current J2K stereo picture asset, if applicable */ + std::shared_ptr<dcp::StereoJ2KPictureAssetReader> _j2k_stereo_reader; + /** Reader for current MPEG2 mono picture asset, if applicable */ + std::shared_ptr<dcp::MonoMPEG2PictureAssetReader> _mpeg2_mono_reader; /** Reader for current sound asset, if applicable */ std::shared_ptr<dcp::SoundAssetReader> _sound_reader; std::shared_ptr<dcp::AtmosAssetReader> _atmos_reader; boost::optional<AtmosMetadata> _atmos_metadata; + std::shared_ptr<dcp::MPEG2Decompressor> _mpeg2_decompressor; + bool _decode_referenced = false; boost::optional<int> _forced_reduction; diff --git a/src/lib/dcp_digest_file.cc b/src/lib/dcp_digest_file.cc index eb243b60d..57e87bd6f 100644 --- a/src/lib/dcp_digest_file.cc +++ b/src/lib/dcp_digest_file.cc @@ -24,9 +24,9 @@ #include <dcp/mxf.h> #include <dcp/reel.h> #include <dcp/reel_picture_asset.h> +#include <dcp/reel_smpte_text_asset.h> #include <dcp/reel_sound_asset.h> -#include <dcp/reel_subtitle_asset.h> -#include <dcp/reel_smpte_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS #include <libxml++/libxml++.h> @@ -42,14 +42,14 @@ template <class R, class A> void add_asset(string film_key, shared_ptr<R> reel_asset, shared_ptr<A> asset, xmlpp::Element* reel, string name) { if (asset) { - auto out = reel->add_child(name); - out->add_child("Id")->add_child_text("urn:uuid:" + asset->id()); + auto out = cxml::add_child(reel, name); + cxml::add_text_child(out, "Id", "urn:uuid:" + asset->id()); if (reel_asset->annotation_text()) { - out->add_child("AnnotationText")->add_child_text(reel_asset->annotation_text().get()); + cxml::add_text_child(out, "AnnotationText", reel_asset->annotation_text().get()); } if (asset->key_id()) { - out->add_child("KeyId")->add_child_text("urn:uuid:" + asset->key_id().get()); - out->add_child("Key")->add_child_text(asset->key() ? asset->key()->hex() : film_key); + cxml::add_text_child(out, "KeyId", "urn:uuid:" + asset->key_id().get()); + cxml::add_text_child(out, "Key", asset->key() ? asset->key()->hex() : film_key); } } }; @@ -64,23 +64,23 @@ write_dcp_digest_file ( { xmlpp::Document doc; auto root = doc.create_root_node("FHG_DCP_DIGEST", "http://www.fhg.de/2009/04/02/dcpdig"); - root->add_child("InteropMode")->add_child_text(cpl->standard() == dcp::Standard::INTEROP ? "true" : "false"); - auto composition = root->add_child("CompositionList")->add_child("Composition"); - composition->add_child("Id")->add_child_text("urn:uuid:" + cpl->id()); - composition->add_child("AnnotationText")->add_child_text(cpl->annotation_text().get_value_or("")); - composition->add_child("ContentTitleText")->add_child_text(cpl->content_title_text()); - auto reel_list = composition->add_child("ReelList"); + cxml::add_text_child(root, "InteropMode", cpl->standard() == dcp::Standard::INTEROP ? "true" : "false"); + auto composition = cxml::add_child(cxml::add_child(root, "CompositionList"), "Composition"); + cxml::add_text_child(composition, "Id", "urn:uuid:" + cpl->id()); + cxml::add_text_child(composition, "AnnotationText", cpl->annotation_text().get_value_or("")); + cxml::add_text_child(composition, "ContentTitleText", cpl->content_title_text()); + auto reel_list = cxml::add_child(composition, "ReelList"); for (auto in_reel: cpl->reels()) { - auto out_reel = reel_list->add_child("Reel"); - out_reel->add_child("Id")->add_child_text("urn:uuid:" + in_reel->id()); - out_reel->add_child("AnnotationText"); + auto out_reel = cxml::add_child(reel_list, "Reel"); + cxml::add_text_child(out_reel, "Id", "urn:uuid:" + in_reel->id()); + cxml::add_child(out_reel, "AnnotationText"); if (in_reel->main_picture()) { add_asset(film_key, in_reel->main_picture(), in_reel->main_picture()->asset(), out_reel, "MainPicture"); } if (in_reel->main_sound()) { add_asset(film_key, in_reel->main_sound(), in_reel->main_sound()->asset(), out_reel, "MainSound"); } - if (auto smpte_sub = dynamic_pointer_cast<dcp::ReelSMPTESubtitleAsset>(in_reel->main_subtitle())) { + if (auto smpte_sub = dynamic_pointer_cast<dcp::ReelSMPTETextAsset>(in_reel->main_subtitle())) { add_asset(film_key, smpte_sub, smpte_sub->smpte_asset(), out_reel, "MainSubtitle"); } } diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc index ae5f9e9c0..3ee6dd99c 100644 --- a/src/lib/dcp_examiner.cc +++ b/src/lib/dcp_examiner.cc @@ -32,24 +32,25 @@ #include <dcp/cpl.h> #include <dcp/dcp.h> #include <dcp/decrypted_kdm.h> -#include <dcp/mono_picture_asset.h> -#include <dcp/mono_picture_asset_reader.h> -#include <dcp/mono_picture_frame.h> +#include <dcp/mono_j2k_picture_asset.h> +#include <dcp/mono_j2k_picture_asset_reader.h> +#include <dcp/mono_j2k_picture_frame.h> +#include <dcp/mono_mpeg2_picture_asset.h> +#include <dcp/mpeg2_transcode.h> #include <dcp/reel.h> #include <dcp/reel_atmos_asset.h> -#include <dcp/reel_closed_caption_asset.h> #include <dcp/reel_markers_asset.h> #include <dcp/reel_picture_asset.h> #include <dcp/reel_sound_asset.h> -#include <dcp/reel_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <dcp/search.h> #include <dcp/sound_asset.h> #include <dcp/sound_asset.h> #include <dcp/sound_asset_reader.h> -#include <dcp/stereo_picture_asset.h> -#include <dcp/stereo_picture_asset_reader.h> -#include <dcp/stereo_picture_frame.h> -#include <dcp/subtitle_asset.h> +#include <dcp/stereo_j2k_picture_asset.h> +#include <dcp/stereo_j2k_picture_asset_reader.h> +#include <dcp/stereo_j2k_picture_frame.h> +#include <dcp/text_asset.h> #include <iostream> #include "i18n.h" @@ -94,6 +95,9 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant) if (reel->main_subtitle() && !reel->main_subtitle()->asset_ref().resolved()) { ++unsatisfied; } + if (reel->main_caption() && !reel->main_caption()->asset_ref().resolved()) { + ++unsatisfied; + } if (reel->atmos() && !reel->atmos()->asset_ref().resolved()) { ++unsatisfied; } @@ -162,6 +166,10 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant) } else if (_video_size.get() != asset->size ()) { throw DCPError (_("Mismatched video sizes in DCP")); } + + if (dynamic_pointer_cast<dcp::MPEG2PictureAsset>(asset)) { + _video_range = VideoRange::VIDEO; + } } } @@ -196,48 +204,72 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant) } } - if (reel->main_subtitle()) { - if (!reel->main_subtitle()->asset_ref().resolved()) { - LOG_GENERAL("Main subtitle %1 of reel %2 is missing", reel->main_subtitle()->id(), reel->id()); - _needs_assets = true; - } else { - LOG_GENERAL("Main subtitle %1 of reel %2 found", reel->main_subtitle()->id(), reel->id()); + auto read_main_text = [this, reel, reel_index, try_to_parse_language]( + shared_ptr<dcp::ReelTextAsset> reel_asset, TextType type, string name, boost::optional<dcp::LanguageTag>& language + ) { + + if (reel_asset) { + if (reel_asset->entry_point().get_value_or(0) != 0) { + _has_non_zero_entry_point[type] = true; + } + if (!reel_asset->asset_ref().resolved()) { + LOG_GENERAL("Main %1 %2 of reel %3 is missing", name, reel_asset->id(), reel->id()); + _needs_assets = true; + } else { + LOG_GENERAL("Main %1 %2 of reel %3 found", name, reel_asset->id(), reel->id()); - _text_count[TextType::OPEN_SUBTITLE] = 1; - _open_subtitle_language = try_to_parse_language(reel->main_subtitle()->language()); + _text_count[type] = 1; + language = try_to_parse_language(reel_asset->language()); - auto asset = reel->main_subtitle()->asset(); - for (auto const& font: asset->font_data()) { - _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)}); + auto asset = reel_asset->asset(); + for (auto const& font: asset->font_data()) { + _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)}); + } } } - } - _text_count[TextType::CLOSED_CAPTION] = std::max(_text_count[TextType::CLOSED_CAPTION], static_cast<int>(reel->closed_captions().size())); - if (_dcp_text_tracks.size() < reel->closed_captions().size()) { - /* We only want to add 1 DCPTextTrack to _dcp_text_tracks per closed caption. I guess it's possible that different - * reels have different numbers of tracks (though I don't think they should) so make sure that _dcp_text_tracks ends - * up with the maximum. - */ - _dcp_text_tracks.clear(); - for (auto ccap: reel->closed_captions()) { - _dcp_text_tracks.push_back(DCPTextTrack(ccap->annotation_text().get_value_or(""), try_to_parse_language(ccap->language()))); + }; + + read_main_text(reel->main_subtitle(), TextType::OPEN_SUBTITLE, "subtitle", _open_subtitle_language); + read_main_text(reel->main_caption(), TextType::OPEN_CAPTION, "caption", _open_caption_language); + + auto read_closed_text = [this, reel, reel_index, try_to_parse_language]( + vector<shared_ptr<dcp::ReelTextAsset>> reel_assets, TextType type, string name, vector<DCPTextTrack>& tracks + ) { + + _text_count[type] = std::max(_text_count[type], static_cast<int>(reel_assets.size())); + + if (tracks.size() < reel_assets.size()) { + /* We only want to add 1 DCPTextTrack to tracks per closed subtitle/caption. I guess it's possible that different + * reels have different numbers of tracks (though I don't think they should) so make sure that tracks ends + * up with the maximum. + */ + tracks.clear(); + for (auto subtitle: reel_assets) { + tracks.push_back(DCPTextTrack(subtitle->annotation_text().get_value_or(""), try_to_parse_language(subtitle->language()))); + } } - } - for (auto ccap: reel->closed_captions()) { - if (!ccap->asset_ref().resolved()) { - LOG_GENERAL("Closed caption %1 of reel %2 is missing", ccap->id(), reel->id()); - _needs_assets = true; - } else { - LOG_GENERAL("Closed caption %1 of reel %2 found", ccap->id(), reel->id()); + for (auto text: reel_assets) { + if (text->entry_point().get_value_or(0) != 0) { + _has_non_zero_entry_point[type] = true; + } + if (!text->asset_ref().resolved()) { + LOG_GENERAL("Closed %1 %2 of reel %3 is missing", name, text->id(), reel->id()); + _needs_assets = true; + } else { + LOG_GENERAL("Closed %1 %2 of reel %3 found", name, text->id(), reel->id()); - auto asset = ccap->asset(); - for (auto const& font: asset->font_data()) { - _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)}); + auto asset = text->asset(); + for (auto const& font: asset->font_data()) { + _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)}); + } } } - } + }; + + read_closed_text(reel->closed_subtitles(), TextType::CLOSED_SUBTITLE, "subtitle", _dcp_subtitle_tracks); + read_closed_text(reel->closed_captions(), TextType::CLOSED_CAPTION, "caption", _dcp_caption_tracks); if (reel->main_markers ()) { auto rm = reel->main_markers()->get(); @@ -259,6 +291,10 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant) _reel_lengths.push_back(reel->main_sound()->actual_duration()); } else if (reel->main_subtitle()) { _reel_lengths.push_back(reel->main_subtitle()->actual_duration()); + } else if (reel->main_caption()) { + _reel_lengths.push_back(reel->main_caption()->actual_duration()); + } else if (!reel->closed_subtitles().empty()) { + _reel_lengths.push_back(reel->closed_subtitles().front()->actual_duration()); } else if (!reel->closed_captions().empty()) { _reel_lengths.push_back(reel->closed_captions().front()->actual_duration()); } else if (!reel->atmos()) { @@ -288,17 +324,26 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant) LOG_GENERAL_NC ("Picture has no key"); break; } - auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset>(pic); - auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset>(pic); + auto j2k_mono = dynamic_pointer_cast<dcp::MonoJ2KPictureAsset>(pic); + auto j2k_stereo = dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(pic); + auto mpeg2_mono = dynamic_pointer_cast<dcp::MonoMPEG2PictureAsset>(pic); - if (mono) { - auto reader = mono->start_read(); + if (j2k_mono) { + auto reader = j2k_mono->start_read(); reader->set_check_hmac (false); reader->get_frame(0)->xyz_image(); - } else { - auto reader = stereo->start_read(); + _video_encoding = VideoEncoding::JPEG2000; + } else if (j2k_stereo) { + auto reader = j2k_stereo->start_read(); reader->set_check_hmac (false); reader->get_frame(0)->xyz_image(dcp::Eye::LEFT); + _video_encoding = VideoEncoding::JPEG2000; + } else if (mpeg2_mono) { + auto reader = mpeg2_mono->start_read(); + reader->set_check_hmac(false); + dcp::MPEG2Decompressor decompressor; + decompressor.decompress_frame(reader->get_frame(0)); + _video_encoding = VideoEncoding::MPEG2; } } @@ -322,7 +367,18 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant) LOG_GENERAL_NC ("Subtitle has no key"); break; } - sub->subtitles (); + sub->texts(); + } + + if (i->main_caption() && i->main_caption()->asset_ref().resolved()) { + auto cap = i->main_caption()->asset(); + auto mxf_cap = dynamic_pointer_cast<dcp::MXF>(cap); + if (mxf_cap && mxf_cap->encrypted() && !mxf_cap->key()) { + _kdm_valid = false; + LOG_GENERAL_NC("Caption has no key"); + break; + } + cap->texts(); } if (i->atmos() && i->atmos()->asset_ref().resolved()) { @@ -349,7 +405,7 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant) _standard = selected_cpl->standard(); if (!selected_cpl->reels().empty()) { auto first_reel = selected_cpl->reels()[0]; - _three_d = first_reel->main_picture() && first_reel->main_picture()->asset_ref().resolved() && dynamic_pointer_cast<dcp::StereoPictureAsset>(first_reel->main_picture()->asset()); + _three_d = first_reel->main_picture() && first_reel->main_picture()->asset_ref().resolved() && dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(first_reel->main_picture()->asset()); } _ratings = selected_cpl->ratings(); for (auto version: selected_cpl->content_versions()) { diff --git a/src/lib/dcp_examiner.h b/src/lib/dcp_examiner.h index 04fa31ea4..5e2a33361 100644 --- a/src/lib/dcp_examiner.h +++ b/src/lib/dcp_examiner.h @@ -61,7 +61,7 @@ public: } VideoRange range () const override { - return VideoRange::FULL; + return _video_range; } PixelQuanta pixel_quanta () const override { @@ -104,8 +104,7 @@ public: return _audio_language; } - /** @param type TEXT_OPEN_SUBTITLE or TEXT_CLOSED_CAPTION. - * @return the number of "streams" of this type in the DCP. + /* @return the number of "streams" of @type in the DCP. * Reels do not affect the return value of this method: if a DCP * has any subtitles, type=TEXT_OPEN_SUBTITLE will return 1. */ @@ -117,9 +116,18 @@ public: return _open_subtitle_language; } - DCPTextTrack dcp_text_track (int i) const { - DCPOMATIC_ASSERT (i >= 0 && i < static_cast<int>(_dcp_text_tracks.size())); - return _dcp_text_tracks[i]; + boost::optional<dcp::LanguageTag> open_caption_language() const { + return _open_caption_language; + } + + DCPTextTrack dcp_subtitle_track(int i) const { + DCPOMATIC_ASSERT (i >= 0 && i < static_cast<int>(_dcp_subtitle_tracks.size())); + return _dcp_subtitle_tracks[i]; + } + + DCPTextTrack dcp_caption_track(int i) const { + DCPOMATIC_ASSERT (i >= 0 && i < static_cast<int>(_dcp_caption_tracks.size())); + return _dcp_caption_tracks[i]; } bool kdm_valid () const { @@ -130,6 +138,10 @@ public: return _standard; } + VideoEncoding video_encoding() const { + return _video_encoding; + } + bool three_d () const { return _three_d; } @@ -171,6 +183,10 @@ public: return _atmos_edit_rate; } + EnumIndexedVector<bool, TextType> has_non_zero_entry_point() const { + return _has_non_zero_entry_point; + } + void add_fonts(std::shared_ptr<TextContent> content); private: @@ -190,12 +206,16 @@ private: /** number of different assets of each type (OCAP/CCAP) */ EnumIndexedVector<int, TextType> _text_count; boost::optional<dcp::LanguageTag> _open_subtitle_language; - /** the DCPTextTracks for each of our CCAPs */ - std::vector<DCPTextTrack> _dcp_text_tracks; + boost::optional<dcp::LanguageTag> _open_caption_language; + /** the DCPTextTracks for each of our closed subtitles */ + std::vector<DCPTextTrack> _dcp_subtitle_tracks; + /** the DCPTextTracks for each of our closed captions */ + std::vector<DCPTextTrack> _dcp_caption_tracks; bool _encrypted = false; bool _needs_assets = false; bool _kdm_valid = false; boost::optional<dcp::Standard> _standard; + VideoEncoding _video_encoding = VideoEncoding::JPEG2000; bool _three_d = false; boost::optional<dcp::ContentKind> _content_kind; std::string _cpl; @@ -206,6 +226,8 @@ private: bool _has_atmos = false; Frame _atmos_length = 0; dcp::Fraction _atmos_edit_rate; + EnumIndexedVector<bool, TextType> _has_non_zero_entry_point; + VideoRange _video_range = VideoRange::FULL; struct Font { diff --git a/src/lib/dcp_encoder.cc b/src/lib/dcp_film_encoder.cc index a4bc133f8..83da57756 100644 --- a/src/lib/dcp_encoder.cc +++ b/src/lib/dcp_film_encoder.cc @@ -18,38 +18,42 @@ */ -/** @file src/dcp_encoder.cc + +/** @file src/dcp_film_encoder.cc * @brief A class which takes a Film and some Options, then uses those to encode the film into a DCP. * * A decoder is selected according to the content type, and the encoder can be specified * as a parameter to the constructor. */ -#include "dcp_encoder.h" -#include "j2k_encoder.h" -#include "film.h" -#include "video_decoder.h" + #include "audio_decoder.h" -#include "player.h" -#include "job.h" -#include "writer.h" #include "compose.hpp" +#include "dcp_film_encoder.h" +#include "film.h" +#include "j2k_encoder.h" +#include "job.h" +#include "mpeg2_encoder.h" +#include "player.h" +#include "player_video.h" #include "referenced_reel_asset.h" #include "text_content.h" -#include "player_video.h" +#include "video_decoder.h" +#include "writer.h" #include <boost/signals2.hpp> #include <iostream> #include "i18n.h" -using std::string; + using std::cout; +using std::dynamic_pointer_cast; using std::list; -using std::vector; +using std::make_shared; using std::shared_ptr; +using std::string; +using std::vector; using std::weak_ptr; -using std::dynamic_pointer_cast; -using std::make_shared; using boost::optional; #if BOOST_VERSION >= 106100 using namespace boost::placeholders; @@ -61,17 +65,30 @@ using namespace dcpomatic; * @param film Film that we are encoding. * @param job Job that this encoder is being used in. */ -DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job) - : Encoder (film, job) - , _writer(film, job) - , _j2k_encoder(film, _writer) +DCPFilmEncoder::DCPFilmEncoder(shared_ptr<const Film> film, weak_ptr<Job> job) + : FilmEncoder(film, job) + , _writer(film, job, film->dir(film->dcp_name())) , _finishing (false) , _non_burnt_subtitles (false) { - _player_video_connection = _player.Video.connect(bind(&DCPEncoder::video, this, _1, _2)); - _player_audio_connection = _player.Audio.connect(bind(&DCPEncoder::audio, this, _1, _2)); - _player_text_connection = _player.Text.connect(bind(&DCPEncoder::text, this, _1, _2, _3, _4)); - _player_atmos_connection = _player.Atmos.connect(bind(&DCPEncoder::atmos, this, _1, _2, _3)); + switch (_film->video_encoding()) { + case VideoEncoding::JPEG2000: + _encoder.reset(new J2KEncoder(film, _writer)); + break; + case VideoEncoding::MPEG2: + _encoder.reset(new MPEG2Encoder(film, _writer)); + break; + case VideoEncoding::COUNT: + DCPOMATIC_ASSERT(false); + } + + /* Now that we have a Writer we can clear out the assets directory */ + clean_up_asset_directory(film->assets_path()); + + _player_video_connection = _player.Video.connect(bind(&DCPFilmEncoder::video, this, _1, _2)); + _player_audio_connection = _player.Audio.connect(bind(&DCPFilmEncoder::audio, this, _1, _2)); + _player_text_connection = _player.Text.connect(bind(&DCPFilmEncoder::text, this, _1, _2, _3, _4)); + _player_atmos_connection = _player.Atmos.connect(bind(&DCPFilmEncoder::atmos, this, _1, _2, _3)); for (auto c: film->content ()) { for (auto i: c->text) { @@ -82,7 +99,7 @@ DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job) } } -DCPEncoder::~DCPEncoder () +DCPFilmEncoder::~DCPFilmEncoder() { /* We must stop receiving more video data before we die */ _player_video_connection.release (); @@ -92,10 +109,10 @@ DCPEncoder::~DCPEncoder () } void -DCPEncoder::go () +DCPFilmEncoder::go() { _writer.start(); - _j2k_encoder.begin(); + _encoder->begin(); { auto job = _job.lock (); @@ -121,24 +138,38 @@ DCPEncoder::go () } _finishing = true; - _j2k_encoder.end(); - _writer.finish(_film->dir(_film->dcp_name())); + _encoder->end(); + _writer.finish(); +} + + +void +DCPFilmEncoder::pause() +{ + _encoder->pause(); +} + + +void +DCPFilmEncoder::resume() +{ + _encoder->resume(); } void -DCPEncoder::video (shared_ptr<PlayerVideo> data, DCPTime time) +DCPFilmEncoder::video(shared_ptr<PlayerVideo> data, DCPTime time) { - _j2k_encoder.encode(data, time); + _encoder->encode(data, time); } void -DCPEncoder::audio (shared_ptr<AudioBuffers> data, DCPTime time) +DCPFilmEncoder::audio(shared_ptr<AudioBuffers> data, DCPTime time) { _writer.write(data, time); } void -DCPEncoder::text (PlayerText data, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period) +DCPFilmEncoder::text(PlayerText data, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period) { if (type == TextType::CLOSED_CAPTION || _non_burnt_subtitles) { _writer.write(data, type, track, period); @@ -147,20 +178,20 @@ DCPEncoder::text (PlayerText data, TextType type, optional<DCPTextTrack> track, void -DCPEncoder::atmos (shared_ptr<const dcp::AtmosFrame> data, DCPTime time, AtmosMetadata metadata) +DCPFilmEncoder::atmos(shared_ptr<const dcp::AtmosFrame> data, DCPTime time, AtmosMetadata metadata) { _writer.write(data, time, metadata); } optional<float> -DCPEncoder::current_rate () const +DCPFilmEncoder::current_rate() const { - return _j2k_encoder.current_encoding_rate(); + return _encoder->current_encoding_rate(); } Frame -DCPEncoder::frames_done () const +DCPFilmEncoder::frames_done() const { return _player.frames_done(); } diff --git a/src/lib/dcp_encoder.h b/src/lib/dcp_film_encoder.h index ad77f6951..3c697a115 100644 --- a/src/lib/dcp_encoder.h +++ b/src/lib/dcp_film_encoder.h @@ -22,7 +22,7 @@ #include "atmos_metadata.h" #include "dcp_text_track.h" #include "dcpomatic_time.h" -#include "encoder.h" +#include "film_encoder.h" #include "player_text.h" #include "j2k_encoder.h" #include "writer.h" @@ -35,13 +35,15 @@ class Job; class Player; class PlayerVideo; +struct frames_not_lost_when_threads_disappear; -/** @class DCPEncoder */ -class DCPEncoder : public Encoder + +/** @class DCPFilmEncoder */ +class DCPFilmEncoder : public FilmEncoder { public: - DCPEncoder (std::shared_ptr<const Film> film, std::weak_ptr<Job> job); - ~DCPEncoder (); + DCPFilmEncoder(std::shared_ptr<const Film> film, std::weak_ptr<Job> job); + ~DCPFilmEncoder(); void go () override; @@ -53,15 +55,20 @@ public: return _finishing; } + void pause() override; + void resume() override; + private: + friend struct ::frames_not_lost_when_threads_disappear; + void video (std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime); void audio (std::shared_ptr<AudioBuffers>, dcpomatic::DCPTime); void text (PlayerText, TextType, boost::optional<DCPTextTrack>, dcpomatic::DCPTimePeriod); void atmos (std::shared_ptr<const dcp::AtmosFrame>, dcpomatic::DCPTime, AtmosMetadata metadata); Writer _writer; - J2KEncoder _j2k_encoder; + std::unique_ptr<VideoEncoder> _encoder; bool _finishing; bool _non_burnt_subtitles; diff --git a/src/lib/dcp_subtitle.cc b/src/lib/dcp_subtitle.cc index c2c3f7f70..c2d390b55 100644 --- a/src/lib/dcp_subtitle.cc +++ b/src/lib/dcp_subtitle.cc @@ -22,8 +22,8 @@ #include "dcp_subtitle.h" #include "exceptions.h" #include "compose.hpp" -#include <dcp/interop_subtitle_asset.h> -#include <dcp/smpte_subtitle_asset.h> +#include <dcp/interop_text_asset.h> +#include <dcp/smpte_text_asset.h> #include <memory> #include "i18n.h" @@ -35,22 +35,22 @@ using std::string; using std::make_shared; -shared_ptr<dcp::SubtitleAsset> +shared_ptr<dcp::TextAsset> DCPSubtitle::load (boost::filesystem::path file) const { - shared_ptr<dcp::SubtitleAsset> sc; + shared_ptr<dcp::TextAsset> sc; string interop_error; string smpte_error; try { - sc = make_shared<dcp::InteropSubtitleAsset>(file); + sc = make_shared<dcp::InteropTextAsset>(file); } catch (exception& e) { interop_error = e.what (); } if (!sc) { try { - sc = make_shared<dcp::SMPTESubtitleAsset>(file); + sc = make_shared<dcp::SMPTETextAsset>(file); } catch (exception& e) { smpte_error = e.what(); } diff --git a/src/lib/dcp_subtitle.h b/src/lib/dcp_subtitle.h index 285dd55bc..0f7928103 100644 --- a/src/lib/dcp_subtitle.h +++ b/src/lib/dcp_subtitle.h @@ -28,14 +28,14 @@ namespace dcp { - class SubtitleAsset; + class TextAsset; } class DCPSubtitle { protected: - std::shared_ptr<dcp::SubtitleAsset> load (boost::filesystem::path) const; + std::shared_ptr<dcp::TextAsset> load(boost::filesystem::path) const; }; diff --git a/src/lib/dcp_subtitle_content.cc b/src/lib/dcp_subtitle_content.cc index 8de5967ef..b18d14318 100644 --- a/src/lib/dcp_subtitle_content.cc +++ b/src/lib/dcp_subtitle_content.cc @@ -18,35 +18,39 @@ */ -#include "font.h" + #include "dcp_subtitle_content.h" #include "film.h" +#include "font.h" #include "font_id_allocator.h" #include "text_content.h" -#include <dcp/raw_convert.h> -#include <dcp/interop_subtitle_asset.h> -#include <dcp/smpte_subtitle_asset.h> #include <dcp/interop_load_font_node.h> +#include <dcp/interop_text_asset.h> +#include <dcp/raw_convert.h> +#include <dcp/smpte_text_asset.h> #include <libxml++/libxml++.h> #include "i18n.h" + using std::dynamic_pointer_cast; using std::list; using std::make_shared; using std::shared_ptr; using std::string; +using boost::optional; using dcp::raw_convert; using namespace dcpomatic; + DCPSubtitleContent::DCPSubtitleContent (boost::filesystem::path path) : Content (path) { text.push_back (make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE)); } -DCPSubtitleContent::DCPSubtitleContent (cxml::ConstNodePtr node, int version) - : Content (node) +DCPSubtitleContent::DCPSubtitleContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version) + : Content (node, film_directory) , _length (node->number_child<ContentTime::Type> ("Length")) { list<string> notes; @@ -60,8 +64,8 @@ DCPSubtitleContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job) auto subtitle_asset = load(path(0)); - auto iop = dynamic_pointer_cast<dcp::InteropSubtitleAsset>(subtitle_asset); - auto smpte = dynamic_pointer_cast<dcp::SMPTESubtitleAsset>(subtitle_asset); + auto iop = dynamic_pointer_cast<dcp::InteropTextAsset>(subtitle_asset); + auto smpte = dynamic_pointer_cast<dcp::SMPTETextAsset>(subtitle_asset); if (smpte) { set_video_frame_rate(film, smpte->edit_rate().numerator); } @@ -71,7 +75,7 @@ DCPSubtitleContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job) /* Default to turning these subtitles on */ only_text()->set_use (true); - _length = ContentTime::from_seconds(subtitle_asset->latest_subtitle_out().as_seconds()); + _length = ContentTime::from_seconds(subtitle_asset->latest_text_out().as_seconds()); subtitle_asset->fix_empty_font_ids(); add_fonts(only_text(), subtitle_asset); @@ -79,7 +83,7 @@ DCPSubtitleContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job) void -DCPSubtitleContent::add_fonts(shared_ptr<TextContent> content, shared_ptr<dcp::SubtitleAsset> subtitle_asset) +DCPSubtitleContent::add_fonts(shared_ptr<TextContent> content, shared_ptr<dcp::TextAsset> subtitle_asset) { FontIDAllocator font_id_allocator; @@ -137,14 +141,14 @@ DCPSubtitleContent::technical_summary () const } void -DCPSubtitleContent::as_xml (xmlpp::Node* node, bool with_paths) const +DCPSubtitleContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { - node->add_child("Type")->add_child_text ("DCPSubtitle"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "DCPSubtitle"); + Content::as_xml(element, with_paths, path_behaviour, film_directory); if (only_text()) { - only_text()->as_xml (node); + only_text()->as_xml(element); } - node->add_child("Length")->add_child_text (raw_convert<string> (_length.get ())); + cxml::add_text_child(element, "Length", raw_convert<string>(_length.get())); } diff --git a/src/lib/dcp_subtitle_content.h b/src/lib/dcp_subtitle_content.h index 89a6f26a2..14d36fb69 100644 --- a/src/lib/dcp_subtitle_content.h +++ b/src/lib/dcp_subtitle_content.h @@ -25,17 +25,24 @@ class DCPSubtitleContent : public DCPSubtitle, public Content { public: DCPSubtitleContent (boost::filesystem::path); - DCPSubtitleContent (cxml::ConstNodePtr, int); + DCPSubtitleContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int); void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + + void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const override; + dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override; dcpomatic::DCPTime approximate_length () const override; private: - void add_fonts(std::shared_ptr<TextContent> content, std::shared_ptr<dcp::SubtitleAsset> subtitle_asset); + void add_fonts(std::shared_ptr<TextContent> content, std::shared_ptr<dcp::TextAsset> subtitle_asset); dcpomatic::ContentTime _length; }; diff --git a/src/lib/dcp_subtitle_decoder.cc b/src/lib/dcp_subtitle_decoder.cc index 711dc77f2..95e80ac19 100644 --- a/src/lib/dcp_subtitle_decoder.cc +++ b/src/lib/dcp_subtitle_decoder.cc @@ -25,7 +25,7 @@ #include "font.h" #include "text_content.h" #include "util.h" -#include <dcp/interop_subtitle_asset.h> +#include <dcp/interop_text_asset.h> #include <dcp/load_font_node.h> @@ -45,7 +45,7 @@ DCPSubtitleDecoder::DCPSubtitleDecoder (shared_ptr<const Film> film, shared_ptr< /* Load the XML or MXF file */ _asset = load(content->path(0)); _asset->fix_empty_font_ids(); - _subtitles = _asset->subtitles(); + _subtitles = _asset->texts(); _next = _subtitles.begin (); _subtitle_standard = _asset->subtitle_standard(); @@ -91,14 +91,14 @@ DCPSubtitleDecoder::pass () time of emitting the first. */ - vector<dcp::SubtitleString> s; - vector<dcp::SubtitleImage> i; + vector<dcp::TextString> s; + vector<dcp::TextImage> i; auto const p = content_time_period (*_next); while (_next != _subtitles.end () && content_time_period (*_next) == p) { - auto ns = dynamic_pointer_cast<const dcp::SubtitleString>(*_next); + auto ns = dynamic_pointer_cast<const dcp::TextString>(*_next); if (ns) { - dcp::SubtitleString ns_copy = *ns; + auto ns_copy = *ns; if (ns_copy.font()) { ns_copy.set_font(_font_id_allocator.font_id(0, _asset->id(), ns_copy.font().get())); } else { @@ -111,7 +111,7 @@ DCPSubtitleDecoder::pass () this would need to be done both here and in DCPDecoder. */ - auto ni = dynamic_pointer_cast<const dcp::SubtitleImage>(*_next); + auto ni = dynamic_pointer_cast<const dcp::TextImage>(*_next); if (ni) { emit_subtitle_image (p, *ni, film()->frame_size(), only_text()); ++_next; @@ -128,7 +128,7 @@ DCPSubtitleDecoder::pass () ContentTimePeriod -DCPSubtitleDecoder::content_time_period (shared_ptr<const dcp::Subtitle> s) const +DCPSubtitleDecoder::content_time_period(shared_ptr<const dcp::Text> s) const { return { ContentTime::from_seconds(s->in().as_seconds()), diff --git a/src/lib/dcp_subtitle_decoder.h b/src/lib/dcp_subtitle_decoder.h index 9d0851253..f11fc3044 100644 --- a/src/lib/dcp_subtitle_decoder.h +++ b/src/lib/dcp_subtitle_decoder.h @@ -38,14 +38,14 @@ public: boost::optional<dcpomatic::ContentTime> first () const; private: - dcpomatic::ContentTimePeriod content_time_period (std::shared_ptr<const dcp::Subtitle> s) const; + dcpomatic::ContentTimePeriod content_time_period(std::shared_ptr<const dcp::Text> s) const; void update_position(); - std::vector<std::shared_ptr<const dcp::Subtitle>> _subtitles; - std::vector<std::shared_ptr<const dcp::Subtitle>>::const_iterator _next; + std::vector<std::shared_ptr<const dcp::Text>> _subtitles; + std::vector<std::shared_ptr<const dcp::Text>>::const_iterator _next; dcp::SubtitleStandard _subtitle_standard; - std::shared_ptr<dcp::SubtitleAsset> _asset; + std::shared_ptr<dcp::TextAsset> _asset; FontIDAllocator _font_id_allocator; }; diff --git a/src/lib/dcp_text_track.cc b/src/lib/dcp_text_track.cc index 0bd751275..292932396 100644 --- a/src/lib/dcp_text_track.cc +++ b/src/lib/dcp_text_track.cc @@ -56,9 +56,9 @@ DCPTextTrack::summary () const void DCPTextTrack::as_xml (xmlpp::Element* parent) const { - parent->add_child("Name")->add_child_text(name); + cxml::add_text_child(parent, "Name", name); if (language) { - parent->add_child("Language")->add_child_text(language->to_string()); + cxml::add_text_child(parent, "Language", language->to_string()); } } diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc index 217b72183..ec88888dd 100644 --- a/src/lib/dcp_video.cc +++ b/src/lib/dcp_video.cc @@ -74,15 +74,15 @@ using namespace boost::placeholders; /** Construct a DCP video frame. * @param frame Input frame. * @param index Index of the frame within the DCP. - * @param bw J2K bandwidth to use (see Config::j2k_bandwidth ()) + * @param bit_rate Video bit rate to use. */ DCPVideo::DCPVideo ( - shared_ptr<const PlayerVideo> frame, int index, int dcp_fps, int bw, Resolution r + shared_ptr<const PlayerVideo> frame, int index, int dcp_fps, int64_t bit_rate, Resolution r ) : _frame (frame) , _index (index) , _frames_per_second (dcp_fps) - , _j2k_bandwidth (bw) + , _video_bit_rate(bit_rate) , _resolution (r) { @@ -93,7 +93,7 @@ DCPVideo::DCPVideo (shared_ptr<const PlayerVideo> frame, shared_ptr<const cxml:: { _index = node->number_child<int> ("Index"); _frames_per_second = node->number_child<int> ("FramesPerSecond"); - _j2k_bandwidth = node->number_child<int> ("J2KBandwidth"); + _video_bit_rate = node->number_child<int64_t>("VideoBitRate"); _resolution = Resolution (node->optional_number_child<int>("Resolution").get_value_or(static_cast<int>(Resolution::TWO_K))); } @@ -117,6 +117,30 @@ DCPVideo::convert_to_xyz (shared_ptr<const PlayerVideo> frame) return xyz; } +dcp::Size +DCPVideo::get_size() const +{ + auto image = _frame->image(bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, false); + return image->size(); +} + + +void +DCPVideo::convert_to_xyz(uint16_t* dst) const +{ + auto image = _frame->image(bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, false); + if (_frame->colour_conversion()) { + dcp::rgb_to_xyz ( + image->data()[0], + dst, + image->size(), + image->stride()[0], + _frame->colour_conversion().get() + ); + } +} + + /** J2K-encode this frame on the local host. * @return Encoded data. */ @@ -136,7 +160,7 @@ DCPVideo::encode_locally () const while (true) { enc = dcp::compress_j2k ( xyz, - _j2k_bandwidth, + _video_bit_rate, _frames_per_second, _frame->eyes() == Eyes::LEFT || _frame->eyes() == Eyes::RIGHT, _resolution == Resolution::FOUR_K, @@ -215,7 +239,7 @@ DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) const /* Collect all XML metadata */ xmlpp::Document doc; auto root = doc.create_root_node ("EncodingRequest"); - root->add_child("Version")->add_child_text (raw_convert<string> (SERVER_LINK_VERSION)); + cxml::add_text_child(root, "Version", raw_convert<string>(SERVER_LINK_VERSION)); add_metadata (root); LOG_DEBUG_ENCODE (N_("Sending frame %1 to remote"), _index); @@ -254,10 +278,10 @@ DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) const void DCPVideo::add_metadata (xmlpp::Element* el) const { - el->add_child("Index")->add_child_text (raw_convert<string> (_index)); - el->add_child("FramesPerSecond")->add_child_text (raw_convert<string> (_frames_per_second)); - el->add_child("J2KBandwidth")->add_child_text (raw_convert<string> (_j2k_bandwidth)); - el->add_child("Resolution")->add_child_text (raw_convert<string> (int (_resolution))); + cxml::add_text_child(el, "Index", raw_convert<string>(_index)); + cxml::add_text_child(el, "FramesPerSecond", raw_convert<string>(_frames_per_second)); + cxml::add_text_child(el, "VideoBitRate", raw_convert<string>(_video_bit_rate)); + cxml::add_text_child(el, "Resolution", raw_convert<string>(int(_resolution))); _frame->add_metadata (el); } @@ -274,7 +298,7 @@ bool DCPVideo::same (shared_ptr<const DCPVideo> other) const { if (_frames_per_second != other->_frames_per_second || - _j2k_bandwidth != other->_j2k_bandwidth || + _video_bit_rate != other->_video_bit_rate || _resolution != other->_resolution) { return false; } diff --git a/src/lib/dcp_video.h b/src/lib/dcp_video.h index bf95ccfe6..92c155f0c 100644 --- a/src/lib/dcp_video.h +++ b/src/lib/dcp_video.h @@ -17,6 +17,8 @@ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef DCPOMATIC_DCP_VIDEO_H +#define DCPOMATIC_DCP_VIDEO_H #include "encode_server_description.h" @@ -47,7 +49,7 @@ class PlayerVideo; class DCPVideo { public: - DCPVideo (std::shared_ptr<const PlayerVideo>, int index, int dcp_fps, int bandwidth, Resolution r); + DCPVideo(std::shared_ptr<const PlayerVideo>, int index, int dcp_fps, int64_t bit_rate, Resolution r); DCPVideo (std::shared_ptr<const PlayerVideo>, cxml::ConstNodePtr); DCPVideo (DCPVideo const&) = default; @@ -66,6 +68,9 @@ public: static std::shared_ptr<dcp::OpenJPEGImage> convert_to_xyz(std::shared_ptr<const PlayerVideo> frame); + void convert_to_xyz(uint16_t* dst) const; + dcp::Size get_size() const; + private: void add_metadata (xmlpp::Element *) const; @@ -73,6 +78,8 @@ private: std::shared_ptr<const PlayerVideo> _frame; int _index; ///< frame index within the DCP's intrinsic duration int _frames_per_second; ///< Frames per second that we will use for the DCP - int _j2k_bandwidth; ///< J2K bandwidth to use + int64_t _video_bit_rate; ///< Video bit rate to use Resolution _resolution; ///< Resolution (2K or 4K) }; + +#endif diff --git a/src/lib/dcpomatic_log.h b/src/lib/dcpomatic_log.h index 6a1c3a6ec..2372c8d01 100644 --- a/src/lib/dcpomatic_log.h +++ b/src/lib/dcpomatic_log.h @@ -44,4 +44,6 @@ extern std::shared_ptr<Log> dcpomatic_log; #define LOG_DEBUG_PLAYER_NC(...) dcpomatic_log->log(__VA_ARGS__, LogEntry::TYPE_DEBUG_PLAYER); #define LOG_DEBUG_AUDIO_ANALYSIS(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_DEBUG_AUDIO_ANALYSIS); #define LOG_DEBUG_AUDIO_ANALYSIS_NC(...) dcpomatic_log->log(__VA_ARGS__, LogEntry::TYPE_DEBUG_AUDIO_ANALYSIS); +#define LOG_HTTP(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_HTTP); +#define LOG_HTTP_NC(...) dcpomatic_log->log(__VA_ARGS__, LogEntry::TYPE_HTTP); diff --git a/src/lib/dcpomatic_socket.cc b/src/lib/dcpomatic_socket.cc index 8f8f639cc..83ab072d2 100644 --- a/src/lib/dcpomatic_socket.cc +++ b/src/lib/dcpomatic_socket.cc @@ -63,7 +63,7 @@ Socket::check () void Socket::connect (boost::asio::ip::tcp::endpoint endpoint) { - _deadline.expires_from_now (boost::posix_time::seconds (_timeout)); + set_deadline_from_now(_timeout); boost::system::error_code ec = boost::asio::error::would_block; _socket.async_connect (endpoint, boost::lambda::var(ec) = boost::lambda::_1); do { @@ -95,7 +95,7 @@ Socket::connect (boost::asio::ip::tcp::endpoint endpoint) void Socket::write (uint8_t const * data, int size) { - _deadline.expires_from_now (boost::posix_time::seconds (_timeout)); + set_deadline_from_now(_timeout); boost::system::error_code ec = boost::asio::error::would_block; boost::asio::async_write (_socket, boost::asio::buffer (data, size), boost::lambda::var(ec) = boost::lambda::_1); @@ -115,6 +115,13 @@ Socket::write (uint8_t const * data, int size) void +Socket::write(std::string const& str) +{ + write(reinterpret_cast<uint8_t const*>(str.c_str()), str.size()); +} + + +void Socket::write (uint32_t v) { v = htonl (v); @@ -129,7 +136,7 @@ Socket::write (uint32_t v) void Socket::read (uint8_t* data, int size) { - _deadline.expires_from_now (boost::posix_time::seconds (_timeout)); + set_deadline_from_now(_timeout); boost::system::error_code ec = boost::asio::error::would_block; boost::asio::async_read (_socket, boost::asio::buffer (data, size), boost::lambda::var(ec) = boost::lambda::_1); @@ -259,3 +266,22 @@ Socket::set_send_buffer_size (int size) _send_buffer_size = size; } + +void +Socket::set_deadline_from_now(int seconds) +{ + _deadline.expires_from_now(boost::posix_time::seconds(seconds)); +} + +void +Socket::run() +{ + _io_service.run_one(); +} + +void +Socket::close() +{ + _socket.close(); +} + diff --git a/src/lib/dcpomatic_socket.h b/src/lib/dcpomatic_socket.h index 7dff979e0..86e5f1266 100644 --- a/src/lib/dcpomatic_socket.h +++ b/src/lib/dcpomatic_socket.h @@ -47,10 +47,19 @@ public: void write (uint32_t n); void write (uint8_t const * data, int size); + void write(std::string const& str); void read (uint8_t* data, int size); uint32_t read_uint32 (); + void set_deadline_from_now(int seconds); + void run(); + void close(); + + bool is_open() const { + return _socket.is_open(); + } + class ReadDigestScope { public: diff --git a/src/lib/dcpomatic_time.cc b/src/lib/dcpomatic_time.cc index ac797f8f4..60fc5342a 100644 --- a/src/lib/dcpomatic_time.cc +++ b/src/lib/dcpomatic_time.cc @@ -27,6 +27,25 @@ using std::string; using namespace dcpomatic; +bool +dcpomatic::operator<=(HMSF const& a, HMSF const& b) +{ + if (a.h != b.h) { + return a.h <= b.h; + } + + if (a.m != b.m) { + return a.m <= b.m; + } + + if (a.s != b.s) { + return a.s <= b.s; + } + + return a.f <= b.f; +} + + template <> Time<ContentTimeDifferentiator, DCPTimeDifferentiator>::Time (DCPTime d, FrameRateChange f) : _t (llrint(d.get() * f.speed_up)) diff --git a/src/lib/dcpomatic_time.h b/src/lib/dcpomatic_time.h index 1b12ea901..63bb86549 100644 --- a/src/lib/dcpomatic_time.h +++ b/src/lib/dcpomatic_time.h @@ -64,6 +64,9 @@ public: }; +bool operator<=(HMSF const& a, HMSF const& b); + + /** A time in seconds, expressed as a number scaled up by Time::HZ. We want two different * versions of this class, dcpomatic::ContentTime and dcpomatic::DCPTime, and we want it to be impossible to * convert implicitly between the two. Hence there's this template hack. I'm not @@ -152,6 +155,10 @@ public: return *this; } + Time<S, O> operator* (int o) const { + return Time<S, O> (_t * o); + } + Time<S, O> operator/ (int o) const { return Time<S, O> (_t / o); } diff --git a/src/lib/decoder_factory.cc b/src/lib/decoder_factory.cc index 1bda93c94..ea0eda83d 100644 --- a/src/lib/decoder_factory.cc +++ b/src/lib/decoder_factory.cc @@ -59,13 +59,11 @@ maybe_cast (shared_ptr<Decoder> d) shared_ptr<Decoder> decoder_factory (shared_ptr<const Film> film, shared_ptr<const Content> content, bool fast, bool tolerant, shared_ptr<Decoder> old_decoder) { - auto fc = dynamic_pointer_cast<const FFmpegContent> (content); - if (fc) { + if (auto fc = dynamic_pointer_cast<const FFmpegContent>(content)) { return make_shared<FFmpegDecoder>(film, fc, fast); } - auto dc = dynamic_pointer_cast<const DCPContent> (content); - if (dc) { + if (auto dc = dynamic_pointer_cast<const DCPContent>(content)) { try { return make_shared<DCPDecoder>(film, dc, fast, tolerant, maybe_cast<DCPDecoder>(old_decoder)); } catch (KDMError& e) { @@ -74,28 +72,23 @@ decoder_factory (shared_ptr<const Film> film, shared_ptr<const Content> content, } } - auto ic = dynamic_pointer_cast<const ImageContent> (content); - if (ic) { + if (auto ic = dynamic_pointer_cast<const ImageContent>(content)) { return make_shared<ImageDecoder>(film, ic); } - auto rc = dynamic_pointer_cast<const StringTextFileContent> (content); - if (rc) { + if (auto rc = dynamic_pointer_cast<const StringTextFileContent>(content)) { return make_shared<StringTextFileDecoder>(film, rc); } - auto dsc = dynamic_pointer_cast<const DCPSubtitleContent> (content); - if (dsc) { + if (auto dsc = dynamic_pointer_cast<const DCPSubtitleContent>(content)) { return make_shared<DCPSubtitleDecoder>(film, dsc); } - auto vmc = dynamic_pointer_cast<const VideoMXFContent> (content); - if (vmc) { + if (auto vmc = dynamic_pointer_cast<const VideoMXFContent>(content)) { return make_shared<VideoMXFDecoder>(film, vmc); } - auto amc = dynamic_pointer_cast<const AtmosMXFContent> (content); - if (amc) { + if (auto amc = dynamic_pointer_cast<const AtmosMXFContent>(content)) { return make_shared<AtmosMXFDecoder>(film, amc); } diff --git a/src/lib/dkdm_recipient.cc b/src/lib/dkdm_recipient.cc index c73379bed..83ba96de6 100644 --- a/src/lib/dkdm_recipient.cc +++ b/src/lib/dkdm_recipient.cc @@ -19,12 +19,12 @@ */ +#include "cinema_list.h" #include "config.h" #include "dkdm_recipient.h" #include "film.h" #include "kdm_with_metadata.h" #include <dcp/raw_convert.h> -#include <dcp/utc_offset.h> using std::make_shared; @@ -34,62 +34,33 @@ using std::vector; using dcp::raw_convert; -DKDMRecipient::DKDMRecipient (cxml::ConstNodePtr node) - : KDMRecipient (node) -{ - for (auto i: node->node_children("Email")) { - emails.push_back (i->content()); - } - - utc_offset_hour = node->number_child<int>("UTCOffsetHour"); - utc_offset_minute = node->number_child<int>("UTCOffsetMinute"); -} - - -void -DKDMRecipient::as_xml (xmlpp::Element* node) const -{ - KDMRecipient::as_xml (node); - - for (auto i: emails) { - node->add_child("Email")->add_child_text(i); - } - - node->add_child("UTCOffsetHour")->add_child_text(raw_convert<string>(utc_offset_hour)); - node->add_child("UTCOffsetMinute")->add_child_text(raw_convert<string>(utc_offset_minute)); -} - - KDMWithMetadataPtr kdm_for_dkdm_recipient ( shared_ptr<const Film> film, boost::filesystem::path cpl, - shared_ptr<DKDMRecipient> recipient, - boost::posix_time::ptime valid_from, - boost::posix_time::ptime valid_to + DKDMRecipient const& recipient, + dcp::LocalTime valid_from, + dcp::LocalTime valid_to ) { - if (!recipient->recipient) { + if (!recipient.recipient) { return {}; } - dcp::LocalTime const begin(valid_from, dcp::UTCOffset(recipient->utc_offset_hour, recipient->utc_offset_minute)); - dcp::LocalTime const end (valid_to, dcp::UTCOffset(recipient->utc_offset_hour, recipient->utc_offset_minute)); - auto signer = Config::instance()->signer_chain(); if (!signer->valid()) { throw InvalidSignerError(); } - auto const decrypted_kdm = film->make_kdm(cpl, begin, end); - auto const kdm = decrypted_kdm.encrypt(signer, recipient->recipient.get(), {}, dcp::Formulation::MODIFIED_TRANSITIONAL_1, true, 0); + auto const decrypted_kdm = film->make_kdm(cpl, valid_from, valid_to); + auto const kdm = decrypted_kdm.encrypt(signer, recipient.recipient.get(), {}, dcp::Formulation::MODIFIED_TRANSITIONAL_1, true, 0); dcp::NameFormat::Map name_values; name_values['f'] = kdm.content_title_text(); - name_values['b'] = begin.date() + " " + begin.time_of_day(true, false); - name_values['e'] = end.date() + " " + end.time_of_day(true, false); + name_values['b'] = valid_from.date() + " " + valid_from.time_of_day(true, false); + name_values['e'] = valid_to.date() + " " + valid_to.time_of_day(true, false); name_values['i'] = kdm.cpl_id(); - return make_shared<KDMWithMetadata>(name_values, nullptr, recipient->emails, kdm); + return make_shared<KDMWithMetadata>(name_values, CinemaID(0), recipient.emails, kdm); } diff --git a/src/lib/dkdm_recipient.h b/src/lib/dkdm_recipient.h index 7a0fa0185..64da41cff 100644 --- a/src/lib/dkdm_recipient.h +++ b/src/lib/dkdm_recipient.h @@ -33,25 +33,15 @@ public: std::string const& name_, std::string const& notes_, boost::optional<dcp::Certificate> recipient_, - std::vector<std::string> emails_, - int utc_offset_hour_, - int utc_offset_minute_ + std::vector<std::string> emails_ ) : KDMRecipient (name_, notes_, recipient_, boost::none) , emails (emails_) - , utc_offset_hour (utc_offset_hour_) - , utc_offset_minute (utc_offset_minute_) { } - explicit DKDMRecipient (cxml::ConstNodePtr); - - void as_xml (xmlpp::Element *) const override; - std::vector<std::string> emails; - int utc_offset_hour; - int utc_offset_minute; }; @@ -59,8 +49,8 @@ KDMWithMetadataPtr kdm_for_dkdm_recipient ( std::shared_ptr<const Film> film, boost::filesystem::path cpl, - std::shared_ptr<DKDMRecipient> recipient, - boost::posix_time::ptime valid_from, - boost::posix_time::ptime valid_to + DKDMRecipient const& recipient, + dcp::LocalTime valid_from, + dcp::LocalTime valid_to ); diff --git a/src/lib/dkdm_recipient_list.cc b/src/lib/dkdm_recipient_list.cc new file mode 100644 index 000000000..34179337e --- /dev/null +++ b/src/lib/dkdm_recipient_list.cc @@ -0,0 +1,243 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "config.h" +#include "dkdm_recipient.h" +#include "dkdm_recipient_list.h" +#include "sqlite_statement.h" +#include "sqlite_transaction.h" +#include "util.h" +#include <boost/algorithm/string.hpp> + + +using std::make_pair; +using std::pair; +using std::string; +using std::vector; +using boost::optional; + + +DKDMRecipientList::DKDMRecipientList() + : _dkdm_recipients("dkdm_recipients") +{ + setup(Config::instance()->dkdm_recipients_file()); +} + + +DKDMRecipientList::DKDMRecipientList(boost::filesystem::path db_file) + : _dkdm_recipients("dkdm_recipients") +{ + setup(db_file); +} + + + +DKDMRecipientList::~DKDMRecipientList() +{ + if (_db) { + sqlite3_close(_db); + } +} + + +void +DKDMRecipientList::read_legacy_file(boost::filesystem::path xml_file) +{ + cxml::Document doc("DKDMRecipients"); + doc.read_file(xml_file); + + read_legacy_document(doc); +} + + +void +DKDMRecipientList::read_legacy_string(string const& xml) +{ + cxml::Document doc("DKDMRecipients"); + doc.read_file(xml); + + read_legacy_document(doc); +} + + +void +DKDMRecipientList::read_legacy_document(cxml::Document const& doc) +{ + for (auto recipient_node: doc.node_children("DKDMRecipient")) { + vector<string> emails; + for (auto email_node: recipient_node->node_children("Email")) { + emails.push_back(email_node->content()); + } + + optional<dcp::Certificate> certificate; + if (auto certificate_string = recipient_node->optional_string_child("Recipient")) { + certificate = dcp::Certificate(*certificate_string); + } + + DKDMRecipient recipient( + recipient_node->string_child("Name"), + recipient_node->string_child("Notes"), + certificate, + emails + ); + + add_dkdm_recipient(recipient); + } +} + + +void +DKDMRecipientList::setup(boost::filesystem::path db_file) +{ + _dkdm_recipients.add_column("name", "TEXT"); + _dkdm_recipients.add_column("notes", "TEXT"); + _dkdm_recipients.add_column("recipient", "TEXT"); + _dkdm_recipients.add_column("emails", "TEXT"); + +#ifdef DCPOMATIC_WINDOWS + auto rc = sqlite3_open16(db_file.c_str(), &_db); +#else + auto rc = sqlite3_open(db_file.c_str(), &_db); +#endif + if (rc != SQLITE_OK) { + throw FileError("Could not open SQLite database", db_file); + } + + sqlite3_busy_timeout(_db, 500); + + SQLiteStatement screens(_db, _dkdm_recipients.create()); + screens.execute(); +} + + +DKDMRecipientList::DKDMRecipientList(DKDMRecipientList&& other) + : _dkdm_recipients(std::move(other._dkdm_recipients)) +{ + _db = other._db; + other._db = nullptr; +} + + +DKDMRecipientList& +DKDMRecipientList::operator=(DKDMRecipientList&& other) +{ + if (this != &other) { + _db = other._db; + other._db = nullptr; + } + return *this; +} + + +DKDMRecipientID +DKDMRecipientList::add_dkdm_recipient(DKDMRecipient const& dkdm_recipient) +{ + SQLiteStatement add_dkdm_recipient(_db, _dkdm_recipients.insert()); + + add_dkdm_recipient.bind_text(1, dkdm_recipient.name); + add_dkdm_recipient.bind_text(2, dkdm_recipient.notes); + add_dkdm_recipient.bind_text(3, dkdm_recipient.recipient ? dkdm_recipient.recipient->certificate(true) : ""); + add_dkdm_recipient.bind_text(4, join_strings(dkdm_recipient.emails)); + + add_dkdm_recipient.execute(); + + return sqlite3_last_insert_rowid(_db); +} + + +void +DKDMRecipientList::update_dkdm_recipient(DKDMRecipientID id, DKDMRecipient const& dkdm_recipient) +{ + SQLiteStatement add_dkdm_recipient(_db, _dkdm_recipients.update("WHERE id=?")); + + add_dkdm_recipient.bind_text(1, dkdm_recipient.name); + add_dkdm_recipient.bind_text(2, dkdm_recipient.notes); + add_dkdm_recipient.bind_text(3, dkdm_recipient.recipient ? dkdm_recipient.recipient->certificate(true) : ""); + add_dkdm_recipient.bind_text(4, join_strings(dkdm_recipient.emails)); + add_dkdm_recipient.bind_int64(5, id.get()); + + add_dkdm_recipient.execute(); +} + + +void +DKDMRecipientList::remove_dkdm_recipient(DKDMRecipientID id) +{ + SQLiteStatement statement(_db, "DELETE FROM dkdm_recipients WHERE ID=?"); + statement.bind_int64(1, id.get()); + statement.execute(); +} + + +static +vector<pair<DKDMRecipientID, DKDMRecipient>> +dkdm_recipients_from_result(SQLiteStatement& statement) +{ + vector<pair<DKDMRecipientID, DKDMRecipient>> output; + + statement.execute([&output](SQLiteStatement& statement) { + DCPOMATIC_ASSERT(statement.data_count() == 5); + DKDMRecipientID const id = statement.column_int64(0); + auto const name = statement.column_text(1); + auto const notes = statement.column_text(2); + auto certificate_string = statement.column_text(3); + optional<dcp::Certificate> certificate = certificate_string.empty() ? optional<dcp::Certificate>() : dcp::Certificate(certificate_string); + auto const join_with_spaces = statement.column_text(4); + vector<string> emails; + boost::algorithm::split(emails, join_with_spaces, boost::is_any_of(" ")); + output.push_back(make_pair(id, DKDMRecipient(name, notes, certificate, { emails }))); + }); + + return output; +} + + + + +vector<std::pair<DKDMRecipientID, DKDMRecipient>> +DKDMRecipientList::dkdm_recipients() const +{ + SQLiteStatement statement(_db, _dkdm_recipients.select("ORDER BY name ASC")); + return dkdm_recipients_from_result(statement); +} + + +boost::optional<DKDMRecipient> +DKDMRecipientList::dkdm_recipient(DKDMRecipientID id) const +{ + SQLiteStatement statement(_db, _dkdm_recipients.select("WHERE id=?")); + statement.bind_int64(1, id.get()); + auto result = dkdm_recipients_from_result(statement); + if (result.empty()) { + return {}; + } + return result[0].second; +} + + +void +DKDMRecipientList::clear() +{ + SQLiteStatement sql(_db, "DELETE FROM dkdm_recipients"); + sql.execute(); +} + + diff --git a/src/lib/dkdm_recipient_list.h b/src/lib/dkdm_recipient_list.h new file mode 100644 index 000000000..fc4d84b60 --- /dev/null +++ b/src/lib/dkdm_recipient_list.h @@ -0,0 +1,90 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_DKDM_RECIPIENT_LIST_H +#define DCPOMATIC_DKDM_RECIPIENT_LIST_H + + +#include "id.h" +#include "sqlite_table.h" +#include <libcxml/cxml.h> +#include <boost/filesystem.hpp> +#include <boost/optional.hpp> + + +class DKDMRecipient; + + +class DKDMRecipientID : public ID +{ +public: + DKDMRecipientID(sqlite3_int64 id) + : ID(id) {} + + bool operator==(DKDMRecipientID const& other) const { + return get() == other.get(); + } + + bool operator!=(DKDMRecipientID const& other) const { + return get() != other.get(); + } + + bool operator<(DKDMRecipientID const& other) const { + return get() < other.get(); + } +}; + + +class DKDMRecipientList +{ +public: + DKDMRecipientList(); + DKDMRecipientList(boost::filesystem::path db_file); + ~DKDMRecipientList(); + + DKDMRecipientList(DKDMRecipientList const&) = delete; + DKDMRecipientList& operator=(DKDMRecipientList const&) = delete; + + DKDMRecipientList(DKDMRecipientList&& other); + DKDMRecipientList& operator=(DKDMRecipientList&& other); + + void read_legacy_file(boost::filesystem::path xml_file); + void read_legacy_string(std::string const& xml); + + void clear(); + + DKDMRecipientID add_dkdm_recipient(DKDMRecipient const& dkdm_recipient); + void update_dkdm_recipient(DKDMRecipientID id, DKDMRecipient const& dkdm_recipient); + void remove_dkdm_recipient(DKDMRecipientID id); + std::vector<std::pair<DKDMRecipientID, DKDMRecipient>> dkdm_recipients() const; + boost::optional<DKDMRecipient> dkdm_recipient(DKDMRecipientID id) const; + +private: + void setup(boost::filesystem::path db_file); + void read_legacy_document(cxml::Document const& doc); + + sqlite3* _db = nullptr; + SQLiteTable _dkdm_recipients; +}; + + +#endif + diff --git a/src/lib/dkdm_wrapper.cc b/src/lib/dkdm_wrapper.cc index 016c77c3f..4c7838a8d 100644 --- a/src/lib/dkdm_wrapper.cc +++ b/src/lib/dkdm_wrapper.cc @@ -41,7 +41,11 @@ DKDMBase::read (cxml::ConstNodePtr node) if (node->name() == "DKDM") { return make_shared<DKDM>(dcp::EncryptedKDM(node->content())); } else if (node->name() == "DKDMGroup") { - auto group = make_shared<DKDMGroup>(node->string_attribute("Name")); + auto name = node->optional_string_attribute("Name"); + if (!name) { + name = node->string_attribute("name"); + } + auto group = make_shared<DKDMGroup>(*name); for (auto i: node->node_children()) { if (auto c = read(i)) { group->add (c); @@ -62,17 +66,17 @@ DKDM::name () const void -DKDM::as_xml (xmlpp::Element* node) const +DKDM::as_xml(xmlpp::Element* element) const { - node->add_child("DKDM")->add_child_text (_dkdm.as_xml ()); + cxml::add_text_child(element, "DKDM", _dkdm.as_xml()); } void -DKDMGroup::as_xml (xmlpp::Element* node) const +DKDMGroup::as_xml(xmlpp::Element* element) const { - auto f = node->add_child("DKDMGroup"); - f->set_attribute ("Name", _name); + auto f = cxml::add_child(element, "DKDMGroup"); + f->set_attribute("name", _name); for (auto i: _children) { i->as_xml (f); } diff --git a/src/lib/email.cc b/src/lib/email.cc index e2beb8f37..7a6e58d91 100644 --- a/src/lib/email.cc +++ b/src/lib/email.cc @@ -23,6 +23,7 @@ #include "config.h" #include "email.h" #include "exceptions.h" +#include "variant.h" #include <curl/curl.h> #include <boost/algorithm/string.hpp> #include <boost/date_time/c_local_time_adjustor.hpp> @@ -118,7 +119,8 @@ Email::send(string server, int port, EmailProtocol protocol, string user, string auto const utc_now = boost::posix_time::second_clock::universal_time (); auto const local_now = boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local (utc_now); auto offset = local_now - utc_now; - sprintf (date_buffer + strlen(date_buffer), "%s%02d%02d", (offset.hours() >= 0 ? "+" : "-"), int(abs(offset.hours())), int(offset.minutes())); + auto end = date_buffer + strlen(date_buffer); + snprintf(end, sizeof(date_buffer) - (end - date_buffer), "%s%02d%02d", (offset.hours() >= 0 ? "+" : "-"), int(abs(offset.hours())), int(offset.minutes())); _email = "Date: " + string(date_buffer) + "\r\n" "To: " + address_list (_to) + "\r\n" @@ -143,9 +145,8 @@ Email::send(string server, int port, EmailProtocol protocol, string user, string "Content-Type: multipart/mixed; boundary=" + boundary + "\r\n"; } - _email += "Subject: " + encode_rfc1342(_subject) + "\r\n" - "User-Agent: DCP-o-matic\r\n" - "\r\n"; + _email += "Subject: " + encode_rfc1342(_subject) + "\r\n" + + variant::insert_dcpomatic("User-Agent: %1\r\n\r\n"); if (!_attachments.empty ()) { _email += "--" + boundary + "\r\n" diff --git a/src/lib/email.h b/src/lib/email.h index 36398bfd8..ac4703453 100644 --- a/src/lib/email.h +++ b/src/lib/email.h @@ -19,6 +19,7 @@ */ +#include "types.h" #include <curl/curl.h> #include <boost/scoped_array.hpp> diff --git a/src/lib/encode_server.cc b/src/lib/encode_server.cc index 036ea58a5..8d1759986 100644 --- a/src/lib/encode_server.cc +++ b/src/lib/encode_server.cc @@ -37,6 +37,8 @@ #include "image.h" #include "log.h" #include "player_video.h" +#include "util.h" +#include "variant.h" #include "version.h" #include <dcp/raw_convert.h> #include <dcp/warnings.h> @@ -81,6 +83,7 @@ EncodeServer::EncodeServer (bool verbose, int num_threads) #endif , _verbose (verbose) , _num_threads (num_threads) + , _frames_encoded(0) { } @@ -169,6 +172,8 @@ EncodeServer::process (shared_ptr<Socket> socket, struct timeval& after_read, st throw; } + ++_frames_encoded; + return dcp_video_frame.index (); } @@ -243,7 +248,7 @@ EncodeServer::run () { LOG_GENERAL ("Server %1 (%2) starting with %3 threads", dcpomatic_version, dcpomatic_git_commit, _num_threads); if (_verbose) { - cout << "DCP-o-matic server starting with " << _num_threads << " threads.\n"; + cout << variant::dcpomatic_encode_server() << " starting with " << _num_threads << " threads.\n"; } for (int i = 0; i < _num_threads; ++i) { @@ -268,12 +273,9 @@ void EncodeServer::broadcast_thread () try { - auto address = boost::asio::ip::address_v4::any (); - boost::asio::ip::udp::endpoint listen_endpoint (address, HELLO_PORT); + boost::asio::ip::udp::endpoint listen_endpoint(boost::asio::ip::udp::v4(), HELLO_PORT); - _broadcast.socket = new boost::asio::ip::udp::socket (_broadcast.io_service); - _broadcast.socket->open (listen_endpoint.protocol ()); - _broadcast.socket->bind (listen_endpoint); + _broadcast.socket = new boost::asio::ip::udp::socket(_broadcast.io_service, listen_endpoint); _broadcast.socket->async_receive_from ( boost::asio::buffer (_broadcast.buffer, sizeof (_broadcast.buffer)), @@ -298,8 +300,8 @@ EncodeServer::broadcast_received () /* Reply to the client saying what we can do */ xmlpp::Document doc; auto root = doc.create_root_node ("ServerAvailable"); - root->add_child("Threads")->add_child_text (raw_convert<string> (_worker_threads.size ())); - root->add_child("Version")->add_child_text (raw_convert<string> (SERVER_LINK_VERSION)); + cxml::add_text_child(root, "Threads", raw_convert<string>(_worker_threads.size())); + cxml::add_text_child(root, "Version", raw_convert<string>(SERVER_LINK_VERSION)); auto xml = doc.write_to_string ("UTF-8"); if (_verbose) { diff --git a/src/lib/encode_server.h b/src/lib/encode_server.h index f93d66746..8059abd0f 100644 --- a/src/lib/encode_server.h +++ b/src/lib/encode_server.h @@ -32,6 +32,7 @@ #include "exception_store.h" #include "server.h" #include <boost/asio.hpp> +#include <boost/atomic.hpp> #include <boost/thread.hpp> #include <boost/thread/condition.hpp> #include <string> @@ -53,6 +54,10 @@ public: void run () override; + int frames_encoded() const { + return _frames_encoded; + } + private: void handle (std::shared_ptr<Socket>) override; void worker_thread (); @@ -67,6 +72,7 @@ private: bool _verbose; int _num_threads; Waker _waker; + boost::atomic<int> _frames_encoded; struct Broadcast { diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc index 1d4ced595..143569e16 100644 --- a/src/lib/encode_server_finder.cc +++ b/src/lib/encode_server_finder.cc @@ -26,6 +26,8 @@ #include "encode_server_description.h" #include "encode_server_finder.h" #include "exceptions.h" +#include "util.h" +#include "variant.h" #include <dcp/raw_convert.h> #include <libcxml/cxml.h> #include <boost/bind/placeholders.hpp> @@ -188,7 +190,7 @@ try { new tcp::acceptor (_listen_io_service, tcp::endpoint(tcp::v4(), is_batch_converter ? BATCH_SERVER_PRESENCE_PORT : MAIN_SERVER_PRESENCE_PORT)) ); } catch (...) { - boost::throw_exception (NetworkError (_("Could not listen for remote encode servers. Perhaps another instance of DCP-o-matic is running."))); + boost::throw_exception(NetworkError(variant::insert_dcpomatic(_("Could not listen for remote encode servers. Perhaps another instance of %1 is running.")))); } start_accept (); diff --git a/src/lib/encode_server_finder.h b/src/lib/encode_server_finder.h index f8a30af54..c478387f9 100644 --- a/src/lib/encode_server_finder.h +++ b/src/lib/encode_server_finder.h @@ -50,8 +50,6 @@ public: static EncodeServerFinder* instance (); static void drop (); - void stop (); - std::list<EncodeServerDescription> servers () const; /** Emitted whenever the list of servers changes */ @@ -62,6 +60,7 @@ private: ~EncodeServerFinder (); void start (); + void stop (); void search_thread (); void listen_thread (); diff --git a/src/lib/environment_info.cc b/src/lib/environment_info.cc index 2e0347c79..d6592d126 100644 --- a/src/lib/environment_info.cc +++ b/src/lib/environment_info.cc @@ -22,6 +22,7 @@ #include "compose.hpp" #include "cross.h" #include "log.h" +#include "variant.h" #include "version.h" #include <dcp/version.h> #include <dcp/warnings.h> @@ -85,7 +86,7 @@ environment_info () { list<string> info; - info.push_back (String::compose ("DCP-o-matic %1 git %2 using %3", dcpomatic_version, dcpomatic_git_commit, dependency_version_summary())); + info.push_back(String::compose("%1 %2 git %3 using %4", variant::dcpomatic(), dcpomatic_version, dcpomatic_git_commit, dependency_version_summary())); { char buffer[128]; @@ -94,9 +95,9 @@ environment_info () } #ifdef DCPOMATIC_DEBUG - info.push_back ("DCP-o-matic built in debug mode."); + info.push_back(variant::insert_dcpomatic("%1 built in debug mode.")); #else - info.push_back ("DCP-o-matic built in optimised mode."); + info.push_back(variant::insert_dcpomatic("%1 built in optimised mode.")); #endif #ifdef LIBDCP_DEBUG info.push_back ("libdcp built in debug mode."); diff --git a/src/lib/exceptions.cc b/src/lib/exceptions.cc index a51842b80..27496dcdc 100644 --- a/src/lib/exceptions.cc +++ b/src/lib/exceptions.cc @@ -173,3 +173,10 @@ VerifyError::VerifyError (string m, int n) } + +DiskFullError::DiskFullError(boost::filesystem::path writing) + : std::runtime_error(String::compose(_("Disk full when writing %1"), writing.string())) +{ + +} + diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h index 10231f59a..3069d792e 100644 --- a/src/lib/exceptions.h +++ b/src/lib/exceptions.h @@ -34,6 +34,7 @@ extern "C" { } #include <boost/filesystem.hpp> #include <boost/optional.hpp> +#include <sqlite3.h> #include <cstring> #include <stdexcept> @@ -480,4 +481,65 @@ public: }; +class SQLError : public std::runtime_error +{ +public: + SQLError(sqlite3* db, char const* s) + : std::runtime_error(get_message(db, s)) + { + _filename = get_filename(db); + } + + SQLError(sqlite3* db, int rc) + : std::runtime_error(get_message(db, rc)) + { + _filename = get_filename(db); + } + + SQLError(sqlite3* db, int rc, std::string doing) + : std::runtime_error(get_message(db, rc, doing)) + { + _filename = get_filename(db); + } + + boost::filesystem::path filename() const { + return _filename; + } + +private: + boost::filesystem::path get_filename(sqlite3* db) + { + if (auto filename = sqlite3_db_filename(db, "main")) { + return filename; + } + + return {}; + } + + std::string get_message(sqlite3* db, char const* s) + { + return String::compose("%1 (in %2)", s, get_filename(db)); + } + + std::string get_message(sqlite3* db, int rc) + { + return String::compose("%1 (in %2)", sqlite3_errstr(rc), get_filename(db)); + } + + std::string get_message(sqlite3* db, int rc, std::string doing) + { + return String::compose("%1 (while doing %2) (in %3)", sqlite3_errstr(rc), doing, get_filename(db)); + } + + boost::filesystem::path _filename; +}; + + +class DiskFullError : public std::runtime_error +{ +public: + explicit DiskFullError(boost::filesystem::path writing); +}; + + #endif diff --git a/src/lib/export_config.cc b/src/lib/export_config.cc index e030b98e2..79042e59c 100644 --- a/src/lib/export_config.cc +++ b/src/lib/export_config.cc @@ -65,6 +65,8 @@ ExportConfig::read(cxml::ConstNodePtr node) _format = ExportFormat::H264_AAC; } else if (format == "prores-4444") { _format = ExportFormat::PRORES_4444; + } else if (format == "prores-lt") { + _format = ExportFormat::PRORES_LT; } else { _format = ExportFormat::PRORES_HQ; } @@ -77,7 +79,7 @@ ExportConfig::read(cxml::ConstNodePtr node) void -ExportConfig::write(xmlpp::Element* node) const +ExportConfig::write(xmlpp::Element* element) const { string name; @@ -89,6 +91,9 @@ ExportConfig::write(xmlpp::Element* node) const /* Write this but we also accept 'prores' for backwards compatibility */ name = "prores-hq"; break; + case ExportFormat::PRORES_LT: + name = "prores-lt"; + break; case ExportFormat::H264_AAC: name = "h264-aac"; break; @@ -97,11 +102,11 @@ ExportConfig::write(xmlpp::Element* node) const break; } - node->add_child("Format")->add_child_text(name); - node->add_child("MixdownToStereo")->add_child_text(_mixdown_to_stereo ? "1" : "0"); - node->add_child("SplitReels")->add_child_text(_split_reels ? "1" : "0"); - node->add_child("SplitStreams")->add_child_text(_split_streams ? "1" : "0"); - node->add_child("X264CRF")->add_child_text(dcp::raw_convert<string>(_x264_crf)); + cxml::add_text_child(element, "Format", name); + cxml::add_text_child(element, "MixdownToStereo", _mixdown_to_stereo ? "1" : "0"); + cxml::add_text_child(element, "SplitReels", _split_reels ? "1" : "0"); + cxml::add_text_child(element, "SplitStreams", _split_streams ? "1" : "0"); + cxml::add_text_child(element, "X264CRF", dcp::raw_convert<string>(_x264_crf)); } @@ -138,4 +143,3 @@ ExportConfig::set_x264_crf(int crf) { _config->maybe_set(_x264_crf, crf); } - diff --git a/src/lib/export_config.h b/src/lib/export_config.h index 47dddb6c3..52d7b601d 100644 --- a/src/lib/export_config.h +++ b/src/lib/export_config.h @@ -37,7 +37,7 @@ public: void set_defaults(); void read(cxml::ConstNodePtr node); - void write(xmlpp::Element* node) const; + void write(xmlpp::Element* element) const; ExportFormat format() const { return _format; diff --git a/src/lib/ffmpeg_audio_stream.cc b/src/lib/ffmpeg_audio_stream.cc index 9400eb60d..24f96b889 100644 --- a/src/lib/ffmpeg_audio_stream.cc +++ b/src/lib/ffmpeg_audio_stream.cc @@ -52,19 +52,19 @@ FFmpegAudioStream::FFmpegAudioStream (cxml::ConstNodePtr node, int version) void -FFmpegAudioStream::as_xml (xmlpp::Node* root) const +FFmpegAudioStream::as_xml(xmlpp::Element* root) const { FFmpegStream::as_xml (root); - root->add_child("FrameRate")->add_child_text(raw_convert<string>(frame_rate())); - root->add_child("Length")->add_child_text(raw_convert<string>(length())); - mapping().as_xml (root->add_child("Mapping")); + cxml::add_text_child(root, "FrameRate", raw_convert<string>(frame_rate())); + cxml::add_text_child(root, "Length", raw_convert<string>(length())); + mapping().as_xml(cxml::add_child(root, "Mapping")); if (first_audio) { - root->add_child("FirstAudio")->add_child_text(raw_convert<string>(first_audio.get().get())); + cxml::add_text_child(root, "FirstAudio", raw_convert<string>(first_audio.get().get())); } if (codec_name) { - root->add_child("CodecName")->add_child_text(codec_name.get()); + cxml::add_text_child(root, "CodecName", codec_name.get()); } if (bit_depth()) { - root->add_child("BitDepth")->add_child_text(raw_convert<string>(bit_depth().get())); + cxml::add_text_child(root, "BitDepth", raw_convert<string>(bit_depth().get())); } } diff --git a/src/lib/ffmpeg_audio_stream.h b/src/lib/ffmpeg_audio_stream.h index aae982f9e..afd30e905 100644 --- a/src/lib/ffmpeg_audio_stream.h +++ b/src/lib/ffmpeg_audio_stream.h @@ -48,7 +48,7 @@ public: FFmpegAudioStream (cxml::ConstNodePtr, int); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; /* XXX: should probably be locked */ diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index 4a7c87b34..5a99ecaa5 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -34,6 +34,7 @@ #include "job.h" #include "log.h" #include "text_content.h" +#include "variant.h" #include "video_content.h" #include <dcp/raw_convert.h> #include <libcxml/cxml.h> @@ -87,8 +88,8 @@ get_optional_enum (cxml::ConstNodePtr node, string name) } -FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list<string>& notes) - : Content (node) +FFmpegContent::FFmpegContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes) + : Content(node, film_directory) { _color_range = get_optional_enum<AVColorRange>(node, "ColorRange"); @@ -118,7 +119,7 @@ FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list<string> if (auto filter = Filter::from_id(i->content())) { _filters.push_back(*filter); } else { - notes.push_back (String::compose (_("DCP-o-matic no longer supports the `%1' filter, so it has been turned off."), i->content())); + notes.push_back(String::compose(_("%1 no longer supports the `%2' filter, so it has been turned off."), variant::dcpomatic(), i->content())); } } @@ -197,61 +198,61 @@ FFmpegContent::FFmpegContent (vector<shared_ptr<Content>> c) void -FFmpegContent::as_xml (xmlpp::Node* node, bool with_paths) const +FFmpegContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { - node->add_child("Type")->add_child_text("FFmpeg"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "FFmpeg"); + Content::as_xml(element, with_paths, path_behaviour, film_directory); if (video) { - video->as_xml (node); + video->as_xml(element); } if (audio) { - audio->as_xml (node); + audio->as_xml(element); for (auto i: audio->streams()) { auto f = dynamic_pointer_cast<FFmpegAudioStream> (i); DCPOMATIC_ASSERT (f); - f->as_xml (node->add_child("AudioStream")); + f->as_xml(cxml::add_child(element, "AudioStream")); } } if (only_text()) { - only_text()->as_xml (node); + only_text()->as_xml(element); } boost::mutex::scoped_lock lm (_mutex); for (auto i: _subtitle_streams) { - auto t = node->add_child("SubtitleStream"); + auto t = cxml::add_child(element, "SubtitleStream"); if (_subtitle_stream && i == _subtitle_stream) { - t->add_child("Selected")->add_child_text("1"); + cxml::add_text_child(t, "Selected", "1"); } i->as_xml (t); } for (auto i: _filters) { - node->add_child("Filter")->add_child_text(i.id()); + cxml::add_text_child(element, "Filter", i.id()); } if (_first_video) { - node->add_child("FirstVideo")->add_child_text(raw_convert<string>(_first_video.get().get())); + cxml::add_text_child(element, "FirstVideo", raw_convert<string>(_first_video.get().get())); } if (_color_range) { - node->add_child("ColorRange")->add_child_text(raw_convert<string>(static_cast<int>(*_color_range))); + cxml::add_text_child(element, "ColorRange", raw_convert<string>(static_cast<int>(*_color_range))); } if (_color_primaries) { - node->add_child("ColorPrimaries")->add_child_text(raw_convert<string>(static_cast<int>(*_color_primaries))); + cxml::add_text_child(element, "ColorPrimaries", raw_convert<string>(static_cast<int>(*_color_primaries))); } if (_color_trc) { - node->add_child("ColorTransferCharacteristic")->add_child_text(raw_convert<string>(static_cast<int>(*_color_trc))); + cxml::add_text_child(element, "ColorTransferCharacteristic", raw_convert<string>(static_cast<int>(*_color_trc))); } if (_colorspace) { - node->add_child("Colorspace")->add_child_text(raw_convert<string>(static_cast<int>(*_colorspace))); + cxml::add_text_child(element, "Colorspace", raw_convert<string>(static_cast<int>(*_colorspace))); } if (_bits_per_pixel) { - node->add_child("BitsPerPixel")->add_child_text(raw_convert<string>(*_bits_per_pixel)); + cxml::add_text_child(element, "BitsPerPixel", raw_convert<string>(*_bits_per_pixel)); } } diff --git a/src/lib/ffmpeg_content.h b/src/lib/ffmpeg_content.h index a86358b76..a0fe9a0c0 100644 --- a/src/lib/ffmpeg_content.h +++ b/src/lib/ffmpeg_content.h @@ -55,7 +55,7 @@ class FFmpegContent : public Content { public: FFmpegContent (boost::filesystem::path); - FFmpegContent (cxml::ConstNodePtr, int version, std::list<std::string> &); + FFmpegContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int version, std::list<std::string> &); FFmpegContent (std::vector<std::shared_ptr<Content>>); std::shared_ptr<FFmpegContent> shared_from_this () { @@ -70,7 +70,14 @@ public: void take_settings_from (std::shared_ptr<const Content> c) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + + void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const override; + dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override; dcpomatic::DCPTime approximate_length () const override; diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 45983795b..9713a26f6 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -45,7 +45,7 @@ #include "util.h" #include "video_decoder.h" #include "video_filter_graph.h" -#include <dcp/subtitle_string.h> +#include <dcp/text_string.h> #include <sub/ssa_reader.h> #include <sub/subtitle.h> #include <sub/collect.h> @@ -178,9 +178,8 @@ FFmpegDecoder::flush_fill() full_length = full_length.ceil (frc.source); if (video && !video->ignore()) { double const vfr = _ffmpeg_content->video_frame_rate().get(); - auto const f = full_length.frames_round (vfr); - auto const v = video->position(film()).get_value_or(ContentTime()).frames_round(vfr) + 1; - if (v < f) { + auto const v = video->position(film()).get_value_or(ContentTime()) + ContentTime::from_frames(1, vfr); + if (v < full_length) { video->emit(film(), make_shared<const RawImageProxy>(_black_image), v); did_something = true; } @@ -260,7 +259,7 @@ deinterleave_audio(AVFrame* frame) /* XXX: can't we use swr_convert() to do the format conversion? */ - int const channels = frame->channels; + int const channels = frame->ch_layout.nb_channels; int const frames = frame->nb_samples; int const total_samples = frames * channels; auto audio = make_shared<AudioBuffers>(channels, frames); @@ -622,7 +621,7 @@ FFmpegDecoder::process_video_frame () video->emit ( film(), make_shared<RawImageProxy>(image), - llrint(pts * _ffmpeg_content->active_video_frame_rate(film())) + ContentTime::from_seconds(pts) ); } else { LOG_WARNING_NC ("Dropping frame without PTS"); diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc index f5610f502..ca85ae3c5 100644 --- a/src/lib/ffmpeg_examiner.cc +++ b/src/lib/ffmpeg_examiner.cc @@ -71,14 +71,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo auto codec = _codec_context[i] ? _codec_context[i]->codec : nullptr; if (s->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && codec) { - /* This is a hack; sometimes it seems that _audio_codec_context->channel_layout isn't set up, - so bodge it here. No idea why we should have to do this. - */ - - if (s->codecpar->channel_layout == 0) { - s->codecpar->channel_layout = av_get_default_channel_layout (s->codecpar->channels); - } - DCPOMATIC_ASSERT (codec->name); _audio_streams.push_back ( @@ -88,7 +80,7 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo s->id, s->codecpar->sample_rate, _need_length ? 0 : rint ((double(_format_context->duration) / AV_TIME_BASE) * s->codecpar->sample_rate), - s->codecpar->channels, + s->codecpar->ch_layout.nb_channels, s->codecpar->bits_per_raw_sample ? s->codecpar->bits_per_raw_sample : s->codecpar->bits_per_coded_sample ) ); @@ -186,8 +178,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo /* This code taken from get_rotation() in ffmpeg:cmdutils.c */ auto stream = _format_context->streams[*_video_stream]; auto rotate_tag = av_dict_get (stream->metadata, "rotate", 0, 0); - uint8_t* displaymatrix = av_stream_get_side_data (stream, AV_PKT_DATA_DISPLAYMATRIX, 0); - if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) { char *tail; _rotation = av_strtod (rotate_tag->value, &tail); @@ -196,8 +186,9 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo } } - if (displaymatrix && !_rotation) { - _rotation = - av_display_rotation_get ((int32_t*) displaymatrix); + auto side_data = av_packet_side_data_get(stream->codecpar->coded_side_data, stream->codecpar->nb_coded_side_data, AV_PKT_DATA_DISPLAYMATRIX); + if (side_data && !_rotation) { + _rotation = - av_display_rotation_get(reinterpret_cast<int32_t*>(side_data->data)); } if (_rotation) { @@ -258,7 +249,7 @@ FFmpegExaminer::video_packet (AVCodecContext* context, string& temporal_referenc ).get_value_or({}).frames_round(video_frame_rate().get()) + 1; } if (temporal_reference.size() < (PULLDOWN_CHECK_FRAMES * 2)) { - temporal_reference += (_video_frame->top_field_first ? "T" : "B"); + temporal_reference += ((_video_frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST) ? "T" : "B"); temporal_reference += (_video_frame->repeat_pict ? "3" : "2"); } diff --git a/src/lib/ffmpeg_file_encoder.cc b/src/lib/ffmpeg_file_encoder.cc index 6d1ad68f7..7f74ae4f6 100644 --- a/src/lib/ffmpeg_file_encoder.cc +++ b/src/lib/ffmpeg_file_encoder.cc @@ -21,7 +21,7 @@ #include "compose.hpp" #include "cross.h" -#include "ffmpeg_encoder.h" +#include "ffmpeg_file_encoder.h" #include "ffmpeg_wrapper.h" #include "film.h" #include "image.h" @@ -73,8 +73,7 @@ public: _codec_context->bit_rate = channels * 128 * 1024; _codec_context->sample_fmt = sample_format; _codec_context->sample_rate = frame_rate; - _codec_context->channel_layout = av_get_default_channel_layout (channels); - _codec_context->channels = channels; + av_channel_layout_default(&_codec_context->ch_layout, channels); int r = avcodec_open2 (_codec_context, _codec, 0); if (r < 0) { @@ -96,7 +95,7 @@ public: ~ExportAudioStream () { - avcodec_close (_codec_context); + avcodec_free_context(&_codec_context); } ExportAudioStream (ExportAudioStream const&) = delete; @@ -143,7 +142,7 @@ public: frame->nb_samples = size; frame->format = _codec_context->sample_fmt; - frame->channels = channels; + frame->ch_layout.nb_channels = channels; int r = avcodec_fill_audio_frame (frame, channels, _codec_context->sample_fmt, (const uint8_t *) samples, buffer_size, 0); DCPOMATIC_ASSERT (r >= 0); @@ -242,6 +241,13 @@ FFmpegFileEncoder::FFmpegFileEncoder ( av_dict_set (&_video_options, "profile", "3", 0); av_dict_set (&_video_options, "threads", "auto", 0); break; + case ExportFormat::PRORES_LT: + _sample_format = AV_SAMPLE_FMT_S32; + _video_codec_name = "prores_ks"; + _audio_codec_name = "pcm_s24le"; + av_dict_set(&_video_options, "profile", "1", 0); + av_dict_set(&_video_options, "threads", "auto", 0); + break; case ExportFormat::H264_AAC: _sample_format = AV_SAMPLE_FMT_FLTP; _video_codec_name = "libx264"; @@ -279,7 +285,7 @@ FFmpegFileEncoder::FFmpegFileEncoder ( FFmpegFileEncoder::~FFmpegFileEncoder () { _audio_streams.clear (); - avcodec_close (_video_codec_context); + avcodec_free_context(&_video_codec_context); avio_close (_format_context->pb); _format_context->pb = nullptr; avformat_free_context (_format_context); @@ -293,6 +299,7 @@ FFmpegFileEncoder::pixel_format (ExportFormat format) case ExportFormat::PRORES_4444: return AV_PIX_FMT_YUV444P10; case ExportFormat::PRORES_HQ: + case ExportFormat::PRORES_LT: return AV_PIX_FMT_YUV422P10; case ExportFormat::H264_AAC: return AV_PIX_FMT_YUV420P; @@ -397,7 +404,11 @@ FFmpegFileEncoder::flush () auto const r = av_write_trailer(_format_context); if (r) { - throw EncodeError(N_("av_write_trailer"), N_("FFmpegFileEncoder::flush"), r); + if (r == -ENOSPC) { + throw DiskFullError(_output); + } else { + throw EncodeError(N_("av_write_trailer"), N_("FFmpegFileEncoder::flush"), r); + } } } diff --git a/src/lib/ffmpeg_file_encoder.h b/src/lib/ffmpeg_file_encoder.h index 78840d6a8..a365f463a 100644 --- a/src/lib/ffmpeg_file_encoder.h +++ b/src/lib/ffmpeg_file_encoder.h @@ -23,12 +23,14 @@ #define DCPOMATIC_FFMPEG_FILE_ENCODER_H +#include "audio_buffers.h" #include "audio_mapping.h" #include "dcpomatic_time.h" -#include "encoder.h" #include "event_history.h" #include "image_store.h" #include "log.h" +#include "player_text.h" +#include "player_video.h" #include <dcp/key.h> #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS @@ -46,6 +48,7 @@ enum class ExportFormat { PRORES_4444, PRORES_HQ, + PRORES_LT, H264_AAC, SUBTITLES_DCP }; diff --git a/src/lib/ffmpeg_encoder.cc b/src/lib/ffmpeg_film_encoder.cc index c1170f098..a2d26fd66 100644 --- a/src/lib/ffmpeg_encoder.cc +++ b/src/lib/ffmpeg_film_encoder.cc @@ -21,7 +21,7 @@ #include "butler.h" #include "cross.h" -#include "ffmpeg_encoder.h" +#include "ffmpeg_film_encoder.h" #include "film.h" #include "image.h" #include "job.h" @@ -48,7 +48,7 @@ using namespace boost::placeholders; #endif -FFmpegEncoder::FFmpegEncoder ( +FFmpegFilmEncoder::FFmpegFilmEncoder( shared_ptr<const Film> film, weak_ptr<Job> job, boost::filesystem::path output, @@ -58,7 +58,7 @@ FFmpegEncoder::FFmpegEncoder ( bool audio_stream_per_channel, int x264_crf ) - : Encoder (film, job) + : FilmEncoder(film, job) , _output_audio_channels(mixdown_to_stereo ? 2 : (_film->audio_channels() > 8 ? 16 : _film->audio_channels())) , _history (200) , _output (output) @@ -85,7 +85,7 @@ FFmpegEncoder::FFmpegEncoder ( AudioMapping -FFmpegEncoder::stereo_map() const +FFmpegFilmEncoder::stereo_map() const { auto map = AudioMapping(_film->audio_channels(), 2); float const overall_gain = 2 / (4 + sqrt(2)); @@ -116,7 +116,7 @@ FFmpegEncoder::stereo_map() const AudioMapping -FFmpegEncoder::many_channel_map() const +FFmpegFilmEncoder::many_channel_map() const { auto map = AudioMapping(_film->audio_channels(), _output_audio_channels); for (int i = 0; i < _film->audio_channels(); ++i) { @@ -127,7 +127,7 @@ FFmpegEncoder::many_channel_map() const void -FFmpegEncoder::go () +FFmpegFilmEncoder::go() { { auto job = _job.lock (); @@ -234,19 +234,19 @@ FFmpegEncoder::go () } optional<float> -FFmpegEncoder::current_rate () const +FFmpegFilmEncoder::current_rate() const { return _history.rate (); } Frame -FFmpegEncoder::frames_done () const +FFmpegFilmEncoder::frames_done() const { boost::mutex::scoped_lock lm (_mutex); return _last_time.frames_round (_film->video_frame_rate ()); } -FFmpegEncoder::FileEncoderSet::FileEncoderSet ( +FFmpegFilmEncoder::FileEncoderSet::FileEncoderSet( dcp::Size video_frame_size, int video_frame_rate, int audio_frame_rate, @@ -279,7 +279,7 @@ FFmpegEncoder::FileEncoderSet::FileEncoderSet ( } shared_ptr<FFmpegFileEncoder> -FFmpegEncoder::FileEncoderSet::get (Eyes eyes) const +FFmpegFilmEncoder::FileEncoderSet::get(Eyes eyes) const { if (_encoders.size() == 1) { /* We are doing a 2D export... */ @@ -298,7 +298,7 @@ FFmpegEncoder::FileEncoderSet::get (Eyes eyes) const } void -FFmpegEncoder::FileEncoderSet::flush () +FFmpegFilmEncoder::FileEncoderSet::flush() { for (auto& i: _encoders) { i.second->flush (); @@ -306,7 +306,7 @@ FFmpegEncoder::FileEncoderSet::flush () } void -FFmpegEncoder::FileEncoderSet::audio (shared_ptr<AudioBuffers> a) +FFmpegFilmEncoder::FileEncoderSet::audio(shared_ptr<AudioBuffers> a) { for (auto& i: _encoders) { i.second->audio (a); diff --git a/src/lib/ffmpeg_encoder.h b/src/lib/ffmpeg_film_encoder.h index 2d5c6af87..ec6bb4594 100644 --- a/src/lib/ffmpeg_encoder.h +++ b/src/lib/ffmpeg_film_encoder.h @@ -23,15 +23,15 @@ #include "audio_mapping.h" #include "butler.h" -#include "encoder.h" #include "event_history.h" #include "ffmpeg_file_encoder.h" +#include "film_encoder.h" -class FFmpegEncoder : public Encoder +class FFmpegFilmEncoder : public FilmEncoder { public: - FFmpegEncoder ( + FFmpegFilmEncoder( std::shared_ptr<const Film> film, std::weak_ptr<Job> job, boost::filesystem::path output, diff --git a/src/lib/ffmpeg_image_proxy.cc b/src/lib/ffmpeg_image_proxy.cc index 2fcd486df..0ee41deab 100644 --- a/src/lib/ffmpeg_image_proxy.cc +++ b/src/lib/ffmpeg_image_proxy.cc @@ -234,9 +234,9 @@ FFmpegImageProxy::image (Image::Alignment alignment, optional<dcp::Size>) const void -FFmpegImageProxy::add_metadata (xmlpp::Node* node) const +FFmpegImageProxy::add_metadata(xmlpp::Element* element) const { - node->add_child("Type")->add_child_text (N_("FFmpeg")); + cxml::add_text_child(element, "Type", N_("FFmpeg")); } void diff --git a/src/lib/ffmpeg_image_proxy.h b/src/lib/ffmpeg_image_proxy.h index b567fadee..3817d709f 100644 --- a/src/lib/ffmpeg_image_proxy.h +++ b/src/lib/ffmpeg_image_proxy.h @@ -28,14 +28,14 @@ class FFmpegImageProxy : public ImageProxy public: explicit FFmpegImageProxy (boost::filesystem::path); explicit FFmpegImageProxy (dcp::ArrayData); - FFmpegImageProxy (std::shared_ptr<Socket> socket); + explicit FFmpegImageProxy (std::shared_ptr<Socket> socket); Result image ( Image::Alignment alignment, boost::optional<dcp::Size> size = boost::optional<dcp::Size> () ) const override; - void add_metadata (xmlpp::Node *) const override; + void add_metadata(xmlpp::Element*) const override; void write_to_socket (std::shared_ptr<Socket>) const override; bool same (std::shared_ptr<const ImageProxy> other) const override; size_t memory_used () const override; diff --git a/src/lib/ffmpeg_stream.cc b/src/lib/ffmpeg_stream.cc index 47f71d119..800c45eb6 100644 --- a/src/lib/ffmpeg_stream.cc +++ b/src/lib/ffmpeg_stream.cc @@ -40,10 +40,10 @@ FFmpegStream::FFmpegStream (cxml::ConstNodePtr node) } void -FFmpegStream::as_xml (xmlpp::Node* root) const +FFmpegStream::as_xml(xmlpp::Element* root) const { - root->add_child("Name")->add_child_text (name); - root->add_child("Id")->add_child_text (raw_convert<string> (_id)); + cxml::add_text_child(root, "Name", name); + cxml::add_text_child(root, "Id", raw_convert<string>(_id)); } bool diff --git a/src/lib/ffmpeg_stream.h b/src/lib/ffmpeg_stream.h index 84b2a8853..221075eeb 100644 --- a/src/lib/ffmpeg_stream.h +++ b/src/lib/ffmpeg_stream.h @@ -37,7 +37,7 @@ public: explicit FFmpegStream (cxml::ConstNodePtr); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; /** @param c An AVFormatContext. * @param index A stream index within the AVFormatContext. diff --git a/src/lib/ffmpeg_subtitle_stream.cc b/src/lib/ffmpeg_subtitle_stream.cc index 1101901b7..3f43b6ec5 100644 --- a/src/lib/ffmpeg_subtitle_stream.cc +++ b/src/lib/ffmpeg_subtitle_stream.cc @@ -49,15 +49,15 @@ FFmpegSubtitleStream::FFmpegSubtitleStream (cxml::ConstNodePtr node, int version } void -FFmpegSubtitleStream::as_xml (xmlpp::Node* root) const +FFmpegSubtitleStream::as_xml(xmlpp::Element* root) const { - FFmpegStream::as_xml (root); + FFmpegStream::as_xml(root); boost::mutex::scoped_lock lm (_mutex); for (map<RGBA, RGBA>::const_iterator i = _colours.begin(); i != _colours.end(); ++i) { - xmlpp::Node* node = root->add_child("Colour"); - i->first.as_xml (node->add_child("From")); - i->second.as_xml (node->add_child("To")); + auto node = cxml::add_child(root, "Colour"); + i->first.as_xml(cxml::add_child(node, "From")); + i->second.as_xml(cxml::add_child(node, "To")); } } diff --git a/src/lib/ffmpeg_subtitle_stream.h b/src/lib/ffmpeg_subtitle_stream.h index 8f56d1975..6251350ce 100644 --- a/src/lib/ffmpeg_subtitle_stream.h +++ b/src/lib/ffmpeg_subtitle_stream.h @@ -33,7 +33,7 @@ public: FFmpegSubtitleStream (cxml::ConstNodePtr node, int version); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; void set_colour (RGBA from, RGBA to); std::map<RGBA, RGBA> colours () const; diff --git a/src/lib/film.cc b/src/lib/film.cc index 674add78f..b624b234b 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -36,7 +36,7 @@ #include "cross.h" #include "dcp_content.h" #include "dcp_content_type.h" -#include "dcp_encoder.h" +#include "dcp_film_encoder.h" #include "dcpomatic_log.h" #include "digester.h" #include "environment_info.h" @@ -57,6 +57,7 @@ #include "text_content.h" #include "transcode_job.h" #include "upload_job.h" +#include "variant.h" #include "video_content.h" #include "version.h" #include <libcxml/cxml.h> @@ -88,18 +89,13 @@ using std::back_inserter; using std::copy; using std::cout; using std::dynamic_pointer_cast; -using std::exception; using std::find; using std::list; -using std::make_pair; using std::make_shared; using std::map; using std::max; -using std::min; using std::pair; using std::runtime_error; -using std::set; -using std::setfill; using std::shared_ptr; using std::string; using std::vector; @@ -114,6 +110,8 @@ using namespace dcpomatic; static constexpr char metadata_file[] = "metadata.xml"; +static constexpr char ui_state_file[] = "ui.xml"; +static constexpr char assets_file[] = "assets.xml"; /* 5 -> 6 @@ -144,12 +142,22 @@ static constexpr char metadata_file[] = "metadata.xml"; * have had Subtitle prefixes or suffixes removed. * 37 -> 38 * VideoContent scale expressed just as "guess" or "custom" + * 38 -> 39 + * Fade{In,Out} -> VideoFade{In,Out} */ -int const Film::current_state_version = 38; +int const Film::current_state_version = 39; /** Construct a Film object in a given directory. * + * Some initial values are taken from the Config object, and usually then overwritten + * by reading in the default template. Setting up things like _dcp_content_type in + * this constructor is useful so that if people configured such things in old versions + * they are used when the first default template is written by Config + * + * At some point these config entries can be removed, and this constructor could + * perhaps read the default template itself. + * * @param dir Film directory. */ @@ -161,12 +169,12 @@ Film::Film (optional<boost::filesystem::path> dir) , _resolution (Resolution::TWO_K) , _encrypted (false) , _context_id (dcp::make_uuid ()) - , _j2k_bandwidth (Config::instance()->default_j2k_bandwidth ()) , _video_frame_rate (24) , _audio_channels (Config::instance()->default_dcp_audio_channels ()) , _three_d (false) , _sequence (true) , _interop (Config::instance()->default_interop ()) + , _video_encoding(VideoEncoding::JPEG2000) , _limit_to_smpte_bv20(false) , _audio_processor (0) , _reel_type (ReelType::SINGLE) @@ -200,13 +208,17 @@ Film::Film (optional<boost::filesystem::path> dir) _studio = metadata["studio"]; } + for (auto encoding: {VideoEncoding::JPEG2000, VideoEncoding::MPEG2}) { + _video_bit_rate[encoding] = Config::instance()->default_video_bit_rate(encoding); + } + _playlist_change_connection = _playlist->Change.connect (bind (&Film::playlist_change, this, _1)); _playlist_order_changed_connection = _playlist->OrderChange.connect (bind (&Film::playlist_order_changed, this)); _playlist_content_change_connection = _playlist->ContentChange.connect (bind (&Film::playlist_content_change, this, _1, _2, _3, _4)); _playlist_length_change_connection = _playlist->LengthChange.connect (bind(&Film::playlist_length_change, this)); if (dir) { - set_directory(dcp::filesystem::weakly_canonical(*dir)); + _directory = dcp::filesystem::weakly_canonical(*dir); } if (_directory) { @@ -238,7 +250,7 @@ Film::video_identifier () const + "_" + resolution_to_string (_resolution) + "_" + _playlist->video_identifier() + "_" + raw_convert<string>(_video_frame_rate) - + "_" + raw_convert<string>(j2k_bandwidth()); + + "_" + raw_convert<string>(video_bit_rate(video_encoding())); if (encrypted ()) { /* This is insecure but hey, the key is in plaintext in metadata.xml */ @@ -249,6 +261,9 @@ Film::video_identifier () const if (_interop) { s += "_I"; + if (_video_encoding == VideoEncoding::MPEG2) { + s += "_M"; + } } else { s += "_S"; if (_limit_to_smpte_bv20) { @@ -279,17 +294,6 @@ Film::info_file (DCPTimePeriod period) const return file (p); } -boost::filesystem::path -Film::internal_video_asset_dir () const -{ - return dir ("video"); -} - -boost::filesystem::path -Film::internal_video_asset_filename (DCPTimePeriod p) const -{ - return video_identifier() + "_" + raw_convert<string> (p.from.get()) + "_" + raw_convert<string> (p.to.get()) + ".mxf"; -} boost::filesystem::path Film::audio_analysis_path (shared_ptr<const Playlist> playlist) const @@ -334,6 +338,13 @@ Film::audio_analysis_path (shared_ptr<const Playlist> playlist) const boost::filesystem::path +Film::assets_path() const +{ + return dir("assets"); +} + + +boost::filesystem::path Film::subtitle_analysis_path (shared_ptr<const Content> content) const { auto p = dir ("analysis"); @@ -379,88 +390,98 @@ Film::metadata (bool with_content_paths) const auto doc = make_shared<xmlpp::Document>(); auto root = doc->create_root_node ("Metadata"); - root->add_child("Version")->add_child_text (raw_convert<string> (current_state_version)); - auto last_write = root->add_child("LastWrittenBy"); + cxml::add_text_child(root, "Version", raw_convert<string>(current_state_version)); + auto last_write = cxml::add_child(root, "LastWrittenBy"); last_write->add_child_text (dcpomatic_version); last_write->set_attribute("git", dcpomatic_git_commit); - root->add_child("Name")->add_child_text (_name); - root->add_child("UseISDCFName")->add_child_text (_use_isdcf_name ? "1" : "0"); + cxml::add_text_child(root, "Name", _name); + cxml::add_text_child(root, "UseISDCFName", _use_isdcf_name ? "1" : "0"); if (_dcp_content_type) { - root->add_child("DCPContentType")->add_child_text (_dcp_content_type->isdcf_name ()); + cxml::add_text_child(root, "DCPContentType", _dcp_content_type->isdcf_name()); } if (_container) { - root->add_child("Container")->add_child_text (_container->id ()); - } - - root->add_child("Resolution")->add_child_text (resolution_to_string (_resolution)); - root->add_child("J2KBandwidth")->add_child_text (raw_convert<string> (_j2k_bandwidth)); - root->add_child("VideoFrameRate")->add_child_text (raw_convert<string> (_video_frame_rate)); - root->add_child("AudioFrameRate")->add_child_text(raw_convert<string>(_audio_frame_rate)); - root->add_child("ISDCFDate")->add_child_text (boost::gregorian::to_iso_string (_isdcf_date)); - root->add_child("AudioChannels")->add_child_text (raw_convert<string> (_audio_channels)); - root->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0"); - root->add_child("Sequence")->add_child_text (_sequence ? "1" : "0"); - root->add_child("Interop")->add_child_text (_interop ? "1" : "0"); - root->add_child("LimitToSMPTEBv20")->add_child_text(_limit_to_smpte_bv20 ? "1" : "0"); - root->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0"); - root->add_child("Key")->add_child_text (_key.hex ()); - root->add_child("ContextID")->add_child_text (_context_id); + cxml::add_text_child(root, "Container", _container->id()); + } + + cxml::add_text_child(root, "Resolution", resolution_to_string(_resolution)); + cxml::add_text_child(root, "J2KVideoBitRate", raw_convert<string>(_video_bit_rate[VideoEncoding::JPEG2000])); + cxml::add_text_child(root, "MPEG2VideoBitRate", raw_convert<string>(_video_bit_rate[VideoEncoding::MPEG2])); + cxml::add_text_child(root, "VideoFrameRate", raw_convert<string>(_video_frame_rate)); + cxml::add_text_child(root, "AudioFrameRate", raw_convert<string>(_audio_frame_rate)); + cxml::add_text_child(root, "ISDCFDate", boost::gregorian::to_iso_string(_isdcf_date)); + cxml::add_text_child(root, "AudioChannels", raw_convert<string>(_audio_channels)); + cxml::add_text_child(root, "ThreeD", _three_d ? "1" : "0"); + cxml::add_text_child(root, "Sequence", _sequence ? "1" : "0"); + cxml::add_text_child(root, "Interop", _interop ? "1" : "0"); + cxml::add_text_child(root, "VideoEncoding", video_encoding_to_string(_video_encoding)); + cxml::add_text_child(root, "LimitToSMPTEBv20", _limit_to_smpte_bv20 ? "1" : "0"); + cxml::add_text_child(root, "Encrypted", _encrypted ? "1" : "0"); + cxml::add_text_child(root, "Key", _key.hex ()); + cxml::add_text_child(root, "ContextID", _context_id); if (_audio_processor) { - root->add_child("AudioProcessor")->add_child_text (_audio_processor->id ()); + cxml::add_text_child(root, "AudioProcessor", _audio_processor->id()); + } + cxml::add_text_child(root, "ReelType", raw_convert<string>(static_cast<int> (_reel_type))); + cxml::add_text_child(root, "ReelLength", raw_convert<string>(_reel_length)); + for (auto boundary: _custom_reel_boundaries) { + cxml::add_text_child(root, "CustomReelBoundary", raw_convert<string>(boundary.get())); } - root->add_child("ReelType")->add_child_text (raw_convert<string> (static_cast<int> (_reel_type))); - root->add_child("ReelLength")->add_child_text (raw_convert<string> (_reel_length)); - root->add_child("ReencodeJ2K")->add_child_text (_reencode_j2k ? "1" : "0"); - root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0"); + cxml::add_text_child(root, "ReencodeJ2K", _reencode_j2k ? "1" : "0"); + cxml::add_text_child(root, "UserExplicitVideoFrameRate", _user_explicit_video_frame_rate ? "1" : "0"); for (auto const& marker: _markers) { - auto m = root->add_child("Marker"); - m->set_attribute("Type", dcp::marker_to_string(marker.first)); + auto m = cxml::add_child(root, "Marker"); + m->set_attribute("type", dcp::marker_to_string(marker.first)); m->add_child_text(raw_convert<string>(marker.second.get())); } for (auto i: _ratings) { - i.as_xml (root->add_child("Rating")); + i.as_xml(cxml::add_child(root, "Rating")); } for (auto i: _content_versions) { - root->add_child("ContentVersion")->add_child_text(i); + cxml::add_text_child(root, "ContentVersion", i); } - root->add_child("NameLanguage")->add_child_text(_name_language.to_string()); - root->add_child("TerritoryType")->add_child_text(territory_type_to_string(_territory_type)); + cxml::add_text_child(root, "NameLanguage", _name_language.to_string()); + cxml::add_text_child(root, "TerritoryType", territory_type_to_string(_territory_type)); if (_release_territory) { - root->add_child("ReleaseTerritory")->add_child_text(_release_territory->subtag()); + cxml::add_text_child(root, "ReleaseTerritory", _release_territory->subtag()); } if (_sign_language_video_language) { - root->add_child("SignLanguageVideoLanguage")->add_child_text(_sign_language_video_language->to_string()); + cxml::add_text_child(root, "SignLanguageVideoLanguage", _sign_language_video_language->to_string()); } - root->add_child("VersionNumber")->add_child_text(raw_convert<string>(_version_number)); - root->add_child("Status")->add_child_text(dcp::status_to_string(_status)); + cxml::add_text_child(root, "VersionNumber", raw_convert<string>(_version_number)); + cxml::add_text_child(root, "Status", dcp::status_to_string(_status)); if (_chain) { - root->add_child("Chain")->add_child_text(*_chain); + cxml::add_text_child(root, "Chain", *_chain); } if (_distributor) { - root->add_child("Distributor")->add_child_text(*_distributor); + cxml::add_text_child(root, "Distributor", *_distributor); } if (_facility) { - root->add_child("Facility")->add_child_text(*_facility); + cxml::add_text_child(root, "Facility", *_facility); } if (_studio) { - root->add_child("Studio")->add_child_text(*_studio); + cxml::add_text_child(root, "Studio", *_studio); } - root->add_child("TempVersion")->add_child_text(_temp_version ? "1" : "0"); - root->add_child("PreRelease")->add_child_text(_pre_release ? "1" : "0"); - root->add_child("RedBand")->add_child_text(_red_band ? "1" : "0"); - root->add_child("TwoDVersionOfThreeD")->add_child_text(_two_d_version_of_three_d ? "1" : "0"); + cxml::add_text_child(root, "TempVersion", _temp_version ? "1" : "0"); + cxml::add_text_child(root, "PreRelease", _pre_release ? "1" : "0"); + cxml::add_text_child(root, "RedBand", _red_band ? "1" : "0"); + cxml::add_text_child(root, "TwoDVersionOfThreeD", _two_d_version_of_three_d ? "1" : "0"); if (_luminance) { - root->add_child("LuminanceValue")->add_child_text(raw_convert<string>(_luminance->value())); - root->add_child("LuminanceUnit")->add_child_text(dcp::Luminance::unit_to_string(_luminance->unit())); + cxml::add_text_child(root, "LuminanceValue", raw_convert<string>(_luminance->value())); + cxml::add_text_child(root, "LuminanceUnit", dcp::Luminance::unit_to_string(_luminance->unit())); } - root->add_child("UserExplicitContainer")->add_child_text(_user_explicit_container ? "1" : "0"); - root->add_child("UserExplicitResolution")->add_child_text(_user_explicit_resolution ? "1" : "0"); + cxml::add_text_child(root, "UserExplicitContainer", _user_explicit_container ? "1" : "0"); + cxml::add_text_child(root, "UserExplicitResolution", _user_explicit_resolution ? "1" : "0"); if (_audio_language) { - root->add_child("AudioLanguage")->add_child_text(_audio_language->to_string()); + cxml::add_text_child(root, "AudioLanguage", _audio_language->to_string()); } - _playlist->as_xml (root->add_child ("Playlist"), with_content_paths); + _playlist->as_xml( + cxml::add_child(root, "Playlist"), + with_content_paths, + Config::instance()->relative_paths() ? PathBehaviour::MAKE_RELATIVE : PathBehaviour::KEEP_ABSOLUTE, + directory() + ); return doc; } @@ -503,7 +524,13 @@ Film::read_metadata (optional<boost::filesystem::path> path) { if (!path) { if (dcp::filesystem::exists(file("metadata")) && !dcp::filesystem::exists(file(metadata_file))) { - throw runtime_error (_("This film was created with an older version of DCP-o-matic, and unfortunately it cannot be loaded into this version. You will need to create a new Film, re-add your content and set it up again. Sorry!")); + throw runtime_error( + variant::insert_dcpomatic( + _("This film was created with an older version of %1, and unfortunately it cannot " + "be loaded into this version. You will need to create a new Film, re-add your " + "content and set it up again. Sorry!") + ) + ); } path = file (metadata_file); @@ -518,7 +545,7 @@ Film::read_metadata (optional<boost::filesystem::path> path) _state_version = f.number_child<int> ("Version"); if (_state_version > current_state_version) { - throw runtime_error (_("This film was created with a newer version of DCP-o-matic, and it cannot be loaded into this version. Sorry!")); + throw runtime_error(variant::insert_dcpomatic(_("This film was created with a newer version of %1, and it cannot be loaded into this version. Sorry!"))); } else if (_state_version < current_state_version) { /* This is an older version; save a copy (if we haven't already) */ auto const older = path->parent_path() / String::compose("metadata.%1.xml", _state_version); @@ -558,7 +585,12 @@ Film::read_metadata (optional<boost::filesystem::path> path) } _resolution = string_to_resolution (f.string_child ("Resolution")); - _j2k_bandwidth = f.number_child<int> ("J2KBandwidth"); + if (auto j2k = f.optional_number_child<int>("J2KBandwidth")) { + _video_bit_rate[VideoEncoding::JPEG2000] = *j2k; + } else { + _video_bit_rate[VideoEncoding::JPEG2000] = f.number_child<int64_t>("J2KVideoBitRate"); + } + _video_bit_rate[VideoEncoding::MPEG2] = f.optional_number_child<int64_t>("MPEG2VideoBitRate").get_value_or(Config::instance()->default_video_bit_rate(VideoEncoding::MPEG2)); _video_frame_rate = f.number_child<int> ("VideoFrameRate"); _audio_frame_rate = f.optional_number_child<int>("AudioFrameRate").get_value_or(48000); _encrypted = f.bool_child ("Encrypted"); @@ -580,6 +612,9 @@ Film::read_metadata (optional<boost::filesystem::path> path) _three_d = f.bool_child ("ThreeD"); _interop = f.bool_child ("Interop"); + if (auto encoding = f.optional_string_child("VideoEncoding")) { + _video_encoding = video_encoding_from_string(*encoding); + } _limit_to_smpte_bv20 = f.optional_bool_child("LimitToSMPTEBv20").get_value_or(false); _key = dcp::Key (f.string_child ("Key")); _context_id = f.optional_string_child("ContextID").get_value_or (dcp::make_uuid ()); @@ -599,11 +634,18 @@ Film::read_metadata (optional<boost::filesystem::path> path) _reel_type = static_cast<ReelType> (f.optional_number_child<int>("ReelType").get_value_or (static_cast<int>(ReelType::SINGLE))); _reel_length = f.optional_number_child<int64_t>("ReelLength").get_value_or (2000000000); + for (auto boundary: f.node_children("CustomReelBoundary")) { + _custom_reel_boundaries.push_back(DCPTime(raw_convert<int64_t>(boundary->content()))); + } _reencode_j2k = f.optional_bool_child("ReencodeJ2K").get_value_or(false); _user_explicit_video_frame_rate = f.optional_bool_child("UserExplicitVideoFrameRate").get_value_or(false); for (auto i: f.node_children("Marker")) { - _markers[dcp::marker_from_string(i->string_attribute("Type"))] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content())); + auto type = i->optional_string_attribute("Type"); + if (!type) { + type = i->string_attribute("type"); + } + _markers[dcp::marker_from_string(*type)] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content())); } for (auto i: f.node_children("Rating")) { @@ -1099,6 +1141,10 @@ Film::set_directory (boost::filesystem::path d) void Film::set_name (string n) { + if (_name == n) { + return; + } + FilmChangeSignaller ch(this, FilmProperty::NAME); _name = n; } @@ -1151,10 +1197,10 @@ Film::set_resolution (Resolution r, bool explicit_user) void -Film::set_j2k_bandwidth (int b) +Film::set_video_bit_rate(VideoEncoding encoding, int64_t bit_rate) { - FilmChangeSignaller ch(this, FilmProperty::J2K_BANDWIDTH); - _j2k_bandwidth = b; + FilmChangeSignaller ch(this, FilmProperty::VIDEO_BIT_RATE); + _video_bit_rate[encoding] = bit_rate; } /** @param f New frame rate. @@ -1198,6 +1244,15 @@ Film::set_interop (bool i) void +Film::set_video_encoding(VideoEncoding encoding) +{ + FilmChangeSignaller ch(this, FilmProperty::VIDEO_ENCODING); + _video_encoding = encoding; + check_settings_consistency(); +} + + +void Film::set_limit_to_smpte_bv20(bool limit) { FilmChangeSignaller ch(this, FilmProperty::LIMIT_TO_SMPTE_BV20); @@ -1228,6 +1283,16 @@ Film::set_reel_length (int64_t r) _reel_length = r; } + +void +Film::set_custom_reel_boundaries(vector<DCPTime> boundaries) +{ + FilmChangeSignaller ch(this, FilmProperty::CUSTOM_REEL_BOUNDARIES); + std::sort(boundaries.begin(), boundaries.end()); + _custom_reel_boundaries = std::move(boundaries); +} + + void Film::set_reencode_j2k (bool r) { @@ -1561,7 +1626,7 @@ Film::check_settings_consistency () } else if (!atmos_rate && rate != video_frame_rate()) { atmos_rate = rate; set_video_frame_rate (rate, false); - Message (_("DCP-o-matic had to change your settings so that the film's frame rate is the same as that of your Atmos content.")); + Message(variant::insert_dcpomatic(_("%1 had to change your settings so that the film's frame rate is the same as that of your Atmos content."))); } } } @@ -1593,7 +1658,41 @@ Film::check_settings_consistency () } if (change_made) { - Message (_("DCP-o-matic had to change your settings for referring to DCPs as OV. Please review those settings to make sure they are what you want.")); + Message(variant::insert_dcpomatic(_("%1 had to change your settings for referring to DCPs as OV. Please review those settings to make sure they are what you want."))); + } + + if (reel_type() == ReelType::CUSTOM) { + auto boundaries = custom_reel_boundaries(); + auto too_late = std::find_if(boundaries.begin(), boundaries.end(), [this](dcpomatic::DCPTime const& time) { + return time >= length(); + }); + + if (too_late != boundaries.end()) { + if (std::distance(too_late, boundaries.end()) > 1) { + Message(variant::insert_dcpomatic(_("%1 had to remove some of your custom reel boundaries as they no longer lie within the film."))); + } else { + Message(variant::insert_dcpomatic(_("%1 had to remove one of your custom reel boundaries as it no longer lies within the film."))); + } + boundaries.erase(too_late, boundaries.end()); + set_custom_reel_boundaries(boundaries); + } + } + + auto const hd = Ratio::from_id("178"); + + if (video_encoding() == VideoEncoding::MPEG2) { + if (container() != hd || resolution() == Resolution::FOUR_K) { + set_container(hd); + set_resolution(Resolution::TWO_K); + Message(_("DCP-o-matic had to set your container to 1920x1080 as it's the only one that can be used with MPEG2 encoding.")); + } + if (three_d()) { + set_three_d(false); + Message(_("DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 encoding.")); + } + } else if (container() == hd && !Config::instance()->allow_any_container()) { + set_container(Ratio::from_id("185")); + Message(_("DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 and that is not a standard ratio with JPEG2000 encoding.")); } } @@ -1720,7 +1819,7 @@ Film::make_kdm(boost::filesystem::path cpl_file, dcp::LocalTime from, dcp::Local uint64_t Film::required_disk_space () const { - return _playlist->required_disk_space (shared_from_this(), j2k_bandwidth(), audio_channels(), audio_frame_rate()); + return _playlist->required_disk_space (shared_from_this(), video_bit_rate(video_encoding()), audio_channels(), audio_frame_rate()); } /** This method checks the disk that the Film is on and tries to decide whether or not @@ -1731,30 +1830,11 @@ Film::required_disk_space () const * Note: the decision made by this method isn't, of course, 100% reliable. */ bool -Film::should_be_enough_disk_space (double& required, double& available, bool& can_hard_link) const -{ - /* Create a test file and see if we can hard-link it */ - boost::filesystem::path test = internal_video_asset_dir() / "test"; - boost::filesystem::path test2 = internal_video_asset_dir() / "test2"; - can_hard_link = true; - dcp::File f(test, "w"); - if (f) { - f.close(); - boost::system::error_code ec; - dcp::filesystem::create_hard_link(test, test2, ec); - if (ec) { - can_hard_link = false; - } - dcp::filesystem::remove(test); - dcp::filesystem::remove(test2); - } - - auto s = dcp::filesystem::space(internal_video_asset_dir()); - required = double (required_disk_space ()) / 1073741824.0f; - if (!can_hard_link) { - required *= 2; - } - available = double (s.available) / 1073741824.0f; +Film::should_be_enough_disk_space(double& required, double& available) const +{ + DCPOMATIC_ASSERT(directory()); + required = required_disk_space() / 1073741824.0f; + available = dcp::filesystem::space(*directory()).available / 1073741824.0f; return (available - required) > 1; } @@ -1799,15 +1879,16 @@ Film::audio_analysis_finished () /* XXX */ } -list<DCPTimePeriod> + +vector<DCPTimePeriod> Film::reels () const { - list<DCPTimePeriod> p; + vector<DCPTimePeriod> periods; auto const len = length(); switch (reel_type ()) { case ReelType::SINGLE: - p.push_back (DCPTimePeriod (DCPTime (), len)); + periods.emplace_back(DCPTime(), len); break; case ReelType::BY_VIDEO_CONTENT: { @@ -1832,7 +1913,7 @@ Film::reels () const for (auto t: split_points) { if (last && (t - *last) >= DCPTime::from_seconds(1)) { /* Period from *last to t is long enough; use it and start a new one */ - p.push_back (DCPTimePeriod(*last, t)); + periods.emplace_back(*last, t); last = t; } else if (!last) { /* That was the first time, so start a new period */ @@ -1840,8 +1921,8 @@ Film::reels () const } } - if (!p.empty()) { - p.back().to = split_points.back(); + if (!periods.empty()) { + periods.back().to = split_points.back(); } break; } @@ -1851,19 +1932,32 @@ Film::reels () const /* Integer-divide reel length by the size of one frame to give the number of frames per reel, * making sure we don't go less than 1s long. */ - Frame const reel_in_frames = max(_reel_length / ((j2k_bandwidth() / video_frame_rate()) / 8), static_cast<Frame>(video_frame_rate())); + Frame const reel_in_frames = max(_reel_length / ((video_bit_rate(video_encoding()) / video_frame_rate()) / 8), static_cast<Frame>(video_frame_rate())); while (current < len) { DCPTime end = min (len, current + DCPTime::from_frames (reel_in_frames, video_frame_rate ())); - p.push_back (DCPTimePeriod (current, end)); + periods.emplace_back(current, end); current = end; } break; } + case ReelType::CUSTOM: + { + DCPTimePeriod current; + for (auto boundary: _custom_reel_boundaries) { + current.to = boundary; + periods.push_back(current); + current.from = boundary; + } + current.to = len; + periods.push_back(current); + break; + } } - return p; + return periods; } + /** @param period A period within the DCP * @return Name of the content which most contributes to the given period. */ @@ -1874,15 +1968,21 @@ Film::content_summary (DCPTimePeriod period) const } void -Film::use_template (string name) +Film::use_template(optional<string> name) { - _template_film.reset (new Film (optional<boost::filesystem::path>())); - _template_film->read_metadata (Config::instance()->template_read_path(name)); + _template_film = std::make_shared<Film>(optional<boost::filesystem::path>()); + if (name) { + _template_film->read_metadata(Config::instance()->template_read_path(*name)); + } else { + _template_film->read_metadata(Config::instance()->default_template_read_path()); + } _use_isdcf_name = _template_film->_use_isdcf_name; _dcp_content_type = _template_film->_dcp_content_type; _container = _template_film->_container; _resolution = _template_film->_resolution; - _j2k_bandwidth = _template_film->_j2k_bandwidth; + for (auto encoding: { VideoEncoding::JPEG2000, VideoEncoding::MPEG2 }) { + _video_bit_rate[encoding] = _template_film->_video_bit_rate[encoding]; + } _video_frame_rate = _template_film->_video_frame_rate; _encrypted = _template_film->_encrypted; _audio_channels = _template_film->_audio_channels; @@ -1892,6 +1992,12 @@ Film::use_template (string name) _audio_processor = _template_film->_audio_processor; _reel_type = _template_film->_reel_type; _reel_length = _template_film->_reel_length; + _chain = _template_film->_chain; + _distributor = _template_film->_distributor; + _facility = _template_film->_facility; + _studio = _template_film->_studio; + _territory_type = _template_film->_territory_type; + _release_territory = _template_film->_release_territory; } pair<double, double> @@ -1944,14 +2050,14 @@ Film::contains_atmos_content () const list<DCPTextTrack> -Film::closed_caption_tracks () const +Film::closed_text_tracks() const { list<DCPTextTrack> tt; for (auto i: content()) { for (auto text: i->text) { /* XXX: Empty DCPTextTrack ends up being a magic value here - the "unknown" or "not specified" track */ auto dtt = text->dcp_track().get_value_or(DCPTextTrack()); - if (text->type() == TextType::CLOSED_CAPTION && find(tt.begin(), tt.end(), dtt) == tt.end()) { + if (!is_open(text->type()) && find(tt.begin(), tt.end(), dtt) == tt.end()) { tt.push_back (dtt); } } @@ -2230,3 +2336,94 @@ Film::set_territory_type(TerritoryType type) _territory_type = type; } + +void +Film::set_ui_state(string key, string value) +{ + _ui_state[key] = value; + write_ui_state(); +} + + +boost::optional<std::string> +Film::ui_state(string key) const +{ + auto iter = _ui_state.find(key); + if (iter == _ui_state.end()) { + return {}; + } + + return iter->second; +} + + +void +Film::write_ui_state() const +{ + auto doc = make_shared<xmlpp::Document>(); + auto root = doc->create_root_node("UI"); + + for (auto state: _ui_state) { + cxml::add_text_child(root, state.first, state.second); + } + + try { + doc->write_to_file_formatted(dcp::filesystem::fix_long_path(file(ui_state_file)).string()); + } catch (...) {} +} + + +void +Film::read_ui_state() +{ + try { + cxml::Document xml("UI"); + xml.read_file(dcp::filesystem::fix_long_path(file(ui_state_file))); + for (auto node: xml.node_children()) { + if (!node->is_text()) { + _ui_state[node->name()] = node->content(); + } + } + } catch (...) {} +} + + +vector<RememberedAsset> +Film::read_remembered_assets() const +{ + vector<RememberedAsset> assets; + + try { + cxml::Document xml("Assets"); + xml.read_file(dcp::filesystem::fix_long_path(file(assets_file))); + for (auto node: xml.node_children("Asset")) { + assets.push_back(RememberedAsset(node)); + } + } catch (std::exception& e) { + LOG_ERROR("Could not read assets file %1 (%2)", file(assets_file), e.what()); + } catch (...) { + LOG_ERROR("Could not read assets file %1", file(assets_file)); + } + + return assets; +} + + +void +Film::write_remembered_assets(vector<RememberedAsset> const& assets) const +{ + auto doc = make_shared<xmlpp::Document>(); + auto root = doc->create_root_node("Assets"); + + for (auto asset: assets) { + asset.as_xml(cxml::add_child(root, "Asset")); + } + + try { + doc->write_to_file_formatted(dcp::filesystem::fix_long_path(file(assets_file)).string()); + } catch (std::exception& e) { + LOG_ERROR("Could not write assets file %1 (%2)", file(assets_file), e.what()); + } catch (...) { + LOG_ERROR("Could not write assets file %1", file(assets_file)); + } +} diff --git a/src/lib/film.h b/src/lib/film.h index 92e224ad1..815c6ae74 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -32,15 +32,18 @@ #include "change_signaller.h" #include "dcp_text_track.h" #include "dcpomatic_time.h" +#include "enum_indexed_vector.h" #include "film_property.h" #include "frame_rate_change.h" #include "named_channel.h" +#include "remembered_asset.h" #include "resolution.h" #include "signaller.h" #include "territory_type.h" #include "transcode_job.h" #include "types.h" #include "util.h" +#include "video_encoding.h" #include <dcp/encrypted_kdm.h> #include <dcp/file.h> #include <dcp/key.h> @@ -121,11 +124,10 @@ public: std::shared_ptr<InfoFileHandle> info_file_handle (dcpomatic::DCPTimePeriod period, bool read) const; boost::filesystem::path j2c_path (int, Frame, Eyes, bool) const; - boost::filesystem::path internal_video_asset_dir () const; - boost::filesystem::path internal_video_asset_filename (dcpomatic::DCPTimePeriod p) const; boost::filesystem::path audio_analysis_path (std::shared_ptr<const Playlist>) const; boost::filesystem::path subtitle_analysis_path (std::shared_ptr<const Content>) const; + boost::filesystem::path assets_path() const; void send_dcp_to_tms (); @@ -139,7 +141,7 @@ public: boost::filesystem::path file (boost::filesystem::path f) const; boost::filesystem::path dir (boost::filesystem::path d, bool create = true) const; - void use_template (std::string name); + void use_template(boost::optional<std::string> name); std::list<std::string> read_metadata (boost::optional<boost::filesystem::path> path = boost::optional<boost::filesystem::path> ()); void write_metadata (); void write_metadata (boost::filesystem::path path) const; @@ -162,10 +164,10 @@ public: std::vector<CPLSummary> cpls () const; - std::list<DCPTextTrack> closed_caption_tracks () const; + std::list<DCPTextTrack> closed_text_tracks() const; uint64_t required_disk_space () const; - bool should_be_enough_disk_space (double& required, double& available, bool& can_hard_link) const; + bool should_be_enough_disk_space(double& required, double& available) const; bool has_sign_language_video_channel () const; @@ -191,7 +193,7 @@ public: return _playlist; } - std::list<dcpomatic::DCPTimePeriod> reels () const; + std::vector<dcpomatic::DCPTimePeriod> reels() const; std::list<int> mapped_audio_channels () const; boost::optional<dcp::LanguageTag> audio_language () const { @@ -255,8 +257,8 @@ public: return _key; } - int j2k_bandwidth () const { - return _j2k_bandwidth; + int video_bit_rate(VideoEncoding encoding) const { + return _video_bit_rate[encoding]; } /** @return The frame rate of the DCP */ @@ -280,6 +282,10 @@ public: return _interop; } + VideoEncoding video_encoding() const { + return _video_encoding; + } + bool limit_to_smpte_bv20() const { return _limit_to_smpte_bv20; } @@ -296,6 +302,10 @@ public: return _reel_length; } + std::vector<dcpomatic::DCPTime> custom_reel_boundaries() const { + return _custom_reel_boundaries; + } + std::string context_id () const { return _context_id; } @@ -402,17 +412,19 @@ public: void set_container (Ratio const *, bool user_explicit = true); void set_resolution (Resolution, bool user_explicit = true); void set_encrypted (bool); - void set_j2k_bandwidth (int); + void set_video_bit_rate(VideoEncoding encoding, int64_t); void set_video_frame_rate (int rate, bool user_explicit = false); void set_audio_channels (int); void set_three_d (bool); void set_isdcf_date_today (); void set_sequence (bool); void set_interop (bool); + void set_video_encoding(VideoEncoding encoding); void set_limit_to_smpte_bv20(bool); void set_audio_processor (AudioProcessor const * processor); void set_reel_type (ReelType); void set_reel_length (int64_t); + void set_custom_reel_boundaries(std::vector<dcpomatic::DCPTime> boundaries); void set_reencode_j2k (bool); void set_marker (dcp::Marker type, dcpomatic::DCPTime time); void unset_marker (dcp::Marker type); @@ -439,6 +451,14 @@ public: void add_ffoc_lfoc (Markers& markers) const; + void set_ui_state(std::string key, std::string value); + boost::optional<std::string> ui_state(std::string key) const; + void read_ui_state(); + + std::vector<RememberedAsset> read_remembered_assets() const; + void write_remembered_assets(std::vector<RememberedAsset> const& assets) const; + std::string video_identifier() const; + /** Emitted when some property has of the Film is about to change or has changed */ mutable boost::signals2::signal<void (ChangeType, FilmProperty)> Change; @@ -472,7 +492,6 @@ private: void signal_change (ChangeType, FilmProperty); void signal_change (ChangeType, int); - std::string video_identifier () const; void playlist_change (ChangeType); void playlist_order_changed (); void playlist_content_change (ChangeType type, std::weak_ptr<Content>, int, bool frequent); @@ -482,6 +501,7 @@ private: void check_settings_consistency (); void maybe_set_container_and_resolution (); void set_dirty (bool dirty); + void write_ui_state() const; /** Log to write to */ std::shared_ptr<Log> _log; @@ -510,8 +530,8 @@ private: * re-start picture MXF encodes. */ std::string _context_id; - /** bandwidth for J2K files in bits per second */ - int _j2k_bandwidth; + /** bit rate for encoding video using in bits per second */ + EnumIndexedVector<int64_t, VideoEncoding> _video_bit_rate; /** Frames per second to run our DCP at */ int _video_frame_rate; /** The date that we should use in a ISDCF name */ @@ -524,11 +544,14 @@ private: bool _three_d; bool _sequence; bool _interop; + VideoEncoding _video_encoding; bool _limit_to_smpte_bv20; AudioProcessor const * _audio_processor; ReelType _reel_type; - /** Desired reel length in bytes, if _reel_type == REELTYPE_BY_LENGTH */ + /** Desired reel length in bytes, if _reel_type == BY_LENGTH */ int64_t _reel_length; + /** Reel boundaries (excluding those at the start and end, sorted in ascending order) if _reel_type == CUSTOM */ + std::vector<dcpomatic::DCPTime> _custom_reel_boundaries; bool _reencode_j2k; /** true if the user has ever explicitly set the video frame rate of this film */ bool _user_explicit_video_frame_rate; @@ -567,6 +590,8 @@ private: */ bool _tolerant; + std::map<std::string, std::string> _ui_state; + mutable boost::mutex _info_file_mutex; boost::signals2::scoped_connection _playlist_change_connection; diff --git a/src/lib/encoder.cc b/src/lib/film_encoder.cc index 5268d8620..05b911daf 100644 --- a/src/lib/encoder.cc +++ b/src/lib/film_encoder.cc @@ -19,7 +19,7 @@ */ -/** @file src/encoder.cc +/** @file src/film_encoder.cc * @brief A class which takes a Film and some Options, then uses those to encode the film * into some output format. * @@ -28,17 +28,17 @@ */ -#include "encoder.h" +#include "film_encoder.h" #include "player.h" #include "i18n.h" -/** Construct an encoder. +/** Construct a FilmEncoder. * @param film Film that we are encoding. * @param job Job that this encoder is being used in. */ -Encoder::Encoder (std::shared_ptr<const Film> film, std::weak_ptr<Job> job) +FilmEncoder::FilmEncoder(std::shared_ptr<const Film> film, std::weak_ptr<Job> job) : _film (film) , _job (job) , _player(film, Image::Alignment::PADDED) diff --git a/src/lib/encoder.h b/src/lib/film_encoder.h index 9b67720d3..ed7626c68 100644 --- a/src/lib/encoder.h +++ b/src/lib/film_encoder.h @@ -19,8 +19,8 @@ */ -#ifndef DCPOMATIC_ENCODER_H -#define DCPOMATIC_ENCODER_H +#ifndef DCPOMATIC_FILM_ENCODER_H +#define DCPOMATIC_FILM_ENCODER_H #include "player.h" @@ -29,24 +29,23 @@ class Film; -class Encoder; class Player; class Job; class PlayerVideo; class AudioBuffers; -/** @class Encoder +/** @class FilmEncoder * @brief Parent class for something that can encode a film into some format */ -class Encoder +class FilmEncoder { public: - Encoder (std::shared_ptr<const Film> film, std::weak_ptr<Job> job); - virtual ~Encoder () {} + FilmEncoder(std::shared_ptr<const Film> film, std::weak_ptr<Job> job); + virtual ~FilmEncoder() {} - Encoder (Encoder const&) = delete; - Encoder& operator= (Encoder const&) = delete; + FilmEncoder(FilmEncoder const&) = delete; + FilmEncoder& operator=(FilmEncoder const&) = delete; virtual void go () = 0; @@ -58,6 +57,8 @@ public: /** @return the number of frames that are done */ virtual Frame frames_done () const = 0; virtual bool finishing () const = 0; + virtual void pause() {} + virtual void resume() {} protected: std::shared_ptr<const Film> _film; diff --git a/src/lib/film_property.h b/src/lib/film_property.h index c23297965..ebda0e807 100644 --- a/src/lib/film_property.h +++ b/src/lib/film_property.h @@ -39,7 +39,7 @@ enum class FilmProperty { CONTAINER, RESOLUTION, ENCRYPTED, - J2K_BANDWIDTH, + VIDEO_BIT_RATE, VIDEO_FRAME_RATE, AUDIO_FRAME_RATE, AUDIO_CHANNELS, @@ -47,10 +47,12 @@ enum class FilmProperty { THREE_D, SEQUENCE, INTEROP, + VIDEO_ENCODING, LIMIT_TO_SMPTE_BV20, AUDIO_PROCESSOR, REEL_TYPE, REEL_LENGTH, + CUSTOM_REEL_BOUNDARIES, REENCODE_J2K, MARKERS, RATINGS, diff --git a/src/lib/filter.cc b/src/lib/filter.cc index 9a14795ec..465b5991a 100644 --- a/src/lib/filter.cc +++ b/src/lib/filter.cc @@ -37,7 +37,8 @@ LIBDCP_ENABLE_WARNINGS #include "i18n.h" -using namespace std; +using std::string; +using std::vector; using boost::optional; diff --git a/src/lib/font.cc b/src/lib/font.cc index 955a2ad1c..246d3eeb8 100644 --- a/src/lib/font.cc +++ b/src/lib/font.cc @@ -63,11 +63,11 @@ Font& Font::operator=(Font const& other) void -Font::as_xml (xmlpp::Node* node) +Font::as_xml(xmlpp::Element* element) { - node->add_child("Id")->add_child_text(_id); + cxml::add_text_child(element, "Id", _id); if (_content.file) { - node->add_child("File")->add_child_text(_content.file->string()); + cxml::add_text_child(element, "File", _content.file->string()); } } diff --git a/src/lib/font.h b/src/lib/font.h index 12a14aba4..092b682ba 100644 --- a/src/lib/font.h +++ b/src/lib/font.h @@ -57,7 +57,7 @@ public: Font(Font const& other); Font& operator=(Font const& other); - void as_xml (xmlpp::Node* node); + void as_xml(xmlpp::Element* element); std::string id () const { return _id; diff --git a/src/lib/font_id_allocator.cc b/src/lib/font_id_allocator.cc index 5e4ae9c0f..b85fc90dc 100644 --- a/src/lib/font_id_allocator.cc +++ b/src/lib/font_id_allocator.cc @@ -24,9 +24,8 @@ #include "dcpomatic_assert.h" #include "font_id_allocator.h" #include <dcp/reel.h> -#include <dcp/reel_closed_caption_asset.h> -#include <dcp/reel_subtitle_asset.h> -#include <dcp/subtitle_asset.h> +#include <dcp/reel_text_asset.h> +#include <dcp/text_asset.h> #include <set> #include <string> #include <vector> @@ -61,7 +60,7 @@ FontIDAllocator::add_fonts_from_reels(vector<shared_ptr<dcp::Reel>> const& reels void -FontIDAllocator::add_fonts_from_asset(int reel_index, shared_ptr<const dcp::SubtitleAsset> asset) +FontIDAllocator::add_fonts_from_asset(int reel_index, shared_ptr<const dcp::TextAsset> asset) { for (auto const& font: asset->font_data()) { add_font(reel_index, asset->id(), font.first); @@ -76,37 +75,23 @@ FontIDAllocator::add_font(int reel_index, string asset_id, string font_id) if (!_default_font) { _default_font = font; } - _map[font] = 0; + _map[font] = {}; } void FontIDAllocator::allocate() { - /* We'll first try adding <reel>_ to the start of the font ID, but if a reel has multiple - * identical font IDs we will need to use some number that is not a reel ID. Find the - * first such number (1 higher than the highest reel index) - */ - auto next_unused = std::max_element( - _map.begin(), - _map.end(), - [] (std::pair<Font, int> const& a, std::pair<Font, int> const& b) { - return a.first.reel_index < b.first.reel_index; - })->first.reel_index + 1; - std::set<string> used_ids; for (auto& font: _map) { - auto const proposed = String::compose("%1_%2", font.first.reel_index, font.first.font_id); - if (used_ids.find(proposed) != used_ids.end()) { - /* This ID was already used; we need to disambiguate it. Do so by using - * one of our unused prefixes. - */ - font.second = next_unused++; - } else { - /* This ID was not yet used */ - font.second = font.first.reel_index; + auto proposed = font.first.font_id; + int prefix = 0; + while (used_ids.find(proposed) != used_ids.end()) { + proposed = String::compose("%1_%2", prefix++, font.first.font_id); + DCPOMATIC_ASSERT(prefix < 128); } + font.second = proposed; used_ids.insert(proposed); } } @@ -119,7 +104,7 @@ FontIDAllocator::font_id(int reel_index, string asset_id, string font_id) const if (iter == _map.end()) { return default_font_id(); } - return String::compose("%1_%2", iter->second, font_id); + return iter->second; } diff --git a/src/lib/font_id_allocator.h b/src/lib/font_id_allocator.h index fe4b9ef07..2a242a8cf 100644 --- a/src/lib/font_id_allocator.h +++ b/src/lib/font_id_allocator.h @@ -32,7 +32,7 @@ namespace dcp { class Reel; - class SubtitleAsset; + class TextAsset; } @@ -74,7 +74,7 @@ public: } private: - void add_fonts_from_asset(int reel_index, std::shared_ptr<const dcp::SubtitleAsset> asset); + void add_fonts_from_asset(int reel_index, std::shared_ptr<const dcp::TextAsset> asset); struct Font { @@ -101,7 +101,7 @@ private: std::string font_id; }; - std::map<Font, int> _map; + std::map<Font, std::string> _map; boost::optional<Font> _default_font; }; diff --git a/src/lib/frame_info.cc b/src/lib/frame_info.cc new file mode 100644 index 000000000..f348bca6a --- /dev/null +++ b/src/lib/frame_info.cc @@ -0,0 +1,84 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "frame_info.h" +#include <string> + + +using std::shared_ptr; +using std::string; + + +J2KFrameInfo::J2KFrameInfo(uint64_t offset_, uint64_t size_, string hash_) + : dcp::J2KFrameInfo(offset_, size_, hash_) +{ + +} + + +J2KFrameInfo::J2KFrameInfo(dcp::J2KFrameInfo const& info) + : dcp::J2KFrameInfo(info) +{ + +} + + +J2KFrameInfo::J2KFrameInfo(shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes) +{ + info_file->get().seek(position(frame, eyes), SEEK_SET); + info_file->get().checked_read(&offset, sizeof(offset)); + info_file->get().checked_read(&size, sizeof(size)); + + char hash_buffer[33]; + info_file->get().checked_read(hash_buffer, 32); + hash_buffer[32] = '\0'; + hash = hash_buffer; +} + + +long +J2KFrameInfo::position(Frame frame, Eyes eyes) const +{ + switch (eyes) { + case Eyes::BOTH: + return frame * _size_on_disk; + case Eyes::LEFT: + return frame * _size_on_disk * 2; + case Eyes::RIGHT: + return frame * _size_on_disk * 2 + _size_on_disk; + default: + DCPOMATIC_ASSERT(false); + } + + DCPOMATIC_ASSERT(false); +} + + +/** @param frame reel-relative frame */ +void +J2KFrameInfo::write(shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes) const +{ + info_file->get().seek(position(frame, eyes), SEEK_SET); + info_file->get().checked_write(&offset, sizeof(offset)); + info_file->get().checked_write(&size, sizeof(size)); + info_file->get().checked_write(hash.c_str(), hash.size()); +} + diff --git a/src/lib/frame_info.h b/src/lib/frame_info.h new file mode 100644 index 000000000..a5a22bd9e --- /dev/null +++ b/src/lib/frame_info.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "film.h" +#include <dcp/frame_info.h> +#include <memory> + + +class J2KFrameInfo : public dcp::J2KFrameInfo +{ +public: + J2KFrameInfo(dcp::J2KFrameInfo const& info); + J2KFrameInfo(uint64_t offset_, uint64_t size_, std::string hash_); + J2KFrameInfo(std::shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes); + + void write(std::shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes) const; + + static int size_on_disk() { + return _size_on_disk; + } + +private: + long position(Frame frame, Eyes eyes) const; + + static constexpr auto _size_on_disk = 32 + sizeof(dcp::J2KFrameInfo::offset) + sizeof(dcp::J2KFrameInfo::size); +}; + diff --git a/src/lib/grok/context.h b/src/lib/grok/context.h new file mode 100644 index 000000000..81622ad9d --- /dev/null +++ b/src/lib/grok/context.h @@ -0,0 +1,291 @@ +/* + Copyright (C) 2023 Grok Image Compression Inc. + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#pragma once + + +#include "../config.h" +#include "../dcp_video.h" +#include "../film.h" +#include "../log.h" +#include "../dcpomatic_log.h" +#include "../writer.h" +#include "messenger.h" +#include <dcp/array_data.h> +#include <boost/filesystem.hpp> + + +static std::mutex launchMutex; + +namespace grk_plugin +{ + +struct GrokLogger : public MessengerLogger { + explicit GrokLogger(const std::string &preamble) : MessengerLogger(preamble) + {} + virtual ~GrokLogger() = default; + void info(const char* fmt, ...) override{ + va_list arg; + va_start(arg, fmt); + dcpomatic_log->log(preamble_ + log_message(fmt, arg),LogEntry::TYPE_GENERAL); + va_end(arg); + } + void warn(const char* fmt, ...) override{ + va_list arg; + va_start(arg, fmt); + dcpomatic_log->log(preamble_ + log_message(fmt, arg),LogEntry::TYPE_WARNING); + va_end(arg); + } + void error(const char* fmt, ...) override{ + va_list arg; + va_start(arg, fmt); + dcpomatic_log->log(preamble_ + log_message(fmt, arg),LogEntry::TYPE_ERROR); + va_end(arg); + } +}; + +struct FrameProxy { + FrameProxy(int index, Eyes eyes, DCPVideo dcpv) : index_(index), eyes_(eyes), vf(dcpv) + {} + int index() const { + return index_; + } + Eyes eyes(void) const { + return eyes_; + } + int index_; + Eyes eyes_; + DCPVideo vf; +}; + +struct DcpomaticContext +{ + DcpomaticContext( + std::shared_ptr<const Film> film_, + Writer& writer_, + EventHistory& history_, + boost::filesystem::path const& location_ + ) + : film(film_) + , writer(writer_) + , history(history_) + , location(location_) + { + + } + + void set_dimensions(uint32_t w, uint32_t h) + { + width = w; + height = h; + } + + std::shared_ptr<const Film> film; + Writer& writer; + EventHistory& history; + boost::filesystem::path location; + uint32_t width = 0; + uint32_t height = 0; +}; + + +class GrokContext +{ +public: + explicit GrokContext(DcpomaticContext* dcpomatic_context) + : _dcpomatic_context(dcpomatic_context) + { + auto grok = Config::instance()->grok().get_value_or({}); + if (!grok.enable) { + return; + } + + boost::filesystem::path folder(_dcpomatic_context->location); + boost::filesystem::path binary_path = folder / "grk_compress"; + if (!boost::filesystem::exists(binary_path)) { + getMessengerLogger()->error( + "Invalid binary location %s", _dcpomatic_context->location.c_str() + ); + return; + } + + auto proc = [this](const std::string& str) { + try { + Msg msg(str); + auto tag = msg.next(); + if (tag == GRK_MSGR_BATCH_SUBMIT_COMPRESSED) { + auto clientFrameId = msg.nextUint(); + msg.nextUint(); // compressed frame ID + auto compressedFrameLength = msg.nextUint(); + auto processor = [this](FrameProxy srcFrame, uint8_t* compressed, uint32_t compressedFrameLength) { + auto compressed_data = std::make_shared<dcp::ArrayData>(compressed, compressedFrameLength); + _dcpomatic_context->writer.write(compressed_data, srcFrame.index(), srcFrame.eyes()); + frame_done (); + }; + + int const minimum_size = 16384; + + bool needsRecompression = compressedFrameLength < minimum_size; + _messenger->processCompressed(str, processor, needsRecompression); + + if (needsRecompression) { + auto fp = _messenger->retrieve(clientFrameId); + if (!fp) { + return; + } + + auto encoded = std::make_shared<dcp::ArrayData>(fp->vf.encode_locally()); + _dcpomatic_context->writer.write(encoded, fp->vf.index(), fp->vf.eyes()); + frame_done (); + } + } + } catch (std::exception& ex) { + getMessengerLogger()->error("%s",ex.what()); + } + }; + + auto clientInit = MessengerInit( + clientToGrokMessageBuf, + clientSentSynch, + grokReceiveReadySynch, + grokToClientMessageBuf, + grokSentSynch, + clientReceiveReadySynch, + proc, + std::thread::hardware_concurrency() + ); + + _messenger = new ScheduledMessenger<FrameProxy>(clientInit); + } + + ~GrokContext() + { + shutdown(); + } + + bool launch(DCPVideo dcpv, int device) + { + namespace fs = boost::filesystem; + + if (!_messenger) { + return false; + } + if (_launched) { + return true; + } + if (_launch_failed) { + return false; + } + + std::unique_lock<std::mutex> lk_global(launchMutex); + + if (!_messenger) { + return false; + } + if (_launched) { + return true; + } + if (_launch_failed) { + return false; + } + + if (MessengerInit::firstLaunch(true)) { + + if (!fs::exists(_dcpomatic_context->location) || !fs::is_directory(_dcpomatic_context->location)) { + getMessengerLogger()->error("Invalid directory %s", _dcpomatic_context->location.c_str()); + return false; + } + + auto s = dcpv.get_size(); + _dcpomatic_context->set_dimensions(s.width, s.height); + auto grok = Config::instance()->grok().get_value_or({}); + if (!_messenger->launchGrok( + _dcpomatic_context->location, + _dcpomatic_context->width, + _dcpomatic_context->width, + _dcpomatic_context->height, + 3, + 12, + device, + _dcpomatic_context->film->resolution() == Resolution::FOUR_K, + _dcpomatic_context->film->video_frame_rate(), + _dcpomatic_context->film->video_bit_rate(VideoEncoding::JPEG2000), + grok.licence_server, + grok.licence_port, + grok.licence)) { + _launch_failed = true; + return false; + } + } + + _launched = _messenger->waitForClientInit(); + _launch_failed = _launched; + + return _launched; + } + + bool scheduleCompress(DCPVideo const& vf) + { + if (!_messenger) { + return false; + } + + auto fp = FrameProxy(vf.index(), vf.eyes(), vf); + auto cvt = [this, &fp](BufferSrc src) { + fp.vf.convert_to_xyz((uint16_t*)src.framePtr_); + }; + + return _messenger->scheduleCompress(fp, cvt); + } + + void shutdown() + { + if (!_messenger) { + return; + } + + std::unique_lock<std::mutex> lk_global(launchMutex); + + if (!_messenger) { + return; + } + + if (_launched) { + _messenger->shutdown(); + } + + delete _messenger; + _messenger = nullptr; + } + + void frame_done() + { + _dcpomatic_context->history.event(); + } + +private: + DcpomaticContext* _dcpomatic_context; + ScheduledMessenger<FrameProxy>* _messenger = nullptr; + bool _launched = false; + bool _launch_failed = false; +}; + +} + diff --git a/src/lib/grok/messenger.h b/src/lib/grok/messenger.h new file mode 100644 index 000000000..eb2fe9560 --- /dev/null +++ b/src/lib/grok/messenger.h @@ -0,0 +1,906 @@ +/* + Copyright (C) 2023 Grok Image Compression Inc. + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ +#pragma once + +#include <iostream> +#include <string> +#include <cstring> +#include <atomic> +#include <functional> +#include <sstream> +#include <future> +#include <map> +#include <thread> +#include <mutex> +#include <condition_variable> +#include <queue> +#include <cassert> +#include <cstdarg> + +#ifdef _WIN32 +#include <windows.h> +#include <direct.h> +#include <tlhelp32.h> +#pragma warning(disable : 4100) +#else +#include <unistd.h> +#include <fcntl.h> +#include <sys/mman.h> +#include <semaphore.h> +#include <signal.h> +#endif + +namespace grk_plugin +{ +static std::string grokToClientMessageBuf = "Global\\grok_to_client_message"; +static std::string grokSentSynch = "Global\\grok_sent"; +static std::string clientReceiveReadySynch = "Global\\client_receive_ready"; +static std::string clientToGrokMessageBuf = "Global\\client_to_grok_message"; +static std::string clientSentSynch = "Global\\client_sent"; +static std::string grokReceiveReadySynch = "Global\\grok_receive_ready"; +static std::string grokUncompressedBuf = "Global\\grok_uncompressed_buf"; +static std::string grokCompressedBuf = "Global\\grok_compressed_buf"; +static const std::string GRK_MSGR_BATCH_IMAGE = "GRK_MSGR_BATCH_IMAGE"; +static const std::string GRK_MSGR_BATCH_COMPRESS_INIT = "GRK_MSGR_BATCH_COMPRESS_INIT"; +static const std::string GRK_MSGR_BATCH_SUBMIT_UNCOMPRESSED = "GRK_MSGR_BATCH_SUBMIT_UNCOMPRESSED"; +static const std::string GRK_MSGR_BATCH_PROCESSED_UNCOMPRESSED = + "GRK_MSGR_BATCH_PROCESSED_UNCOMPRESSED"; +static const std::string GRK_MSGR_BATCH_SUBMIT_COMPRESSED = "GRK_MSGR_BATCH_SUBMIT_COMPRESSED"; +static const std::string GRK_MSGR_BATCH_PROCESSSED_COMPRESSED = + "GRK_MSGR_BATCH_PROCESSSED_COMPRESSED"; +static const std::string GRK_MSGR_BATCH_SHUTDOWN = "GRK_MSGR_BATCH_SHUTDOWN"; +static const std::string GRK_MSGR_BATCH_FLUSH = "GRK_MSGR_BATCH_FLUSH"; +static const size_t messageBufferLen = 256; +struct IMessengerLogger +{ + virtual ~IMessengerLogger(void) = default; + virtual void info(const char* fmt, ...) = 0; + virtual void warn(const char* fmt, ...) = 0; + virtual void error(const char* fmt, ...) = 0; + + protected: + template<typename... Args> + std::string log_message(char const* const format, Args&... args) noexcept + { + constexpr size_t message_size = 512; + char message[message_size]; + + std::snprintf(message, message_size, format, args...); + return std::string(message); + } +}; +struct MessengerLogger : public IMessengerLogger +{ + explicit MessengerLogger(const std::string &preamble) : preamble_(preamble) {} + virtual ~MessengerLogger() = default; + virtual void info(const char* fmt, ...) override + { + va_list args; + std::string new_fmt = preamble_ + fmt + "\n"; + va_start(args, fmt); + vfprintf(stdout, new_fmt.c_str(), args); + va_end(args); + } + virtual void warn(const char* fmt, ...) override + { + va_list args; + std::string new_fmt = preamble_ + fmt + "\n"; + va_start(args, fmt); + vfprintf(stdout, new_fmt.c_str(), args); + va_end(args); + } + virtual void error(const char* fmt, ...) override + { + va_list args; + std::string new_fmt = preamble_ + fmt + "\n"; + va_start(args, fmt); + vfprintf(stderr, new_fmt.c_str(), args); + va_end(args); + } + + protected: + std::string preamble_; +}; + +extern IMessengerLogger* sLogger; +void setMessengerLogger(IMessengerLogger* logger); +IMessengerLogger* getMessengerLogger(void); + +struct MessengerInit +{ + MessengerInit(const std::string &outBuf, const std::string &outSent, + const std::string &outReceiveReady, const std::string &inBuf, + const std::string &inSent, + const std::string &inReceiveReady, + std::function<void(std::string)> processor, + size_t numProcessingThreads) + : outboundMessageBuf(outBuf), outboundSentSynch(outSent), + outboundReceiveReadySynch(outReceiveReady), inboundMessageBuf(inBuf), + inboundSentSynch(inSent), inboundReceiveReadySynch(inReceiveReady), processor_(processor), + numProcessingThreads_(numProcessingThreads), + uncompressedFrameSize_(0), compressedFrameSize_(0), + numFrames_(0) + { + if(firstLaunch(true)) + unlink(); + } + void unlink(void) + { +#ifndef _WIN32 + shm_unlink(grokToClientMessageBuf.c_str()); + shm_unlink(clientToGrokMessageBuf.c_str()); +#endif + } + static bool firstLaunch(bool isClient) + { + bool debugGrok = false; + return debugGrok != isClient; + } + std::string outboundMessageBuf; + std::string outboundSentSynch; + std::string outboundReceiveReadySynch; + + std::string inboundMessageBuf; + std::string inboundSentSynch; + std::string inboundReceiveReadySynch; + + std::function<void(std::string)> processor_; + size_t numProcessingThreads_; + + size_t uncompressedFrameSize_; + size_t compressedFrameSize_; + size_t numFrames_; +}; + +/*************************** Synchronization *******************************/ +enum SynchDirection +{ + SYNCH_SENT, + SYNCH_RECEIVE_READY +}; + +typedef int grk_handle; +struct Synch +{ + Synch(const std::string &sentSemName, const std::string &receiveReadySemName) + : sentSemName_(sentSemName), receiveReadySemName_(receiveReadySemName) + { + // unlink semaphores in case of previous crash + if(MessengerInit::firstLaunch(true)) + unlink(); + open(); + } + ~Synch() + { + close(); + if(MessengerInit::firstLaunch(true)) + unlink(); + } + void post(SynchDirection dir) + { + auto sem = (dir == SYNCH_SENT ? sentSem_ : receiveReadySem_); + int rc = sem_post(sem); + if(rc) + getMessengerLogger()->error("Error posting to semaphore: %s", strerror(errno)); + } + void wait(SynchDirection dir) + { + auto sem = dir == SYNCH_SENT ? sentSem_ : receiveReadySem_; + int rc = sem_wait(sem); + if(rc) + getMessengerLogger()->error("Error waiting for semaphore: %s", strerror(errno)); + } + void open(void) + { + sentSem_ = sem_open(sentSemName_.c_str(), O_CREAT, 0666, 0); + if(!sentSem_) + getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno)); + receiveReadySem_ = sem_open(receiveReadySemName_.c_str(), O_CREAT, 0666, 1); + if(!receiveReadySem_) + getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno)); + } + void close(void) + { + int rc = sem_close(sentSem_); + if(rc) + getMessengerLogger()->error("Error closing semaphore %s: %s", sentSemName_.c_str(), + strerror(errno)); + rc = sem_close(receiveReadySem_); + if(rc) + getMessengerLogger()->error("Error closing semaphore %s: %s", + receiveReadySemName_.c_str(), strerror(errno)); + } + void unlink(void) + { + int rc = sem_unlink(sentSemName_.c_str()); + if(rc == -1 && errno != ENOENT) + getMessengerLogger()->error("Error unlinking semaphore %s: %s", sentSemName_.c_str(), + strerror(errno)); + rc = sem_unlink(receiveReadySemName_.c_str()); + if(rc == -1 && errno != ENOENT) + getMessengerLogger()->error("Error unlinking semaphore %s: %s", + receiveReadySemName_.c_str(), strerror(errno)); + } + sem_t* sentSem_; + sem_t* receiveReadySem_; + + private: + std::string sentSemName_; + std::string receiveReadySemName_; +}; +struct SharedMemoryManager +{ + static bool initShm(const std::string &name, size_t len, grk_handle* shm_fd, char** buffer) + { + *shm_fd = shm_open(name.c_str(), O_CREAT | O_RDWR, 0666); + if(*shm_fd < 0) + { + getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno)); + return false; + } + int rc = ftruncate(*shm_fd, sizeof(char) * len); + if(rc) + { + getMessengerLogger()->error("Error truncating shared memory: %s", strerror(errno)); + rc = close(*shm_fd); + if(rc) + getMessengerLogger()->error("Error closing shared memory: %s", strerror(errno)); + rc = shm_unlink(name.c_str()); + // 2 == No such file or directory + if(rc && errno != 2) + getMessengerLogger()->error("Error unlinking shared memory: %s", strerror(errno)); + return false; + } + *buffer = static_cast<char*>(mmap(0, len, PROT_WRITE, MAP_SHARED, *shm_fd, 0)); + if(!*buffer) + { + getMessengerLogger()->error("Error mapping shared memory: %s", strerror(errno)); + rc = close(*shm_fd); + if(rc) + getMessengerLogger()->error("Error closing shared memory: %s", strerror(errno)); + rc = shm_unlink(name.c_str()); + // 2 == No such file or directory + if(rc && errno != 2) + getMessengerLogger()->error("Error unlinking shared memory: %s", strerror(errno)); + } + + return *buffer != nullptr; + } + static bool deinitShm(const std::string &name, size_t len, grk_handle &shm_fd, char** buffer) + { + if (!*buffer || !shm_fd) + return true; + + int rc = munmap(*buffer, len); + *buffer = nullptr; + if(rc) + getMessengerLogger()->error("Error unmapping shared memory %s: %s", name.c_str(), strerror(errno)); + rc = close(shm_fd); + shm_fd = 0; + if(rc) + getMessengerLogger()->error("Error closing shared memory %s: %s", name.c_str(), strerror(errno)); + rc = shm_unlink(name.c_str()); + // 2 == No such file or directory + if(rc && errno != 2) + fprintf(stderr,"Error unlinking shared memory %s : %s\n", name.c_str(), strerror(errno)); + + return true; + } +}; + +template<typename Data> +class MessengerBlockingQueue +{ + public: + explicit MessengerBlockingQueue(size_t max) : active_(true), max_size_(max) {} + MessengerBlockingQueue() : MessengerBlockingQueue(UINT_MAX) {} + size_t size() const + { + return queue_.size(); + } + // deactivate and clear queue + void deactivate() + { + { + std::lock_guard<std::mutex> lk(mutex_); + active_ = false; + while(!queue_.empty()) + queue_.pop(); + } + + // release all waiting threads + can_pop_.notify_all(); + can_push_.notify_all(); + } + void activate() + { + std::lock_guard<std::mutex> lk(mutex_); + active_ = true; + } + bool push(Data const& value) + { + bool rc; + { + std::unique_lock<std::mutex> lk(mutex_); + rc = push_(value); + } + if(rc) + can_pop_.notify_one(); + + return rc; + } + bool waitAndPush(Data& value) + { + bool rc; + { + std::unique_lock<std::mutex> lk(mutex_); + if(!active_) + return false; + // in case of spurious wakeup, loop until predicate in lambda + // is satisfied. + can_push_.wait(lk, [this] { return queue_.size() < max_size_ || !active_; }); + rc = push_(value); + } + if(rc) + can_pop_.notify_one(); + + return rc; + } + bool pop(Data& value) + { + bool rc; + { + std::unique_lock<std::mutex> lk(mutex_); + rc = pop_(value); + } + if(rc) + can_push_.notify_one(); + + return rc; + } + bool waitAndPop(Data& value) + { + bool rc; + { + std::unique_lock<std::mutex> lk(mutex_); + if(!active_) + return false; + // in case of spurious wakeup, loop until predicate in lambda + // is satisfied. + can_pop_.wait(lk, [this] { return !queue_.empty() || !active_; }); + rc = pop_(value); + } + if(rc) + can_push_.notify_one(); + + return rc; + } + + private: + bool push_(Data const& value) + { + if(queue_.size() == max_size_ || !active_) + return false; + queue_.push(value); + + return true; + } + bool pop_(Data& value) + { + if(queue_.empty() || !active_) + return false; + value = queue_.front(); + queue_.pop(); + + return true; + } + std::queue<Data> queue_; + mutable std::mutex mutex_; + std::condition_variable can_pop_; + std::condition_variable can_push_; + bool active_; + size_t max_size_; +}; +struct BufferSrc +{ + BufferSrc(void) : BufferSrc("") {} + explicit BufferSrc(const std::string &file) : file_(file), clientFrameId_(0), frameId_(0), framePtr_(nullptr) + {} + BufferSrc(size_t clientFrameId, size_t frameId, uint8_t* framePtr) + : file_(""), clientFrameId_(clientFrameId), frameId_(frameId), framePtr_(framePtr) + {} + bool fromDisk(void) + { + return !file_.empty() && framePtr_ == nullptr; + } + size_t index() const + { + return clientFrameId_; + } + std::string file_; + size_t clientFrameId_; + size_t frameId_; + uint8_t* framePtr_; +}; + +struct Messenger; +static void outboundThread(Messenger* messenger, const std::string &sendBuf, Synch* synch); +static void inboundThread(Messenger* messenger, const std::string &receiveBuf, Synch* synch); +static void processorThread(Messenger* messenger, std::function<void(std::string)> processor); + +struct Messenger +{ + explicit Messenger(MessengerInit init) + : running(true), _initialized(false), _shutdown(false), init_(init), + outboundSynch_(nullptr), + inboundSynch_(nullptr), uncompressed_buffer_(nullptr), compressed_buffer_(nullptr), + uncompressed_fd_(0), compressed_fd_(0) + {} + virtual ~Messenger(void) + { + running = false; + sendQueue.deactivate(); + receiveQueue.deactivate(); + + if (outboundSynch_) { + outboundSynch_->post(SYNCH_RECEIVE_READY); + outbound.join(); + } + + if (inboundSynch_) { + inboundSynch_->post(SYNCH_SENT); + inbound.join(); + } + + for(auto& p : processors_) + p.join(); + + delete outboundSynch_; + delete inboundSynch_; + + deinitShm(); + } + void startThreads(void) { + outboundSynch_ = + new Synch(init_.outboundSentSynch, init_.outboundReceiveReadySynch); + outbound = std::thread(outboundThread, this, init_.outboundMessageBuf, outboundSynch_); + + inboundSynch_ = + new Synch(init_.inboundSentSynch, init_.inboundReceiveReadySynch); + inbound = std::thread(inboundThread, this, init_.inboundMessageBuf, inboundSynch_); + + for(size_t i = 0; i < init_.numProcessingThreads_; ++i) + processors_.push_back(std::thread(processorThread, this, init_.processor_)); + } + bool initBuffers(void) + { + bool rc = true; + if(init_.uncompressedFrameSize_) + { + rc = rc && SharedMemoryManager::initShm(grokUncompressedBuf, + init_.uncompressedFrameSize_ * init_.numFrames_, + &uncompressed_fd_, &uncompressed_buffer_); + } + if(init_.compressedFrameSize_) + { + rc = rc && SharedMemoryManager::initShm(grokCompressedBuf, + init_.compressedFrameSize_ * init_.numFrames_, + &compressed_fd_, &compressed_buffer_); + } + + return rc; + } + + bool deinitShm(void) + { + bool rc = SharedMemoryManager::deinitShm(grokUncompressedBuf, + init_.uncompressedFrameSize_ * init_.numFrames_, + uncompressed_fd_, &uncompressed_buffer_); + rc = rc && SharedMemoryManager::deinitShm(grokCompressedBuf, + init_.compressedFrameSize_ * init_.numFrames_, + compressed_fd_, &compressed_buffer_); + + return rc; + } + template<typename... Args> + void send(const std::string& str, Args... args) + { + std::ostringstream oss; + oss << str; + int dummy[] = {0, ((void)(oss << ',' << args), 0)...}; + static_cast<void>(dummy); + + sendQueue.push(oss.str()); + } + + bool launchGrok( + boost::filesystem::path const& dir, + uint32_t width, + uint32_t stride, + uint32_t height, + uint32_t samplesPerPixel, + uint32_t depth, + int device, + bool is4K, + uint32_t fps, + uint32_t bandwidth, + const std::string server, + uint32_t port, + const std::string license + ) + { + + std::unique_lock<std::mutex> lk(shutdownMutex_); + if (async_result_.valid()) + return true; + if(MessengerInit::firstLaunch(true)) + init_.unlink(); + startThreads(); + char _cmd[4096]; + auto fullServer = server + ":" + std::to_string(port); + sprintf(_cmd, + "./grk_compress -batch_src %s,%d,%d,%d,%d,%d -out_fmt j2k -k 1 " + "-G %d -%s %d,%d -j %s -J %s -v", + GRK_MSGR_BATCH_IMAGE.c_str(), width, stride, height, samplesPerPixel, depth, + device, is4K ? "cinema4K" : "cinema2K", fps, bandwidth, + license.c_str(), fullServer.c_str()); + + return launch(_cmd, dir); + } + void initClient(size_t uncompressedFrameSize, size_t compressedFrameSize, size_t numFrames) + { + // client fills queue with pending uncompressed buffers + init_.uncompressedFrameSize_ = uncompressedFrameSize; + init_.compressedFrameSize_ = compressedFrameSize; + init_.numFrames_ = numFrames; + initBuffers(); + auto ptr = uncompressed_buffer_; + for(size_t i = 0; i < init_.numFrames_; ++i) + { + availableBuffers_.push(BufferSrc(0, i, (uint8_t*)ptr)); + ptr += init_.uncompressedFrameSize_; + } + + std::unique_lock<std::mutex> lk(shutdownMutex_); + _initialized = true; + clientInitializedCondition_.notify_all(); + } + + bool waitForClientInit() + { + if (_initialized) { + return true; + } else if (_shutdown) { + return false; + } + + std::unique_lock<std::mutex> lk(shutdownMutex_); + + if (_initialized) { + return true; + } else if (_shutdown) { + return false; + } + + while (true) { + if (clientInitializedCondition_.wait_for(lk, std::chrono::seconds(1), [this]{ return _initialized || _shutdown; })) { + break; + } + auto status = async_result_.wait_for(std::chrono::milliseconds(100)); + if (status == std::future_status::ready) { + getMessengerLogger()->error("Grok exited unexpectedly during initialization"); + return false; + } + } + + return _initialized && !_shutdown; + } + + static size_t uncompressedFrameSize(uint32_t w, uint32_t h, uint32_t samplesPerPixel) + { + return sizeof(uint16_t) * w * h * samplesPerPixel; + } + void reclaimCompressed(size_t frameId) + { + availableBuffers_.push(BufferSrc(0, frameId, getCompressedFrame(frameId))); + } + void reclaimUncompressed(size_t frameId) + { + availableBuffers_.push(BufferSrc(0, frameId, getUncompressedFrame(frameId))); + } + uint8_t* getUncompressedFrame(size_t frameId) + { + assert(frameId < init_.numFrames_); + if(frameId >= init_.numFrames_) + return nullptr; + + return (uint8_t*)(uncompressed_buffer_ + frameId * init_.uncompressedFrameSize_); + } + uint8_t* getCompressedFrame(size_t frameId) + { + assert(frameId < init_.numFrames_); + if(frameId >= init_.numFrames_) + return nullptr; + + return (uint8_t*)(compressed_buffer_ + frameId * init_.compressedFrameSize_); + } + std::atomic_bool running; + bool _initialized; + bool _shutdown; + MessengerBlockingQueue<std::string> sendQueue; + MessengerBlockingQueue<std::string> receiveQueue; + MessengerBlockingQueue<BufferSrc> availableBuffers_; + MessengerInit init_; + std::string cmd_; + std::future<int> async_result_; + std::mutex shutdownMutex_; + std::condition_variable shutdownCondition_; + + protected: + std::condition_variable clientInitializedCondition_; + private: + bool launch(std::string const& cmd, boost::filesystem::path const& dir) + { + // Change the working directory + if(!dir.empty()) + { + boost::system::error_code ec; + boost::filesystem::current_path(dir, ec); + if (ec) { + getMessengerLogger()->error("Error: failed to change the working directory"); + return false; + } + } + // Execute the command using std::async and std::system + cmd_ = cmd; + getMessengerLogger()->info(cmd.c_str()); + async_result_ = std::async(std::launch::async, [this]() { return std::system(cmd_.c_str()); }); + bool success = async_result_.valid(); + if (!success) + getMessengerLogger()->error("Grok launch failed"); + + return success; + + } + std::thread outbound; + Synch* outboundSynch_; + + std::thread inbound; + Synch* inboundSynch_; + + std::vector<std::thread> processors_; + char* uncompressed_buffer_; + char* compressed_buffer_; + + grk_handle uncompressed_fd_; + grk_handle compressed_fd_; +}; + +static void outboundThread(Messenger* messenger, const std::string &sendBuf, Synch* synch) +{ + grk_handle shm_fd = 0; + char* send_buffer = nullptr; + + if(!SharedMemoryManager::initShm(sendBuf, messageBufferLen, &shm_fd, &send_buffer)) + return; + while(messenger->running) + { + synch->wait(SYNCH_RECEIVE_READY); + if(!messenger->running) + break; + std::string message; + if(!messenger->sendQueue.waitAndPop(message)) + break; + if(!messenger->running) + break; + memcpy(send_buffer, message.c_str(), message.size() + 1); + synch->post(SYNCH_SENT); + } + SharedMemoryManager::deinitShm(sendBuf, messageBufferLen, shm_fd, &send_buffer); +} + +static void inboundThread(Messenger* messenger, const std::string &receiveBuf, Synch* synch) +{ + grk_handle shm_fd = 0; + char* receive_buffer = nullptr; + + if(!SharedMemoryManager::initShm(receiveBuf, messageBufferLen, &shm_fd, &receive_buffer)) + return; + while(messenger->running) + { + synch->wait(SYNCH_SENT); + if(!messenger->running) + break; + auto message = std::string(receive_buffer); + synch->post(SYNCH_RECEIVE_READY); + messenger->receiveQueue.push(message); + } + SharedMemoryManager::deinitShm(receiveBuf, messageBufferLen, shm_fd, &receive_buffer); +} +struct Msg +{ + explicit Msg(const std::string &msg) : ct_(0) + { + std::stringstream ss(msg); + while(ss.good()) + { + std::string substr; + std::getline(ss, substr, ','); + cs_.push_back(substr); + } + } + std::string next() + { + if(ct_ == cs_.size()) + { + getMessengerLogger()->error("Msg: comma separated list exhausted. returning empty."); + return ""; + } + return cs_[ct_++]; + } + + uint32_t nextUint(void) + { + return (uint32_t)std::stoi(next()); + } + + std::vector<std::string> cs_; + size_t ct_; +}; + +static void processorThread(Messenger* messenger, std::function<void(std::string)> processor) +{ + while (messenger->running) { + std::string message; + if (!messenger->receiveQueue.waitAndPop(message)) { + break; + } + + if (!messenger->running) { + break; + } + + Msg msg(message); + auto tag = msg.next(); + if (tag == GRK_MSGR_BATCH_COMPRESS_INIT) { + auto width = msg.nextUint(); + msg.nextUint(); // stride + auto height = msg.nextUint(); + auto samples_per_pixel = msg.nextUint(); + msg.nextUint(); // depth + messenger->init_.uncompressedFrameSize_ = Messenger::uncompressedFrameSize(width, height, samples_per_pixel); + auto compressed_frame_size = msg.nextUint(); + auto num_frames = msg.nextUint(); + messenger->initClient(compressed_frame_size, compressed_frame_size, num_frames); + } else if (tag == GRK_MSGR_BATCH_PROCESSED_UNCOMPRESSED) { + messenger->reclaimUncompressed(msg.nextUint()); + } else if (tag == GRK_MSGR_BATCH_PROCESSSED_COMPRESSED) { + messenger->reclaimCompressed(msg.nextUint()); + } + processor(message); + } +} + +template<typename F> +struct ScheduledFrames +{ + void store(F const& val) + { + std::unique_lock<std::mutex> lk(mapMutex_); + auto it = map_.find(val.index()); + if (it == map_.end()) + map_.emplace(std::make_pair(val.index(), val)); + } + boost::optional<F> retrieve(size_t index) + { + std::unique_lock<std::mutex> lk(mapMutex_); + auto it = map_.find(index); + if(it == map_.end()) + return {}; + + F val = it->second; + map_.erase(index); + + return val; + } + + private: + std::mutex mapMutex_; + std::map<size_t, F> map_; +}; + +template<typename F> +struct ScheduledMessenger : public Messenger +{ + explicit ScheduledMessenger(MessengerInit init) : Messenger(init), + framesScheduled_(0), + framesCompressed_(0) + {} + ~ScheduledMessenger(void) { + shutdown(); + } + bool scheduleCompress(F const& proxy, std::function<void(BufferSrc const&)> converter){ + size_t frameSize = init_.uncompressedFrameSize_; + assert(frameSize >= init_.uncompressedFrameSize_); + BufferSrc src; + if(!availableBuffers_.waitAndPop(src)) + return false; + converter(src); + scheduledFrames_.store(proxy); + framesScheduled_++; + send(GRK_MSGR_BATCH_SUBMIT_UNCOMPRESSED, proxy.index(), src.frameId_); + + return true; + } + void processCompressed(const std::string &message, std::function<void(F,uint8_t*,uint32_t)> processor, bool needsRecompression) { + Msg msg(message); + msg.next(); + auto clientFrameId = msg.nextUint(); + auto compressedFrameId = msg.nextUint(); + auto compressedFrameLength = msg.nextUint(); + if (!needsRecompression) { + auto src_frame = scheduledFrames_.retrieve(clientFrameId); + if (!src_frame) { + return; + } + processor(*src_frame, getCompressedFrame(compressedFrameId),compressedFrameLength); + } + ++framesCompressed_; + send(GRK_MSGR_BATCH_PROCESSSED_COMPRESSED, compressedFrameId); + if (_shutdown && framesCompressed_ == framesScheduled_) + shutdownCondition_.notify_all(); + } + void shutdown(void){ + try { + std::unique_lock<std::mutex> lk(shutdownMutex_); + if (!async_result_.valid()) + return; + _shutdown = true; + if (framesScheduled_) { + uint32_t scheduled = framesScheduled_; + send(GRK_MSGR_BATCH_FLUSH, scheduled); + shutdownCondition_.wait(lk, [this] { return framesScheduled_ == framesCompressed_; }); + } + availableBuffers_.deactivate(); + send(GRK_MSGR_BATCH_SHUTDOWN); + int result = async_result_.get(); + if(result != 0) + getMessengerLogger()->error("Accelerator failed with return code: %d\n",result); + } catch (std::exception &ex) { + getMessengerLogger()->error("%s",ex.what()); + } + + } + + boost::optional<F> retrieve(size_t index) { + return scheduledFrames_.retrieve(index); + } + + void store(F& val) { + scheduledFrames_.store(val); + } + +private: + ScheduledFrames<F> scheduledFrames_; + std::atomic<uint32_t> framesScheduled_; + std::atomic<uint32_t> framesCompressed_; +}; + +} // namespace grk_plugin diff --git a/src/lib/grok_j2k_encoder_thread.cc b/src/lib/grok_j2k_encoder_thread.cc new file mode 100644 index 000000000..c3cd6f8dd --- /dev/null +++ b/src/lib/grok_j2k_encoder_thread.cc @@ -0,0 +1,72 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "config.h" +#include "cross.h" +#include "dcpomatic_log.h" +#include "dcp_video.h" +#include "grok/context.h" +#include "grok_j2k_encoder_thread.h" +#include "j2k_encoder.h" +#include "util.h" +#include <dcp/scope_guard.h> + +#include "i18n.h" + + +using std::make_shared; +using std::shared_ptr; + + +GrokJ2KEncoderThread::GrokJ2KEncoderThread(J2KEncoder& encoder, grk_plugin::GrokContext* context) + : J2KEncoderThread(encoder) + , _context(context) +{ + +} + + +void +GrokJ2KEncoderThread::run() +try +{ + while (true) + { + LOG_TIMING("encoder-sleep thread=%1", thread_id()); + auto frame = _encoder.pop(); + + dcp::ScopeGuard frame_guard([this, &frame]() { + LOG_ERROR("Failed to schedule encode of %1 using grok", frame.index()); + _encoder.retry(frame); + }); + + LOG_TIMING("encoder-pop thread=%1 frame=%2 eyes=%3", thread_id(), frame.index(), static_cast<int>(frame.eyes())); + + auto grok = Config::instance()->grok().get_value_or({}); + + if (_context->launch(frame, grok.selected) && _context->scheduleCompress(frame)) { + frame_guard.cancel(); + } + } +} catch (boost::thread_interrupted& e) { +} catch (...) { + store_current(); +} diff --git a/src/lib/grok_j2k_encoder_thread.h b/src/lib/grok_j2k_encoder_thread.h new file mode 100644 index 000000000..5301e1670 --- /dev/null +++ b/src/lib/grok_j2k_encoder_thread.h @@ -0,0 +1,41 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "exception_store.h" +#include "j2k_encoder_thread.h" + + +namespace grk_plugin { + class GrokContext; +} + + +class GrokJ2KEncoderThread : public J2KEncoderThread, public ExceptionStore +{ +public: + GrokJ2KEncoderThread(J2KEncoder& encoder, grk_plugin::GrokContext* context); + + void run() override; + +private: + grk_plugin::GrokContext* _context; +}; + diff --git a/src/lib/hints.cc b/src/lib/hints.cc index 9eebe4030..4a13f77a0 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -35,14 +35,14 @@ #include "player.h" #include "ratio.h" #include "text_content.h" +#include "variant.h" #include "video_content.h" #include "writer.h" #include <dcp/cpl.h> #include <dcp/filesystem.h> #include <dcp/raw_convert.h> #include <dcp/reel.h> -#include <dcp/reel_closed_caption_asset.h> -#include <dcp/reel_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <boost/algorithm/string.hpp> #include <iostream> @@ -75,7 +75,7 @@ using namespace boost::placeholders; Hints::Hints (weak_ptr<const Film> weak_film) : WeakConstFilm (weak_film) - , _writer (new Writer(weak_film, weak_ptr<Job>(), true)) + , _writer(new Writer(weak_film, weak_ptr<Job>(), film()->dir("hints") / dcpomatic::get_process_id(), true)) , _analyser (film(), film()->playlist(), true, [](float) {}) , _stop (false) { @@ -106,7 +106,13 @@ void Hints::check_few_audio_channels () { if (film()->audio_channels() < 6) { - hint (_("Your DCP has fewer than 6 audio channels. This may cause problems on some projectors. You may want to set the DCP to have 6 channels. It does not matter if your content has fewer channels, as DCP-o-matic will fill the extras with silence.")); + hint( + variant::insert_dcpomatic( + _("Your DCP has fewer than 6 audio channels. This may cause problems on some projectors. " + "You may want to set the DCP to have 6 channels. It does not matter if your content has " + "fewer channels, as %1 will fill the extras with silence.") + ) + ); } } @@ -116,7 +122,12 @@ Hints::check_upmixers () { auto ap = film()->audio_processor(); if (ap && (ap->id() == "stereo-5.1-upmix-a" || ap->id() == "stereo-5.1-upmix-b")) { - hint (_("You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and may result in poor-quality audio. If you continue, you should listen to the resulting DCP in a cinema to make sure that it sounds good.")); + hint(variant::insert_dcpomatic( + _("You are using %1's stereo-to-5.1 upmixer. This is experimental and " + "may result in poor-quality audio. If you continue, you should listen to the " + "resulting DCP in a cinema to make sure that it sounds good.") + ) + ); } } @@ -153,17 +164,17 @@ void Hints::check_unusual_container () { auto const film_container = film()->container()->id(); - if (film_container != "185" && film_container != "239") { + if (film()->video_encoding() != VideoEncoding::MPEG2 && film_container != "185" && film_container != "239") { hint (_("Your DCP uses an unusual container ratio. This may cause problems on some projectors. If possible, use Flat or Scope for the DCP container ratio.")); } } void -Hints::check_high_j2k_bandwidth () +Hints::check_high_video_bit_rate() { - if (film()->j2k_bandwidth() >= 245000000) { - hint (_("A few projectors have problems playing back very high bit-rate DCPs. It is a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is unlikely to have any visible effect on the image.")); + if (film()->video_encoding() == VideoEncoding::JPEG2000 && film()->video_bit_rate(VideoEncoding::JPEG2000) >= 245000000) { + hint (_("A few projectors have problems playing back very high bit-rate DCPs. It is a good idea to drop the video bit rate down to about 200Mbit/s; this is unlikely to have any visible effect on the image.")); } } @@ -251,6 +262,15 @@ Hints::check_interop () void +Hints::check_video_encoding() +{ + if (film()->video_encoding() == VideoEncoding::MPEG2) { + hint(_("The vast majority of cinemas in Europe, Australasia and North America expect DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema really wants an old-style MPEG2 DCP.")); + } +} + + +void Hints::check_big_font_files () { bool big_font_files = false; @@ -350,7 +370,7 @@ Hints::check_loudness () static bool -subtitle_mxf_too_big (shared_ptr<dcp::SubtitleAsset> asset) +subtitle_mxf_too_big(shared_ptr<dcp::TextAsset> asset) { return asset && asset->file() && dcp::filesystem::file_size(*asset->file()) >= (MAX_TEXT_MXF_SIZE - SIZE_SLACK); } @@ -450,12 +470,13 @@ try check_certificates (); check_interop (); + check_video_encoding(); check_big_font_files (); check_few_audio_channels (); check_upmixers (); check_incorrect_container (); check_unusual_container (); - check_high_j2k_bandwidth (); + check_high_video_bit_rate(); check_frame_rate (); check_4k_3d (); check_speed_up (); @@ -482,7 +503,7 @@ try auto dcp_dir = film->dir("hints") / dcpomatic::get_process_id(); dcp::filesystem::remove_all(dcp_dir); - _writer->finish (film->dir("hints") / dcpomatic::get_process_id()); + _writer->finish(); dcp::DCP dcp (dcp_dir); dcp.read (); @@ -717,16 +738,20 @@ Hints::check_certificates () switch (*bad) { case Config::BAD_SIGNER_UTF8_STRINGS: - hint(_("The certificate chain that DCP-o-matic uses for signing DCPs and KDMs contains a small error " - "which will prevent DCPs from being validated correctly on some systems. It is advisable to " - "re-create the signing certificate chain by clicking the \"Re-make certificates and key...\" " - "button in the Keys page of Preferences.")); + hint(variant::insert_dcpomatic( + _("The certificate chain that %1 uses for signing DCPs and KDMs contains a small error " + "which will prevent DCPs from being validated correctly on some systems. It is advisable to " + "re-create the signing certificate chain by clicking the \"Re-make certificates and key...\" " + "button in the Keys page of Preferences.") + )); break; case Config::BAD_SIGNER_VALIDITY_TOO_LONG: - hint(_("The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a validity period " - "that is too long. This will cause problems playing back DCPs on some systems. " - "It is advisable to re-create the signing certificate chain by clicking the " - "\"Re-make certificates and key...\" button in the Keys page of Preferences.")); + hint(variant::insert_dcpomatic( + _("The certificate chain that %1 uses for signing DCPs and KDMs has a validity period " + "that is too long. This will cause problems playing back DCPs on some systems. " + "It is advisable to re-create the signing certificate chain by clicking the " + "\"Re-make certificates and key...\" button in the Keys page of Preferences.") + )); break; default: /* Some bad situations can't happen here as DCP-o-matic would have refused to start until they are fixed */ @@ -739,7 +764,7 @@ void Hints::check_8_or_16_audio_channels() { auto const channels = film()->audio_channels(); - if (channels != 8 && channels != 16) { + if (film()->video_encoding() != VideoEncoding::MPEG2 && channels != 8 && channels != 16) { hint(String::compose(_("Your DCP has %1 audio channels, rather than 8 or 16. This may cause some distributors to raise QC errors when they check your DCP. To avoid this, set the DCP audio channels to 8 or 16."), channels)); } } diff --git a/src/lib/hints.h b/src/lib/hints.h index 0d65edc21..9e94f210f 100644 --- a/src/lib/hints.h +++ b/src/lib/hints.h @@ -20,15 +20,16 @@ #include "audio_analyser.h" -#include "signaller.h" -#include "player_text.h" #include "dcp_text_track.h" #include "dcpomatic_time.h" +#include "player_text.h" +#include "signaller.h" +#include "text_type.h" #include "weak_film.h" -#include <boost/signals2.hpp> #include <boost/atomic.hpp> -#include <vector> +#include <boost/signals2.hpp> #include <string> +#include <vector> class Film; @@ -68,12 +69,13 @@ private: void check_certificates (); void check_interop (); + void check_video_encoding(); void check_big_font_files (); void check_few_audio_channels (); void check_upmixers (); void check_incorrect_container (); void check_unusual_container (); - void check_high_j2k_bandwidth (); + void check_high_video_bit_rate(); void check_frame_rate (); void check_4k_3d (); void check_speed_up (); diff --git a/src/lib/http_server.cc b/src/lib/http_server.cc new file mode 100644 index 000000000..0ee62756a --- /dev/null +++ b/src/lib/http_server.cc @@ -0,0 +1,255 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "cross.h" +#include "dcpomatic_log.h" +#include "dcpomatic_socket.h" +#include "http_server.h" +#include "util.h" +#include "variant.h" +#include <boost/algorithm/string.hpp> +#include <stdexcept> + + +using std::make_pair; +using std::runtime_error; +using std::shared_ptr; +using std::string; +using std::vector; + + +Response Response::ERROR_404 = { 404, "<html><head><title>Error 404</title></head><body><h1>Error 404</h1></body></html>"}; + + +HTTPServer::HTTPServer(int port, int timeout) + : Server(port, timeout) +{ + +} + + + +Response::Response(int code) + : _code(code) +{ + +} + + +Response::Response(int code, string payload) + : _code(code) + , _payload(payload) +{ + +} + + +void +Response::add_header(string key, string value) +{ + _headers.push_back(make_pair(key, value)); +} + + +void +Response::send(shared_ptr<Socket> socket) +{ + socket->write(String::compose("HTTP/1.1 %1 OK\r\n", _code)); + switch (_type) { + case Type::HTML: + socket->write("Content-Type: text/html; charset=utf-8\r\n"); + break; + case Type::JSON: + socket->write("Content-Type: text/json; charset=utf-8\r\n"); + break; + } + socket->write(String::compose("Content-Length: %1\r\n", _payload.length())); + for (auto const& header: _headers) { + socket->write(String::compose("%1: %2\r\n", header.first, header.second)); + } + socket->write("\r\n"); + socket->write(_payload); +} + + +Response +HTTPServer::get(string const& url) +{ + if (url == "/") { + return Response(200, String::compose(dcp::file_to_string(resources_path() / "web" / "index.html"), variant::dcpomatic_player())); + } else if (url == "/api/v1/status") { + auto json = string{"{ "}; + { + boost::mutex::scoped_lock lm(_mutex); + json += String::compose("\"playing\": %1, ", _playing ? "true" : "false"); + json += String::compose("\"position\": \"%1\", ", seconds_to_hms(_position.seconds())); + json += String::compose("\"dcp_name\": \"%1\"", _dcp_name); + } + json += " }"; + auto response = Response(200, json); + response.set_type(Response::Type::JSON); + return response; + } else { + LOG_HTTP("404 %1", url); + return Response::ERROR_404; + } +} + + +Response +HTTPServer::post(string const& url) +{ + if (url == "/api/v1/play") { + emit(boost::bind(boost::ref(Play))); + auto response = Response(303); + response.add_header("Location", "/"); + return response; + } else if (url == "/api/v1/stop") { + emit(boost::bind(boost::ref(Stop))); + auto response = Response(303); + response.add_header("Location", "/"); + return response; + } else { + return Response::ERROR_404; + } +} + + +Response +HTTPServer::request(vector<string> const& request) +{ + vector<string> parts; + boost::split(parts, request[0], boost::is_any_of(" ")); + if (parts.size() != 3) { + return Response::ERROR_404; + } + + try { + if (parts[0] == "GET") { + LOG_HTTP("GET %1", parts[1]); + return get(parts[1]); + } else if (parts[0] == "POST") { + LOG_HTTP("POST %1", parts[1]); + return post(parts[1]); + } + } catch (std::exception& e) { + LOG_ERROR("Error while handling HTTP request: %1", e.what()); + } catch (...) { + LOG_ERROR_NC("Unknown exception while handling HTTP request"); + } + + LOG_HTTP("404 %1", parts[0]); + return Response::ERROR_404; +} + + +void +HTTPServer::handle(shared_ptr<Socket> socket) +{ + class Reader + { + public: + void read_block(boost::system::error_code const& ec, uint8_t* data, std::size_t size) + { + if (ec.value() != boost::system::errc::success) { + _close = true; + _error_code = ec; + return; + } + + for (std::size_t i = 0; i < size; ++i) { + if (_line.length() >= 1024) { + _close = true; + return; + } + _line += data[i]; + if (_line.length() >= 2 && _line.substr(_line.length() - 2) == "\r\n") { + if (_line.length() == 2) { + _got_request = true; + return; + } else if (_request.size() > 64) { + _close = true; + return; + } else if (_line.size() >= 2) { + _line = _line.substr(0, _line.length() - 2); + } + LOG_HTTP("Receive: %1", _line); + _request.push_back(_line); + _line = ""; + } + } + } + + + bool got_request() const { + return _got_request; + } + + bool close() const { + return _close; + } + + boost::system::error_code error_code() const { + return _error_code; + } + + vector<std::string> const& get() const { + return _request; + } + + private: + std::string _line; + vector<std::string> _request; + bool _got_request = false; + bool _close = false; + boost::system::error_code _error_code; + }; + + while (true) { + + Reader reader; + + vector<uint8_t> buffer(2048); + socket->socket().async_read_some( + boost::asio::buffer(buffer.data(), buffer.size()), + [&reader, &buffer, socket](boost::system::error_code const& ec, std::size_t bytes_transferred) { + socket->set_deadline_from_now(1); + reader.read_block(ec, buffer.data(), bytes_transferred); + }); + + while (!reader.got_request() && !reader.close() && socket->is_open()) { + socket->run(); + } + + if (reader.got_request() && !reader.close()) { + try { + auto response = request(reader.get()); + response.send(socket); + } catch (runtime_error& e) { + LOG_ERROR_NC(e.what()); + } + } + + if (reader.close()) { + break; + } + } +} diff --git a/src/lib/http_server.h b/src/lib/http_server.h new file mode 100644 index 000000000..f0ee50ef5 --- /dev/null +++ b/src/lib/http_server.h @@ -0,0 +1,91 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcpomatic_time.h" +#include "server.h" +#include "signaller.h" +#include <boost/signals2.hpp> + + +class Response +{ +public: + Response(int code); + Response(int code, std::string payload); + + enum class Type { + HTML, + JSON + }; + + void add_header(std::string key, std::string value); + void set_type(Type type) { + _type = type; + } + + void send(std::shared_ptr<Socket> socket); + + static Response ERROR_404; + +private: + int _code; + + Type _type = Type::HTML; + std::string _payload; + std::vector<std::pair<std::string, std::string>> _headers; +}; + + +class HTTPServer : public Server, public Signaller +{ +public: + explicit HTTPServer(int port, int timeout = 30); + + boost::signals2::signal<void ()> Play; + boost::signals2::signal<void ()> Stop; + + void set_playing(bool playing) { + boost::mutex::scoped_lock lm(_mutex); + _playing = playing; + } + + void set_position(dcpomatic::DCPTime position) { + boost::mutex::scoped_lock lm(_mutex); + _position = position; + } + + void set_dcp_name(std::string name) { + boost::mutex::scoped_lock lm(_mutex); + _dcp_name = name; + } + +private: + void handle(std::shared_ptr<Socket> socket) override; + Response request(std::vector<std::string> const& request); + Response get(std::string const& url); + Response post(std::string const& url); + + boost::mutex _mutex; + bool _playing = false; + dcpomatic::DCPTime _position; + std::string _dcp_name; +}; + diff --git a/src/lib/id.cc b/src/lib/id.cc new file mode 100644 index 000000000..2891fb4ab --- /dev/null +++ b/src/lib/id.cc @@ -0,0 +1,30 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "id.h" + + +bool +operator==(ID const& a, ID const& b) +{ + return a.get() == b.get(); +} + diff --git a/src/lib/id.h b/src/lib/id.h new file mode 100644 index 000000000..ca4721039 --- /dev/null +++ b/src/lib/id.h @@ -0,0 +1,48 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_ID_H +#define DCPOMATIC_ID_H + + +#include <sqlite3.h> + + +class ID +{ +public: + sqlite3_int64 get() const { + return _id; + } + +protected: + ID(sqlite3_int64 id) + : _id(id) {} + +private: + sqlite3_int64 _id; +}; + + +bool operator==(ID const& a, ID const& b); + + +#endif diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc index 1a92c944e..e7ba88194 100644 --- a/src/lib/image_content.cc +++ b/src/lib/image_content.cc @@ -43,6 +43,7 @@ using std::make_shared; using std::shared_ptr; using std::string; using std::vector; +using boost::optional; using namespace dcpomatic; @@ -60,8 +61,8 @@ ImageContent::ImageContent (boost::filesystem::path p) } -ImageContent::ImageContent (cxml::ConstNodePtr node, int version) - : Content (node) +ImageContent::ImageContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version) + : Content(node, film_directory) { video = VideoContent::from_xml (this, node, version, VideoRange::FULL); } @@ -99,13 +100,13 @@ ImageContent::technical_summary () const void -ImageContent::as_xml (xmlpp::Node* node, bool with_paths) const +ImageContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { - node->add_child("Type")->add_child_text ("Image"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "Image"); + Content::as_xml(element, with_paths, path_behaviour, film_directory); if (video) { - video->as_xml (node); + video->as_xml(element); } } diff --git a/src/lib/image_content.h b/src/lib/image_content.h index d817eeee8..73ae696ad 100644 --- a/src/lib/image_content.h +++ b/src/lib/image_content.h @@ -27,7 +27,7 @@ class ImageContent : public Content { public: ImageContent (boost::filesystem::path); - ImageContent (cxml::ConstNodePtr, int); + ImageContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int); std::shared_ptr<ImageContent> shared_from_this () { return std::dynamic_pointer_cast<ImageContent> (Content::shared_from_this ()); @@ -40,7 +40,14 @@ public: void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + + void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const override; + dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override; dcpomatic::DCPTime approximate_length () const override; diff --git a/src/lib/image_decoder.cc b/src/lib/image_decoder.cc index ce5c8757f..527a98c7d 100644 --- a/src/lib/image_decoder.cc +++ b/src/lib/image_decoder.cc @@ -81,7 +81,7 @@ ImageDecoder::pass () } } - video->emit (film(), _image, _frame_video_position); + video->emit(film(), _image, dcpomatic::ContentTime::from_frames(_frame_video_position, _image_content->video_frame_rate().get_value_or(24))); ++_frame_video_position; return false; } diff --git a/src/lib/image_proxy.h b/src/lib/image_proxy.h index a37be580f..cec13b773 100644 --- a/src/lib/image_proxy.h +++ b/src/lib/image_proxy.h @@ -41,7 +41,7 @@ class Image; class Socket; namespace xmlpp { - class Node; + class Element; } namespace cxml { @@ -101,7 +101,7 @@ public: boost::optional<dcp::Size> size = boost::optional<dcp::Size> () ) const = 0; - virtual void add_metadata (xmlpp::Node *) const = 0; + virtual void add_metadata(xmlpp::Element *) const = 0; virtual void write_to_socket (std::shared_ptr<Socket>) const = 0; /** @return true if our image is definitely the same as another, false if it is probably not */ virtual bool same (std::shared_ptr<const ImageProxy>) const = 0; diff --git a/src/lib/internal_player_server.cc b/src/lib/internal_player_server.cc new file mode 100644 index 000000000..676cfa412 --- /dev/null +++ b/src/lib/internal_player_server.cc @@ -0,0 +1,48 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcpomatic_socket.h" +#include "internal_player_server.h" + + +using std::shared_ptr; +using std::string; +using std::vector; + + +void +InternalPlayerServer::handle(shared_ptr<Socket> socket) +{ + try { + uint32_t const length = socket->read_uint32(); + if (length > 65536) { + return; + } + vector<uint8_t> buffer(length); + socket->read(buffer.data(), buffer.size()); + string s(reinterpret_cast<char*>(buffer.data())); + emit(boost::bind(boost::ref(LoadDCP), s)); + socket->write(reinterpret_cast<uint8_t const *>("OK"), 3); + } catch (...) { + + } +} + diff --git a/src/lib/internal_player_server.h b/src/lib/internal_player_server.h new file mode 100644 index 000000000..0648c9657 --- /dev/null +++ b/src/lib/internal_player_server.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "config.h" +#include "server.h" +#include "signaller.h" +#include "types.h" +#include <boost/filesystem.hpp> +#include <boost/signals2.hpp> + + +/** A server which is always started, that listens for requests from the main + * DCP-o-matic to play a DCP. + */ + +class InternalPlayerServer : public Server, public Signaller +{ +public: + InternalPlayerServer() + : Server(PLAYER_PLAY_PORT) + {} + + boost::signals2::signal<void (boost::filesystem::path)> LoadDCP; + +private: + void handle(std::shared_ptr<Socket> socket) override; +}; + diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc index 32d2fefc2..0b50bcd5a 100644 --- a/src/lib/j2k_encoder.cc +++ b/src/lib/j2k_encoder.cc @@ -32,6 +32,12 @@ #include "encode_server_description.h" #include "encode_server_finder.h" #include "film.h" +#include "cpu_j2k_encoder_thread.h" +#ifdef DCPOMATIC_GROK +#include "grok/context.h" +#include "grok_j2k_encoder_thread.h" +#endif +#include "remote_j2k_encoder_thread.h" #include "j2k_encoder.h" #include "log.h" #include "player_video.h" @@ -44,6 +50,7 @@ using std::cout; +using std::dynamic_pointer_cast; using std::exception; using std::list; using std::make_shared; @@ -53,15 +60,47 @@ using boost::optional; using dcp::Data; using namespace dcpomatic; +#ifdef DCPOMATIC_GROK + +namespace grk_plugin { + +IMessengerLogger* sLogger = nullptr; + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#endif +void setMessengerLogger(grk_plugin::IMessengerLogger* logger) +{ + delete sLogger; + sLogger = logger; +} +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif +grk_plugin::IMessengerLogger* getMessengerLogger(void) +{ + return sLogger; +} + +} + +#endif + /** @param film Film that we are encoding. * @param writer Writer that we are using. */ J2KEncoder::J2KEncoder(shared_ptr<const Film> film, Writer& writer) - : _film (film) - , _history (200) - , _writer (writer) + : VideoEncoder(film, writer) { +#ifdef DCPOMATIC_GROK + auto grok = Config::instance()->grok().get_value_or({}); + _dcpomatic_context = new grk_plugin::DcpomaticContext(film, writer, _history, grok.binary_location); + if (grok.enable) { + _context = new grk_plugin::GrokContext(_dcpomatic_context); + } +#endif } @@ -79,8 +118,29 @@ J2KEncoder::~J2KEncoder () */ _writer.zombify(); - boost::mutex::scoped_lock lm (_threads_mutex); - terminate_threads (); + terminate_threads(); + +#ifdef DCPOMATIC_GROK + delete _context; + delete _dcpomatic_context; +#endif +} + + +void +J2KEncoder::servers_list_changed() +{ + auto config = Config::instance(); +#ifdef DCPOMATIC_GROK + auto const grok_enable = config->grok().get_value_or({}).enable; +#else + auto const grok_enable = false; +#endif + + auto const cpu = (grok_enable || config->only_servers_encode()) ? 0 : config->master_encoding_threads(); + auto const gpu = grok_enable ? config->master_encoding_threads() : 0; + + remake_threads(cpu, gpu, EncodeServerFinder::instance()->servers()); } @@ -95,7 +155,42 @@ J2KEncoder::begin () void -J2KEncoder::end () +J2KEncoder::pause() +{ +#ifdef DCPOMATIC_GROK + if (!Config::instance()->grok().get_value_or({}).enable) { + return; + } + return; + + /* XXX; the same problem may occur here as in the destructor, perhaps? */ + + terminate_threads (); + + /* Something might have been thrown during terminate_threads */ + rethrow (); + + delete _context; + _context = nullptr; +#endif +} + + +void J2KEncoder::resume() +{ +#ifdef DCPOMATIC_GROK + if (!Config::instance()->grok().get_value_or({}).enable) { + return; + } + + _context = new grk_plugin::GrokContext(_dcpomatic_context); + servers_list_changed(); +#endif +} + + +void +J2KEncoder::end() { boost::mutex::scoped_lock lock (_queue_mutex); @@ -104,18 +199,13 @@ J2KEncoder::end () /* Keep waking workers until the queue is empty */ while (!_queue.empty ()) { rethrow (); - _empty_condition.notify_all (); _full_condition.wait (lock); } - lock.unlock (); LOG_GENERAL_NC (N_("Terminating encoder threads")); - { - boost::mutex::scoped_lock lm (_threads_mutex); - terminate_threads (); - } + terminate_threads (); /* Something might have been thrown during terminate_threads */ rethrow (); @@ -130,42 +220,35 @@ J2KEncoder::end () So just mop up anything left in the queue here. */ - - for (auto const& i: _queue) { - LOG_GENERAL(N_("Encode left-over frame %1"), i.index()); - try { - _writer.write( - make_shared<dcp::ArrayData>(i.encode_locally()), - i.index(), - i.eyes() - ); - frame_done (); - } catch (std::exception& e) { - LOG_ERROR (N_("Local encode failed (%1)"), e.what ()); + for (auto & i: _queue) { +#ifdef DCPOMATIC_GROK + if (Config::instance()->grok().get_value_or({}).enable) { + if (!_context->scheduleCompress(i)){ + LOG_GENERAL (N_("[%1] J2KEncoder thread pushes frame %2 back onto queue after failure"), thread_id(), i.index()); + // handle error + } + } else { +#else + { +#endif + LOG_GENERAL(N_("Encode left-over frame %1"), i.index()); + try { + _writer.write( + make_shared<dcp::ArrayData>(i.encode_locally()), + i.index(), + i.eyes() + ); + frame_done (); + } catch (std::exception& e) { + LOG_ERROR (N_("Local encode failed (%1)"), e.what ()); + } } } -} - -/** @return an estimate of the current number of frames we are encoding per second, - * if known. - */ -optional<float> -J2KEncoder::current_encoding_rate () const -{ - return _history.rate (); -} - - -/** @return Number of video frames that have been queued for encoding */ -int -J2KEncoder::video_frames_enqueued () const -{ - if (!_last_player_video_time) { - return 0; - } - - return _last_player_video_time->frames_floor (_film->video_frame_rate ()); +#ifdef DCPOMATIC_GROK + delete _context; + _context = nullptr; +#endif } @@ -188,12 +271,14 @@ J2KEncoder::frame_done () void J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time) { + VideoEncoder::encode(pv, time); + _waker.nudge (); size_t threads = 0; { boost::mutex::scoped_lock lm (_threads_mutex); - threads = _threads->size(); + threads = _threads.size(); } boost::mutex::scoped_lock queue_lock (_queue_mutex); @@ -233,13 +318,14 @@ J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time) LOG_DEBUG_ENCODE("Frame @ %1 ENCODE", to_string(time)); /* Queue this new frame for encoding */ LOG_TIMING ("add-frame-to-queue queue=%1", _queue.size ()); - _queue.push_back (DCPVideo( + auto dcpv = DCPVideo( pv, position, _film->video_frame_rate(), - _film->j2k_bandwidth(), + _film->video_bit_rate(VideoEncoding::JPEG2000), _film->resolution() - )); + ); + _queue.push_back (dcpv); /* The queue might not be empty any more, so notify anything which is waiting on that. @@ -248,174 +334,144 @@ J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time) } _last_player_video[pv->eyes()] = pv; - _last_player_video_time = time; } -/** Caller must hold a lock on _threads_mutex */ void J2KEncoder::terminate_threads () { + boost::mutex::scoped_lock lm(_threads_mutex); boost::this_thread::disable_interruption dis; - if (!_threads) { - return; - } - - _threads->interrupt_all (); - try { - _threads->join_all (); - } catch (exception& e) { - LOG_ERROR ("join() threw an exception: %1", e.what()); - } catch (...) { - LOG_ERROR_NC ("join() threw an exception"); + for (auto& thread: _threads) { + thread->stop(); } - _threads.reset (); + _threads.clear(); + _ending = true; } void -J2KEncoder::encoder_thread (optional<EncodeServerDescription> server) -try +J2KEncoder::remake_threads(int cpu, int gpu, list<EncodeServerDescription> servers) { - start_of_thread ("J2KEncoder"); + LOG_GENERAL("Making threads: CPU=%1, GPU=%2, Remote=%3", cpu, gpu, servers.size()); - if (server) { - LOG_TIMING ("start-encoder-thread thread=%1 server=%2", thread_id (), server->host_name ()); - } else { - LOG_TIMING ("start-encoder-thread thread=%1 server=localhost", thread_id ()); + boost::mutex::scoped_lock lm (_threads_mutex); + if (_ending) { + return; } - /* Number of seconds that we currently wait between attempts - to connect to the server; not relevant for localhost - encodings. - */ - int remote_backoff = 0; + auto remove_threads = [this](int wanted, int current, std::function<bool (shared_ptr<J2KEncoderThread>)> predicate) { + for (auto i = wanted; i < current; ++i) { + auto iter = std::find_if(_threads.begin(), _threads.end(), predicate); + if (iter != _threads.end()) { + (*iter)->stop(); + _threads.erase(iter); + } + } + }; + + + /* CPU */ + + auto const is_cpu_thread = [](shared_ptr<J2KEncoderThread> thread) { + return static_cast<bool>(dynamic_pointer_cast<CPUJ2KEncoderThread>(thread)); + }; + + auto const current_cpu_threads = std::count_if(_threads.begin(), _threads.end(), is_cpu_thread); + + for (auto i = current_cpu_threads; i < cpu; ++i) { + auto thread = make_shared<CPUJ2KEncoderThread>(*this); + thread->start(); + _threads.push_back(thread); + } + + remove_threads(cpu, current_cpu_threads, is_cpu_thread); + +#ifdef DCPOMATIC_GROK + /* GPU */ + + auto const is_grok_thread = [](shared_ptr<J2KEncoderThread> thread) { + return static_cast<bool>(dynamic_pointer_cast<GrokJ2KEncoderThread>(thread)); + }; + + auto const current_gpu_threads = std::count_if(_threads.begin(), _threads.end(), is_grok_thread); + + for (auto i = current_gpu_threads; i < gpu; ++i) { + auto thread = make_shared<GrokJ2KEncoderThread>(*this, _context); + thread->start(); + _threads.push_back(thread); + } + + remove_threads(gpu, current_gpu_threads, is_grok_thread); +#endif - while (true) { + /* Remote */ - LOG_TIMING ("encoder-sleep thread=%1", thread_id ()); - boost::mutex::scoped_lock lock (_queue_mutex); - while (_queue.empty ()) { - _empty_condition.wait (lock); + for (auto const& server: servers) { + if (!server.current_link_version()) { + continue; } - LOG_TIMING ("encoder-wake thread=%1 queue=%2", thread_id(), _queue.size()); - auto vf = _queue.front (); + auto is_remote_thread = [server](shared_ptr<J2KEncoderThread> thread) { + auto remote = dynamic_pointer_cast<RemoteJ2KEncoderThread>(thread); + return remote && remote->server().host_name() == server.host_name(); + }; - /* We're about to commit to either encoding this frame or putting it back onto the queue, - so we must not be interrupted until one or other of these things have happened. This - block has thread interruption disabled. - */ - { - boost::this_thread::disable_interruption dis; - - LOG_TIMING ("encoder-pop thread=%1 frame=%2 eyes=%3", thread_id(), vf.index(), static_cast<int>(vf.eyes())); - _queue.pop_front (); - - lock.unlock (); - - shared_ptr<Data> encoded; - - /* We need to encode this input */ - if (server) { - try { - encoded = make_shared<dcp::ArrayData>(vf.encode_remotely(server.get())); - - if (remote_backoff > 0) { - LOG_GENERAL ("%1 was lost, but now she is found; removing backoff", server->host_name ()); - } - - /* This job succeeded, so remove any backoff */ - remote_backoff = 0; - - } catch (std::exception& e) { - if (remote_backoff < 60) { - /* back off more */ - remote_backoff += 10; - } - LOG_ERROR ( - N_("Remote encode of %1 on %2 failed (%3); thread sleeping for %4s"), - vf.index(), server->host_name(), e.what(), remote_backoff - ); - } - - } else { - try { - LOG_TIMING ("start-local-encode thread=%1 frame=%2", thread_id(), vf.index()); - encoded = make_shared<dcp::ArrayData>(vf.encode_locally()); - LOG_TIMING ("finish-local-encode thread=%1 frame=%2", thread_id(), vf.index()); - } catch (std::exception& e) { - /* This is very bad, so don't cope with it, just pass it on */ - LOG_ERROR (N_("Local encode failed (%1)"), e.what ()); - throw; - } - } + auto const current_threads = std::count_if(_threads.begin(), _threads.end(), is_remote_thread); - if (encoded) { - _writer.write(encoded, vf.index(), vf.eyes()); - frame_done (); - } else { - lock.lock (); - LOG_GENERAL (N_("[%1] J2KEncoder thread pushes frame %2 back onto queue after failure"), thread_id(), vf.index()); - _queue.push_front (vf); - lock.unlock (); - } + auto const wanted_threads = server.threads(); + + if (wanted_threads > current_threads) { + LOG_GENERAL(N_("Adding %1 worker threads for remote %2"), wanted_threads - current_threads, server.host_name()); + } else if (wanted_threads < current_threads) { + LOG_GENERAL(N_("Removing %1 worker threads for remote %2"), current_threads - wanted_threads, server.host_name()); } - if (remote_backoff > 0) { - boost::this_thread::sleep (boost::posix_time::seconds (remote_backoff)); + for (auto i = current_threads; i < wanted_threads; ++i) { + auto thread = make_shared<RemoteJ2KEncoderThread>(*this, server); + thread->start(); + _threads.push_back(thread); } - /* The queue might not be full any more, so notify anything that is waiting on that */ - lock.lock (); - _full_condition.notify_all (); + remove_threads(wanted_threads, current_threads, is_remote_thread); } -} -catch (boost::thread_interrupted& e) { - /* Ignore these and just stop the thread */ - _full_condition.notify_all (); -} -catch (...) -{ - store_current (); - /* Wake anything waiting on _full_condition so it can see the exception */ - _full_condition.notify_all (); + + _writer.set_encoder_threads(_threads.size()); } -void -J2KEncoder::servers_list_changed () +DCPVideo +J2KEncoder::pop() { - boost::mutex::scoped_lock lm (_threads_mutex); + boost::mutex::scoped_lock lock(_queue_mutex); + while (_queue.empty()) { + _empty_condition.wait (lock); + } - terminate_threads (); - _threads = make_shared<boost::thread_group>(); + LOG_TIMING("encoder-wake thread=%1 queue=%2", thread_id(), _queue.size()); - /* XXX: could re-use threads */ + auto vf = _queue.front(); + _queue.pop_front(); - if (!Config::instance()->only_servers_encode ()) { - for (int i = 0; i < Config::instance()->master_encoding_threads (); ++i) { -#ifdef DCPOMATIC_LINUX - auto t = _threads->create_thread(boost::bind(&J2KEncoder::encoder_thread, this, optional<EncodeServerDescription>())); - pthread_setname_np (t->native_handle(), "encode-worker"); -#else - _threads->create_thread(boost::bind(&J2KEncoder::encoder_thread, this, optional<EncodeServerDescription>())); -#endif - } - } + _full_condition.notify_all(); + return vf; +} - for (auto i: EncodeServerFinder::instance()->servers()) { - if (!i.current_link_version()) { - continue; - } - LOG_GENERAL (N_("Adding %1 worker threads for remote %2"), i.threads(), i.host_name ()); - for (int j = 0; j < i.threads(); ++j) { - _threads->create_thread(boost::bind(&J2KEncoder::encoder_thread, this, i)); - } - } +void +J2KEncoder::retry(DCPVideo video) +{ + boost::mutex::scoped_lock lock(_queue_mutex); + _queue.push_front(video); + _empty_condition.notify_all(); +} + - _writer.set_encoder_threads(_threads->size()); +void +J2KEncoder::write(shared_ptr<const dcp::Data> data, int index, Eyes eyes) +{ + _writer.write(data, index, eyes); + frame_done(); } diff --git a/src/lib/j2k_encoder.h b/src/lib/j2k_encoder.h index 63228a6b8..c72a1debe 100644 --- a/src/lib/j2k_encoder.h +++ b/src/lib/j2k_encoder.h @@ -32,7 +32,9 @@ #include "enum_indexed_vector.h" #include "event_history.h" #include "exception_store.h" +#include "j2k_encoder_thread.h" #include "writer.h" +#include "video_encoder.h" #include <boost/optional.hpp> #include <boost/signals2.hpp> #include <boost/thread.hpp> @@ -48,6 +50,15 @@ class Film; class Job; class PlayerVideo; +namespace grk_plugin { + struct DcpomaticContext; + struct GrokContext; +} + +struct local_threads_created_and_destroyed; +struct remote_threads_created_and_destroyed; +struct frames_not_lost_when_threads_disappear; + /** @class J2KEncoder * @brief Class to manage encoding to J2K. @@ -55,7 +66,7 @@ class PlayerVideo; * This class keeps a queue of frames to be encoded and distributes * the work around threads and encoding servers. */ -class J2KEncoder : public ExceptionStore +class J2KEncoder : public VideoEncoder, public ExceptionStore { public: J2KEncoder(std::shared_ptr<const Film> film, Writer& writer); @@ -65,33 +76,33 @@ public: J2KEncoder& operator= (J2KEncoder const&) = delete; /** Called to indicate that a processing run is about to begin */ - void begin (); + void begin() override; /** Called to pass a bit of video to be encoded as the next DCP frame */ - void encode (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time); + void encode (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time) override; - /** Called when a processing run has finished */ - void end (); + void pause() override; + void resume() override; - boost::optional<float> current_encoding_rate () const; - int video_frames_enqueued () const; + /** Called when a processing run has finished */ + void end() override; - void servers_list_changed (); + DCPVideo pop(); + void retry(DCPVideo frame); + void write(std::shared_ptr<const dcp::Data> data, int index, Eyes eyes); private: + friend struct ::local_threads_created_and_destroyed; + friend struct ::remote_threads_created_and_destroyed; + friend struct ::frames_not_lost_when_threads_disappear; void frame_done (); - - void encoder_thread (boost::optional<EncodeServerDescription>); + void servers_list_changed (); + void remake_threads(int cpu, int gpu, std::list<EncodeServerDescription> servers); void terminate_threads (); - /** Film that we are encoding */ - std::shared_ptr<const Film> _film; - - EventHistory _history; - boost::mutex _threads_mutex; - std::shared_ptr<boost::thread_group> _threads; + std::vector<std::shared_ptr<J2KEncoderThread>> _threads; mutable boost::mutex _queue_mutex; std::list<DCPVideo> _queue; @@ -100,13 +111,18 @@ private: /** condition to manage thread wakeups when we have too much to do */ boost::condition _full_condition; - Writer& _writer; Waker _waker; EnumIndexedVector<std::shared_ptr<PlayerVideo>, Eyes> _last_player_video; - boost::optional<dcpomatic::DCPTime> _last_player_video_time; boost::signals2::scoped_connection _server_found_connection; + +#ifdef DCPOMATIC_GROK + grk_plugin::DcpomaticContext* _dcpomatic_context = nullptr; + grk_plugin::GrokContext *_context = nullptr; +#endif + + bool _ending = false; }; diff --git a/src/lib/j2k_encoder_thread.cc b/src/lib/j2k_encoder_thread.cc new file mode 100644 index 000000000..d0e8a439c --- /dev/null +++ b/src/lib/j2k_encoder_thread.cc @@ -0,0 +1,58 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcp_video.h" +#include "dcpomatic_log.h" +#include "j2k_encoder.h" +#include "j2k_encoder_thread.h" + + +J2KEncoderThread::J2KEncoderThread(J2KEncoder& encoder) + : _encoder(encoder) +{ + +} + + +void +J2KEncoderThread::start() +{ + _thread = boost::thread(boost::bind(&J2KEncoderThread::run, this)); +#ifdef DCPOMATIC_LINUX + pthread_setname_np(_thread.native_handle(), "encode-worker"); +#endif +} + + +void +J2KEncoderThread::stop() +{ + _thread.interrupt(); + try { + _thread.join(); + } catch (std::exception& e) { + LOG_ERROR("join() threw an exception: %1", e.what()); + } catch (...) { + LOG_ERROR_NC("join() threw an exception"); + } +} + + diff --git a/src/lib/j2k_encoder_thread.h b/src/lib/j2k_encoder_thread.h new file mode 100644 index 000000000..b03b6f356 --- /dev/null +++ b/src/lib/j2k_encoder_thread.h @@ -0,0 +1,53 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_J2K_ENCODER_THREAD +#define DCPOMATIC_J2K_ENCODER_THREAD + + +#include <boost/thread.hpp> + + +class J2KEncoder; + + +class J2KEncoderThread +{ +public: + J2KEncoderThread(J2KEncoder& encoder); + + J2KEncoderThread(J2KEncoderThread const&) = delete; + J2KEncoderThread& operator=(J2KEncoderThread const&) = delete; + + void start(); + void stop(); + + virtual void run() = 0; + +protected: + J2KEncoder& _encoder; + +private: + boost::thread _thread; +}; + + +#endif diff --git a/src/lib/j2k_image_proxy.cc b/src/lib/j2k_image_proxy.cc index 269b01bca..023723c8b 100644 --- a/src/lib/j2k_image_proxy.cc +++ b/src/lib/j2k_image_proxy.cc @@ -25,11 +25,11 @@ #include "j2k_image_proxy.h" #include <dcp/colour_conversion.h> #include <dcp/j2k_transcode.h> -#include <dcp/mono_picture_frame.h> +#include <dcp/mono_j2k_picture_frame.h> #include <dcp/openjpeg_image.h> #include <dcp/raw_convert.h> #include <dcp/rgb_xyz.h> -#include <dcp/stereo_picture_frame.h> +#include <dcp/stereo_j2k_picture_frame.h> #include <dcp/warnings.h> #include <libcxml/cxml.h> LIBDCP_DISABLE_WARNINGS @@ -64,7 +64,7 @@ J2KImageProxy::J2KImageProxy (boost::filesystem::path path, dcp::Size size, AVPi J2KImageProxy::J2KImageProxy ( - shared_ptr<const dcp::MonoPictureFrame> frame, + shared_ptr<const dcp::MonoJ2KPictureFrame> frame, dcp::Size size, AVPixelFormat pixel_format, optional<int> forced_reduction @@ -81,7 +81,7 @@ J2KImageProxy::J2KImageProxy ( J2KImageProxy::J2KImageProxy ( - shared_ptr<const dcp::StereoPictureFrame> frame, + shared_ptr<const dcp::StereoJ2KPictureFrame> frame, dcp::Size size, dcp::Eye eye, AVPixelFormat pixel_format, @@ -192,15 +192,15 @@ J2KImageProxy::image (Image::Alignment alignment, optional<dcp::Size> target_siz void -J2KImageProxy::add_metadata (xmlpp::Node* node) const +J2KImageProxy::add_metadata(xmlpp::Element* element) const { - node->add_child("Type")->add_child_text(N_("J2K")); - node->add_child("Width")->add_child_text(raw_convert<string>(_size.width)); - node->add_child("Height")->add_child_text(raw_convert<string>(_size.height)); + cxml::add_text_child(element, "Type", N_("J2K")); + cxml::add_text_child(element, "Width", raw_convert<string>(_size.width)); + cxml::add_text_child(element, "Height", raw_convert<string>(_size.height)); if (_eye) { - node->add_child("Eye")->add_child_text(raw_convert<string>(static_cast<int>(_eye.get()))); + cxml::add_text_child(element, "Eye", raw_convert<string>(static_cast<int>(_eye.get()))); } - node->add_child("Size")->add_child_text(raw_convert<string>(_data->size())); + cxml::add_text_child(element, "Size", raw_convert<string>(_data->size())); } diff --git a/src/lib/j2k_image_proxy.h b/src/lib/j2k_image_proxy.h index 9666ea406..1d2d5cc21 100644 --- a/src/lib/j2k_image_proxy.h +++ b/src/lib/j2k_image_proxy.h @@ -26,8 +26,8 @@ namespace dcp { - class MonoPictureFrame; - class StereoPictureFrame; + class MonoJ2KPictureFrame; + class StereoJ2KPictureFrame; } @@ -37,14 +37,14 @@ public: J2KImageProxy (boost::filesystem::path path, dcp::Size, AVPixelFormat pixel_format); J2KImageProxy ( - std::shared_ptr<const dcp::MonoPictureFrame> frame, + std::shared_ptr<const dcp::MonoJ2KPictureFrame> frame, dcp::Size, AVPixelFormat pixel_format, boost::optional<int> forced_reduction ); J2KImageProxy ( - std::shared_ptr<const dcp::StereoPictureFrame> frame, + std::shared_ptr<const dcp::StereoJ2KPictureFrame> frame, dcp::Size, dcp::Eye, AVPixelFormat pixel_format, @@ -61,7 +61,7 @@ public: boost::optional<dcp::Size> size = boost::optional<dcp::Size> () ) const override; - void add_metadata (xmlpp::Node *) const override; + void add_metadata(xmlpp::Element*) const override; void write_to_socket (std::shared_ptr<Socket> override) const override; /** @return true if our image is definitely the same as another, false if it is probably not */ bool same (std::shared_ptr<const ImageProxy>) const override; diff --git a/src/lib/j2k_sync_encoder_thread.cc b/src/lib/j2k_sync_encoder_thread.cc new file mode 100644 index 000000000..ef6834f60 --- /dev/null +++ b/src/lib/j2k_sync_encoder_thread.cc @@ -0,0 +1,65 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcp_video.h" +#include "dcpomatic_log.h" +#include "j2k_encoder.h" +#include "j2k_sync_encoder_thread.h" +#include <dcp/scope_guard.h> + + +J2KSyncEncoderThread::J2KSyncEncoderThread(J2KEncoder& encoder) + : J2KEncoderThread(encoder) +{ + +} + + +void +J2KSyncEncoderThread::run() +try +{ + log_thread_start(); + + while (true) { + LOG_TIMING("encoder-sleep thread=%1", thread_id()); + auto frame = _encoder.pop(); + + dcp::ScopeGuard frame_guard([this, &frame]() { + boost::this_thread::disable_interruption dis; + _encoder.retry(frame); + }); + + LOG_TIMING("encoder-pop thread=%1 frame=%2 eyes=%3", thread_id(), frame.index(), static_cast<int>(frame.eyes())); + + auto encoded = encode(frame); + + if (encoded) { + boost::this_thread::disable_interruption dis; + frame_guard.cancel(); + _encoder.write(encoded, frame.index(), frame.eyes()); + } + } +} catch (boost::thread_interrupted& e) { +} catch (...) { + store_current(); +} + diff --git a/src/lib/j2k_sync_encoder_thread.h b/src/lib/j2k_sync_encoder_thread.h new file mode 100644 index 000000000..45222279e --- /dev/null +++ b/src/lib/j2k_sync_encoder_thread.h @@ -0,0 +1,32 @@ +#ifndef DCPOMATIC_J2K_SYNC_ENCODER_THREAD_H +#define DCPOMATIC_J2K_SYNC_ENCODER_THREAD_H + + +#include "exception_store.h" +#include "j2k_encoder_thread.h" +#include <dcp/array_data.h> +#include <boost/thread.hpp> + + +class DCPVideo; +class J2KEncoder; + + +class J2KSyncEncoderThread : public J2KEncoderThread, public ExceptionStore +{ +public: + J2KSyncEncoderThread(J2KEncoder& encoder); + + J2KSyncEncoderThread(J2KSyncEncoderThread const&) = delete; + J2KSyncEncoderThread& operator=(J2KSyncEncoderThread const&) = delete; + + virtual ~J2KSyncEncoderThread() {} + + void run() override; + + virtual void log_thread_start() const = 0; + virtual std::shared_ptr<dcp::ArrayData> encode(DCPVideo const& frame) = 0; +}; + + +#endif diff --git a/src/lib/job.cc b/src/lib/job.cc index 9c9530b7a..ee6ad4e70 100644 --- a/src/lib/job.cc +++ b/src/lib/job.cc @@ -33,6 +33,7 @@ #include "job.h" #include "log.h" #include "util.h" +#include "variant.h" #include <dcp/exceptions.h> #include <sub/exceptions.h> #include <boost/date_time/posix_time/posix_time.hpp> @@ -137,9 +138,13 @@ Job::run_wrapper () /* 32-bit */ set_error ( _("Failed to encode the DCP."), - _("This error has probably occurred because you are running the 32-bit version of DCP-o-matic and " - "trying to use too many encoding threads. Please reduce the 'number of threads DCP-o-matic should " - "use' in the General tab of Preferences and try again.") + String::compose( + _("This error has probably occurred because you are running the 32-bit version of %1 and " + "trying to use too many encoding threads. Please reduce the 'number of threads %2 should " + "use' in the General tab of Preferences and try again."), + variant::dcpomatic(), + variant::dcpomatic() + ) ); done = true; #else @@ -147,7 +152,12 @@ Job::run_wrapper () if (running_32_on_64()) { set_error ( _("Failed to encode the DCP."), - _("This error has probably occurred because you are running the 32-bit version of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and try again.") + String::compose( + _("This error has probably occurred because you are running the 32-bit version of %1. " + "Please re-install %2 with the 64-bit installer and try again."), + variant::dcpomatic(), + variant::dcpomatic() + ) ); done = true; } @@ -157,7 +167,7 @@ Job::run_wrapper () if (!done) { set_error ( e.what (), - string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM + String::compose(_("It is not known what caused this error. %1"), report_problem()) ); } @@ -168,8 +178,8 @@ Job::run_wrapper () set_error ( String::compose (_("Could not open %1"), e.file().string()), - String::compose ( - _("DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or is in an unexpected format."), + String::compose(_("%1 could not open the file %2 (%3). Perhaps it does not exist or is in an unexpected format."), + variant::dcpomatic(), dcp::filesystem::absolute(e.file()).string(), e.what() ) @@ -183,8 +193,8 @@ Job::run_wrapper () if (e.code() == boost::system::errc::no_such_file_or_directory) { set_error ( String::compose (_("Could not open %1"), e.path1().string ()), - String::compose ( - _("DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or is in an unexpected format."), + String::compose(_("%1 could not open the file %2 (%3). Perhaps it does not exist or is in an unexpected format."), + variant::dcpomatic(), dcp::filesystem::absolute(e.path1()).string(), e.what() ) @@ -192,7 +202,7 @@ Job::run_wrapper () } else { set_error ( e.what (), - string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM + String::compose(_("It is not known what caused this error. %1"), report_problem()) ); } @@ -252,7 +262,7 @@ Job::run_wrapper () set_error ( e.what (), - string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM + String::compose(_("It is not known what caused this error. %1"), report_problem()) ); set_progress (1); @@ -262,7 +272,7 @@ Job::run_wrapper () set_error ( _("Unknown error"), - string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM + String::compose(_("It is not known what caused this error. %1"), report_problem()) ); set_progress (1); @@ -662,7 +672,7 @@ void Job::cancel () { if (_thread.joinable()) { - resume(); + Job::resume(); _thread.interrupt (); _thread.join (); @@ -689,6 +699,7 @@ Job::pause_by_user () } if (paused) { + pause(); _pause_changed.notify_all (); } @@ -701,6 +712,7 @@ Job::pause_by_priority () { if (running ()) { set_state (PAUSED_BY_PRIORITY); + pause(); _pause_changed.notify_all (); } } diff --git a/src/lib/job.h b/src/lib/job.h index d4d0f9510..9b5fdfa6e 100644 --- a/src/lib/job.h +++ b/src/lib/job.h @@ -62,9 +62,10 @@ public: } void start (); + virtual void pause() {} bool pause_by_user (); void pause_by_priority (); - void resume (); + virtual void resume (); void cancel (); bool is_new () const; diff --git a/src/lib/kdm_cli.cc b/src/lib/kdm_cli.cc index bba8fb7c0..20cbf33e6 100644 --- a/src/lib/kdm_cli.cc +++ b/src/lib/kdm_cli.cc @@ -25,6 +25,7 @@ #include "cinema.h" +#include "cinema_list.h" #include "cross.h" #include "config.h" #include "dkdm_wrapper.h" @@ -33,6 +34,7 @@ #include "film.h" #include "kdm_with_metadata.h" #include "screen.h" +#include "variant.h" #include <dcp/certificate.h> #include <dcp/decrypted_kdm.h> #include <dcp/encrypted_kdm.h> @@ -44,6 +46,7 @@ using std::dynamic_pointer_cast; using std::list; using std::make_shared; +using std::pair; using std::runtime_error; using std::shared_ptr; using std::string; @@ -59,13 +62,19 @@ using namespace dcpomatic; static void help (std::function<void (string)> out) { - out (String::compose("Syntax: %1 [OPTION] <FILM|CPL-ID|DKDM>", program_name)); + out (String::compose("Syntax: %1 [OPTION] [COMMAND] <FILM|CPL-ID|DKDM>", program_name)); + out ("Commands:"); + out ("create create KDMs; default if no other command is specified"); + out (variant::insert_dcpomatic("list-cinemas list known cinemas from %1 settings")); + out (variant::insert_dcpomatic("list-dkdm-cpls list CPLs for which %1 has DKDMs")); + out (variant::insert_dcpomatic("add-dkdm add DKDM to %1's list")); + out (variant::insert_dcpomatic("dump-decryption-certificate write the %1 KDM decryption certificate to the console")); out (" -h, --help show this help"); out (" -o, --output <path> output file or directory"); out (" -K, --filename-format <format> filename format for KDMs"); out (" -Z, --container-name-format <format> filename format for ZIP containers"); - out (" -f, --valid-from <time> valid from time (in local time zone of the cinema) (e.g. \"2013-09-28 01:41:51\") or \"now\""); - out (" -t, --valid-to <time> valid to time (in local time zone of the cinema) (e.g. \"2014-09-28 01:41:51\")"); + out (" -f, --valid-from <time> valid from time (e.g. \"2013-09-28T01:41:51+04:00\", \"2018-01-01T12:00:30\") or \"now\""); + out (" -t, --valid-to <time> valid to time (e.g. \"2014-09-28T01:41:51\")"); out (" -d, --valid-duration <duration> valid duration (e.g. \"1 day\", \"4 hours\", \"2 weeks\")"); out (" -F, --formulation <formulation> modified-transitional-1, multiple-modified-transitional-1, dci-any or dci-specific [default modified-transitional-1]"); out (" -p, --disable-forensic-marking-picture disable forensic marking of pictures essences"); @@ -75,19 +84,18 @@ help (std::function<void (string)> out) out (" -v, --verbose be verbose"); out (" -c, --cinema <name|email> cinema name (when using -C) or name/email (to filter cinemas)"); out (" -S, --screen <name> screen name (when using -C) or screen name (to filter screens when using -c)"); - out (" -C, --certificate <file> file containing projector certificate"); - out (" -T, --trusted-device <file> file containing a trusted device's certificate"); + out (" -C, --projector-certificate <file> file containing projector certificate"); + out (" -T, --trusted-device-certificate <file> file containing a trusted device's certificate"); + out (" --decryption-key <file> file containing the private key which can decrypt the given DKDM"); + out (variant::insert_dcpomatic(" (%1's configured private key will be used otherwise)")); out (" --cinemas-file <file> use the given file as a list of cinemas instead of the current configuration"); - out (" --dump-decryption-certificate write the DCP-o-matic KDM decryption certificate to the console"); - out (" --list-cinemas list known cinemas from the DCP-o-matic settings"); - out (" --list-dkdm-cpls list CPLs for which DCP-o-matic has DKDMs"); out (""); - out ("CPL-ID must be the ID of a CPL that is mentioned in DCP-o-matic's DKDM list."); + out (variant::insert_dcpomatic("CPL-ID must be the ID of a CPL that is mentioned in %1's DKDM list.")); out (""); out ("For example:"); out (""); out ("Create KDMs for my_great_movie to play in all of Fred's Cinema's screens for the next two weeks and zip them up."); - out ("(Fred's Cinema must have been set up in DCP-o-matic's KDM window)"); + out (variant::insert_dcpomatic("(Fred's Cinema must have been set up in %1's KDM window)")); out (""); out (String::compose("\t%1 -c \"Fred's Cinema\" -f now -d \"2 weeks\" -z my_great_movie", program_name)); } @@ -102,17 +110,6 @@ public: }; -static boost::posix_time::ptime -time_from_string (string t) -{ - if (t == "now") { - return boost::posix_time::second_clock::local_time (); - } - - return boost::posix_time::time_from_string (t); -} - - static boost::posix_time::time_duration duration_from_string (string d) { @@ -183,39 +180,32 @@ write_files ( } -static -shared_ptr<Cinema> -find_cinema (string cinema_name) +class ScreenDetails { - auto cinemas = Config::instance()->cinemas (); - auto i = cinemas.begin(); - while ( - i != cinemas.end() && - (*i)->name != cinema_name && - find ((*i)->emails.begin(), (*i)->emails.end(), cinema_name) == (*i)->emails.end()) { - - ++i; - } - - if (i == cinemas.end ()) { - throw KDMCLIError (String::compose("could not find cinema \"%1\"", cinema_name)); - } +public: + ScreenDetails(CinemaID const& cinema_id, Cinema const& cinema, Screen const& screen) + : cinema_id(cinema_id) + , cinema(cinema) + , screen(screen) + {} - return *i; -} + CinemaID cinema_id; + Cinema cinema; + Screen screen; +}; static void from_film ( - vector<shared_ptr<Screen>> screens, + vector<ScreenDetails> const& screens, boost::filesystem::path film_dir, bool verbose, boost::filesystem::path output, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, - boost::posix_time::ptime valid_from, - boost::posix_time::ptime valid_to, + dcp::LocalTime valid_from, + dcp::LocalTime valid_to, dcp::Formulation formulation, bool disable_forensic_marking_picture, optional<int> disable_forensic_marking_audio, @@ -249,17 +239,27 @@ from_film ( try { list<KDMWithMetadataPtr> kdms; - for (auto i: screens) { + for (auto screen_details: screens) { std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm = [film, cpl](dcp::LocalTime begin, dcp::LocalTime end) { return film->make_kdm(cpl, begin, end); }; - auto p = kdm_for_screen(make_kdm, i, valid_from, valid_to, formulation, disable_forensic_marking_picture, disable_forensic_marking_audio, period_checks); + auto p = kdm_for_screen( + make_kdm, + screen_details.cinema_id, + screen_details.cinema, + screen_details.screen, + valid_from, + valid_to, + formulation, + disable_forensic_marking_picture, + disable_forensic_marking_audio, + period_checks + ); if (p) { kdms.push_back (p); } } - if (find_if( period_checks.begin(), period_checks.end(), @@ -359,14 +359,14 @@ kdm_from_dkdm ( static void from_dkdm ( - vector<shared_ptr<Screen>> screens, + vector<ScreenDetails> const& screens, dcp::DecryptedKDM dkdm, bool verbose, boost::filesystem::path output, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, - boost::posix_time::ptime valid_from, - boost::posix_time::ptime valid_to, + dcp::LocalTime valid_from, + dcp::LocalTime valid_to, dcp::Formulation formulation, bool disable_forensic_marking_picture, optional<int> disable_forensic_marking_audio, @@ -379,37 +379,31 @@ from_dkdm ( try { list<KDMWithMetadataPtr> kdms; - for (auto i: screens) { - if (!i->recipient) { + for (auto const& screen_details: screens) { + if (!screen_details.screen.recipient) { continue; } - int const offset_hour = i->cinema ? i->cinema->utc_offset_hour() : 0; - int const offset_minute = i->cinema ? i->cinema->utc_offset_minute() : 0; - - dcp::LocalTime begin(valid_from, dcp::UTCOffset(offset_hour, offset_minute)); - dcp::LocalTime end(valid_to, dcp::UTCOffset(offset_hour, offset_minute)); - auto const kdm = kdm_from_dkdm( dkdm, - i->recipient.get(), - i->trusted_device_thumbprints(), - begin, - end, + screen_details.screen.recipient.get(), + screen_details.screen.trusted_device_thumbprints(), + valid_from, + valid_to, formulation, disable_forensic_marking_picture, disable_forensic_marking_audio ); dcp::NameFormat::Map name_values; - name_values['c'] = i->cinema ? i->cinema->name : ""; - name_values['s'] = i->name; + name_values['c'] = screen_details.cinema.name; + name_values['s'] = screen_details.screen.name; name_values['f'] = kdm.content_title_text(); - name_values['b'] = begin.date() + " " + begin.time_of_day(true, false); - name_values['e'] = end.date() + " " + end.time_of_day(true, false); + name_values['b'] = valid_from.date() + " " + valid_from.time_of_day(true, false); + name_values['e'] = valid_to.date() + " " + valid_to.time_of_day(true, false); name_values['i'] = kdm.cpl_id(); - kdms.push_back(make_shared<KDMWithMetadata>(name_values, i->cinema.get(), i->cinema ? i->cinema->emails : vector<string>(), kdm)); + kdms.push_back(make_shared<KDMWithMetadata>(name_values, screen_details.cinema_id, screen_details.cinema.emails, kdm)); } write_files (kdms, zip, output, container_name_format, filename_format, verbose, out); if (email) { @@ -443,6 +437,22 @@ dump_dkdm_group (shared_ptr<DKDMGroup> group, int indent, std::function<void (st } +static +dcp::LocalTime +time_from_string(string time) +{ + if (time == "now") { + return {}; + } + + if (time.length() > 10 && time[10] == ' ') { + time[10] = 'T'; + } + + return dcp::LocalTime(time); +} + + void dump_decryption_certificate(std::function<void (string)> out) { @@ -462,17 +472,20 @@ try boost::filesystem::path output = dcp::filesystem::current_path(); auto container_name_format = Config::instance()->kdm_container_name_format(); auto filename_format = Config::instance()->kdm_filename_format(); + /* either a cinema name to search for, or the name of a cinema to associate with certificate */ optional<string> cinema_name; - shared_ptr<Cinema> cinema; - optional<boost::filesystem::path> certificate; - optional<string> screen; - vector<shared_ptr<Screen>> screens; + /* either a screen name to search for, or the name of a screen to associate with certificate */ + optional<string> screen_name; + /* a certificate that we will use to make up a temporary cinema and screen */ + optional<boost::filesystem::path> projector_certificate; + optional<boost::filesystem::path> decryption_key; + /* trusted devices that we will use to make up a temporary cinema and screen */ + vector<TrustedDevice> trusted_devices; optional<dcp::EncryptedKDM> dkdm; - optional<boost::posix_time::ptime> valid_from; - optional<boost::posix_time::ptime> valid_to; + optional<dcp::LocalTime> valid_from; + optional<dcp::LocalTime> valid_to; bool zip = false; - bool list_cinemas = false; - bool list_dkdm_cpls = false; + string command = "create"; optional<string> duration_string; bool verbose = false; dcp::Formulation formulation = dcp::Formulation::MODIFIED_TRANSITIONAL_1; @@ -504,16 +517,14 @@ try { "verbose", no_argument, 0, 'v' }, { "cinema", required_argument, 0, 'c' }, { "screen", required_argument, 0, 'S' }, - { "certificate", required_argument, 0, 'C' }, - { "trusted-device", required_argument, 0, 'T' }, - { "list-cinemas", no_argument, 0, 'B' }, - { "list-dkdm-cpls", no_argument, 0, 'D' }, + { "projector-certificate", required_argument, 0, 'C' }, + { "trusted-device-certificate", required_argument, 0, 'T' }, + { "decryption-key", required_argument, 0, 'G' }, { "cinemas-file", required_argument, 0, 'E' }, - { "dump-decryption-certificate", no_argument, 0, 'G' }, { 0, 0, 0, 0 } }; - int c = getopt_long(argc, argv, "ho:K:Z:f:t:d:F:pae::zvc:S:C:T:BDE:G", long_options, &option_index); + int c = getopt_long(argc, argv, "ho:K:Z:f:t:d:F:pae::zvc:S:C:T:E:G", long_options, &option_index); if (c == -1) { break; @@ -533,10 +544,10 @@ try container_name_format = dcp::NameFormat (optarg); break; case 'f': - valid_from = time_from_string (optarg); + valid_from = time_from_string(optarg); break; case 't': - valid_to = time_from_string (optarg); + valid_to = dcp::LocalTime(optarg); break; case 'd': duration_string = optarg; @@ -575,70 +586,92 @@ try verbose = true; break; case 'c': - /* This could be a cinema to search for in the configured list or the name of a cinema being - built up on-the-fly in the option. Cater for both possilibities here by storing the name - (for lookup) and by creating a Cinema which the next Screen will be added to. - */ cinema_name = optarg; - cinema = make_shared<Cinema>(optarg, vector<string>(), "", 0, 0); break; case 'S': - /* Similarly, this could be the name of a new (temporary) screen or the name of a screen - * to search for. - */ - screen = optarg; + screen_name = optarg; break; case 'C': - certificate = optarg; + projector_certificate = optarg; break; case 'T': - /* A trusted device ends up in the last screen we made */ - if (!screens.empty ()) { - screens.back()->trusted_devices.push_back(TrustedDevice(dcp::Certificate(dcp::file_to_string(optarg)))); - } - break; - case 'B': - list_cinemas = true; + trusted_devices.push_back(TrustedDevice(dcp::Certificate(dcp::file_to_string(optarg)))); break; - case 'D': - list_dkdm_cpls = true; + case 'G': + decryption_key = optarg; break; case 'E': cinemas_file = optarg; break; - case 'G': - dump_decryption_certificate(out); - return {}; } } + vector<string> commands = { + "create", + "list-cinemas", + "list-dkdm-cpls", + "add-dkdm", + "dump-decryption-certificate" + }; + + if (optind < argc - 1) { + /* Command with some KDM / CPL / whever specified afterwards */ + command = argv[optind++]; + } else if (optind < argc) { + /* Look for a valid command, hoping that it's not the name of the KDM / CPL / whatever */ + if (std::find(commands.begin(), commands.end(), argv[optind]) != commands.end()) { + command = argv[optind++]; + } + } + + if (std::find(commands.begin(), commands.end(), command) == commands.end()) { + throw KDMCLIError(String::compose("Unrecognised command %1", command)); + } + if (cinemas_file) { Config::instance()->set_cinemas_file(*cinemas_file); } - if (certificate) { - /* Make a new screen and add it to the current cinema */ - dcp::CertificateChain chain(dcp::file_to_string(*certificate)); - auto screen_to_add = std::make_shared<Screen>(screen.get_value_or(""), "", chain.leaf(), boost::none, vector<TrustedDevice>()); - if (cinema) { - cinema->add_screen(screen_to_add); - } - screens.push_back(screen_to_add); + /* If we've been given a certificate we can make up a temporary cinema and screen (not written to the + * database) to then use for making KDMs. + */ + optional<Cinema> temp_cinema; + optional<Screen> temp_screen; + if (projector_certificate) { + temp_cinema = Cinema(cinema_name.get_value_or(""), {}, "", dcp::UTCOffset()); + dcp::CertificateChain chain(dcp::file_to_string(*projector_certificate)); + temp_screen = Screen(screen_name.get_value_or(""), "", chain.leaf(), boost::none, trusted_devices); } - if (list_cinemas) { - auto cinemas = Config::instance()->cinemas (); - for (auto i: cinemas) { - out (String::compose("%1 (%2)", i->name, Email::address_list(i->emails))); + if (command == "list-cinemas") { + CinemaList cinemas; + for (auto const& cinema: cinemas.cinemas()) { + out(String::compose("%1 (%2)", cinema.second.name, Email::address_list(cinema.second.emails))); } return {}; } - if (list_dkdm_cpls) { + if (command == "list-dkdm-cpls") { dump_dkdm_group (Config::instance()->dkdms(), 0, out); return {}; } + if (command == "dump-deccryption-certificate") { + dump_decryption_certificate(out); + return {}; + } + + if (optind >= argc) { + throw KDMCLIError("no film, CPL ID or DKDM specified"); + } + + if (command == "add-dkdm") { + auto dkdms = Config::instance()->dkdms(); + dkdms->add(make_shared<DKDM>(dcp::EncryptedKDM(dcp::file_to_string(argv[optind])))); + Config::instance()->write_config(); + return {}; + } + if (!duration_string && !valid_to) { throw KDMCLIError ("you must specify a --valid-duration or --valid-to"); } @@ -651,23 +684,37 @@ try throw KDMCLIError ("no film, CPL ID or DKDM specified"); } - if (screens.empty()) { + vector<ScreenDetails> screens; + + if (!temp_cinema) { if (!cinema_name) { - throw KDMCLIError ("you must specify either a cinema or one or more screens using certificate files"); + throw KDMCLIError("you must specify either a cinema or one or more screens using certificate files"); } - screens = find_cinema (*cinema_name)->screens (); - if (screen) { - screens.erase(std::remove_if(screens.begin(), screens.end(), [&screen](shared_ptr<Screen> s) { return s->name != *screen; }), screens.end()); + CinemaList cinema_list; + if (auto cinema = cinema_list.cinema_by_name_or_email(*cinema_name)) { + if (screen_name) { + for (auto screen: cinema_list.screens_by_cinema_and_name(cinema->first, *screen_name)) { + screens.push_back({cinema->first, cinema->second, screen.second}); + } + } else { + for (auto screen: cinema_list.screens(cinema->first)) { + screens.push_back({cinema->first, cinema->second, screen.second}); + } + } } + } else { + DCPOMATIC_ASSERT(temp_screen); + screens.push_back({CinemaID(0), *temp_cinema, *temp_screen}); } if (duration_string) { - valid_to = valid_from.get() + duration_from_string (*duration_string); + valid_to = valid_from.get(); + valid_to->add(duration_from_string(*duration_string)); } if (verbose) { - out (String::compose("Making KDMs valid from %1 to %2", boost::posix_time::to_simple_string(valid_from.get()), boost::posix_time::to_simple_string(valid_to.get()))); + out(String::compose("Making KDMs valid from %1 to %2", valid_from->as_string(), valid_to->as_string())); } string const thing = argv[optind]; @@ -699,9 +746,11 @@ try throw KDMCLIError ("could not find film or CPL ID corresponding to " + thing); } + string const key = decryption_key ? dcp::file_to_string(*decryption_key) : Config::instance()->decryption_chain()->key().get(); + from_dkdm ( screens, - dcp::DecryptedKDM (*dkdm, Config::instance()->decryption_chain()->key().get()), + dcp::DecryptedKDM(*dkdm, key), verbose, output, container_name_format, diff --git a/src/lib/kdm_recipient.cc b/src/lib/kdm_recipient.cc index 671e9797c..c33eb1b9f 100644 --- a/src/lib/kdm_recipient.cc +++ b/src/lib/kdm_recipient.cc @@ -39,14 +39,14 @@ KDMRecipient::KDMRecipient (cxml::ConstNodePtr node) void KDMRecipient::as_xml (xmlpp::Element* parent) const { - parent->add_child("Name")->add_child_text(name); + cxml::add_text_child(parent, "Name", name); if (recipient) { - parent->add_child("Recipient")->add_child_text(recipient->certificate(true)); + cxml::add_text_child(parent, "Recipient", recipient->certificate(true)); } if (recipient_file) { - parent->add_child("RecipientFile")->add_child_text(*recipient_file); + cxml::add_text_child(parent, "RecipientFile", *recipient_file); } - parent->add_child("Notes")->add_child_text(notes); + cxml::add_text_child(parent, "Notes", notes); } diff --git a/src/lib/kdm_with_metadata.h b/src/lib/kdm_with_metadata.h index fbeeffbc1..6198564b1 100644 --- a/src/lib/kdm_with_metadata.h +++ b/src/lib/kdm_with_metadata.h @@ -23,6 +23,7 @@ #define DCPOMATIC_KDM_WITH_METADATA_H +#include "id.h" #include <dcp/encrypted_kdm.h> #include <dcp/name_format.h> @@ -33,7 +34,7 @@ class Cinema; class KDMWithMetadata { public: - KDMWithMetadata(dcp::NameFormat::Map const& name_values, void const* group, std::vector<std::string> emails, dcp::EncryptedKDM kdm) + KDMWithMetadata(dcp::NameFormat::Map const& name_values, ID group, std::vector<std::string> emails, dcp::EncryptedKDM kdm) : _name_values (name_values) , _group (group) , _emails (emails) @@ -54,7 +55,7 @@ public: boost::optional<std::string> get (char k) const; - void const* group () const { + ID group() const { return _group; } @@ -64,7 +65,7 @@ public: private: dcp::NameFormat::Map _name_values; - void const* _group; + ID _group; std::vector<std::string> _emails; dcp::EncryptedKDM _kdm; }; diff --git a/src/lib/log_entry.cc b/src/lib/log_entry.cc index d5065e03a..af9148e68 100644 --- a/src/lib/log_entry.cc +++ b/src/lib/log_entry.cc @@ -38,6 +38,7 @@ int const LogEntry::TYPE_DEBUG_VIDEO_VIEW = 0x080; int const LogEntry::TYPE_DISK = 0x100; int const LogEntry::TYPE_DEBUG_PLAYER = 0x200; int const LogEntry::TYPE_DEBUG_AUDIO_ANALYSIS = 0x400; +int const LogEntry::TYPE_HTTP = 0x800; using std::string; diff --git a/src/lib/log_entry.h b/src/lib/log_entry.h index 95c4e4f1f..89357d201 100644 --- a/src/lib/log_entry.h +++ b/src/lib/log_entry.h @@ -42,6 +42,7 @@ public: static const int TYPE_DISK; static const int TYPE_DEBUG_PLAYER; ///< the Player class static const int TYPE_DEBUG_AUDIO_ANALYSIS; ///< audio analysis job + static const int TYPE_HTTP; explicit LogEntry (int type); virtual ~LogEntry () {} diff --git a/src/lib/make_dcp.cc b/src/lib/make_dcp.cc index 17d45be46..b72756194 100644 --- a/src/lib/make_dcp.cc +++ b/src/lib/make_dcp.cc @@ -21,7 +21,7 @@ #include "config.h" #include "dcp_content.h" -#include "dcp_encoder.h" +#include "dcp_film_encoder.h" #include "dcp_transcode_job.h" #include "dcpomatic_log.h" #include "environment_info.h" @@ -40,8 +40,8 @@ using std::shared_ptr; using std::string; -/** Add suitable Jobs to the JobManager to create a DCP for a Film */ -void +/** Add suitable Job to the JobManager to create a DCP for a Film */ +shared_ptr<TranscodeJob> make_dcp (shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour) { if (film->dcp_name().find("/") != string::npos) { @@ -91,15 +91,12 @@ make_dcp (shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour) LOG_GENERAL ("Content: %1", content->technical_summary()); } LOG_GENERAL ("DCP video rate %1 fps", film->video_frame_rate()); - if (Config::instance()->only_servers_encode()) { - LOG_GENERAL_NC ("0 threads: ONLY SERVERS SET TO ENCODE"); - } else { - LOG_GENERAL ("%1 threads", Config::instance()->master_encoding_threads()); - } - LOG_GENERAL ("J2K bandwidth %1", film->j2k_bandwidth()); + LOG_GENERAL("Video bit rate %1", film->video_bit_rate(film->video_encoding())); auto tj = make_shared<DCPTranscodeJob>(film, behaviour); - tj->set_encoder (make_shared<DCPEncoder>(film, tj)); + tj->set_encoder(make_shared<DCPFilmEncoder>(film, tj)); JobManager::instance()->add (tj); + + return tj; } diff --git a/src/lib/make_dcp.h b/src/lib/make_dcp.h index 9f5072782..fe0bcd2f6 100644 --- a/src/lib/make_dcp.h +++ b/src/lib/make_dcp.h @@ -25,5 +25,5 @@ class Film; -void make_dcp (std::shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour); +std::shared_ptr<TranscodeJob> make_dcp(std::shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour); diff --git a/src/lib/map_cli.cc b/src/lib/map_cli.cc index b158499a8..149e09fbc 100644 --- a/src/lib/map_cli.cc +++ b/src/lib/map_cli.cc @@ -24,20 +24,19 @@ #include "util.h" #include <dcp/cpl.h> #include <dcp/dcp.h> -#include <dcp/interop_subtitle_asset.h> +#include <dcp/interop_text_asset.h> #include <dcp/filesystem.h> #include <dcp/font_asset.h> -#include <dcp/mono_picture_asset.h> +#include <dcp/mono_j2k_picture_asset.h> #include <dcp/reel.h> #include <dcp/reel_atmos_asset.h> -#include <dcp/reel_closed_caption_asset.h> #include <dcp/reel_file_asset.h> #include <dcp/reel_picture_asset.h> #include <dcp/reel_sound_asset.h> -#include <dcp/reel_subtitle_asset.h> -#include <dcp/smpte_subtitle_asset.h> +#include <dcp/reel_text_asset.h> +#include <dcp/smpte_text_asset.h> #include <dcp/sound_asset.h> -#include <dcp/stereo_picture_asset.h> +#include <dcp/stereo_j2k_picture_asset.h> #include <boost/optional.hpp> #include <getopt.h> #include <algorithm> @@ -292,16 +291,16 @@ map_cli(int argc, char* argv[], std::function<void (string)> out) } }; - auto maybe_copy_font_and_images = [&maybe_copy, output_dir, copy](shared_ptr<const dcp::SubtitleAsset> asset, bool rename, bool hard_link, bool soft_link) { - auto interop = dynamic_pointer_cast<const dcp::InteropSubtitleAsset>(asset); + auto maybe_copy_font_and_images = [&maybe_copy, output_dir, copy](shared_ptr<const dcp::TextAsset> asset, bool rename, bool hard_link, bool soft_link) { + auto interop = dynamic_pointer_cast<const dcp::InteropTextAsset>(asset); boost::optional<boost::filesystem::path> extra; if (interop) { extra = interop->id(); for (auto font_asset: interop->font_assets()) { maybe_copy(font_asset->id(), rename, hard_link, soft_link, extra); } - for (auto subtitle: interop->subtitles()) { - if (auto image = dynamic_pointer_cast<const dcp::SubtitleImage>(subtitle)) { + for (auto subtitle: interop->texts()) { + if (auto image = dynamic_pointer_cast<const dcp::TextImage>(subtitle)) { auto const output_path = *output_dir / asset->id() / image->file()->filename(); copy(*image->file(), output_path, hard_link, soft_link); } diff --git a/src/lib/mpeg2_encoder.cc b/src/lib/mpeg2_encoder.cc new file mode 100644 index 000000000..9b9cdfd09 --- /dev/null +++ b/src/lib/mpeg2_encoder.cc @@ -0,0 +1,80 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "mpeg2_encoder.h" +#include "writer.h" +#include <dcp/ffmpeg_image.h> +extern "C" { +#include <libavutil/pixfmt.h> +} + + +using std::shared_ptr; + + +MPEG2Encoder::MPEG2Encoder(shared_ptr<const Film> film, Writer& writer) + : VideoEncoder(film, writer) + , _transcoder(film->frame_size(), film->video_frame_rate(), film->video_bit_rate(VideoEncoding::MPEG2)) +{ + +} + + +void +MPEG2Encoder::encode(shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time) +{ + VideoEncoder::encode(pv, time); + + auto image = pv->image( + [](AVPixelFormat) { return AV_PIX_FMT_YUV420P; }, + VideoRange::VIDEO, + false + ); + + dcp::FFmpegImage ffmpeg_image(time.get() * _film->video_frame_rate() / dcpomatic::DCPTime::HZ); + + DCPOMATIC_ASSERT(image->size() == ffmpeg_image.size()); + + auto height = image->size().height; + + for (int y = 0; y < height; ++y) { + memcpy(ffmpeg_image.y() + ffmpeg_image.y_stride() * y, image->data()[0] + image->stride()[0] * y, ffmpeg_image.y_stride()); + } + + for (int y = 0; y < height / 2; ++y) { + memcpy(ffmpeg_image.u() + ffmpeg_image.u_stride() * y, image->data()[1] + image->stride()[1] * y, ffmpeg_image.u_stride()); + memcpy(ffmpeg_image.v() + ffmpeg_image.v_stride() * y, image->data()[2] + image->stride()[2] * y, ffmpeg_image.v_stride()); + } + + if (auto compressed = _transcoder.compress_frame(std::move(ffmpeg_image))) { + _writer.write(compressed->first, compressed->second); + } +} + + +void +MPEG2Encoder::end() +{ + if (auto compressed = _transcoder.flush()) { + _writer.write(compressed->first, compressed->second); + } +} + diff --git a/src/lib/mpeg2_encoder.h b/src/lib/mpeg2_encoder.h new file mode 100644 index 000000000..1b2259d26 --- /dev/null +++ b/src/lib/mpeg2_encoder.h @@ -0,0 +1,42 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "video_encoder.h" +#include <dcp/mpeg2_transcode.h> + + +class MPEG2Encoder : public VideoEncoder +{ +public: + MPEG2Encoder(std::shared_ptr<const Film> film, Writer& writer); + + void encode(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time) override; + + void pause() override {} + void resume() override {} + + /** Called when a processing run has finished */ + void end() override; + +private: + dcp::MPEG2Compressor _transcoder; +}; + diff --git a/src/lib/overlaps.cc b/src/lib/overlaps.cc index fbc6b5cb1..bed75a822 100644 --- a/src/lib/overlaps.cc +++ b/src/lib/overlaps.cc @@ -28,7 +28,8 @@ using std::shared_ptr; using namespace dcpomatic; -ContentList overlaps (shared_ptr<const Film> film, ContentList cl, function<bool (shared_ptr<const Content>)> part, DCPTime from, DCPTime to) +ContentList +dcpomatic::overlaps(shared_ptr<const Film> film, ContentList cl, function<bool (shared_ptr<const Content>)> part, DCPTime from, DCPTime to) { ContentList overlaps; DCPTimePeriod period (from, to); diff --git a/src/lib/overlaps.h b/src/lib/overlaps.h index bb8277eaa..f405c0fab 100644 --- a/src/lib/overlaps.h +++ b/src/lib/overlaps.h @@ -27,6 +27,9 @@ class ContentPart; class Film; +namespace dcpomatic { + + /** @return Pieces of content with a given part (video, audio, * subtitle) that overlap a specified time range in the given * ContentList @@ -34,3 +37,7 @@ class Film; ContentList overlaps ( std::shared_ptr<const Film> film, ContentList cl, std::function<bool (std::shared_ptr<const Content>)> part, dcpomatic::DCPTime from, dcpomatic::DCPTime to ); + + +} + diff --git a/src/lib/path_behaviour.h b/src/lib/path_behaviour.h new file mode 100644 index 000000000..cf966af5a --- /dev/null +++ b/src/lib/path_behaviour.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_PATH_BEHAVIOUR_H +#define DCPOMATIC_PATH_BEHAVIOUR_H + + +enum class PathBehaviour { + KEEP_ABSOLUTE, + MAKE_RELATIVE, +}; + + +#endif + diff --git a/src/lib/pixel_quanta.cc b/src/lib/pixel_quanta.cc index 7c1d285cf..07690f3ac 100644 --- a/src/lib/pixel_quanta.cc +++ b/src/lib/pixel_quanta.cc @@ -34,8 +34,8 @@ PixelQuanta::PixelQuanta (cxml::ConstNodePtr node) void PixelQuanta::as_xml (xmlpp::Element* node) const { - node->add_child("X")->add_child_text(dcp::raw_convert<std::string>(x)); - node->add_child("Y")->add_child_text(dcp::raw_convert<std::string>(y)); + cxml::add_text_child(node, "X", dcp::raw_convert<std::string>(x)); + cxml::add_text_child(node, "Y", dcp::raw_convert<std::string>(y)); } diff --git a/src/lib/player.cc b/src/lib/player.cc index 75f6b7919..f348f6b28 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -54,10 +54,9 @@ #include "timer.h" #include "video_decoder.h" #include <dcp/reel.h> -#include <dcp/reel_closed_caption_asset.h> #include <dcp/reel_picture_asset.h> #include <dcp/reel_sound_asset.h> -#include <dcp/reel_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <algorithm> #include <iostream> #include <stdint.h> @@ -71,10 +70,8 @@ using std::dynamic_pointer_cast; using std::list; using std::make_pair; using std::make_shared; -using std::make_shared; using std::max; using std::min; -using std::min; using std::pair; using std::shared_ptr; using std::vector; @@ -412,7 +409,6 @@ Player::setup_pieces () _silent = Empty(film, playlist(), bind(&have_audio, _1), _playback_length); _next_video_time = boost::none; - _next_video_eyes = Eyes::BOTH; _next_audio_time = boost::none; } @@ -525,7 +521,7 @@ Player::black_player_video_frame (Eyes eyes) const boost::mutex::scoped_lock lm(_black_image_mutex); return std::make_shared<PlayerVideo> ( - std::make_shared<const RawImageProxy>(_black_image), + make_shared<const RawImageProxy>(_black_image), Crop(), optional<double>(), _video_container_size, @@ -535,7 +531,7 @@ Player::black_player_video_frame (Eyes eyes) const PresetColourConversion::all().front().conversion, VideoRange::FULL, std::weak_ptr<Content>(), - boost::optional<Frame>(), + boost::optional<dcpomatic::ContentTime>(), false ); } @@ -736,7 +732,7 @@ Player::pass () if (_playback_length.load() == DCPTime() || !film) { /* Special; just give one black frame */ - emit_video (black_player_video_frame(Eyes::BOTH), DCPTime()); + use_video(black_player_video_frame(Eyes::BOTH), DCPTime(), one_video_frame()); return true; } @@ -775,22 +771,33 @@ Player::pass () LOG_DEBUG_PLAYER ("Calling pass() on %1", earliest_content->content->path(0)); earliest_content->done = earliest_content->decoder->pass (); auto dcp = dynamic_pointer_cast<DCPContent>(earliest_content->content); - if (dcp && !_play_referenced && dcp->reference_audio()) { - /* We are skipping some referenced DCP audio content, so we need to update _next_audio_time - to `hide' the fact that no audio was emitted during the referenced DCP (though - we need to behave as though it was). - */ - _next_audio_time = dcp->end(film); + if (dcp && !_play_referenced) { + if (dcp->reference_video()) { + _next_video_time = dcp->end(film); + } + if (dcp->reference_audio()) { + /* We are skipping some referenced DCP audio content, so we need to update _next_audio_time + to `hide' the fact that no audio was emitted during the referenced DCP (though + we need to behave as though it was). + */ + _next_audio_time = dcp->end(film); + } } break; } case BLACK: LOG_DEBUG_PLAYER ("Emit black for gap at %1", to_string(_black.position())); + if (!_next_video_time) { + /* Deciding to emit black has the same effect as getting some video from the content + * when we are inaccurately seeking. + */ + _next_video_time = _black.position(); + } if (film->three_d()) { - emit_video(black_player_video_frame(Eyes::LEFT), _black.position()); - emit_video(black_player_video_frame(Eyes::RIGHT), _black.position()); + use_video(black_player_video_frame(Eyes::LEFT), _black.position(), _black.period_at_position().to); + use_video(black_player_video_frame(Eyes::RIGHT), _black.position(), _black.period_at_position().to); } else { - emit_video(black_player_video_frame(Eyes::BOTH), _black.position()); + use_video(black_player_video_frame(Eyes::BOTH), _black.position(), _black.period_at_position().to); } _black.set_position (_black.position() + one_video_frame()); break; @@ -893,24 +900,16 @@ Player::pass () } if (done) { + if (_next_video_time) { + LOG_DEBUG_PLAYER("Done: emit video until end of film at %1", to_string(film->length())); + emit_video_until(film->length()); + } + if (_shuffler) { _shuffler->flush (); } for (auto const& i: _delay) { - do_emit_video(i.first, i.second); - } - - /* Perhaps we should have Empty entries for both eyes in the 3D case (somehow). - * However, if we have L and R video files, and one is shorter than the other, - * the fill code in ::video mostly takes care of filling in the gaps. - * However, since it fills at the point when it knows there is more video coming - * at time t (so it should fill any gap up to t) it can't do anything right at the - * end. This is particularly bad news if the last frame emitted is a LEFT - * eye, as the MXF writer will complain about the 3D sequence being wrong. - * Here's a hack to workaround that particular case. - */ - if (_next_video_eyes && _next_video_time && *_next_video_eyes == Eyes::RIGHT) { - do_emit_video (black_player_video_frame(Eyes::RIGHT), *_next_video_time); + emit_video(i.first, i.second); } } @@ -920,68 +919,116 @@ Player::pass () /** @return Open subtitles for the frame at the given time, converted to images */ optional<PositionImage> -Player::open_subtitles_for_frame (DCPTime time) const +Player::open_texts_for_frame(DCPTime time) const { auto film = _film.lock(); if (!film) { return {}; } - list<PositionImage> captions; + list<PositionImage> texts; int const vfr = film->video_frame_rate(); - for ( - auto j: - _active_texts[TextType::OPEN_SUBTITLE].get_burnt(DCPTimePeriod(time, time + DCPTime::from_frames(1, vfr)), _always_burn_open_subtitles) - ) { + for (auto type: { TextType::OPEN_SUBTITLE, TextType::OPEN_CAPTION }) { + for ( + auto const& text: + _active_texts[type].get_burnt(DCPTimePeriod(time, time + DCPTime::from_frames(1, vfr)), _always_burn_open_subtitles) + ) { - /* Bitmap subtitles */ - for (auto i: j.bitmap) { - if (!i.image || i.image->size().width == 0 || i.image->size().height == 0) { - continue; - } + /* Bitmap texts */ + for (auto i: text.bitmap) { + if (!i.image || i.image->size().width == 0 || i.image->size().height == 0) { + continue; + } - /* i.image will already have been scaled to fit _video_container_size */ - dcp::Size scaled_size (i.rectangle.width * _video_container_size.load().width, i.rectangle.height * _video_container_size.load().height); + /* i.image will already have been scaled to fit _video_container_size */ + dcp::Size scaled_size (i.rectangle.width * _video_container_size.load().width, i.rectangle.height * _video_container_size.load().height); - captions.push_back ( - PositionImage ( - i.image, - Position<int> ( - lrint(_video_container_size.load().width * i.rectangle.x), - lrint(_video_container_size.load().height * i.rectangle.y) + texts.push_back( + PositionImage ( + i.image, + Position<int> ( + lrint(_video_container_size.load().width * i.rectangle.x), + lrint(_video_container_size.load().height * i.rectangle.y) + ) ) - ) - ); - } + ); + } - /* String subtitles (rendered to an image) */ - if (!j.string.empty()) { - auto s = render_text(j.string, _video_container_size, time, vfr); - copy_if(s.begin(), s.end(), back_inserter(captions), [](PositionImage const& image) { - return image.image->size().width && image.image->size().height; - }); + /* String texts (rendered to an image) */ + if (!text.string.empty()) { + auto s = render_text(text.string, _video_container_size, time, vfr); + copy_if(s.begin(), s.end(), back_inserter(texts), [](PositionImage const& image) { + return image.image->size().width && image.image->size().height; + }); + } } } - if (captions.empty()) { + if (texts.empty()) { return {}; } - return merge (captions, _subtitle_alignment); + return merge(texts, _subtitle_alignment); } -static -Eyes -increment_eyes (Eyes e) +void +Player::emit_video_until(DCPTime time) { - if (e == Eyes::LEFT) { - return Eyes::RIGHT; - } + LOG_DEBUG_PLAYER("emit_video_until %1; next video time is %2", to_string(time), to_string(_next_video_time.get_value_or({}))); + auto frame = [this](shared_ptr<PlayerVideo> pv, DCPTime time) { + /* We need a delay to give a little wiggle room to ensure that relevant subtitles arrive at the + player before the video that requires them. + */ + _delay.push_back(make_pair(pv, time)); + + if (pv->eyes() == Eyes::BOTH || pv->eyes() == Eyes::RIGHT) { + _next_video_time = time + one_video_frame(); + } + + if (_delay.size() < 3) { + return; + } + + auto to_do = _delay.front(); + _delay.pop_front(); + emit_video(to_do.first, to_do.second); + }; - return Eyes::LEFT; + auto const age_threshold = one_video_frame() * 2; + + while (_next_video_time.get_value_or({}) < time) { + auto left = _last_video[Eyes::LEFT]; + auto right = _last_video[Eyes::RIGHT]; + auto both = _last_video[Eyes::BOTH]; + + auto const next = _next_video_time.get_value_or({}); + + if ( + left.first && + right.first && + (!both.first || (left.second >= both.second && right.second >= both.second)) && + (left.second - next) < age_threshold && + (right.second - next) < age_threshold + ) { + frame(left.first, next); + frame(right.first, next); + } else if (both.first && (both.second - next) < age_threshold) { + frame(both.first, next); + LOG_DEBUG_PLAYER("Content %1 selected for DCP %2 (age %3)", to_string(both.second), to_string(next), to_string(both.second - next)); + } else { + auto film = _film.lock(); + if (film && film->three_d()) { + frame(black_player_video_frame(Eyes::LEFT), next); + frame(black_player_video_frame(Eyes::RIGHT), next); + } else { + frame(black_player_video_frame(Eyes::BOTH), next); + } + LOG_DEBUG_PLAYER("Black selected for DCP %1", to_string(next)); + } + } } @@ -1006,11 +1053,6 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video) return; } - FrameRateChange frc(film, piece->content); - if (frc.skip && (video.frame % 2) == 1) { - return; - } - vector<Eyes> eyes_to_emit; if (!film->three_d()) { @@ -1033,15 +1075,11 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video) eyes_to_emit = { video.eyes }; } - /* Time of the first frame we will emit */ - DCPTime const time = content_video_to_dcp (piece, video.frame); - LOG_DEBUG_PLAYER("Received video frame %1 at %2", video.frame, to_string(time)); + /* Time of the frame we just received within the DCP */ + auto const time = content_time_to_dcp(piece, video.time); + LOG_DEBUG_PLAYER("Received video frame %1 %2 eyes %3", to_string(video.time), to_string(time), static_cast<int>(video.eyes)); - /* Discard if it's before the content's period or the last accurate seek. We can't discard - if it's after the content's period here as in that case we still need to fill any gap between - `now' and the end of the content's period. - */ - if (time < piece->content->position() || (_next_video_time && time < *_next_video_time)) { + if (time < piece->content->position()) { return; } @@ -1054,56 +1092,8 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video) return; } - /* Fill gaps that we discover now that we have some video which needs to be emitted. - This is where we need to fill to. - */ - DCPTime fill_to = min(time, piece->content->end(film)); - - if (_next_video_time) { - DCPTime fill_from = max (*_next_video_time, piece->content->position()); - - /* Fill if we have more than half a frame to do */ - if ((fill_to - fill_from) > one_video_frame() / 2) { - auto last = _last_video.find (weak_piece); - if (film->three_d()) { - auto fill_to_eyes = eyes_to_emit[0]; - if (fill_to_eyes == Eyes::BOTH) { - fill_to_eyes = Eyes::LEFT; - } - if (fill_to == piece->content->end(film)) { - /* Don't fill after the end of the content */ - fill_to_eyes = Eyes::LEFT; - } - auto j = fill_from; - auto eyes = _next_video_eyes.get_value_or(Eyes::LEFT); - if (eyes == Eyes::BOTH) { - eyes = Eyes::LEFT; - } - while (j < fill_to || eyes != fill_to_eyes) { - if (last != _last_video.end()) { - LOG_DEBUG_PLAYER("Fill using last video at %1 in 3D mode", to_string(j)); - auto copy = last->second->shallow_copy(); - copy->set_eyes (eyes); - emit_video (copy, j); - } else { - LOG_DEBUG_PLAYER("Fill using black at %1 in 3D mode", to_string(j)); - emit_video (black_player_video_frame(eyes), j); - } - if (eyes == Eyes::RIGHT) { - j += one_video_frame(); - } - eyes = increment_eyes (eyes); - } - } else { - for (DCPTime j = fill_from; j < fill_to; j += one_video_frame()) { - if (last != _last_video.end()) { - emit_video (last->second, j); - } else { - emit_video (black_player_video_frame(Eyes::BOTH), j); - } - } - } - } + if (!_next_video_time) { + _next_video_time = time.round(film->video_frame_rate()); } auto const content_video = piece->content->video; @@ -1112,33 +1102,38 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video) DCPOMATIC_ASSERT(scaled_size); for (auto eyes: eyes_to_emit) { - _last_video[weak_piece] = std::make_shared<PlayerVideo>( - video.image, - content_video->actual_crop(), - content_video->fade(film, video.frame), - scale_for_display( - *scaled_size, + use_video( + std::make_shared<PlayerVideo>( + video.image, + content_video->actual_crop(), + content_video->fade(film, video.time), + scale_for_display( + *scaled_size, + _video_container_size, + film->frame_size(), + content_video->pixel_quanta() + ), _video_container_size, - film->frame_size(), - content_video->pixel_quanta() + eyes, + video.part, + content_video->colour_conversion(), + content_video->range(), + piece->content, + video.time, + false ), - _video_container_size, - eyes, - video.part, - content_video->colour_conversion(), - content_video->range(), - piece->content, - video.frame, - false + time, + piece->content->end(film) ); + } +} - DCPTime t = time; - for (int i = 0; i < frc.repeat; ++i) { - if (t < piece->content->end(film)) { - emit_video (_last_video[weak_piece], t); - } - t += one_video_frame (); - } +void +Player::use_video(shared_ptr<PlayerVideo> pv, DCPTime time, DCPTime end) +{ + _last_video[pv->eyes()] = { pv, time }; + if (pv->eyes() != Eyes::LEFT) { + emit_video_until(std::min(time + one_video_frame() / 2, end)); } } @@ -1256,7 +1251,7 @@ Player::bitmap_text_start (weak_ptr<Piece> weak_piece, weak_ptr<const TextConten { /* Apply content's subtitle offsets */ sub.rectangle.x += content->x_offset (); - sub.rectangle.y += content->y_offset (); + sub.rectangle.y -= content->y_offset (); /* Apply a corrective translation to keep the subtitle centred after the scale that is coming up */ sub.rectangle.x -= sub.rectangle.width * ((content->x_scale() - 1) / 2); @@ -1420,18 +1415,18 @@ Player::seek (DCPTime time, bool accurate) if (accurate) { _next_video_time = time; - _next_video_eyes = Eyes::LEFT; _next_audio_time = time; } else { _next_video_time = boost::none; - _next_video_eyes = boost::none; _next_audio_time = boost::none; } _black.set_position (time); _silent.set_position (time); - _last_video.clear (); + _last_video[Eyes::LEFT] = {}; + _last_video[Eyes::RIGHT] = {}; + _last_video[Eyes::BOTH] = {}; for (auto& state: _stream_states) { state.second.last_push_end = boost::none; @@ -1440,41 +1435,14 @@ Player::seek (DCPTime time, bool accurate) void -Player::emit_video (shared_ptr<PlayerVideo> pv, DCPTime time) -{ - auto film = _film.lock(); - DCPOMATIC_ASSERT(film); - - /* We need a delay to give a little wiggle room to ensure that relevant subtitles arrive at the - player before the video that requires them. - */ - _delay.push_back (make_pair (pv, time)); - - if (pv->eyes() == Eyes::BOTH || pv->eyes() == Eyes::RIGHT) { - _next_video_time = time + one_video_frame(); - } - _next_video_eyes = increment_eyes (pv->eyes()); - - if (_delay.size() < 3) { - return; - } - - auto to_do = _delay.front(); - _delay.pop_front(); - do_emit_video (to_do.first, to_do.second); -} - - -void -Player::do_emit_video (shared_ptr<PlayerVideo> pv, DCPTime time) +Player::emit_video(shared_ptr<PlayerVideo> pv, DCPTime time) { if (pv->eyes() == Eyes::BOTH || pv->eyes() == Eyes::RIGHT) { std::for_each(_active_texts.begin(), _active_texts.end(), [time](ActiveText& a) { a.clear_before(time); }); } - auto subtitles = open_subtitles_for_frame (time); - if (subtitles) { - pv->set_text (subtitles.get ()); + if (auto texts = open_texts_for_frame(time)) { + pv->set_text(texts.get()); } Video (pv, time); diff --git a/src/lib/player.h b/src/lib/player.h index 48f6f97ca..f6a30230f 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -157,6 +157,8 @@ private: dcpomatic::ContentTime dcp_to_content_time (std::shared_ptr<const Piece> piece, dcpomatic::DCPTime t) const; dcpomatic::DCPTime content_time_to_dcp (std::shared_ptr<const Piece> piece, dcpomatic::ContentTime t) const; std::shared_ptr<PlayerVideo> black_player_video_frame (Eyes eyes) const; + void emit_video_until(dcpomatic::DCPTime time); + void insert_video(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time, dcpomatic::DCPTime end); std::pair<std::shared_ptr<Piece>, boost::optional<dcpomatic::DCPTime>> earliest_piece_and_time() const; void video (std::weak_ptr<Piece>, ContentVideo); @@ -171,9 +173,9 @@ private: std::pair<std::shared_ptr<AudioBuffers>, dcpomatic::DCPTime> discard_audio ( std::shared_ptr<const AudioBuffers> audio, dcpomatic::DCPTime time, dcpomatic::DCPTime discard_to ) const; - boost::optional<PositionImage> open_subtitles_for_frame (dcpomatic::DCPTime time) const; - void emit_video (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time); - void do_emit_video (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time); + boost::optional<PositionImage> open_texts_for_frame(dcpomatic::DCPTime time) const; + void emit_video(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time); + void use_video(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time, dcpomatic::DCPTime end); void emit_audio (std::shared_ptr<AudioBuffers> data, dcpomatic::DCPTime time); std::shared_ptr<const Playlist> playlist () const; @@ -214,15 +216,12 @@ private: /** Time of the next video that we will emit, or the time of the last accurate seek */ boost::optional<dcpomatic::DCPTime> _next_video_time; - /** Eyes of the next video that we will emit */ - boost::optional<Eyes> _next_video_eyes; /** Time of the next audio that we will emit, or the time of the last accurate seek */ boost::optional<dcpomatic::DCPTime> _next_audio_time; boost::atomic<boost::optional<int>> _dcp_decode_reduction; - typedef std::map<std::weak_ptr<Piece>, std::shared_ptr<PlayerVideo>, std::owner_less<std::weak_ptr<Piece>>> LastVideoMap; - LastVideoMap _last_video; + EnumIndexedVector<std::pair<std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime>, Eyes> _last_video; AudioMerger _audio_merger; std::unique_ptr<Shuffler> _shuffler; diff --git a/src/lib/player_video.cc b/src/lib/player_video.cc index 35c5d3daa..247301d58 100644 --- a/src/lib/player_video.cc +++ b/src/lib/player_video.cc @@ -45,6 +45,7 @@ using std::weak_ptr; using boost::optional; using dcp::Data; using dcp::raw_convert; +using namespace dcpomatic; PlayerVideo::PlayerVideo ( @@ -58,7 +59,7 @@ PlayerVideo::PlayerVideo ( optional<ColourConversion> colour_conversion, VideoRange video_range, weak_ptr<Content> content, - optional<Frame> video_frame, + optional<ContentTime> video_time, bool error ) : _in (in) @@ -71,7 +72,7 @@ PlayerVideo::PlayerVideo ( , _colour_conversion (colour_conversion) , _video_range (video_range) , _content (content) - , _video_frame (video_frame) + , _video_time(video_time) , _error (error) { @@ -199,29 +200,29 @@ PlayerVideo::make_image (function<AVPixelFormat (AVPixelFormat)> pixel_format, V void -PlayerVideo::add_metadata (xmlpp::Node* node) const +PlayerVideo::add_metadata(xmlpp::Element* element) const { - _crop.as_xml (node); + _crop.as_xml(element); if (_fade) { - node->add_child("Fade")->add_child_text (raw_convert<string> (_fade.get ())); + cxml::add_text_child(element, "Fade", raw_convert<string>(_fade.get())); } - _in->add_metadata (node->add_child ("In")); - node->add_child("InterWidth")->add_child_text (raw_convert<string> (_inter_size.width)); - node->add_child("InterHeight")->add_child_text (raw_convert<string> (_inter_size.height)); - node->add_child("OutWidth")->add_child_text (raw_convert<string> (_out_size.width)); - node->add_child("OutHeight")->add_child_text (raw_convert<string> (_out_size.height)); - node->add_child("Eyes")->add_child_text (raw_convert<string> (static_cast<int> (_eyes))); - node->add_child("Part")->add_child_text (raw_convert<string> (static_cast<int> (_part))); - node->add_child("VideoRange")->add_child_text(raw_convert<string>(static_cast<int>(_video_range))); - node->add_child("Error")->add_child_text(_error ? "1" : "0"); + _in->add_metadata(cxml::add_child(element, "In")); + cxml::add_text_child(element, "InterWidth", raw_convert<string>(_inter_size.width)); + cxml::add_text_child(element, "InterHeight", raw_convert<string>(_inter_size.height)); + cxml::add_text_child(element, "OutWidth", raw_convert<string>(_out_size.width)); + cxml::add_text_child(element, "OutHeight", raw_convert<string>(_out_size.height)); + cxml::add_text_child(element, "Eyes", raw_convert<string>(static_cast<int>(_eyes))); + cxml::add_text_child(element, "Part", raw_convert<string>(static_cast<int>(_part))); + cxml::add_text_child(element, "VideoRange", raw_convert<string>(static_cast<int>(_video_range))); + cxml::add_text_child(element, "Error", _error ? "1" : "0"); if (_colour_conversion) { - _colour_conversion.get().as_xml (node); + _colour_conversion.get().as_xml(element); } if (_text) { - node->add_child ("SubtitleWidth")->add_child_text (raw_convert<string> (_text->image->size().width)); - node->add_child ("SubtitleHeight")->add_child_text (raw_convert<string> (_text->image->size().height)); - node->add_child ("SubtitleX")->add_child_text (raw_convert<string> (_text->position.x)); - node->add_child ("SubtitleY")->add_child_text (raw_convert<string> (_text->position.y)); + cxml::add_text_child(element, "SubtitleWidth", raw_convert<string>(_text->image->size().width)); + cxml::add_text_child(element, "SubtitleHeight", raw_convert<string>(_text->image->size().height)); + cxml::add_text_child(element, "SubtitleX", raw_convert<string>(_text->position.x)); + cxml::add_text_child(element, "SubtitleY", raw_convert<string>(_text->position.y)); } } @@ -343,7 +344,7 @@ PlayerVideo::shallow_copy () const _colour_conversion, _video_range, _content, - _video_frame, + _video_time, _error ); } @@ -356,12 +357,12 @@ bool PlayerVideo::reset_metadata (shared_ptr<const Film> film, dcp::Size player_video_container_size) { auto content = _content.lock(); - if (!content || !_video_frame) { + if (!content || !_video_time) { return false; } _crop = content->video->actual_crop(); - _fade = content->video->fade(film, _video_frame.get()); + _fade = content->video->fade(film, _video_time.get()); auto const size = content->video->scaled_size(film->frame_size()); if (!size) { return false; diff --git a/src/lib/player_video.h b/src/lib/player_video.h index f2781c1a0..e2968749c 100644 --- a/src/lib/player_video.h +++ b/src/lib/player_video.h @@ -59,7 +59,7 @@ public: boost::optional<ColourConversion> colour_conversion, VideoRange video_range, std::weak_ptr<Content> content, - boost::optional<Frame> video_frame, + boost::optional<dcpomatic::ContentTime> video_time, bool error ); @@ -82,7 +82,7 @@ public: static AVPixelFormat force (AVPixelFormat); static AVPixelFormat keep_xyz_or_rgb (AVPixelFormat); - void add_metadata (xmlpp::Node* node) const; + void add_metadata(xmlpp::Element* element) const; void write_to_socket (std::shared_ptr<Socket> socket) const; bool reset_metadata (std::shared_ptr<const Film> film, dcp::Size player_video_container_size); @@ -141,8 +141,8 @@ private: boost::optional<PositionImage> _text; /** Content that we came from. This is so that reset_metadata() can work. */ std::weak_ptr<Content> _content; - /** Video frame that we came from. Again, this is for reset_metadata() */ - boost::optional<Frame> _video_frame; + /** Video time that we came from. Again, this is for reset_metadata() */ + boost::optional<dcpomatic::ContentTime> _video_time; mutable boost::mutex _mutex; mutable std::shared_ptr<Image> _image; diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index 85957e106..ebeac47e2 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -25,6 +25,7 @@ #include "content_factory.h" #include "dcp_content.h" #include "digester.h" +#include "film.h" #include "ffmpeg_content.h" #include "ffmpeg_decoder.h" #include "image_decoder.h" @@ -226,7 +227,7 @@ Playlist::set_from_xml (shared_ptr<const Film> film, cxml::ConstNodePtr node, in boost::mutex::scoped_lock lm (_mutex); for (auto i: node->node_children ("Content")) { - auto content = content_factory (i, version, notes); + auto content = content_factory(i, film->directory(), version, notes); /* See if this content should be nudged to start on a video frame */ auto const old_pos = content->position(); @@ -282,10 +283,10 @@ Playlist::set_from_xml (shared_ptr<const Film> film, cxml::ConstNodePtr node, in * @param with_content_paths true to include <Path> nodes in <Content> nodes, false to omit them. */ void -Playlist::as_xml (xmlpp::Node* node, bool with_content_paths) +Playlist::as_xml(xmlpp::Element* element, bool with_content_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) { for (auto i: content()) { - i->as_xml (node->add_child ("Content"), with_content_paths); + i->as_xml(cxml::add_child(element, "Content"), with_content_paths, path_behaviour, film_directory); } } @@ -645,16 +646,16 @@ Playlist::move_later (shared_ptr<const Film> film, shared_ptr<Content> c) int64_t -Playlist::required_disk_space (shared_ptr<const Film> film, int j2k_bandwidth, int audio_channels, int audio_frame_rate) const +Playlist::required_disk_space(shared_ptr<const Film> film, int64_t video_bit_rate, int audio_channels, int audio_frame_rate) const { - int64_t video = uint64_t(j2k_bandwidth / 8) * length(film).seconds(); + int64_t video = uint64_t(video_bit_rate / 8) * length(film).seconds(); int64_t audio = uint64_t(audio_channels) * audio_frame_rate * 3 * length(film).seconds(); for (auto i: content()) { auto d = dynamic_pointer_cast<DCPContent> (i); if (d) { if (d->reference_video()) { - video -= uint64_t (j2k_bandwidth / 8) * d->length_after_trim(film).seconds(); + video -= uint64_t(video_bit_rate / 8) * d->length_after_trim(film).seconds(); } if (d->reference_audio()) { audio -= uint64_t(audio_channels) * audio_frame_rate * 3 * d->length_after_trim(film).seconds(); diff --git a/src/lib/playlist.h b/src/lib/playlist.h index e2662eb45..79c140145 100644 --- a/src/lib/playlist.h +++ b/src/lib/playlist.h @@ -26,6 +26,7 @@ #include "change_signaller.h" #include "dcpomatic_time.h" #include "frame_rate_change.h" +#include "path_behaviour.h" #include "types.h" #include <libcxml/cxml.h> #include <boost/signals2.hpp> @@ -50,7 +51,7 @@ public: Playlist (Playlist const&) = delete; Playlist& operator= (Playlist const&) = delete; - void as_xml (xmlpp::Node *, bool with_content_paths); + void as_xml(xmlpp::Element*, bool with_content_paths, PathBehaviour path_behaviour, boost::optional<boost::filesystem::path> film_directory); void set_from_xml (std::shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, std::list<std::string>& notes); void add (std::shared_ptr<const Film> film, std::shared_ptr<Content>); @@ -65,7 +66,7 @@ public: dcpomatic::DCPTime length (std::shared_ptr<const Film> film) const; boost::optional<dcpomatic::DCPTime> start () const; - int64_t required_disk_space (std::shared_ptr<const Film> film, int j2k_bandwidth, int audio_channels, int audio_frame_rate) const; + int64_t required_disk_space(std::shared_ptr<const Film> film, int64_t video_bit_rate, int audio_channels, int audio_frame_rate) const; int best_video_frame_rate () const; dcpomatic::DCPTime video_end (std::shared_ptr<const Film> film) const; diff --git a/src/lib/po/cs_CZ.po b/src/lib/po/cs_CZ.po index 32cb6e9b2..715fae795 100644 --- a/src/lib/po/cs_CZ.po +++ b/src/lib/po/cs_CZ.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2024-05-02 15:01+0200\n" "Last-Translator: Tomáš Begeni <begeni@razdva.cz>\n" "Language-Team: \n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.4.2\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "SnÃmková frekvence obsahu %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -35,7 +35,7 @@ msgstr "" "\n" "OÅ™Ãznout na %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "PomÄ›r stran displeje %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -52,7 +52,7 @@ msgstr "" "\n" "VyplnÄ›né Äernou, aby se zmenÅ¡il do kontejneru %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -60,18 +60,18 @@ msgstr "" "\n" "MěřÃtko %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " na %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -95,39 +95,88 @@ msgstr "" "Délka: $LENGTH\n" "Velikost: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [zvuk]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [video]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [video]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic nemohl otevÅ™Ãt soubor %1 (%2). Možná, že soubor neexistuje nebo " +"je v nepodporovaném formátu." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic musel zmÄ›nit vaÅ¡e nastavenà pro odkazovánà na DCPs jako OV. " +"Zkontrolujte prosÃm tato nastavenà a ujistÄ›te se, že je to to co chcete." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"DCP-o-matic musel zmÄ›nit vaÅ¡e nastavenà tak, aby snÃmková frekvence filmu " +"byla stejná jako u vaÅ¡eho obsahu Atmos." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Emailové oznámenÃ" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 snÃmků" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pomÄ›r stran obrazových bodů %.2f:1" @@ -164,11 +213,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Full frame)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "10" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "16" @@ -180,11 +229,11 @@ msgstr "2.35 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D denoiser" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -194,32 +243,33 @@ msgstr "" "tento formát DCP projektor pÅ™ehraje, je vhodné nastavit DCP na 2K na kartÄ› " "„DCP → Video“." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "9" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 zbývajÃcÃch; dokonÄenà v %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "h2>VytvoÅ™ili jste %1 DCPs s DCP-o-matic!</h2><img width=„20%%“ src=„memory:" "me.jpg“ align=„center“><p>Dobrý den. Jsem Carl a jsem vývojář DCP-o-matic. " @@ -233,10 +283,11 @@ msgstr "" "com/donate_amount?amount=10“>PÅ™ejÃt na Paypal a darovat€10</a></" "ul><p>Mockrát dÄ›kuji!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "NÄ›které projektory majà problémy s pÅ™ehrávánÃm s velmi vysokou pÅ™enosovou " @@ -244,24 +295,25 @@ msgstr "" "200 MB/s; Je nepravdÄ›podobné, že by toto nastvenà mÄ›lo viditelný vliv na " "kvalitu obrázku." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "Soubor titulků nebo skrytých titulků v tomto projektu je oznaÄen jazykem " "‚%1‘, který DCP-o-matic nerozpozná. Jazyk souboru byl vymazán." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Reklama" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -272,7 +324,7 @@ msgstr "" "Bude použit letter-box uvnitÅ™ rámeÄku Flat (1.85:1). Můžete nastavit DCP " "kontejner na Scope (2.39:1) v záložce \"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -282,7 +334,7 @@ msgstr "" "(2.39:1). Na obsah bude použit pillar-box. Můžete radÄ›ji nastavit kontejner " "DCP tak, aby mÄ›l stejný pomÄ›r jako váš obsah." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Vyskytla se chyba pÅ™i zpracovánà souboru %1." @@ -290,28 +342,28 @@ msgstr "Vyskytla se chyba pÅ™i zpracovánà souboru %1." msgid "Analysing audio" msgstr "Analýza zvuku" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Analýza titulků" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "ZnaÄka která pÅ™ijde po konci projektu, bude ignorována." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Jeden z vaÅ¡ich souborů skrytých titulků je vÄ›tšà než " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Jeden z vaÅ¡ich XML souborů se skrytými titulky je vÄ›tšà než " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Jeden z vaÅ¡ich souborů s titulky je vÄ›tšà než " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -319,7 +371,7 @@ msgstr "" "Jeden z vaÅ¡ich řádků s titulky má vÃce než 52 znaků. DoporuÄuje se, aby " "každý řádek mÄ›l maximálnÄ› 52 znaků." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -327,7 +379,7 @@ msgstr "" "Jeden z vaÅ¡ich titulků má vÃce než 79 znaků. Každý řádek by mÄ›l být dlouhý " "maximálnÄ› 79 znaků." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -335,7 +387,7 @@ msgstr "" "Jeden z vaÅ¡ich titulků má vÃce než 3 řádky. DoporuÄuje se použÃt maximálnÄ› 3 " "řádky." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -343,7 +395,7 @@ msgstr "" "Jeden z vaÅ¡ich titulků trvá ménÄ› než 15 snÃmků. DoporuÄuje se, aby každý " "podnadpis mÄ›l délku alespoň 15 snÃmků." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -351,7 +403,7 @@ msgstr "" "Jeden z vaÅ¡ich titulků zaÄÃná ménÄ› než 2 snÃmky po pÅ™edchozÃm. DoporuÄuje " "se, aby mezera mezi titulky byla alespoň 2 snÃmky." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -373,72 +425,72 @@ msgstr "Zvuk bude re-samplovaný na %1Hz" msgid "Audio will not be resampled" msgstr "Zvuk nebude resamplovaný" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 rozÅ¡ÃÅ™ený rozsah barev" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 konstanta jasu" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 pro 10-bit systém" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 pro 12-bit systém" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 non-constant luminance" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bitů na pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Bob Weaver deinterlacing filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "ZruÅ¡ené" @@ -450,11 +502,11 @@ msgstr "Nemůže obsahovat lomÃtka" msgid "Cannot handle pixel format %1 during %2" msgstr "Nemužu zpracovat formát pixelu %1 bÄ›hem %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Nelze vytvoÅ™it KDM, protože tento projekt nenà zaÅ¡ifrován." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Center" @@ -462,7 +514,7 @@ msgstr "Center" msgid "Channels" msgstr "Kanály" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "Zkontrolujte jejich nové nastavenà a zkuste to znovu." @@ -470,27 +522,32 @@ msgstr "Zkontrolujte jejich nové nastavenà a zkuste to znovu." msgid "Checking content" msgstr "Kontrola obsahu" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Kontroluji existujÃcà video data" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Chroma-derived konstantnà svÃtivost" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Chroma-derived nekonstantnà svÃtivost" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "Klip" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Skryté titulky" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "OtevÅ™Ãt titulky" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Primárnà volby barev" @@ -504,17 +561,17 @@ msgstr "Primárnà volby barev" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Rozsah barev" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Charakteristika pÅ™enosu barev" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Barevný prostor" @@ -522,15 +579,15 @@ msgstr "Barevný prostor" msgid "Combine DCPs" msgstr "Kombinovat DCPs" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "VýpoÄet digest" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "VýpoÄet digests" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "BlahopÅ™ejeme!" @@ -546,19 +603,19 @@ msgstr "Bitová hloubka obsahu" msgid "Content sample rate" msgstr "Vzorkovacà frekvence obsahu" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "VeÅ¡kerý obsah ke slouÄenà musà mÃt audio nebo žádné audio" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "VeÅ¡kerý obsah ke slouÄenà musà nebo nemusà obsahovat titulky" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "VeÅ¡kerý obsah ke slouÄenà musà mÃt video nebo žádné video" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -571,11 +628,11 @@ msgstr "" "Obsah, který má být pÅ™ipojen, musà obsahovat vÅ¡echna jeho použitá nebo " "nepoužitá videa." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà ’vypálené titulky'." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà ’použÃt titulky'." @@ -613,7 +670,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà zeslabenÃ." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "PÅ™ipojený obsah musà mÃt stejnou Å¡ÃÅ™ku obrysu." @@ -621,31 +678,31 @@ msgstr "PÅ™ipojený obsah musà mÃt stejnou Å¡ÃÅ™ku obrysu." msgid "Content to be joined must have the same picture size." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà velikosti obrazu." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà titulků X offset." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà titulky X měřÃtko." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà titulkový Y offset." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà titulků Y měřÃtko." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "VeÅ¡kerý obsah ke slouÄenà musà mÃt stejné zeslabenà titulků." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "VeÅ¡kerý obsah ke slouÄenà musà mÃt stejné mezery mezi řádky titulků." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "VeÅ¡kerý obsah ke slouÄenà musà mÃt stejnou snÃmkovou rychlost" @@ -653,24 +710,24 @@ msgstr "VeÅ¡kerý obsah ke slouÄenà musà mÃt stejnou snÃmkovou rychlost" msgid "Content to be joined must have the same video frame type." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà typu videa." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Aby se spojil obsah, musà použÃvat stejnou DCP stopu ." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà pÃsma." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Aby se spojil obsah, musà mÃt stejné nastavenà titulkového streamu." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "" "Obsah, ke kterému se chcete pÅ™ipojit, musà použÃvat stejný jazyk textu." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Video je %1x%2" @@ -678,14 +735,6 @@ msgstr "Video je %1x%2" msgid "Copy DCP to TMS" msgstr "KopÃrovat DCP do TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "KopÃrovánà starého souboru videa" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "KopÃrovánà video souboru do DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Nemohu se pÅ™ipojit k serveru %1 (%2)" @@ -702,20 +751,21 @@ msgstr "Nemohu dekódovat JPEG2000 soubor %1 (%2)" msgid "Could not decode image (%1)" msgstr "Nelze dekódovat obraz (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Nemohu otevÅ™Ãt ZIP soubor" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Nemohu zkontrolovat vzdálené enkódovacà servery. Možná je už DCP-o-matic " "zapnutý." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Nemohu otevÅ™Ãt %1" @@ -723,19 +773,19 @@ msgstr "Nemohu otevÅ™Ãt %1" msgid "Could not open %1 to send" msgstr "Nemohu otevÅ™Ãt %1 k poslánÃ" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Nemohu otevÅ™Ãt ZIP soubor" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Nemohu otevÅ™Ãt stažený ZIP soubor (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Nemohu otevÅ™Ãt soubor pro zápis" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "Nelze otevÅ™Ãt výstupnà soubor% 1 (% 2)" @@ -751,19 +801,19 @@ msgstr "Nemohu zaÄÃt pÅ™enos" msgid "Could not write to remote file (%1)" msgstr "Nemohu zapisovat do vzdáleného souboru (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX primárnÃ" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX sekundárnÃ" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -775,7 +825,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML titulky" @@ -792,49 +842,35 @@ msgstr "DCP bude běžet na %.1f%% obsahu videa.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP bude použÃvat každý druhý frame obsahu \n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic nemohl otevÅ™Ãt soubor %1 (%2). Možná, že soubor neexistuje nebo " -"je v nepodporovaném formátu." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic musel zmÄ›nit vaÅ¡e nastavenà pro odkazovánà na DCPs jako OV. " -"Zkontrolujte prosÃm tato nastavenà a ujistÄ›te se, že je to to co chcete." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic musel zmÄ›nit vaÅ¡e nastavenà tak, aby snÃmková frekvence filmu " -"byla stejná jako u vaÅ¡eho obsahu Atmos." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "DCP-o-matic oznámenÃ" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 nebo AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "De-interlacing" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -846,7 +882,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Milý promÃtaÄi,\n" "\n" @@ -860,11 +896,15 @@ msgstr "" "DÄ›kujeme a pÅ™ejeme pÄ›kný den,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 nebo CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Stahovánà selhalo (%1 error %2)" @@ -888,19 +928,19 @@ msgstr "Email KDM pro %2" msgid "Email notification" msgstr "Emailové oznámenÃ" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Správa o problému s Emailem" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Správa o problému s Emailem pro %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "KódovánÃ" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Epizoda" @@ -908,19 +948,19 @@ msgstr "Epizoda" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Chyba v souboru titulků: vidÄ›ný %1 a byl oÄekávaný %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Chyba: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "Událost" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 msgid "Examining audio" msgstr "Zkoumánà zvuku" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Zkoumánà zvuku, titulků a skrytých titulků" @@ -932,15 +972,15 @@ msgstr "Zkoumánà obsahu" msgid "Examining subtitles" msgstr "Zkoumánà titulků" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Zkoumánà titulků a skrytých titulků" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "RozbalovánÃ" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -948,51 +988,51 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Chyba pÅ™i autentifikovánà se serverem (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Kódovánà DCP se nezdaÅ™ilo." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Odeslánà e-mailu se nezdaÅ™ilo" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Feature" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Jméno souboru" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "Jména souborů" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "Soubory se od doby pÅ™idánà do projektu zmÄ›nily." -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "ZjiÅ¡tÄ›nà délky" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "SnÃmková frekvence" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Pátek" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Full" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Full (0-%1)" @@ -1016,35 +1056,35 @@ msgstr "Plná délka video snÃmků v DCP rychlosti" msgid "Full length in video frames at content rate" msgstr "Plná délka video snÃmků v rychlosti obsahu" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradient debander" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "SluchovÄ› postižený(Ã)" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Vysoká kvalita 3D denoiser" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "ZvýraznÄ›nÃ" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Horizontálnà flip" @@ -1052,19 +1092,19 @@ msgstr "Horizontálnà flip" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB nebo sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "PoužÃváte-li 25fps, mÄ›li byste zmÄ›nit váš standard DCP na SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " @@ -1074,9 +1114,10 @@ msgstr "" "použÃvat Interop. Je vhodné nastavit váš DCP tak, aby použÃval standard " "SMPTE v záložce „DCP“." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 +#, fuzzy msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." @@ -1086,7 +1127,7 @@ msgstr "" "ve svém projektu, abyste se ujistili, že jsou umÃstÄ›ny tam, kde je chcete " "mÃt." -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1094,72 +1135,73 @@ msgstr "" "DoporuÄujeme vložit prvnà titulky alespoň 4 sekundy po spuÅ¡tÄ›nà DCP, abyste " "mÄ›li jistotu, že budou vidÄ›t." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "NevÃm, co zapÅ™ÃÄinilo tuto chybu." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "KDM doruÄenÃ: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Kernel deinterlacer" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Left (Levý)" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Left centre (Levý stÅ™ed)" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Left rear surround (Levý zadnà surround)" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Left surround (Levý surround)" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Délka" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (Subwoofer)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limitovaný" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 msgid "Limited / video (%1-%2)" msgstr "Omezené / video (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "LineárnÃ" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logarmitmický (rozsah 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logarmitmický (rozsah 316:1 )" @@ -1167,7 +1209,7 @@ msgstr "Logarmitmický (rozsah 316:1 )" msgid "Lost communication between main and writer processes" msgstr "Ztráta komunikace mezi hlavnÃmi a zapisovanými procesy" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1175,24 +1217,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Mid-side dekodér" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Různé" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "PoÄet zvukových kanálů se v DCP neschoduje" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Vzorkovacà kmitoÄet zvuku v DCP neschoduje" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "V DPC se neschoduje poÄet obrázků za sekundu" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "V DCP se neshoduje velikost videa" @@ -1200,19 +1242,19 @@ msgstr "V DCP se neshoduje velikost videa" msgid "Missing required setting %1" msgstr "Chybà potÅ™ebná nastavenà %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "PondÄ›lÃ" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Pohybový kompenzaÄnà odstraňovaÄ" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "V DCP nebyla nalezena žádná CPLs." @@ -1225,76 +1267,90 @@ msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "" "Na kartÄ› E-mail v pÅ™edvolbách nenà nakonfigurován žádný server odchozà poÅ¡ty" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Ve složce nebyly nalezeny žádné platné soubory." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Redukce hluku" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Žádný" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "OK" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (spuÅ¡tÄ›no od %1 do %2 to %3)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (hotovo za %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "Jen pravá Äást pÅ™ipojeného obsahu může být upravená od zaÄátku." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Jen poslednà Äást pÅ™ipojeného obsahu může být upravená od konce." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Skryté titulky" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "OtevÅ™Ãt titulky" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 +#, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "OtevÅ™ete projekt v programu DCP-o-matic, zkontrolujte nastavenà a pÅ™ed " "dalÅ¡Ãm pokusem jej uložte." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Orientace" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Málo pamÄ›ti" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Overcomplete wavelet denoiser" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Nahlásit tento problém pomocà NápovÄ›dy -> Nahlásit problém e-mailem na " +"adresu carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Policy" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "PÅ™edem násobit alfa kanál" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "PÅ™Ãprava pro snÃmkovou frekvenci videa" @@ -1302,93 +1358,93 @@ msgstr "PÅ™Ãprava pro snÃmkovou frekvenci videa" msgid "Programming error at %1:%2 %3" msgstr "Chyba pÅ™i programovanà na %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promo" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Public Service Announcement (VeÅ™ejné oznámenà služby)" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "PÅ™Ãstupnost" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601 (SD)" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709 (HD)" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Right (Pravý)" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Right centre (Pravý stÅ™ed)" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Right rear surround (Pravý zadnà surround)" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Right surround (Pravý surround)" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "OtoÄit o 90 stupňů proti smÄ›ru hodinových ruÄiÄek" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "OtoÄit o 90 stupňů po smÄ›ru hodinových ruÄiÄek" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1398,23 +1454,23 @@ msgstr "" "závÄ›reÄných titulků (FFEC) a prvnà snÃmek pohyblivých titulků (FFMC). Tyto " "znaÄky byste mÄ›li pÅ™idat pomocà tlaÄÃtka „ZnaÄky“ na kartÄ› „DCP“." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1427,27 +1483,27 @@ msgstr "SSH chyba [%1]" msgid "SSH error [%1] (%2)" msgstr "SSH chyba [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Sobota" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Skenovánà obrazových souborů" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "PosÃlám email" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Short (Krátky film)" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Podepsat" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Velikost" @@ -1455,11 +1511,11 @@ msgstr "Velikost" msgid "Some audio will be resampled to %1Hz" msgstr "NÄ›které audio bude pÅ™evzorkované na %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "NÄ›které soubory byly od svého pÅ™idánà do projektu zmÄ›nÄ›ny." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1482,7 +1538,7 @@ msgstr "" "Tyto soubory budou nynà znovu pÅ™ezkoumány, takže bude pravdÄ›podobnÄ› nutné " "zkontrolovat jejich nastavenÃ." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." @@ -1490,7 +1546,7 @@ msgstr "" "NÄ›které ze skrytých titulků jsou rozloženy na vÃce než %1 řádcÃch, takže " "budou zkráceny." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1512,11 +1568,11 @@ msgstr "Část vaÅ¡eho obsahu potÅ™ebuje KDM" msgid "Some of your content needs an OV" msgstr "Část vaÅ¡eho obsahu potÅ™ebuje OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "Stereo karta" @@ -1528,19 +1584,19 @@ msgstr "Stereo na 5.1 up-mixer A" msgid "Stereo to 5.1 up-mixer B" msgstr "Stereo na 5.1 up-mixer B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "NedÄ›le" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser (Krátká upoutávka)" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Telecine Filter" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1560,13 +1616,14 @@ msgstr "ŘetÄ›z certifikátů pro podepisovánà je neplatný" msgid "The certificate chain for signing is invalid (%1)" msgstr "ŘetÄ›z certifikátů pro podepisovánà je neplatný (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 +#, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "ŘetÄ›zec certifikátů, který DCP-o-matic použÃvá k podepisovánà DCP a KDM, " "obsahuje malou chybu, která zabránà správnému ověřenà DCP na nÄ›kterých " @@ -1574,13 +1631,14 @@ msgstr "" "kliknutÃm na tlaÄÃtko „Znovu vytvoÅ™it certifikáty a klÃÄ…“ na stránce KlÃÄe " "v PÅ™edvolbách." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 +#, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "ŘetÄ›z certifikátů, který DCP-o-matic použÃvá k podepisovánà DCP a KDM, má " "pÅ™ÃliÅ¡ dlouhou dobu platnosti. To způsobà problémy s pÅ™ehrávánÃm DCP na " @@ -1588,7 +1646,7 @@ msgstr "" "certifikátů kliknutÃm na tlaÄÃtko „Znovu vytvoÅ™it certifikáty a klÃÄ…“ na " "stránce KlÃÄe v PÅ™edvolbách." -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1598,7 +1656,7 @@ msgstr "" "Nastavte jej na 2D. 3D DCP z tohoto obsahu můžete stále vytvoÅ™it " "zaÅ¡krtnutÃm polÃÄka 3D na kartÄ› DCP video." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1606,23 +1664,42 @@ msgstr "" "Disk, na kterém se nacházà film už má málo volného mÃsta. UvolnÄ›te mÃsto a " "zkuste to znovu." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Soubor %1 byl posunut o %2 milisekund dÅ™Ãve." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Soubor %1 byl posunut o %2 milisekund pozdÄ›ji." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Soubor %1 byl oÅ™Ãznut o %2 milisekund ménÄ›." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Soubor %1 byl oÅ™Ãznut o %2 milisekund vÃce." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +#, fuzzy +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" +"V této verzi doÅ¡lo ke zmÄ›nám v umÃstÄ›nà titulků. UmÃstÄ›nà by nynà mÄ›lo být " +"správnÄ›jšà s ohledem na normy, ale mÄ›li byste zkontrolovat vÅ¡echny titulky " +"ve svém projektu, abyste se ujistili, že jsou umÃstÄ›ny tam, kde je chcete " +"mÃt." + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1636,11 +1713,11 @@ msgstr "" "která je blÞe vaÅ¡emu obsahu, za pÅ™edpokladu, že vaÅ¡e cÃlové projekÄnà " "systémy podporujà vámi zvolenou rychlost DCP." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "V tomto DCP nenà video" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1649,31 +1726,34 @@ msgstr "" "Zbývá málo pamÄ›ti. Pokud je váš systém 32-bitový, zkuste snÞit poÄet " "enkódovacÃch threadov v záložce VÅ¡eobecné, v nastavenÃ." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "KDM byl vytvoÅ™en pro DCP-o-matic, ale ne pro jeho koncový certifikát." -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "Tento KDM nebyl vyroben pro deÅ¡ifrovacà certifikát DCP-o-matic." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "K této chybÄ› pravdÄ›podobnÄ› doÅ¡lo, protože použÃváte 32bitovou verzi DCP-o-" "matic a pokouÅ¡Ãte se použÃt pÅ™ÃliÅ¡ mnoho vláken kódovánÃ. Snižte poÄet " "vláken, které by mÄ›l použÃvat DCP-o-matic na kartÄ› Obecné pÅ™edvoleby a akci " "opakujte." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "K této chybÄ› pravdÄ›podobnÄ› doÅ¡lo, protože použÃváte 32bitovou verzi DCP-o-" "matic. Znovu nainstalujte DCP-o-matic pomocà 64bitového instalaÄnÃho " @@ -1687,45 +1767,47 @@ msgstr "" "Tento soubor je KDM. KDM by mÄ›ly být pÅ™idány do obsahu DCP klepnutÃm pravým " "tlaÄÃtkem myÅ¡i na obsah a výbÄ›rem možnosti “PÅ™idat KDMâ€." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Tento film byl vytvoÅ™ený novÄ›jšà verzà DCP-o-matic, a nemůže být naÄtený " "touto verzÃ. Omlouváme se !" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Tento film bol vytvoÅ™ený staršà verzà DCP-o-matic, a bohužel nemůže být " "naÄtený do do této verze. Budete muset vytvoÅ™it nový Film, znovu pÅ™idat váš " "obsah a znovu provést nastavenÃ. Omlouváme se!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "ÄŒtvrtek" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "ÄŒasovaný text" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "PÅ™ekódovánà %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitional (PÅ™echod)" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Úterý" @@ -1733,7 +1815,7 @@ msgstr "Úterý" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "NeoÄekávaný obsah ZIP" @@ -1741,35 +1823,35 @@ msgstr "NeoÄekávaný obsah ZIP" msgid "Unexpected image type received by server" msgstr "Server obdržel neoÄekávaný typ obrazu" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Neznámé" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Neznáma chyba" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Nerozpoznaná vzorkovacà frekvence audia (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "DoostÅ™enà a Gaussovské rozostÅ™enÃ" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Nespecifikované" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Nepojmenované" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Nepoužité" @@ -1781,7 +1863,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1789,11 +1871,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Ověřit DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Vertikálnà flip" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "ZrakovÄ› postižený(Ã)" @@ -1801,23 +1883,23 @@ msgstr "ZrakovÄ› postižený(Ã)" msgid "Waiting" msgstr "ÄŒekám" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Filtr vazby" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "StÅ™eda" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "JeÅ¡tÄ› dalšà deinterlacing filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " @@ -1827,7 +1909,7 @@ msgstr "" "nenà podporována vÅ¡emi projektory. DoporuÄujeme zmÄ›nit snÃmkovou frekvenci " "DCP na %2 fps." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1837,7 +1919,7 @@ msgstr "" "nenà podporována vÅ¡emi projektory. Možná budete chtÃt zmÄ›nit snÃmkovou " "frekvenci na %2 fps." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1845,25 +1927,26 @@ msgstr "" "Nastavili jste pro DCP snÃmkovou frekvenci na 30fps, která nenà podporována " "vÅ¡emi projektory. MÄ›jte na pamÄ›ti, že můžete mÃt potÞe s kompatibilitou." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"PoužÃváte 3D obsah, ale váš DCP je nastaven na 2D. Nastavte DCP na 3D, pokud " -"chcete pÅ™ehrávat ve 3D systému (napÅ™. Real-D, MasterImage atd.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "PoužÃváte DCP-o-matic’s stereo-to-5.1 mixer. Ten je experimentálnà a může " "mÃt za následek Å¡patnou kvalitu zvuku. Pokud budete pokraÄovat, mÄ›li byste " "poslouchat výsledný DCP v kinÄ›, abyste se ujistili, že to znà dobÅ™e." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"PoužÃváte 3D obsah, ale váš DCP je nastaven na 2D. Nastavte DCP na 3D, pokud " +"chcete pÅ™ehrávat ve 3D systému (napÅ™. Real-D, MasterImage atd.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1871,7 +1954,7 @@ msgstr "" "Máte %1 souborů, které vypadajà jako VOB soubory z DVD. MÄ›li byste je " "spojit, aby zajistit tak hladké spojenà mezi tÄ›mito dvÄ›ma soubory." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1879,7 +1962,7 @@ msgstr "" "Máte vÃce než jednu Äást obsahu Atmos která nemá stejnou snÃmkovou " "frekvenci. MusÃte odstranit nÄ›jaký obsah Atmos." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1887,7 +1970,7 @@ msgstr "" "Máte pÅ™ekrývajÃcà se skryté titulky, které nejsou povoleny v Interop DCPs. " "Změňte standard DCP na SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1899,7 +1982,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "MusÃte pÅ™idat obsah do DCP pÅ™ed tÃm než ho vytvoÅ™Ãte" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " @@ -1909,18 +1992,19 @@ msgstr "" "nÄ›kteřà distributoÅ™i pÅ™i kontrole vaÅ¡eho DCP zvýšà chyby kontroly kvality. " "Abyste tomu zabránili, nastavte zvukové kanály DCP na 8 nebo 16." -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "DCP má ménÄ› než 6 zvukových kanálů. To může způsobit problémy na nÄ›kterých " "projektorech. Možná budete chtÃt nastavit DCP na 6 kanálů.. Nezáležà na " "tom, zda má váš obsah ménÄ› kanálů, protože DCP-o-matic naplnà doplňky tichem." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1928,41 +2012,41 @@ msgstr "" "VaÅ¡e DCP použÃvá neobvyklý pomÄ›r. To může u nÄ›kterých projektorů způsobit " "problémy. Pokud je to možné, použijte pro pomÄ›r DCP formát Flat nebo Scope." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "" "Hlasitost zvuku je velmi vysoká (na %1). Snižte zesÃlenà zvukového obsahu." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "Váš projekt obsahuje videoobsah, který nebyl zarovnán s hranicà snÃmku." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "" "Váš projekt obsahuje videoobsah, jehož obrys nebyl zarovnán s hranicà snÃmku." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[pÅ™esouvám obrázky]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[stále]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[titulky]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_reel%1" @@ -1994,11 +2078,11 @@ msgstr "kopÃruji %1" msgid "could not find stream information" msgstr "nemohu najÃt informace o streamu" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "nemohu pÅ™esunout atmos asset do DCP (% 1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "nemohu pÅ™esunout audio do DCP (%1)" @@ -2026,7 +2110,7 @@ msgstr "nemohu zapisovat do souboru %1 (%2)" msgid "error during async_connect (%1)" msgstr "chyba pÅ™i async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "chyba pÅ™i async_read (%1)" @@ -2034,28 +2118,28 @@ msgstr "chyba pÅ™i async_read (%1)" msgid "error during async_write (%1)" msgstr "chyba pÅ™i async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "snÃmky za sekundu" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "má jinou snÃmkovou frekvenci za sekundu pro film." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" @@ -2063,35 +2147,45 @@ msgstr "" "titulky." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "je 2K a film je 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "je 4K a film je 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "to je Interop a film je nastaven na SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "to je SMPTE a film je Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "pÅ™ekrývá jiný zvukový obsah; odstranit jiný obsah." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "pÅ™ekrývá jiný zvukový obsah; odstranit jiný obsah." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "pÅ™ekrývá se s jiným videoobsahem; odstranit jiný obsah." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2100,16 +2194,16 @@ msgstr "" "obsahu videa’." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "velikost video rámeÄku se lišà od filmu." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "pÅ™esouvám" @@ -2118,7 +2212,7 @@ msgid "name" msgstr "jméno" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2126,37 +2220,45 @@ msgstr "" "jeden ze skrytých titulků má nenulový vstupnà bod, takže musà být pÅ™epsán." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "jeden z titulků má nenulový vstupnà bod, takže musà být pÅ™epsán." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "stále" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "pÅ™ekrývá se s jiným textovým obsahem; odeberte dalšà obsah." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "neznáme" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "video snÃmky" +#~ msgid "Copying old video file" +#~ msgstr "KopÃrovánà starého souboru videa" + +#~ msgid "Copying video file into DCP" +#~ msgstr "KopÃrovánà video souboru do DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "DCP-o-matic oznámenÃ" + +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "pÅ™ekrývá se s jiným textovým obsahem; odeberte dalšà obsah." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "nemá skryté titulky ve vÅ¡ech reelech." @@ -2167,13 +2269,6 @@ msgstr "video snÃmky" #~ msgstr "nemá zvuk ve vÅ¡ech reelech." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Nahlásit tento problém pomocà NápovÄ›dy -> Nahlásit problém e-mailem na " -#~ "adresu carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "Výchozà kontejner nenà platný a byl zmÄ›nÄ›n na Flat (1,85: 1)" diff --git a/src/lib/po/da_DK.po b/src/lib/po/da_DK.po index 1007204c0..d2d6b55e0 100644 --- a/src/lib/po/da_DK.po +++ b/src/lib/po/da_DK.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2019-04-06 12:29+0200\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,7 +17,7 @@ msgstr "" "X-Generator: Poedit 2.1.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Indholds billedhastighed %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "BeskÃ¥ret til %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Skærmformat %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Udfyldt med sort for at tilpasse til container %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Skaleret til %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " pÃ¥ %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -94,39 +94,92 @@ msgstr "" "Længde: $LENGTH\n" "Størrelse: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [lyd]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [video]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic kunne ikke Ã¥bne filen %1 (%2). MÃ¥ske findes den ikke, eller den " +"er i et uventet format." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic var nødt til at ændre dine instillinger for at referere til " +"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som " +"ønsket." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"DCP-o-matic var nødt til at ændre dine instillinger for at referere til " +"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som " +"ønsket." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" +"DCP-o-matic understøtter ikke længere `%1'-filteret, sÃ¥ det er blevet slÃ¥et " +"fra." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Email besked" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixel format %.2f:1" @@ -163,11 +216,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Fuldt billede)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -180,71 +233,72 @@ msgstr "2.35 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D-denoiser" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 bps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 mangler; færdig ca %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Nogle projektorer har problemer med at afspille DCPere med meget høj " "bithastighed. Det vil være en god ide at sætte JPEG2000 bÃ¥ndbredden ned til " "ca. 200Mbit/s - det bør ikke have nogen synlig effekt pÃ¥ billedet." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Reklamer (ADV)" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -256,7 +310,7 @@ msgstr "" "billede. Du vil mÃ¥ske foretrække at sætte din DCP's container til Scope " "(2.39:1) i fanen \"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -268,7 +322,7 @@ msgstr "" "mÃ¥ske foretrække at sætte din DCP's container til at have samme " "størrelsesforhold som dit indhold." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Der skete en fejl, mens der blev arbejdet pÃ¥ filen %1." @@ -276,59 +330,59 @@ msgstr "Der skete en fejl, mens der blev arbejdet pÃ¥ filen %1." msgid "Analysing audio" msgstr "Analyserer lyd" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 #, fuzzy msgid "Analysing subtitles" msgstr "Undersøger undertekster" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -347,73 +401,73 @@ msgstr "Lyd resamples til %1Hz" msgid "Audio will not be resampled" msgstr "Lyd bliver ikke resamplet" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 udvidet farveskala" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 konstant luminans" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 til 10 bit system" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 til 12 bit system" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 variabel luminans" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits per pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 #, fuzzy msgid "Bob Weaver Deinterlacing Filter" msgstr "Endnu et Deinterlacing Filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsV" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsH" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Annulleret" @@ -425,11 +479,11 @@ msgstr "MÃ¥ ikke indeholde skrÃ¥streger" msgid "Cannot handle pixel format %1 during %2" msgstr "Kan ikke hÃ¥ndtere pixelformat %1 under %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Kan ikke generere en KDM da projektet ikke er krypteret." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Center" @@ -437,7 +491,7 @@ msgstr "Center" msgid "Channels" msgstr "Lyd kanaler" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -446,27 +500,32 @@ msgstr "" msgid "Checking content" msgstr "Undersøger om der er ændringer i indholdet" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Verificerer eksisterende billeddata" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Chroma-afledt konstant luminans" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Chroma-afledt ikke-konstant luminans" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Lukkede billedtekster" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Ã…bne undertekster" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Primærfarver" @@ -480,17 +539,17 @@ msgstr "Primærfarver" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Farveskala" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Farveoverføringskarakteristik" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Farverum" @@ -498,15 +557,15 @@ msgstr "Farverum" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Beregner resume" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Beregner resumeer" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -524,24 +583,24 @@ msgstr "indholdstype" msgid "Content sample rate" msgstr "Lydindholds sample rate" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" "Elementer der skal splejses skal enten alle have lyd eller slet ikke have lyd" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Elementer der skal splejses skal alle have eller slet ikke have undertekster " "eller billedtekster" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" "Elementer der skal splejses skal enten alle have billede eller slet ikke " "have billede" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 #, fuzzy msgid "" "Content to be joined must both be main subtitle languages or both additional." @@ -553,13 +612,13 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "Indhold der skal splejses skal have samme billedhastighed" -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "Indhold der skal splejses skal have samme indstilling af 'Brænd undertekster " "ind i billedet'." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Indhold der skal splejses skal have den samme indstilling af 'brug " @@ -602,7 +661,7 @@ msgstr "Indhold der skal splejses skal have samme skaleringsindstilling." msgid "Content to be joined must have the same fades." msgstr "Indhold der skal splejses skal fade pÃ¥ samme mÃ¥de." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Indhold der skal splejses skal have samme breddeindramning." @@ -610,32 +669,32 @@ msgstr "Indhold der skal splejses skal have samme breddeindramning." msgid "Content to be joined must have the same picture size." msgstr "Indhold der skal splejses skal have samme billedstørrelse." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "Indhold der skal splejses skal have samme X offset for undertekst." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Indhold der skal splejses skal have samme X skalering af undertekst." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "Indhold der skal splejses skal have samme Y offset for undertekst." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Indhold der skal splejses skal have samme Y skalering af undertekst." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "Indhold der skal splejses skal have samme udtoning af undertekster." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "Indhold der skal splejses skal have samme linjeafstand pÃ¥ undertekster." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Indhold der skal splejses skal have samme billedhastighed" @@ -643,24 +702,24 @@ msgstr "Indhold der skal splejses skal have samme billedhastighed" msgid "Content to be joined must have the same video frame type." msgstr "Indhold der skal splejses skal have samme billedtype." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Indhold der skal splejses skal bruge det samme DCP-spor." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Indhold der skal splejses skal bruge samme skrifttype." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Indhold der skal splejses skal bruge samme tekstningsstrøm." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 #, fuzzy msgid "Content to be joined must use the same text language." msgstr "Indhold der skal splejses skal bruge samme skrifttype." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Indholdsvideo er %1x%2" @@ -668,15 +727,6 @@ msgstr "Indholdsvideo er %1x%2" msgid "Copy DCP to TMS" msgstr "Kopier DCP til TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -#, fuzzy -msgid "Copying video file into DCP" -msgstr "Videostørrelser passer ikke i DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Kunne ikke fÃ¥ forbindelse til server %1 (%2)" @@ -693,20 +743,21 @@ msgstr "Kunne ikke læse JPEG2000 fil %1 (%2)" msgid "Could not decode image (%1)" msgstr "Kunne ikke afkode billedet (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Kunne ikke Ã¥bne downloadet ZIP-fil" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Kunne ikke lytte efter andre genereringsservere. MÃ¥ske kører en anden " "instans af DCP-o-matic." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Kunne ikke Ã¥bne %1" @@ -714,19 +765,19 @@ msgstr "Kunne ikke Ã¥bne %1" msgid "Could not open %1 to send" msgstr "Kunne ikke Ã¥bne %1 til afsendelse" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Kunne ikke Ã¥bne downloadet ZIP-fil" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Den hentede ZIP-fil (%1:%2: %3) kunne ikke Ã¥bnes." -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Kunne ikke Ã¥bne fil til skrivning" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 #, fuzzy msgid "Could not open output file %1 (%2)" msgstr "kunne ikke skrive til fil %1 (%2)" @@ -743,19 +794,19 @@ msgstr "Kunne ikke starte overførsel" msgid "Could not write to remote file (%1)" msgstr "Kunne ikke skrive til fjernfil. (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "primær D-BOX" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "sekundær D-BOX" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -767,7 +818,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML undertekster" @@ -784,54 +835,35 @@ msgstr "DCP vil køre ved %.1f%% af indholdshastigheden.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP vil bruge hvert andet billede fra indholdet.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic kunne ikke Ã¥bne filen %1 (%2). MÃ¥ske findes den ikke, eller den " -"er i et uventet format." - -#: src/lib/film.cc:1596 -msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." -msgstr "" -"DCP-o-matic var nødt til at ændre dine instillinger for at referere til " -"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som " -"ønsket." -#: src/lib/film.cc:1564 -#, fuzzy +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic var nødt til at ændre dine instillinger for at referere til " -"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som " -"ønsket." -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic understøtter ikke længere `%1'-filteret, sÃ¥ det er blevet slÃ¥et " -"fra." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "DCP-o-matic besked" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Sammenfletning (de-interlacing)" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -843,7 +875,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Kære operatør\n" "\n" @@ -857,12 +889,16 @@ msgstr "" "Med venlig hilsen,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 #, fuzzy msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 og CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Download fejlede (%1 fejl %2)" @@ -888,19 +924,19 @@ msgstr "E-mail KDM'er til %1" msgid "Email notification" msgstr "Email besked" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Send problemrapport som mail" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Send problemrapport som mail til %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Kodning" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -908,20 +944,20 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Fejl i fil med undertekster: sÃ¥ %1 men forventede %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Fejl: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Undersøger undertekster" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Undersøger billedtekster" @@ -934,17 +970,17 @@ msgstr "Undersøger indhold" msgid "Examining subtitles" msgstr "Undersøger undertekster" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Undersøger billedtekster" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 #, fuzzy msgid "Extracting" msgstr "Censur" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -952,53 +988,53 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Kunne ikke godkende mod server (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 #, fuzzy msgid "Failed to encode the DCP." msgstr "Afsendelse af e-mail mislykkedes" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Afsendelse af e-mail mislykkedes" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Feature" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Filnavn" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Filnavn" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Beregner længde" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Billedhastighed" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Fredag" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Fuld" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Fuld (0-%1)" @@ -1022,35 +1058,35 @@ msgstr "Full length in video frames at DCP rate" msgid "Full length in video frames at content rate" msgstr "Full length in video frames at content rate" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradient debander" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HH" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Hørehæmmede" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Høj-kvalitets 3D-denoiser" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Horizontal flip" @@ -1058,106 +1094,107 @@ msgstr "Horizontal flip" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB eller sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "NÃ¥r du benytter 25bps bør du ændre DCP standard til SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Det er uklart hvad der forÃ¥rsagede denne fejl." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "KDM-levering: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Kerne sammenfletter" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Venstre" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Venstre center" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Venstre bag surround" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Venstre surround" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Længde" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Begrænset" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Begrænset (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Lineær" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logaritmisk (100:1 range)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logaritmisk (316:1 range)" @@ -1165,7 +1202,7 @@ msgstr "Logaritmisk (316:1 range)" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1173,24 +1210,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Mid-side dekoder" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Diverse" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Antallet af lydkanaler passer ikke i DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Uoverensstemmelse mellem lydsamplingshastigheder i DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Billedhastigheder passer ikke i DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Videostørrelser passer ikke i DCP" @@ -1198,19 +1235,19 @@ msgstr "Videostørrelser passer ikke i DCP" msgid "Missing required setting %1" msgstr "Mangler pÃ¥krævet indstilling %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Mandag" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Bevægelseskompenserende deinterlacer" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Der blev ikke fundet CPL'er i DCPen." @@ -1224,80 +1261,93 @@ msgstr "Mail server er ikke sat op i indstillinger" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Mail server er ikke sat op i indstillinger" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Ingen korrekte billedfiler kunne findes i folderen." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Støjreduktion" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Ingen" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (kørte i %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (kørte i %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "Kun det første indhold, der skal sammensættes, kan have starttrim." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Kun det sidste indhold, der skal sammensættes, kan have sluttrim." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Lukkede billedtekster" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Ã…bne undertekster" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 #, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Nogle filer er blevet ændret siden de blev tilføjet til projektet.\n" "\n" "De bliver nu undersøgt igen, og det kan være nødvendigt at gennemse deres " "indstillinger bagefter." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Retning" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Ikke tilstrækkelig arbejdshukommelse" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Overcomplete wavelet denoiser" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Rapporter venligst dette problem via Hjælp -> Rapporter et problem eller via " +"email til carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Metode (Policy)" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Forberedt til video billedhastighed" @@ -1305,116 +1355,116 @@ msgstr "Forberedt til video billedhastighed" msgid "Programming error at %1:%2 %3" msgstr "Programmerings fejl ved %1: %2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Publikumsorientering (PSA)" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Censur" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Højre" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Højre center" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Højre bag surround" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Højre surround" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Roter 90 grader mod uret" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Roter 90 grader med uret" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 til systemer pÃ¥ 10, 12, 14 og 16 bit" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1429,27 +1479,27 @@ msgstr "SSH-fejl (%1)" msgid "SSH error [%1] (%2)" msgstr "SSH-fejl (%1)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Lørdag" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Scanner billedfiler" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Sender email" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Short" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Størrelse" @@ -1457,7 +1507,7 @@ msgstr "Størrelse" msgid "Some audio will be resampled to %1Hz" msgstr "Noget lyd resamples til %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 #, fuzzy msgid "Some files have been changed since they were added to the project." msgstr "" @@ -1466,7 +1516,7 @@ msgstr "" "De bliver nu undersøgt igen, og det kan være nødvendigt at gennemse deres " "indstillinger bagefter." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 #, fuzzy msgid "" "Some files have been changed since they were added to the project.\n" @@ -1490,14 +1540,14 @@ msgstr "" "De bliver nu undersøgt igen, og det kan være nødvendigt at gennemse deres " "indstillinger bagefter." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" "Nogle af underteksterne er pÃ¥ mere end %1 linjer, sÃ¥ de bliver beskÃ¥ret." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1517,11 +1567,11 @@ msgstr "Noget af dit indhold mangler en KDM" msgid "Some of your content needs an OV" msgstr "Noget af dit indhold mangler en OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Stereo" @@ -1534,19 +1584,19 @@ msgstr "Stereo til 5.1 up-mixer A" msgid "Stereo to 5.1 up-mixer B" msgstr "Stereo til 5.1 up-mixer B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Søndag" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Telecinefilter" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1566,32 +1616,32 @@ msgstr "Certifikatkæden til signering er ugyldig" msgid "The certificate chain for signing is invalid (%1)" msgstr "Certifikatkæden til signering er ugyldig (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1599,23 +1649,37 @@ msgstr "" "Filmen ligger pÃ¥ et drev, der kun har lidt ledig plads. Frigør noget plads " "og prøv igen." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Filen %1 er blevet flyttet %2 millisekunder frem." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Filen %1 er blevet flyttet %2 millisekunder tilbage." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Filen %1 er blevet trimmet %2 millisekunder kortere." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Filen %1 er blevet trimmet %2 millisekunder længere." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1630,11 +1694,11 @@ msgstr "" "indholdet, sÃ¥længe det er en billedhastighed der understøttes af det system " "DCPen skal afspilles fra." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Der er ingen video i denne DCP" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1644,30 +1708,33 @@ msgstr "" "kører pÃ¥ et 32 bit operativsystem, sÃ¥ prøv at reducere antallet af " "genereringstrÃ¥de i fanebladet Generelt i Indstillinger." -#: src/lib/util.cc:1029 +#: src/lib/util.cc:1027 #, fuzzy -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" "KDM var genereret til DCP-o-matic, men ikke til dens 'leaf' certifikat." -#: src/lib/util.cc:1027 +#: src/lib/util.cc:1025 #, fuzzy -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +msgid "This KDM was not made for %1's decryption certificate." msgstr "KDM var ikke genereret til DCP-o-matics dekrypterings certifikat." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" +"Der var ikke tilstrækkelig arbejdshukommelse til at gøre dette. Hvis du " +"kører pÃ¥ et 32 bit operativsystem, sÃ¥ prøv at reducere antallet af " +"genereringstrÃ¥de i fanebladet Generelt i Indstillinger." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1678,45 +1745,47 @@ msgstr "" "Denne fil er en KDM. KDMer skal tilføjes til DCP indhold ved at højreklikke " "pÃ¥ indholdet og vælge \"Tilføj KDM\"." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Denne film blev dannet med en nyere version af DCP-o-matic og kan ikke " "indlæses i denne version. Beklager!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Denne film blev dannet med en nyere version af DCP-o-matic og kan ikke " "indlæses i denne version. Du er nødt til at lave en ny Film, tilføje dit " "indhold og konfigurere det igen. Beklager!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Torsdag" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Timet tekst" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Transcoder %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitional" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Tirsdag" @@ -1724,7 +1793,7 @@ msgstr "Tirsdag" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Uventet indhold af ZIP arkiv" @@ -1732,36 +1801,36 @@ msgstr "Uventet indhold af ZIP arkiv" msgid "Unexpected image type received by server" msgstr "Uventet billedtype modtaget af server" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 #, fuzzy msgid "Unknown" msgstr "ukendt" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Ukendt fejl" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Kunne ikke genkende lydsekvensens format (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Unsharp mask and Gaussian blur" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Uspecificeret" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Uden titel" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Ubenyttet" @@ -1773,7 +1842,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1781,11 +1850,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Verificer DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Lodret spejling" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Synshandicappet" @@ -1793,23 +1862,23 @@ msgstr "Synshandicappet" msgid "Waiting" msgstr "Venter" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Weavefilter" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Onsdag" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Endnu et Deinterlacing Filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1820,7 +1889,7 @@ msgstr "" "billedhastighed understøttes ikke af alle projektorer. Du rÃ¥des til at " "ændre DCP-billedhastigheden til %2 fps." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1830,7 +1899,7 @@ msgstr "" "billedhastighed understøttes ikke af alle projektorer. Du rÃ¥des til at " "ændre billedhastigheden til %2 fps." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1839,18 +1908,11 @@ msgstr "" "understøttes af alle projektorer. Vær opmærksom pÃ¥ at der kan opstÃ¥ " "kompatibilitetsproblemer." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Du benytter 3D indhold, men har sat DCPen til 2D. Sæt DCPen til 3D hvis du " -"vil afspille pÃ¥ et 3D-system. (f.eks. Real-D, MasterImage, etc.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Du benytter dig af DCP-o-matics opskalering fra stereo til 5.1. Den er " @@ -1858,7 +1920,15 @@ msgstr "" "du fortsætter, bør du lytte til DCPen i en biograf for at sikre dig at " "lydkvaliteten er i orden." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Du benytter 3D indhold, men har sat DCPen til 2D. Sæt DCPen til 3D hvis du " +"vil afspille pÃ¥ et 3D-system. (f.eks. Real-D, MasterImage, etc.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1866,20 +1936,20 @@ msgstr "" "Du har %1 filer der ligner VOB-filer fra en DVD. Du bør samle dem for at " "sikre gode overgange mellem filerne." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 #, fuzzy msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "Du har overlappende undertekster, hvilket ikke er tilladt." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1891,22 +1961,22 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Du er nødt til at tilføje indhold til DCP'en før du kan danne den" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -1916,18 +1986,18 @@ msgstr "" "projektorer. Brug Flat eller Scope som DCPens indholdsformat, hvis det er " "muligt" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "Lydniveauet er meget højt (%1). Du bør sænke gain pÃ¥ lyden." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "Dit projekt har videoindhold der ikke var justeret til en billedkant." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1935,21 +2005,21 @@ msgstr "" "Dit projekt har videoindhold hvis beskæring ikke var justeret til en " "billedkant." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[levende billeder]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[stillbillede]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[undertekster]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_spole%1" @@ -1981,12 +2051,12 @@ msgstr "kopierer %1" msgid "could not find stream information" msgstr "kunne ikke finde information om strøm" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 #, fuzzy msgid "could not move atmos asset into the DCP (%1)" msgstr "kunne ikke flytte lyd-MXF ind i DCPen (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "kunne ikke flytte lyd-MXF ind i DCPen (%1)" @@ -2017,7 +2087,7 @@ msgstr "kunne ikke skrive til fil %1 (%2)" msgid "error during async_connect (%1)" msgstr "fejl ved async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "fejl ved async_read (%1)" @@ -2025,62 +2095,72 @@ msgstr "fejl ved async_read (%1)" msgid "error during async_write (%1)" msgstr "fejl ved async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "billeder pr. sekund" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "t" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "den har en anden billedhastighed end filmen." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "den er 2K og filmen er 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "den er 4K og filmen er 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "den er i Interop formatet og filmen er i SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "den er i SMPTE formatet og filmen er i Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "den overlapper med anden lyd; fjern det andet indhold." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "den overlapper med anden lyd; fjern det andet indhold." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "den overlapper med andet video indhold; fjern det andet indhold." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2089,16 +2169,16 @@ msgstr "" "til 'opdel efter videoindhold'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "dens billedstørrelse er forskellig fra filmens." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "flytter" @@ -2107,45 +2187,51 @@ msgid "name" msgstr "navn" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "stille" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "den overlapper med anden tekst; fjern det andet indhold." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "ukendt" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "videobilleder" +#, fuzzy +#~ msgid "Copying video file into DCP" +#~ msgstr "Videostørrelser passer ikke i DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "DCP-o-matic besked" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "den overlapper med anden tekst; fjern det andet indhold." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "den har ikke billedtekster pÃ¥ alle spoler." @@ -2156,13 +2242,6 @@ msgstr "videobilleder" #~ msgstr "den har ikke lyd pÃ¥ alle spoler." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Rapporter venligst dette problem via Hjælp -> Rapporter et problem eller " -#~ "via email til carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "Din standard container er ugyldig og er blevet ændret til Flat (1.85:1)" diff --git a/src/lib/po/de_DE.po b/src/lib/po/de_DE.po index 0edca81ab..d0b581faf 100644 --- a/src/lib/po/de_DE.po +++ b/src/lib/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2021-08-20 20:44+0200\n" "Last-Translator: Carsten Kurz\n" "Language-Team: DCP-o-matic translators\n" @@ -18,7 +18,7 @@ msgstr "" "X-Generator: Poedit 3.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "Bildrate %.4f fps\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -35,7 +35,7 @@ msgstr "" "\n" "Beschnitten zu %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Anzeigeseitenverhältnis (DAR) %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -52,7 +52,7 @@ msgstr "" "\n" "Mit Schwarz gefüllt auf Containerformat %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -60,18 +60,18 @@ msgstr "" "\n" "Skaliert auf %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " am %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -96,39 +96,91 @@ msgstr "" "Größe: $SIZE\n" "Bei Problemen mit diesem DCP kontaktieren Sie bitte:\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [Ton]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [Film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [Bild]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic konnte die Datei %1 nicht öffnen (%2). Vielleicht existiert sie " +"nicht oder ist in einem unerwarteten Format." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst " +"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren " +"Wünschen entsprechen." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst " +"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren " +"Wünschen entsprechen." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" +"DCP-o-matic unterstützt das `%1' Filter nicht mehr, er wird deaktiviert." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Email Benachrichtigung" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", Pixelseitenverhältnis %.2f:1" @@ -165,11 +217,11 @@ msgstr "1.85:1 (Flat / BW)" msgid "1.90 (Full frame)" msgstr "1.90:1 Full Container (DCI)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66:1" @@ -182,11 +234,11 @@ msgstr "2.35:1 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39:1 (DCI Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D Rauschunterdrückung" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -197,33 +249,33 @@ msgstr "" "zurückspielen, der 4K 3D unterstützt, ist es ratsam, das DCP als 2K zu " "klassifizieren. Nutzen Sie hierzu den Tabreiter \"DCP→Video\"." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 verbleibend; beendet um %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 #, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>Sie haben %1 DCPs mit DCP-o-matic erstellt!</h2><img width=\"20%%\" " "src=\"memory:me.jpg\" align=\"center\"><p>Hallo. Ich bin Carl, der " @@ -237,10 +289,11 @@ msgstr "" "amount=20\">Spende über Paypal £20</a><li><a href=\"https://dcpomatic.com/" "donate_amount?amount=10\">Spende über Paypal £10</a></ul><p>Dankeschön!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Einige Projektionssysteme haben Probleme mit der Wiedergabe von DCPs mit " @@ -248,22 +301,22 @@ msgstr "" "nicht wesentlich höher als 230MBit/s einstellen. Dies wird kaum Auswirkungen " "auf die sichtbare Bildqualität haben." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Werbung - ADV" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -277,7 +330,7 @@ msgstr "" "Containertyp auf Scope (2.39:1) einstellen. Für Scope-Trailer ist diese " "'letter-boxed' Darstellung in einem Flat-Vorprogramm jedoch übliche Praxis." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -290,7 +343,7 @@ msgstr "" "(pillar-boxed). Sofern dies nicht ihre Absicht ist, sollten Sie unter dem " "DCP-Reiter den DCI Containertyp auf Flat (1.85:1) einstellen." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Beim Bearbeiten der Datei %1 trat ein Fehler auf." @@ -298,32 +351,32 @@ msgstr "Beim Bearbeiten der Datei %1 trat ein Fehler auf." msgid "Analysing audio" msgstr "Audio wird analysiert" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Untertitel analysieren" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Mindestens ein Marker ist hinter dem Ende des Projekts platziert und wird " "daher ignoriert." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Mindestens eine Ihrer Closed Captions (CCAP) ist grösser als " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" "Mindestens eine Ihrer Closed Captions (CCAP) -Dateien (XML-Format) ist " "grösser als " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Mindestens eine Ihrer Untertiteldateien ist grösser als " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -332,7 +385,7 @@ msgstr "" "empfohlen, jede Untertitelzeile auf eine Länge von maximal 52 Zeichen zu " "beschränken." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -340,7 +393,7 @@ msgstr "" "Mindestens eine Ihrer Untertitel-Zeilen hat mehr als 79 Zeichen. Sie sollten " "jede Untertitelzeile auf eine Länge von maximal 79 Zeichen begrenzen." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -348,7 +401,7 @@ msgstr "" "Mindesteins einer Ihrer Untertitel hat mehr als drei Zeilen. Es ist ratsam, " "nicht mehr als drei Zeilen für einen Untertitel zu nutzen." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -356,7 +409,7 @@ msgstr "" "Mindestens einer Ihrer Untertitel dauert weniger als 15 Frames. Es ist " "ratsam, jeden Untertitel eine Länge von mindestens 15 Frames zuzuordnen." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -365,7 +418,7 @@ msgstr "" "vorherigen Untertitel. Es ist ratsam, die Lücke zwischen Untertiteln auf " "mindestens 2 Frames zu vergrössern." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -390,72 +443,72 @@ msgstr "Audioabtastrate wird auf %1Hz angepasst" msgid "Audio will not be resampled" msgstr "Audioabtastrate wird nicht verändert werden" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 extended colour gamut" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 constant luminance" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 for a 10-bit system" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 for a 12-bit system" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 non-constant luminance" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits pro pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Bob Weaver Deinterlacing Filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Abbruch" @@ -467,13 +520,13 @@ msgstr "Darf keine Schrägstriche enthalten" msgid "Cannot handle pixel format %1 during %2" msgstr "Kann dieses Pixelformat %1 während %2 nicht bearbeiten" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "" "KDM Erzeugung nicht möglich, da dieses Projekt keine Verschlüsselung " "verwendet." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Center" @@ -481,7 +534,7 @@ msgstr "Center" msgid "Channels" msgstr "Audio-Kanäle" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -490,27 +543,32 @@ msgstr "" msgid "Checking content" msgstr "Überprüfe Projektinhalte auf Änderungen" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Überprüfe bestehende Bilddateien" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Farbabhängige konstante Helligkeit" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Farbabhängige nicht-konstante Helligkeit" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Closed Captions" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Untertitel (Text)" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Grundfarbbezug ('primaries')" @@ -524,17 +582,17 @@ msgstr "Grundfarbbezug ('primaries')" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Farbumfang" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Farbkonvertierung" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Farbraum" @@ -542,15 +600,15 @@ msgstr "Farbraum" msgid "Combine DCPs" msgstr "Kombiniere DCPs" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Zusammenfassung berechnen" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Zusammenfassung ('Hashes') berechnen" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "Glückwunsch!" @@ -568,21 +626,21 @@ msgstr "Inhaltsbeschreibung" msgid "Content sample rate" msgstr "Audio Abtastrate (Quelle)" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "Zu verbindende Inhalte müssen identische Toneigenschaften aufweisen." -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Zu verbindende Inhalte müssen alle einheitlich Untertitel (oder keine) " "aufweisen" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "Zu verbindende Inhalte müssen identische Bildeigenschaften aufweisen." -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 #, fuzzy msgid "" "Content to be joined must both be main subtitle languages or both additional." @@ -595,12 +653,12 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "Zu verbindende Inhalte müssen die gleiche Bildrate haben." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "Zu verbindende Inhalte müssen identische Untertitel-Einstellungen verwenden." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Zu verbindende Inhalte müssen identische Untertitel-Einstellungen verwenden." @@ -644,7 +702,7 @@ msgstr "" "Zu verbindende Inhalte müssen identische Ein-/Ausblendungs-Einstellungen " "verwenden." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Zu verbindende Inhalte müssen die gleiche Outline-Stärke verwenden." @@ -652,40 +710,40 @@ msgstr "Zu verbindende Inhalte müssen die gleiche Outline-Stärke verwenden." msgid "Content to be joined must have the same picture size." msgstr "Zu verbindende Inhalte müssen die gleiche Bildgröße haben." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" "Zu verbindende Inhalte müssen den gleichen horizontalen Untertitelversatz " "verwenden." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" "Zu verbindende Inhalte müssen die gleiche Untertitel X-Skalierung verwenden." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" "Zu verbindende Inhalte müssen den gleichen vertikalen Untertitelversatz " "verwenden." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "" "Zu verbindende Inhalte müssen die gleiche Untertitel Y-Skalierung verwenden." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" "Zu verbindende Inhalte müssen die gleichen Ein- und Ausblendzeiten aufweisen." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "Zu verbindende Inhalte müssen den gleichen Zeilenabstand für Untertitel " "aufweisen." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Zu verbindende Inhalte müssen die gleiche Bildrate haben." @@ -693,28 +751,28 @@ msgstr "Zu verbindende Inhalte müssen die gleiche Bildrate haben." msgid "Content to be joined must have the same video frame type." msgstr "Zu verbindende Inhalte müssen den gleichen Bildtyp (z.B. 2D) haben." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Zu verbindende Inhalte müssen die gleiche Spur verwenden." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "" "Zu verbindende Inhalte müssen die gleichen Zeichensätze für Untertitel " "verwenden." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Zu verbindende Inhalte müssen die gleiche Untertitelspur verwenden." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 #, fuzzy msgid "Content to be joined must use the same text language." msgstr "" "Zu verbindende Inhalte müssen die gleichen Zeichensätze für Untertitel " "verwenden." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Inhalt Video ist %1x%2" @@ -722,15 +780,6 @@ msgstr "Inhalt Video ist %1x%2" msgid "Copy DCP to TMS" msgstr "DCP auf TMS übertragen" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Kopieren alte Videodatei" - -#: src/lib/reel_writer.cc:407 -#, fuzzy -msgid "Copying video file into DCP" -msgstr "Unterschiedliche Auflösungen im DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Keine Verbindung zu Server %1 (%2)" @@ -747,20 +796,21 @@ msgstr "Fehler beim Dekodieren der JPEG2000 Datei %1 (%2)" msgid "Could not decode image (%1)" msgstr "Fehler beim Dekodieren der Bild-Datei (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Heruntergeladene ZIP Datei kann nicht geöffnet werden." -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Konnte keine Encoding Server finden. Ist das Programm vielleicht zweimal " "gestartet worden?" -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "%1 konnte nicht geöffnet werden." @@ -768,19 +818,19 @@ msgstr "%1 konnte nicht geöffnet werden." msgid "Could not open %1 to send" msgstr "%1 konnte nicht zum Senden geöffnet werden" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Heruntergeladene ZIP Datei kann nicht geöffnet werden." -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Heruntergeladene ZIP Datei kann nicht geöffnet werden (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Datei konnte nicht zum Schreiben geöffnet werden." -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 #, fuzzy msgid "Could not open output file %1 (%2)" msgstr "Datei %1 konnte nicht geschrieben werden (%2)" @@ -797,19 +847,19 @@ msgstr "Fehler beim Start der Übertragung" msgid "Could not write to remote file (%1)" msgstr "Entfernte Datei (%1) konnte nicht gespeichert werden" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-Box primärer TC" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX sekundärer TC" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -821,7 +871,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML Untertitel" @@ -838,54 +888,36 @@ msgstr "DCP läuft mit %.1f%% der Originalgeschwindigkeit der Quelle.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP verwendet nur jedes zweite Bild des Quelle.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic konnte die Datei %1 nicht öffnen (%2). Vielleicht existiert sie " -"nicht oder ist in einem unerwarteten Format." - -#: src/lib/film.cc:1596 -msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." -msgstr "" -"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst " -"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren " -"Wünschen entsprechen." -#: src/lib/film.cc:1564 -#, fuzzy +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst " -"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren " -"Wünschen entsprechen." -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic unterstützt das `%1' Filter nicht mehr, er wird deaktiviert." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "DCP-o-matic Benachrichtigungen" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 oder AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "De-Interlacer" # Might be that the special characters like ü (ue) or ß (ss) need to be encoded -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -897,7 +929,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Sehr geehrte Vorführer,\n" "\n" @@ -911,12 +943,16 @@ msgstr "" "Mit freundlichen Grüßen,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 #, fuzzy msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 und CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Herunterladen fehlgeschlagen (%1 Fehler %2)" @@ -940,19 +976,19 @@ msgstr "Versende KDM Email(s) für %1" msgid "Email notification" msgstr "Email Benachrichtigung" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Email Sendebericht" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Email Sendebericht für %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Kodieren" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Episode" @@ -960,20 +996,20 @@ msgstr "Episode" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Fehler in SubRip Datei: Ist %1 , sollte %2 sein" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Fehler: (%1)" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Analysiere Untertitel" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Untersuche Closed Captions (CCAP)" @@ -986,17 +1022,17 @@ msgstr "Inhalt wird überprüft" msgid "Examining subtitles" msgstr "Analysiere Untertitel" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Untersuche Closed Captions (CCAP)" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 #, fuzzy msgid "Extracting" msgstr "Freigabehinweis - RTG" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -1004,52 +1040,52 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Authentifizierung mit Server (%1) fehlgeschlagen" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Konnte das DCP nicht encodieren." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Konnte Email nicht senden" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Hauptfilm - FTR" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Dateiname" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Dateiname" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Ermittle Länge" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Bildrate" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Freitag" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Voll" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Voll (0-%1)" @@ -1073,35 +1109,35 @@ msgstr "Gesamtlänge in Bildern (DCP)" msgid "Full length in video frames at content rate" msgstr "Gesamtlänge in Bildern (Quelle)" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradient Glätter" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "HI" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "3D Rauschunterdrückung hoher Qualität" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Horizontal Spiegeln" @@ -1109,21 +1145,21 @@ msgstr "Horizontal Spiegeln" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB or sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" "Sofern Sie eine Bildrate von 25fps verwenden, sollten Sie den DCP Standard " "für dieses Projekt auf 'SMPTE' setzen!" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1135,15 +1171,15 @@ msgstr "" "den SMPTE-Standard für das DCP zu setzen. Nutzen Sie dazu den \"DCP\" " "Tabreiter." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1152,73 +1188,74 @@ msgstr "" "Start des DCP positionieren. So stellen Sie sicher, dass er gesehen werden " "kann." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Ein unbekannter Fehler ist aufgetreten." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "KDM Zustellung: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Kernel De-Interlacer" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Links" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Center links" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Surround hinten links" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Surround links" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Länge" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "LFE (Subwoofer)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Begrenzt" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Begrenzt (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Linear" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logarithmisch (Bereich 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logarithmisch (Bereich 316:1 )" @@ -1227,7 +1264,7 @@ msgid "Lost communication between main and writer processes" msgstr "" "Verbindungsverlust zwischen Hauptprozess (Main) und Schreibprozess (Writer)" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1235,24 +1272,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Mitte-Seite Decoder" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Verschiedenes" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Unterschiedliche Audio-Kanalzahlen im DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Unterschiedliche Audioabtastraten im DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Unterschiedliche Bildraten im DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Unterschiedliche Auflösungen im DCP" @@ -1260,19 +1297,19 @@ msgstr "Unterschiedliche Auflösungen im DCP" msgid "Missing required setting %1" msgstr "Benötigte Einstellung %1 fehlt" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Montag" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Bewegungskompensierender De-Interlacer" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "DCP enthält keine CPL/Titel." @@ -1286,52 +1323,56 @@ msgstr "In den Einstellungen wurde noch kein Mailserver konfiguriert!" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "In den Einstellungen wurde noch kein Mailserver konfiguriert!" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Keine gültigen Bilddaten gefunden." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Rauschunterdrückung" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Kein" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (Dauer %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (Dauer %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Nur das erste Segment der zu verbindenden Inhalte kann vom Anfang her " "beschnitten werden." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" "Nur das letzte Segment der zu verbindenden Inhalte kann vom Ende her " "beschnitten werden." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Closed Captions" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Untertitel (Text)" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 #, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Einige in diesem Projekt verwendete Dateien wurden geändert, nachdem sie zu " "diesem Projekt hinzugefügt wurden.\n" @@ -1339,32 +1380,41 @@ msgstr "" "Diese Inhalte werden nun neu untersucht, ggfs. müssen Sie bei Änderungen " "deren typspezifische Einstellungen überprüfen." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Ausrichtung" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Zu wenig Speicher" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Überbestimmte Wavelet Entrauschung" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Bitte benachrichtigen Sie uns über diesen Fehler unter ‚Hilfe -> " +"Problembericht senden…‘ oder per email an: carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Vorschrift - POL" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Angelegt für Bildrate" @@ -1372,93 +1422,93 @@ msgstr "Angelegt für Bildrate" msgid "Programming error at %1:%2 %3" msgstr "Programmfehler bei %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promotional" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Hinweis - PSA" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Freigabehinweis - RTG" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601 (SD)" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709 (HD)" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Rechts" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Center rechts" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Surround hinten rechts" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Surround rechts" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "90 Grad gegen den Uhrzeigersinn rotieren" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "90 Grad im Uhrzeigersinn rotieren" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1469,23 +1519,23 @@ msgstr "" "Setzen Sie diese Marker über die gleichnamige Drucktaste im \"DCP\" " "Tabreiter." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1500,19 +1550,19 @@ msgstr "SSH Fehler (%1)" msgid "SSH error [%1] (%2)" msgstr "SSH Fehler (%1)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Samstag" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Analysiere Bildsequenz" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Sende Email" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Kurzfilm - SHR" @@ -1520,11 +1570,11 @@ msgstr "Kurzfilm - SHR" # - Sign as (digital) signature (DE: Signatur) # -Sign as +,- sign (DE: Zeichen) # -Sign in the sense of a warning sign/signal (DE Signal) -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Signatur" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Größe" @@ -1532,7 +1582,7 @@ msgstr "Größe" msgid "Some audio will be resampled to %1Hz" msgstr "Einige Audioanteile werden in der Abtastrate geändert auf %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 #, fuzzy msgid "Some files have been changed since they were added to the project." msgstr "" @@ -1542,7 +1592,7 @@ msgstr "" "Diese Inhalte werden nun neu untersucht, ggfs. müssen Sie bei Änderungen " "deren typspezifische Einstellungen überprüfen!" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 #, fuzzy msgid "" "Some files have been changed since they were added to the project.\n" @@ -1568,7 +1618,7 @@ msgstr "" "Diese Inhalte werden nun neu untersucht, ggfs. müssen Sie bei Änderungen " "deren typspezifische Einstellungen überprüfen!" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." @@ -1576,7 +1626,7 @@ msgstr "" "Einige ihrer Closed Captions (CCAP) sind länger als %1 Zeile(n). Sie werden " "abgeschnitten." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1599,11 +1649,11 @@ msgstr "Teile ihrer Quellinhalte (DCP) benötigen eine KDM" msgid "Some of your content needs an OV" msgstr "Teile ihrer Quellinhalte (DCP) benötigen eine OV-CPL" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Stereo" @@ -1616,19 +1666,19 @@ msgstr "Stereo auf 5.1 up-mixer A" msgid "Stereo to 5.1 up-mixer B" msgstr "Stereo auf 5.1 up-mixer B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Sonntag" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser - TSR" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Telecine Filter" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test - TST" @@ -1649,25 +1699,25 @@ msgstr "Die Zertifikatskette für die Signatur ist ungültig" msgid "The certificate chain for signing is invalid (%1)" msgstr "Die Zertifikatskette für Signaturen ist ungültig (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1678,7 +1728,7 @@ msgstr "" "aus diesem Content erzeugen. Markieren Sie hierzu die Auswahl \"3D\" im DCP " "Video-Tabreiter." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1686,23 +1736,37 @@ msgstr "" "Das Laufwerk, auf dem der Film gespeichert werden soll, hat zu wenig freien " "Speicher. Bitte Speicher freigeben und nochmal versuchen." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Die Spur %1 wurde %2 Millisekunden vorgezogen." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Die Spur %1 wurde %2 Millisekunden verzögert." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Die Spur %1 wurde um %2 Millisekunden gekürzt." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Die Spur %1 wurde um %2 Millisekunden verlängert." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1718,11 +1782,11 @@ msgstr "" "vorgesehene Projektionssystem diese Bildrate unterstützt, sollten Sie die " "DCP Bildrate auf den gleichen oder zumindest einen näheren Wert einstellen." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Dieses DCP enthält kein Bild" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1732,26 +1796,27 @@ msgstr "" "32-Bit-Betriebssystem ausführen, versuchen Sie, die Anzahl der Rechen-" "Threads in den Voreinstellungen n zu reduzieren." -#: src/lib/util.cc:1029 +#: src/lib/util.cc:1027 #, fuzzy -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" "KDM ist zwar für DCP-o-matic ausgestellt, jedoch nicht für das Leaf-" "Zertifikat dieser Installation." -#: src/lib/util.cc:1027 +#: src/lib/util.cc:1025 #, fuzzy -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +msgid "This KDM was not made for %1's decryption certificate." msgstr "" "KDM ist nicht für das Entschlüsselungszertifikat dieser DCP-o-matic " "Installation ausgestellt worden." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "Wahrscheinliche Ursache für diesen Fehler ist die Nutzung der 32-Bit-Version " "von DCP-o-matic und der Versuch, zu viele Encoding-Threads zu nutzen. Bitte " @@ -1759,11 +1824,11 @@ msgstr "" "darf: Nutzen Sie hierzu die Einstellungen im Tabreiter für die allgemeinen " "Einstellungen. Versuchen Sie es anschließend erneut." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "Wahrscheinliche Ursache für diesen Fehler ist die Nutzung der 32-Bit-Version " "von DCP-o-matic. Bitte installieren Sie DCP-o-matic mit dem 64-Bit-" @@ -1779,46 +1844,48 @@ msgstr "" "gehöriges geladenes DCP selektieren und mit <RechtsClick> \"KDM zuweisen\" " "ausführen!" -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Diese Projektdatei wurde mit einer neueren DCP-o-matic Version erstellt und " "kann leider nicht mit dieser älteren Version geladen werden. Sie müssen den " "Film neu erstellen oder eine aktuelle Version installieren. Sorry!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Diese Projektdatei wurde mit einer alten DCP-o-matic Version erstellt und " "kann leider nicht mit dieser Version geladen werden. Sie müssen den Film neu " "erstellen. Sorry!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Donnerstag" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Timed text" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer - TLR" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Wandle %1 um" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Überleitung - XSN" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Dienstag" @@ -1826,7 +1893,7 @@ msgstr "Dienstag" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Ungültiger ZIP Inhalt" @@ -1834,36 +1901,36 @@ msgstr "Ungültiger ZIP Inhalt" msgid "Unexpected image type received by server" msgstr "Ungültiges Bildformat vom Server erhalten" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 #, fuzzy msgid "Unknown" msgstr "unbekannt" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Unbekannter Fehler" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Audio Sample Format (%1) nicht erkannt." -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Unscharf Maskieren mit Gaußschem Unschärfefilter" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Unbestimmt" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Unbenannt" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Ungenutzt" @@ -1875,7 +1942,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1883,11 +1950,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "DCP Integrität prüfen" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Vertikal Spiegeln" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "VI" @@ -1895,23 +1962,23 @@ msgstr "VI" msgid "Waiting" msgstr "Warte..." -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Weave Deinterlacer" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Mittwoch" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Und ein weiterer De-Interlacer ('YADIF')" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1923,7 +1990,7 @@ msgstr "" "abweichend von 24fps oder 48fps(3D) nicht leichtfertig! Ändern Sie die " "Bildrate gegebenenfalls in %2 fps." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1934,7 +2001,7 @@ msgstr "" "abweichend von 24fps oder 48fps(3D) nicht leichtfertig! Ändern Sie die " "Bildrate gegebenenfalls in %2 fps!" -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1943,19 +2010,11 @@ msgstr "" "nicht von allen Projektionssystemen unterstützt! Wählen Sie Bildraten " "abweichend von 24fps oder 48fps(3D) nicht leichtfertig!" -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Sie haben 3D Inhalte eingebunden, jedoch ein 2D-DCP eingestellt. Sollten Sie " -"ihre Inhalte in 3D wiedergeben wollen, wählen Sie unter dem DCP-Reiter " -"'Bild' '3D DCP' aus. Andernfalls wird ein 2D-DCP erzeugt." - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Sie haben einen Stero-5.1 Upmixer im Projekt aktiviert. Diese Funktion ist " @@ -1963,7 +2022,16 @@ msgstr "" "dieses DCP nach der Erzeugung in einer voll surroundfähigen Abhörumgebung " "testen, bevor Sie es zur Verbreitung frei geben." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Sie haben 3D Inhalte eingebunden, jedoch ein 2D-DCP eingestellt. Sollten Sie " +"ihre Inhalte in 3D wiedergeben wollen, wählen Sie unter dem DCP-Reiter " +"'Bild' '3D DCP' aus. Andernfalls wird ein 2D-DCP erzeugt." + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1973,7 +2041,7 @@ msgstr "" "'Nahtlos verbinden' verwenden, um Sprünge in der Wiedergabe zu vermeiden." # "remove some Atmos coment" sounds unspecific. Assuming that the root cauase of the issues are few pieces of content with the false frame rate, the recommendation could be to remove those that contain the false frame rate (could the standard Atmos framerate be set in the config/setings? If yes, this should be mentioned as a solution proposal) -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1982,7 +2050,7 @@ msgstr "" "unterschiedliche Frame-Raten. Entfernen Sie die Inhalte, welche die " "unpassenden Frame-Raten haben." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1991,7 +2059,7 @@ msgstr "" "nicht zulässig! Bitte entfernen Sie die Überlappung oder ändern Sie den DCP " "Wrapping Typ auf 'SMPTE'." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2006,19 +2074,20 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Sie müssen erst Inhalte hinzufügen bevor Sie ein DCP erstellen können!" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "Ihr DCP hat weniger als sechs Audiokanäle. Das kann auf einigen Projektoren " "zu Problemen führen. Um dies zu vermeiden, konfigurieren Sie das DCP so, " @@ -2026,7 +2095,7 @@ msgstr "" "Audiokanäle haben, werden die nicht genutzten Audiokanäle automatisch mit " "Stille aufgefüllt." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -2036,7 +2105,7 @@ msgstr "" "Projektionssystemen Probleme verursachen. Bitte verwenden Sie wann immer " "möglich Flat oder Scope Container." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -2048,14 +2117,14 @@ msgstr "" "um -20dBFS RMS. Diese Angaben dienen nur zur Groborientierung. Prüfen Sie " "ihre DCPs in einem eingemessenen Kinosaal!" -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "Ihr Projekt enthält Videoinhalte die nicht exakt am Zeitraster ausgerichtet " "sind." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -2063,21 +2132,21 @@ msgstr "" "Ihr Projekt enthält Videoinhalte die nicht exakt im Zeitraster beschnitten " "sind." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[Bewegte Bilder]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[Standbild]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[Untertitel]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_reel%1" @@ -2109,12 +2178,12 @@ msgstr "kopiere %1" msgid "could not find stream information" msgstr "Keine Spur-Information gefunden" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 #, fuzzy msgid "could not move atmos asset into the DCP (%1)" msgstr "Audio konnte nicht in DCP (%1) kopiert werden" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "Audio konnte nicht in DCP (%1) kopiert werden" @@ -2145,7 +2214,7 @@ msgstr "Datei %1 konnte nicht geschrieben werden (%2)" msgid "error during async_connect (%1)" msgstr "error during async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "error during async_read (%1)" @@ -2153,28 +2222,28 @@ msgstr "error during async_read (%1)" msgid "error during async_write (%1)" msgstr "error during async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "Bilder pro Sekunde" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "Dieses Projekt verwendet eine andere Bildrate als dieses DCP." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" @@ -2182,47 +2251,59 @@ msgstr "" "Captions (CCAP) neu geschrieben werden." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "" "es ist in 2k, das gegenwärtige Projekt jedoch 4k. Eine Mischung ist nicht " "möglich!" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "" "es ist in 4k, das gegenwärtige Projekt jedoch 2k. Eine Mischung ist nicht " "möglich!" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "" "Dieses Projekt ist auf ’SMPTE’ Standard konfiguriert, das referenzierte DCP " "ist jedoch in ‚INTEROP‘! Eine Mischung ist nicht möglich!" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "" "Dieses Projekt ist auf ‚INTEROP‘ Standard konfiguriert, das referenzierte " "DCP ist jedoch in ‚SMPTE‘. Eine Mischung ist nicht möglich!" -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." msgstr "" "Einige Audioanteile überlappen mit diesem DCP, bitte entfernen Sie diese (-" ">Zeitleiste)!" -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." +msgstr "" +"Einige Audioanteile überlappen mit diesem DCP, bitte entfernen Sie diese (-" +">Zeitleiste)!" + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "" "Einige Videoanteile überlappen mit diesem DCP, bitte entfernen Sie diese (-" ">Zeitleiste)!" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2231,16 +2312,16 @@ msgstr "" "unter 'DCP' muss auf 'An Inhaltsgrenzen aufteilen' gesetzt werden." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "Dieses Projekt verwendet eine andere Bildauflösung als dieses DCP." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "wird verschoben" @@ -2250,7 +2331,7 @@ msgstr "Name" # typo in original language? "one if its" -> "one of its" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 #, fuzzy msgid "" "one of its closed caption has a non-zero entry point so it must be re-" @@ -2261,7 +2342,7 @@ msgstr "" # typo in original language? "one if its" -> "one of its" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 #, fuzzy msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" @@ -2271,33 +2352,42 @@ msgstr "" "ungleich Null ist; daher muss er erneut geschrieben werden. UD" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "Standbild" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "" -"Einige Textanteile überlappen in diesem DCP, bitte entfernen Sie diese (-" -">Zeitleiste)!" - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "unbekannt" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "Video Bilder" +#~ msgid "Copying old video file" +#~ msgstr "Kopieren alte Videodatei" + +#, fuzzy +#~ msgid "Copying video file into DCP" +#~ msgstr "Unterschiedliche Auflösungen im DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "DCP-o-matic Benachrichtigungen" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "" +#~ "Einige Textanteile überlappen in diesem DCP, bitte entfernen Sie diese (-" +#~ ">Zeitleiste)!" + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "" #~ "Das DCP enthält in einigen Akten ('Reels') keine Closed Captions (CCAP)." @@ -2309,13 +2399,6 @@ msgstr "Video Bilder" #~ msgstr "Das DCP enthält in einigen Akten ('Reels') keinen Ton." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Bitte benachrichtigen Sie uns über diesen Fehler unter ‚Hilfe -> " -#~ "Problembericht senden…‘ oder per email an: carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "Ihr bisheriger Standard-Container ist in dieser Version nicht mehr gültig " diff --git a/src/lib/po/es_ES.po b/src/lib/po/es_ES.po index fd6761fb3..5686f12d3 100644 --- a/src/lib/po/es_ES.po +++ b/src/lib/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: LIBDCPOMATIC\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2021-10-17 22:41-0400\n" "Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n" "Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Velocidad del contenido %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Recortado a %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Proporción de aspecto mostrada %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Completado con negro para cubrir el contenedor %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Redimensionado a %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " el %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -94,39 +94,88 @@ msgstr "" "Longitud: $LENGTH\n" "Tamaño: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [audio]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [pelÃcula]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [pelÃcula]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic no pudo abrir el fichero %1 (%2). Quizás no existe o está en un " +"formato inesperado." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic tuvo que cambiar las opciones para hacer referencia a DCPs como " +"OV. Por favor, revisa esas opciones para confirmar que son las que quieres." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"DCP-o-matic tuvo que cambiar las opciones para que la velocidad de la " +"pelÃcula sea la misa que la del contenido Atmos." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic ya no ofrece el filtro `%1', asà que ha sido desactivado." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Notificación por email" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", proporción de aspecto de pixel %.2f:1" @@ -163,11 +212,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Frame completo)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -180,11 +229,11 @@ msgstr "2.35 (Scope 35mm)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "reducción de ruido 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -194,32 +243,33 @@ msgstr "" "sepas que vas a reproducir este DCP en un proyector compatible, es " "recomendable crear el DCP en todo 2K en la pestaña “DCP→Videoâ€." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; faltan %1 ; terminará a las %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>¡Has hecho %1 DCPs con DCP-o-matic!</h2><img width=“20%%†src=“memory:me." "jpg†align=“centerâ€><p>Hola. Soy Carl, el creador de DCP-o-matic. Trabajo en " @@ -233,34 +283,36 @@ msgstr "" "href=“https://dcpomatic.com/donate_amount?amount=10â€>Ir a Paypal para " "donar€10</a></ul><p>¡Muchas gracias!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Algunos proyectores tienen problemas reproduciendo DCPs con un ancho de " "banda muy alto. Es buena idea bajar el ancho de banda JPEG2000 a unos 200 " "Mbits/segundo, esto no deberÃa afectar a la calidad de la imagen." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "Un subtÃtulo, normal o cerrado, en este proyecto está marcado con la lengua " "‘%1’, que DCP-o-matic no reconoce. La lengua del fichero se ha borrado." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Log-gamma hÃbrido')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Publicidad" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -271,7 +323,7 @@ msgstr "" "(1.85:1). Esto creará bandas negras horizontales. Puede que prefieras " "seleccionar el contenedor DCP en Scope (2.39:1) en la pestaña \"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -281,7 +333,7 @@ msgstr "" "Scope (2.39:1). Esto creará bandas negras verticales. Puede que prefieras " "seleccionar el contenedor DCP en el mismo ratio de aspecto que el contenido." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Ha ocurrido un error con el fichero %1." @@ -289,29 +341,29 @@ msgstr "Ha ocurrido un error con el fichero %1." msgid "Analysing audio" msgstr "Analizaando audio" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Analizando subtÃtulos" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Al menos un marcador aparece después del final del proyecto y será ignorado." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Al menos uno de los ficheros de subtÃtulos cerrados es mayor que " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Al menos uno de los ficheros XML de subtÃtulos cerrados es mayor que " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Al menos uno de los ficheros de subtÃtulos es mayor que " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -319,7 +371,7 @@ msgstr "" "Al menos una de las lÃneas de subtÃtulos tiene más de 52 caracteres. Se " "recomienda un máximo de 52 caracteres por lÃnea." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -327,7 +379,7 @@ msgstr "" "Al menos una de las lÃneas de subtÃtulos tiene más de 79 caracteres. Cada " "lÃnea debe tener un máximo de 79 caracteres." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -335,7 +387,7 @@ msgstr "" "Al menos uno de los subtÃtulos tiene más de 3 lÃneas. Se recomienda no usar " "más de 3 lÃneas." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -343,7 +395,7 @@ msgstr "" "Al menos uno de los subtÃtulos dura menos de 15 imágenes. Se recomienda que " "un subtÃtulo dure al menos 15 imágenes." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -351,7 +403,7 @@ msgstr "" "Al menos uno de los subtÃtulos empieza menos de 2 imágenes tras el " "precedente. Se recomienda dejar al menos 2 imágenes entre subtÃtulos." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -375,72 +427,72 @@ msgstr "EL audio será remuestreado a %1Hz" msgid "Audio will not be resampled" msgstr "El audio no será remuestreado" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "Gama de color extendido BT1361" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 a luminosidad constante" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 para un sistema de 10-bit" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 para un sistema de 12 bits" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 a luminosidad no constante" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits por pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Filtro de desentrelazado Bob Weaver" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Cancelado" @@ -452,11 +504,11 @@ msgstr "No puede contener barras" msgid "Cannot handle pixel format %1 during %2" msgstr "No se puede usar el formato de pixel %1 para %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "No se puede crear una Kim porque este proyecto no está encriptado." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Centro" @@ -464,7 +516,7 @@ msgstr "Centro" msgid "Channels" msgstr "Canales" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -473,27 +525,32 @@ msgstr "" msgid "Checking content" msgstr "Buscando cambios en el contenido" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Comprobando las imágenes existentes" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Luminosidad constante a partir de la crominancia" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Luminosidad no constante a partir de la crominancia" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "SubtÃtulos cerrados" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "SubtÃtulos" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Colores primarios" @@ -507,17 +564,17 @@ msgstr "Colores primarios" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Rango de color" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "CaracterÃsticas de la transferencia de color" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Espacio de color" @@ -525,15 +582,15 @@ msgstr "Espacio de color" msgid "Combine DCPs" msgstr "Combinar DCPs" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Calculando la firma resumen" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Calculando la firma resumen" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "¡Felicidades!" @@ -551,20 +608,20 @@ msgstr "tipo de contenido" msgid "Content sample rate" msgstr "Velocidad del contenido de audio" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "Para unir contenido deben tener audio todos o ninguno" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Para unir contenidos, todos deben tener o no subtÃtulos nórmales o cerrados" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "Para unir contenido deben tener vÃdeo todos o ninguno" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -574,11 +631,11 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "Para unir contenidos deben usar su vÃdeo o no." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "Para unir contenido debe tener la misma opción ‘grabar subtÃtulos’." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "Para unir contenido debe tener la misma opción 'usar subtÃtulos'." @@ -617,7 +674,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "Para unir contenido debe tener los mismos fundidos." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Para unir contenido debe tener la misma anchura de contorno." @@ -625,35 +682,35 @@ msgstr "Para unir contenido debe tener la misma anchura de contorno." msgid "Content to be joined must have the same picture size." msgstr "Para unir contenido debe tener el mismo tamaño de imagen." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" "Para unir contenido debe tener el mismo desplazamiento de subtÃtulo en X." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" "Para unir contenido debe tener la misma redimensión de subtÃtulo en X." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" "Para unir contenido debe tener el mismo desplazamiento de subtÃtulo en Y." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Para unir contenido debe tener la misma redimensión de subtÃtulo en Y." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "Para unir contenido debe tener el mismo fundido de subtÃtulos." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "Para unir contenido debe tener la misma separación de lÃnea de subtÃtulos." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Para unir contenido debe tener la misma velocidad de imagen" @@ -661,23 +718,23 @@ msgstr "Para unir contenido debe tener la misma velocidad de imagen" msgid "Content to be joined must have the same video frame type." msgstr "Para unir contenido debe tener el mismo tamaño de imagen." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Para unir contenido deben usar la misma pista DCP." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Para unir contenido debe usar la misma fuente." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Para unir contenido debe tener el mismo tipo de subtÃtulos." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "Para unir contenidos deben tener la misma lengua de texto." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "El video es %1x%2" @@ -685,14 +742,6 @@ msgstr "El video es %1x%2" msgid "Copy DCP to TMS" msgstr "Copiar DCP al TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Copiando el antiguo fichero de vÃdeo" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "Copiando el fichero de vÃdeo en el DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "No se pudo conectar al servidor %1 (%2)" @@ -709,20 +758,21 @@ msgstr "No se pudo descodificar el fichero JPEG2000 %1 (%2)" msgid "Could not decode image (%1)" msgstr "No se pudo descodificar la imagen (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "No se puedo abrir el fichero ZIP descargado" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "No se pueden buscar servidores de codificación externos. Quizás haya otro " "DCP-o-matic ejecutándose." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "No se pudo abrir %1" @@ -730,19 +780,19 @@ msgstr "No se pudo abrir %1" msgid "Could not open %1 to send" msgstr "No se pudo abrir %1 para enviar" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "No se puedo abrir el fichero ZIP descargado" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "No se puedo abrir el fichero ZIP descargado (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "No se pudo abrir el fichero para escritura" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "No se pudo abrir el fichero de salida %1 (%2)" @@ -758,19 +808,19 @@ msgstr "No se pudo iniciar la transferencia" msgid "Could not write to remote file (%1)" msgstr "No se pudo escribir el fichero remoto (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "Primario D-BOX" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "Secundario D-BOX" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -782,7 +832,7 @@ msgstr "Flat DCI" msgid "DCI Scope" msgstr "Scope DCI" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "SubtÃtulos DCP XML" @@ -799,49 +849,35 @@ msgstr "El DCP se reproducirá al %.1f%% de la velocidad de la fuente.\n" msgid "DCP will use every other frame of the content.\n" msgstr "El DCP usará una de cada dos imágenes de la fuente.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic no pudo abrir el fichero %1 (%2). Quizás no existe o está en un " -"formato inesperado." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic tuvo que cambiar las opciones para hacer referencia a DCPs como " -"OV. Por favor, revisa esas opciones para confirmar que son las que quieres." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic tuvo que cambiar las opciones para que la velocidad de la " -"pelÃcula sea la misa que la del contenido Atmos." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic ya no ofrece el filtro `%1', asà que ha sido desactivado." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "Notificación de DCP-o-matic" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 o AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Desentrelazado" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -853,7 +889,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Estimado proyecionista\n" "\n" @@ -867,11 +903,15 @@ msgstr "" "Atentamente,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 o CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Descarga fallida (%1 error %2)" @@ -895,19 +935,19 @@ msgstr "Enviar por email las KDM para %2" msgid "Email notification" msgstr "Notificación por email" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Enviar por correo el problema" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Enviar por correo el problema para %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Codificando" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Episodio" @@ -915,20 +955,20 @@ msgstr "Episodio" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Error en el fichero de subtÃtulos: encontrado %1 cuando se esperaba %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Error: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Examinando subtÃtulos" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Examinando audio, subtÃtulos, abiertos y cerrados" @@ -940,15 +980,15 @@ msgstr "Examinando contenido" msgid "Examining subtitles" msgstr "Examinando subtÃtulos" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Examinando subtÃtulos abiertos y cerrados" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "Extrayendo" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -956,52 +996,52 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Fallo al identificarse con el servidor (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Fallo al codificar el DCP." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Fallo al enviar el email" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "PelÃcula" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Nombre de fichero" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Nombre de fichero" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "PelÃcula" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Buscando la duración" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Velocidad" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Viernes" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Completo" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Completo (0-%1)" @@ -1025,35 +1065,35 @@ msgstr "Longitud total en frames de vÃdeo a la velocidad del DCP" msgid "Full length in video frames at content rate" msgstr "Longitud total en frames de vÃdeo a la velocidad del contenido" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradient debander" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Sordos" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Reductor de ruido 3D de alta calidad" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Volteo horizontal" @@ -1061,19 +1101,19 @@ msgstr "Volteo horizontal" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB o sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "Si usas 25 Ãpsilons deberÃas cambiar el standard DCP a SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1084,15 +1124,15 @@ msgstr "" "importante para elegir Interop. DeberÃas elegir el standard SMPTE en la " "pestaña “DCPâ€." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1100,73 +1140,74 @@ msgstr "" "Se recomienda poner el primer subtÃtulo al menos 4 segundos tras el comienzo " "del DCP, para asegurarse que va a verse." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "No se sabe lo que causó este error." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "EnvÃo de KDM: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Kernel deinterlacer" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Izquierda" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Centro izquierda" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Surround trasero izquierda" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Surround izquierda" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Duración" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (bajos)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limitado" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Limitado (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Lineal" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "LogarÃtmico (rango 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "LogarÃtmico (rango 316:1)" @@ -1175,7 +1216,7 @@ msgid "Lost communication between main and writer processes" msgstr "" "Se perdió la comunicación entre los el proceso principal y el de escritura" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1183,24 +1224,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Decodificación medio-lateral" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Miscelánea" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "El número de canales de audio no coincide en el DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "La velocidad de reproducción de audio no coincide en el DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "La velocidad de reproducción no coincide en el DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "El tamaño de los vÃdeos no coincide en el DCP" @@ -1208,19 +1249,19 @@ msgstr "El tamaño de los vÃdeos no coincide en el DCP" msgid "Missing required setting %1" msgstr "Falta una configuración obligatoria %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Lunes" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Motion compensating deinterlacer" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "No se encontraron CPLs en el DCP." @@ -1234,80 +1275,93 @@ msgstr "Ningún servidor de correo configurado en las preferencias" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Ningún servidor de correo configurado en las preferencias" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "No se encontraron imágenes válidas en la carpeta." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Reducción de ruido" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Ninguno" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (ejecución %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (ejecución %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Solo la primera pieza a ser unida puede tener un recorte en su comienzo." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Solo la última pieza a ser unida puede tener un recorte en su final." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "SubtÃtulos cerrados" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "SubtÃtulos" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 #, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Algunos ficheros han sido modificados desde que se añadieron al proyecto. " "Abre el proyecto en DCP-o-matic, comprueba las opciones, guárdalo y prueba " "de nuevo." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Orientación" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Falta de memoria" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Overcomplete wavelet denoiser" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Por favor, informe de este problema usando Ayuda -> Informar de un problema " +"o vÃa email a carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Policy" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Preparado para velocidad de vÃdeo" @@ -1315,93 +1369,93 @@ msgstr "Preparado para velocidad de vÃdeo" msgid "Programming error at %1:%2 %3" msgstr "Error de programación en %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promo" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Anuncio de servicio público" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Clasificación" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Derecha" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Centro derecha" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Surround trasero derecha" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Surround derecha" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Rotar 90 grados en sentido antihorario" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Rotar 90 grados en sentido horario" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y’D’zD’x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1412,23 +1466,23 @@ msgstr "" "en movimiento (FFMC). Debes añadir estos marcadores usando “Marcadores†en " "la pestaña “DCPâ€." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 para sistemas de 10, 12, 14 y 16 bits" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1441,27 +1495,27 @@ msgstr "Error SSH [%1]" msgid "SSH error [%1] (%2)" msgstr "Error SSH [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Sábado" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Revisando los ficheros de imagen" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Enviando correo" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Cortometraje" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Signo" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Tamaño" @@ -1469,7 +1523,7 @@ msgstr "Tamaño" msgid "Some audio will be resampled to %1Hz" msgstr "El audio será remuestreado a %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 #, fuzzy msgid "Some files have been changed since they were added to the project." msgstr "" @@ -1477,7 +1531,7 @@ msgstr "" "\n" "Estos ficheros serán reexaminados ahora, necesitarás confirmar las opciones." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 #, fuzzy msgid "" "Some files have been changed since they were added to the project.\n" @@ -1499,14 +1553,14 @@ msgstr "" "\n" "Estos ficheros serán reexaminados ahora, necesitarás confirmar las opciones." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" "Algunos d los subtÃtulos cerrados tienen más de %1 lÃneas, serán cortados." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1529,11 +1583,11 @@ msgstr "Parte del contenido necesita una KDM" msgid "Some of your content needs an OV" msgstr "Parte del contenido necesita una OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Estéreo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Estéreo" @@ -1546,19 +1600,19 @@ msgstr "Upmix de estéreo a 5.1 A" msgid "Stereo to 5.1 up-mixer B" msgstr "Upmix B de estéreo a 5.1" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Domingo" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Filtro telecine" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1579,25 +1633,25 @@ msgstr "La cadena de certificados para firmar no es válida" msgid "The certificate chain for signing is invalid (%1)" msgstr "La cadena de certificados para firmar no es válida (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1607,7 +1661,7 @@ msgstr "" "imágenes en 3D. Por favor identifÃcalo como 2D. Puedes crear el DCP en 3D " "a partir de este contenido, eligiendo la opción 3D en la pestaña DCP." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1615,23 +1669,37 @@ msgstr "" "En el dispositivo donde se encuentra la pelÃcula queda poco espacio. Libere " "espacio en el disco y pruebe de nuevo." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "El fichero %1 ha sido desplazado %2 milisegundos antes." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "El fichero %1 ha sido desplazado %2 milisegundos después." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "El fichero %1 ha sido recortado en %2 milisegundos." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "El fichero %1 ha sido alargado con %2 milisegundos." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1646,11 +1714,11 @@ msgstr "" "cercana a la del contenido, siempre que el sistema de proyección para el que " "se está creando soporte esa velocidad de DCP." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "No hay vÃdeo en este DCP" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1660,32 +1728,35 @@ msgstr "" "sistema operativo de 32 bits, trate de reducir el número de hilos de " "codificación en la sección General de las preferencias." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "Este KDM se hizo para DCP-o-matic pero no para su certificado hoja." -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "" "Este KDM no se hizo para el certificado de desencriptado de DCP-o-matic." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "Este error ha posiblemente ocurrido porque estás usando una versión 32 bits " "de DCP-o-matic e intentando usar demasiados hilos de encodaje. Por favor " "reduce el número de hilos que DCP-o-matic debe usar en la pestaña General de " "las Preferencias y prueba de nuevo." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "Este error ha posiblemente ocurrido porque estás usando una versión 32 bits " "de DCP-o-matic. Por favor reinstala la versión 64 bits de DCP-o-matic y " @@ -1699,46 +1770,48 @@ msgstr "" "Este fichero es una KDM. Las KDM pueden añadirse al DCP pinchando con el " "botón derecho sobre el contenido y eligiendo “Añadir KDMâ€." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Esta pelÃcula se creó con una versión más reciente de DCP-o-matic, y " "desgraciadamente no s puede cargar. Necesitas crear una nueva pelÃcula, " "volver a añadir y configurar ton contenido. ¡Lo siento!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Esta pelÃcula se creó con una versión antigua de DCP-o-matic, y " "desgraciadamente no s puede cargar. Necesitas crear una nueva pelÃcula, " "volver a añadir y configurar ton contenido. ¡Lo siento!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Jueves" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Texto sÃncrono" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Transcodificando %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitional" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Martes" @@ -1746,7 +1819,7 @@ msgstr "Martes" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Contenidos inesperados del fichero ZIP" @@ -1754,35 +1827,35 @@ msgstr "Contenidos inesperados del fichero ZIP" msgid "Unexpected image type received by server" msgstr "El servidor recibió un tipo de imagen inesperada" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Desconocido" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Error desconocido" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Formato de audio desconocido (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Máscara de desenfoque Gaussiano" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Sin especificar" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Sin tÃtulo" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Sin uso" @@ -1794,7 +1867,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1802,11 +1875,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Verificar DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Volteo vertical" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Ciegos" @@ -1814,23 +1887,23 @@ msgstr "Ciegos" msgid "Waiting" msgstr "Esperando" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Filtro Weave" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Miércoles" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1841,7 +1914,7 @@ msgstr "" "soportada por todos los proyectores. Te recomendamos cambiar la velocidad a " "%2 ips." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1851,7 +1924,7 @@ msgstr "" "soportada por todos los proyectores. Considera cambiar la velocidad a %2 " "ips." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1860,25 +1933,26 @@ msgstr "" "todos los proyectores. Sé consciente de que puede haber problemas de " "compatibilidad." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Estás usando contenido 3D pero el DCP es 2D. Cambia el DCP a 3D si quieres " -"que funcione en un sistema 3D (ej.: Real-D, MasterImage, etc.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Estás usando el upmixer 5.1 de DCP-o-matic. Este es experimental y puede " "generar un audio de baja calidad. Si continuas, deberÃas escuchar el DCP " "resultante en una sala para asegurarte de que suena bien." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Estás usando contenido 3D pero el DCP es 2D. Cambia el DCP a 3D si quieres " +"que funcione en un sistema 3D (ej.: Real-D, MasterImage, etc.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1886,7 +1960,7 @@ msgstr "" "Hay %1 ficheros que parecen VOBs de un DVD. DeberÃas unirlos para asegurarte " "transiciones suaves." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1894,7 +1968,7 @@ msgstr "" "Hay más d aun contenido Atmos, y no tienen la misma velocidad. Debes quitar " "algún contenido Atmos." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1902,7 +1976,7 @@ msgstr "" "Tienes subtÃtulos cerrados superpuestos, que no están permitidos en DCPs " "Interop. Cambia el standard DCP a SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1914,26 +1988,27 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Tiene que añadir contenido al DCP antes de crearlo" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "El DCP tiene menos de 6 pistas de audio. Esto puede causar problemas con " "algunos sistemas. Quizás deberÃas hacer un DCP con 6 canales. No importa " "que el contenido tenga menos canales, DCP-o-matic añadirá silencio en los " "canales sin audio." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1942,7 +2017,7 @@ msgstr "" "algunos proyectores. Si es posible, utiliza Flat o Scope como contenedor " "DCP." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1950,32 +2025,32 @@ msgstr "" "El nivel de sonido es muy alto (en %1). DeberÃas reducir la ganancia del " "audio." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "El proyecto contiene video que no está alineado a un cuadro." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "El proyecto contiene video que no está alineado a un cuadro." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[imágenes en movimiento]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[imagen fija]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[subtÃtulos]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_bobina%1" @@ -2007,11 +2082,11 @@ msgstr "copiando %1" msgid "could not find stream information" msgstr "no se pudo encontrar información del flujo" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "no se puede mover el material Atmos en el DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "no se puede mover el audio en el DCP (%1)" @@ -2039,7 +2114,7 @@ msgstr "no se pudo escribir en el fichero %1 (%2)" msgid "error during async_connect (%1)" msgstr "error durante async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "error durante async_read (%1)" @@ -2047,28 +2122,28 @@ msgstr "error durante async_read (%1)" msgid "error during async_write (%1)" msgstr "error durante async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "imágenes por segundo" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "tiene una velocidad diferente a la pelÃcula." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" @@ -2076,35 +2151,45 @@ msgstr "" "deben ser reescritos." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "es 2K y la pelÃcula es 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "es 4K y la pelÃcula es 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "es Interop y la pelÃcula es SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "es SMPTE y la pelÃcula es Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "se superpone a otro contenido de audio; elimina el otro contenido." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "se superpone a otro contenido de audio; elimina el otro contenido." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "se superpone a otro contenido de vÃdeo; elimina el otro contenido." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2113,16 +2198,16 @@ msgstr "" "modo de bobinas ‘dividir por contenido’." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "su tamaño de imagen de vÃdeo es diferente al de la pelÃcula." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "moviendo" @@ -2131,7 +2216,7 @@ msgid "name" msgstr "nombre" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2140,7 +2225,7 @@ msgstr "" "debe ser reescrito." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." @@ -2149,31 +2234,39 @@ msgstr "" "debe ser reescrita." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "imagen fija" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "se superpone a otro contenido de texto; elimina el otro contenido." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "desconocido" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "fotogramas" +#~ msgid "Copying old video file" +#~ msgstr "Copiando el antiguo fichero de vÃdeo" + +#~ msgid "Copying video file into DCP" +#~ msgstr "Copiando el fichero de vÃdeo en el DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "Notificación de DCP-o-matic" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "se superpone a otro contenido de texto; elimina el otro contenido." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "no tiene subtÃtulos cerrados en todas las bobinas." @@ -2184,13 +2277,6 @@ msgstr "fotogramas" #~ msgstr "no tiene audio en todas las bobinas." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Por favor, informe de este problema usando Ayuda -> Informar de un " -#~ "problema o vÃa email a carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "El contenedor por defecto no es válido y ha sido modificado a Flat " diff --git a/src/lib/po/fa_IR.po b/src/lib/po/fa_IR.po index 7d22e83ce..ff1d68f66 100644 --- a/src/lib/po/fa_IR.po +++ b/src/lib/po/fa_IR.po @@ -8,17 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" -"PO-Revision-Date: 2024-01-11 18:23+0330\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" +"PO-Revision-Date: 2024-10-05 18:17+0330\n" "Last-Translator: Soleyman Rahmani Aghdam <Soleyman.rahmani@gmail.com>\n" "Language-Team: \n" "Language: fa_IR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.5\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "تعداد ÙØ±ÛŒÙ… Ù…ØØªÙˆØ§ در ثانیه %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -35,7 +35,7 @@ msgstr "" "\n" "بریده شد به %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "نسبت ابعاد ØµÙØÙ‡ نمایش %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -52,7 +52,7 @@ msgstr "" "\n" "با نوار مشکی تا هم اندازه Ø¸Ø±Ù Ù…ØØªÙˆØ§ پوشیده شد %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -60,18 +60,18 @@ msgstr "" "\n" "تغییر مقیاس به %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " روی %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -95,39 +95,87 @@ msgstr "" "مدت: $LENGTH\n" "ØØ¬Ù…: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$نام_عملیات: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [دالبی اتمز]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [دی سی Ù¾ÛŒ]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [صدا]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [Ùیلم]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [ویدیو]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"%1 نمیتوان ÙØ§ÛŒÙ„ %2(%3) را باز کرد. ممکن است ÙØ§ÛŒÙ„ یا وجود نداشته باشد Ùˆ یا ÙØ±Ù…ت " +"مناسب نداشته باشد." + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review those " +"settings to make sure they are what you want." +msgstr "" +"%1 مجبور شد برای ارجاع به یک دی سی Ù¾ÛŒ به عنوان نسخه اصلی (OV) تنظیمات شما را " +"تغییر دهد. Ù„Ø·ÙØ§ آنها را بررسی کنید تا مطمئن شوید همان چیزی است Ú©Ù‡ شما Ù…ÛŒ خواهید." + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as that " +"of your Atmos content." +msgstr "" +"%1 مجبور شد تنظیمات شما را تغییر دهد تا نرخ ÙØ±ÛŒÙ… Ùیلم برابر Ù…ØØªÙˆØ§ÛŒ دالبی اتمز " +"شما شود." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies within " +"the film." +msgstr "" +"%1 مجبور به ØØ°Ù یکی از مرزهای تعیین شده شما برای ریل گردید به دلیل اینکه دیگر در " +"داخل Ù…ØØ¯ÙˆØ¯Ù‡ Ùیلم قرار نمی Ú¯Ø±ÙØª." + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" +"%1 مجبور به ØØ°Ù تعدادی از مرزهای تعیین شده شما برای ریل گردید به دلیل اینکه دیگر " +"در داخل Ù…ØØ¯ÙˆØ¯Ù‡ Ùیلم قرار نمی Ú¯Ø±ÙØªÙ†Ø¯." + +#: src/lib/ffmpeg_content.cc:122 +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "%1 دیگر از Ùیلتر'2%' پشتیبانی نمیکند، بنابراین خاموش شده است." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +msgid "%1 notification" +msgstr "%1 یادداشت" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1 ; %2/%3 ÙØ±ÛŒÙ…ها" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", نسبت ابعاد پیکسلها %.2f:1" @@ -164,11 +212,11 @@ msgstr "1/85(تخت)" msgid "1.90 (Full frame)" msgstr "1/90(تمام ÙØ±ÛŒÙ…)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "10" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "16" @@ -180,53 +228,52 @@ msgstr "2/35(35 میلیمتری اسکوپ)" msgid "2.39 (Scope)" msgstr "2/39(اسکوپ)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "ضد نویز سه بعدی" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" -"4K 3D is only supported by a very limited number of projectors. Unless you " -"know that you will play this DCP back on a capable projector, it is " -"advisable to set the DCP to be 2K in the \"DCP→Video\" tab." +"4K 3D is only supported by a very limited number of projectors. Unless you know " +"that you will play this DCP back on a capable projector, it is advisable to set " +"the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -"نسخه سه بعدی 4k در تعداد Ú©Ù…ÛŒ از پروژکتورها پشتیبانی میشود. توصیه میشود Ú©Ù‡ دی " -"سی Ù¾ÛŒ را از طریق \"دی سی Ù¾ÛŒ ---> ویدیو\" روی 2k قرار دهید، مگر آنکه از نمایش " -"دی سی Ù¾ÛŒ 4K در پروژکتور مد نظر اطمینان داشته باشید." +"نسخه سه بعدی 4k در تعداد Ú©Ù…ÛŒ از پروژکتورها پشتیبانی میشود. توصیه میشود Ú©Ù‡ دی سی " +"Ù¾ÛŒ را از طریق \"دی سی Ù¾ÛŒ ---> ویدیو\" روی 2k قرار دهید، مگر آنکه از نمایش دی سی " +"Ù¾ÛŒ 4K در پروژکتور مد نظر اطمینان داشته باشید." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "9" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 ÙØ±ÛŒÙ… بر ثانیه" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 باقیمانده ; پایان در %2%3" -#: src/lib/analytics.cc:65 -msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" -msgstr "" -"<h2>شما %1 دی سی Ù¾ÛŒ با دی سی Ù¾ÛŒ-او-ماتیک ساخته اید! \n" +#: src/lib/analytics.cc:66 +msgid "" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me.jpg\" " +"align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the developer of " +"%3. I work on it in my spare time (with the help of a fine volunteer team of " +"testers and translators) and I release it as free software.<p>If you find %4 " +"useful, please consider a donation to the project. Financial support will help " +"me to spend more time developing %5 and making it better!<p><ul><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=40\">Go to Paypal to donate " +"€40</a><li><a href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to " +"Paypal to donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!</font>" +msgstr "" +"<h2>شما دی سی Ù¾ÛŒ 1% ساخته اید با 2%! \n" "</h2><img width=\"20%%\" src=\"memory:me.jpg\" align=\"center\"><p> \n" -"سلام، من کارل هستم توسعه دهنده دی سی Ù¾ÛŒ-او-ماتیک. من در اوقات ÙØ±Ø§ØºØª (با Ú©Ù…Ú© " -"داوطلبان Ùˆ مترجمین خوب) روی آن کار میکنم Ùˆ آنرا رایگان منتشر میکنم. \n" -"<p> اگر دی سی Ù¾ÛŒ-او-ماتیک برای شما سودمند است، Ù„Ø·ÙØ§Ù‹ به این پروژه Ú©Ù…Ú© کنید." -"پشتیبانی مالی به من Ú©Ù…Ú© میکند تا وقت بیشتری صر٠توسعه Ùˆ بهبود آن کنم!<p> n\n" +"سلام، من کارل هستم توسعه دهنده 3% . من در اوقات ÙØ±Ø§ØºØª (با Ú©Ù…Ú© داوطلبان Ùˆ مترجمین " +"خوب) روی آن کار میکنم Ùˆ آنرا رایگان منتشر میکنم. \n" +"<p> اگر 4% برای شما سودمند است، Ù„Ø·ÙØ§Ù‹ به این پروژه Ú©Ù…Ú© کنید. پشتیبانی مالی به من " +"Ú©Ù…Ú© میکند تا وقت بیشتری صر٠توسعه Ùˆ بهبود 5% کنم!<p> n\n" "برو به Ù¾ÛŒ پال برای پرداخت 40 یورو!<ul><li><a ref=\"https://dcpomatic.com/" "donate_amount?amount=40\">\n" " برو به Ù¾ÛŒ پال برای پرداخت 20 یورو!a><li><a href=\"https://dcpomatic.com/" @@ -234,58 +281,56 @@ msgstr "" "برو به Ù¾ÛŒ پال برای پرداخت 10 یورو! a><li><a href=\"https://dcpomatic.com/" "donate_amount?amount=10\">\n" "</a></ul><p>\n" -"متشکرم!" +"متشکرم! </font>" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 msgid "" -"A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " -"unlikely to have any visible effect on the image." +"A few projectors have problems playing back very high bit-rate DCPs. It is a " +"good idea to drop the video bit rate down to about 200Mbit/s; this is unlikely " +"to have any visible effect on the image." msgstr "" "برخی پروژکتورها برای پخش دی سی Ù¾ÛŒ های با نرخ بیت بسیار بالا مشکل دارند. ایده " -"خوبی است Ú©Ù‡ عرض باند JPEG2000 را تا 200 مگابیت بر ثانیه کاهش دهید; این کار " -"اثر قابل مشاهده ای روی تصویر ندارد." +"خوبی است Ú©Ù‡ نرخ بیت ویدیو را تا 200 مگابیت بر ثانیه کاهش دهید; این کار اثر قابل " +"مشاهده ای روی تصویر ندارد." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" -"A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"A subtitle or closed caption file in this project is marked with the language " +"'%1', which %2 does not recognise. The file's language has been cleared." msgstr "" -"یک زیرنویس یا ÙØ§ÛŒÙ„ زیرنویس با زبان '%1 در این پروژه مشخص شده است، Ú©Ù‡ برای دی " -"سی Ù¾ÛŒ-او-ماتیک قابل تشخیص نیست. زبان ÙØ§ÛŒÙ„ پاک شده است." +"یک زیرنویس یا ÙØ§ÛŒÙ„ زیرنویس با زبان '1%' در این پروژه مشخص شده است، Ú©Ù‡ 2% قابل " +"تشخیص نیست. زبان ÙØ§ÛŒÙ„ پاک شده است." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "تبلیغات بازرگانی" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " -"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " -"You may prefer to set your DCP's container to Scope (2.39:1) in the \"DCP\" " -"tab." +"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. You " +"may prefer to set your DCP's container to Scope (2.39:1) in the \"DCP\" tab." msgstr "" -"Ù…ØØªÙˆØ§ÛŒ شما با نسبت 2/39 به 1 است(اسکوپ)ØŒ اما ظر٠دی سی Ù¾ÛŒ شما کوچکتر Ùˆ 1/85 " -"به 1 است(تخت). تصویر شما Ú©ÙˆÚ†Ú© شده Ùˆ در داخل یک قاب تخت (1/85 به 1) قرار " -"میگیرد. ممکن است ØªØ±Ø¬ÛŒØ Ø¯Ù‡ÛŒØ¯ ظر٠دی سی Ù¾ÛŒ را در زبانه \"دی سی Ù¾ÛŒ\" بزرگتر Ùˆ " -"روی اسکوپ (2/39 به 1) قرار دهید." +"Ù…ØØªÙˆØ§ÛŒ شما با نسبت 2/39 به 1 است(اسکوپ)ØŒ اما ظر٠دی سی Ù¾ÛŒ شما کوچکتر Ùˆ 1/85 به 1 " +"است(تخت). تصویر شما Ú©ÙˆÚ†Ú© شده Ùˆ در داخل یک قاب تخت (1/85 به 1) قرار میگیرد. ممکن " +"است ØªØ±Ø¬ÛŒØ Ø¯Ù‡ÛŒØ¯ ظر٠دی سی Ù¾ÛŒ را در زبانه \"دی سی Ù¾ÛŒ\" بزرگتر Ùˆ روی اسکوپ (2/39 به " +"1) قرار دهید." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " -"(2.39:1). This will pillar-box your content. You may prefer to set your " -"DCP's container to have the same ratio as your content." +"(2.39:1). This will pillar-box your content. You may prefer to set your DCP's " +"container to have the same ratio as your content." msgstr "" -"عرض Ù…ØØªÙˆØ§ÛŒ شما کمتر از 1/90 است اما ظر٠دی سی Ù¾ÛŒ شما اسکوپ (2/39 به 1) است. " -"باعث میشود کناره های Ù…ØØªÙˆØ§ سییاه شود. ممکن است ØªØ±Ø¬ÛŒØ Ø¯Ù‡ÛŒØ¯ Ú©Ù‡ ظر٠دی سی Ù¾ÛŒ " -"خود را مشابه با نسبت ابعاد Ù…ØØªÙˆØ§ تغییر دهید." +"عرض Ù…ØØªÙˆØ§ÛŒ شما کمتر از 1/90 است اما ظر٠دی سی Ù¾ÛŒ شما اسکوپ (2/39 به 1) است. باعث " +"میشود کناره های Ù…ØØªÙˆØ§ سییاه شود. ممکن است ØªØ±Ø¬ÛŒØ Ø¯Ù‡ÛŒØ¯ Ú©Ù‡ ظر٠دی سی Ù¾ÛŒ خود را " +"مشابه با نسبت ابعاد Ù…ØØªÙˆØ§ تغییر دهید." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "بروز خطا هنگام دسترسی به ÙØ§ÛŒÙ„ %1." @@ -293,68 +338,67 @@ msgstr "بروز خطا هنگام دسترسی به ÙØ§ÛŒÙ„ %1." msgid "Analysing audio" msgstr "آنالیز صدا" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "آنالیز زیرنویس" -#: src/lib/hints.cc:366 -msgid "" -"At least one marker comes after the end of the project and will be ignored." +#: src/lib/hints.cc:386 +msgid "At least one marker comes after the end of the project and will be ignored." msgstr "ØØ¯Ø§Ù‚Ù„ یک نشانه در آخر پروژه قرار Ú¯Ø±ÙØªÙ‡ Ú©Ù‡ از آن صر٠نظر شد." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "ØØ¯Ø§Ù‚Ù„ یکی از ÙØ§ÛŒÙ„های زیرنویس شما بزرگتر است از " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "ØØ¯Ø§Ù‚Ù„ یکی از قسمتهای XML ÙØ§ÛŒÙ„های زیرنویس شما بزرگتر است از " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "ØØ¯Ø§Ù‚Ù„ یکی از ÙØ§ÛŒÙ„های زیرنویس شما بزرگتر است از " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -"ØØ¯Ø§Ù‚Ù„ یکی از خطهای زیرنویس شما بیشتر از 52 ØØ±Ù دارد. توصیه میشود طول هر خط " -"را ØØ¯Ø§Ú©Ø«Ø± به 52 ØØ±Ù تغییر دهید." +"ØØ¯Ø§Ù‚Ù„ یکی از خطهای زیرنویس شما بیشتر از 52 ØØ±Ù دارد. توصیه میشود طول هر خط را " +"ØØ¯Ø§Ú©Ø«Ø± به 52 ØØ±Ù تغییر دهید." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -"ØØ¯Ø§Ù‚Ù„ یکی از خطهای زیرنویس شما بیش از 79 ØØ±Ù دارد. شما باید طول هر خط را " -"ØØ¯Ø§Ú©Ø«Ø± به 79 ØØ±Ù تغییر دهید." +"ØØ¯Ø§Ù‚Ù„ یکی از خطهای زیرنویس شما بیش از 79 ØØ±Ù دارد. شما باید طول هر خط را ØØ¯Ø§Ú©Ø«Ø± " +"به 79 ØØ±Ù تغییر دهید." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" -"At least one of your subtitles has more than 3 lines. It is advisable to " -"use no more than 3 lines." +"At least one of your subtitles has more than 3 lines. It is advisable to use no " +"more than 3 lines." msgstr "" -"ØØ¯Ø§Ù‚Ù„ یکی از زیرنویسهای شما بیش از 3 خط دارد. توصیه میشود بیش از سه خط " -"Ø§Ø³ØªÙØ§Ø¯Ù‡ نکنید." +"ØØ¯Ø§Ù‚Ù„ یکی از زیرنویسهای شما بیش از 3 خط دارد. توصیه میشود بیش از سه خط Ø§Ø³ØªÙØ§Ø¯Ù‡ " +"نکنید." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" -"At least one of your subtitles lasts less than 15 frames. It is advisable " -"to make each subtitle at least 15 frames long." +"At least one of your subtitles lasts less than 15 frames. It is advisable to " +"make each subtitle at least 15 frames long." msgstr "" -"ØØ¯Ø§Ù‚Ù„ یک زیرنویس وجود دارد Ú©Ù‡ زمان آن کمتر از 15 ÙØ±ÛŒÙ… است. توصیه میشود زمان " -"هر زیرنویس ØØ¯Ø§Ù‚Ù„ 15 ÙØ±ÛŒÙ… بر ثانیه باشد." +"ØØ¯Ø§Ù‚Ù„ یک زیرنویس وجود دارد Ú©Ù‡ زمان آن کمتر از 15 ÙØ±ÛŒÙ… است. توصیه میشود زمان هر " +"زیرنویس ØØ¯Ø§Ù‚Ù„ 15 ÙØ±ÛŒÙ… بر ثانیه باشد." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -"ØØ¯Ø§Ù‚Ù„ یکی از زیرنویسهای شما کمتر از 2 ÙØ±ÛŒÙ… بعد از زیرنویس قبلی شروع میشود. " -"توصیه میشود زمان بین دو زیرنویس ØØ¯Ø§Ù‚Ù„ 2 ÙØ±ÛŒÙ… باشد." +"ØØ¯Ø§Ù‚Ù„ یکی از زیرنویسهای شما کمتر از 2 ÙØ±ÛŒÙ… بعد از زیرنویس قبلی شروع میشود. توصیه " +"میشود زمان بین دو زیرنویس ØØ¯Ø§Ù‚Ù„ 2 ÙØ±ÛŒÙ… باشد." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -376,72 +420,72 @@ msgstr "صدا با %1هرتز نمونه برداری مجدد میشود" msgid "Audio will not be resampled" msgstr "صدا نمونه برداری مجدد نمیشود" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "طی٠رنگی گسترده BT1361" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "روشنایی ثابت BT2020" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 برای یک سیستم 10 بیتی" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 برای یک سیستم 12 بیتی" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "روشنایی غیر ثابت BT2020" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "تعداد بیتها بر پیکسل" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Ùیلتر ضداینترلیس باب ویور" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "c" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "لغو شد" @@ -453,11 +497,11 @@ msgstr "نمیتواند شامل اسلش باشد" msgid "Cannot handle pixel format %1 during %2" msgstr "نمیتوان ÙØ±Ù…ت پیکسل %1 را همزمان با %2 کار کرد" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "برای پروژه ای Ú©Ù‡ رمزگذاری نشده است کلید ساخته نمیشود." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "مرکز" @@ -465,7 +509,7 @@ msgstr "مرکز" msgid "Channels" msgstr "کانالها" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "تنظیمات جدید آنها را بررسی، سپس مجددا تلاش کنید." @@ -473,27 +517,31 @@ msgstr "تنظیمات جدید آنها را بررسی، سپس مجددا ت٠msgid "Checking content" msgstr "بررسی Ù…ØØªÙˆØ§" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "بررسی داده های تصویر موجود" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "روشنایی ثابت مشتق از رنگ" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "روشنایی غیر ثابت مشتق از رنگ" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "کلیپ" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" -msgstr "زیرنویس Ùیلم" +msgstr "عنوان پایان Ùیلم" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +msgid "Closed subtitles" +msgstr "زیرنویس های پایان Ùیلم" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "رنگهای اصلی" @@ -507,17 +555,17 @@ msgstr "رنگهای اصلی" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Ù…ØØ¯ÙˆØ¯Ù‡ رنگ" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "مشخصه انتقال رنگ" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "ÙØ¶Ø§ÛŒ رنگ" @@ -525,15 +573,15 @@ msgstr "ÙØ¶Ø§ÛŒ رنگ" msgid "Combine DCPs" msgstr "ترکیب دی سی Ù¾ÛŒ ها" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "در ØØ§Ù„ Ù…ØØ§Ø³Ø¨Ø§Øª" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "در ØØ§Ù„ Ù…ØØ§Ø³Ø¨Ø§Øª" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "تبریک میگویم!" @@ -549,19 +597,19 @@ msgstr "عمق بیت Ù…ØØªÙˆØ§" msgid "Content sample rate" msgstr "نرخ نمونه Ù…ØØªÙˆØ§" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود همه با صدا یا همه بی صدا باید باشد" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود همه با زیرنویس یا همه بدون زیرنویس باید باشد" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود همه با ویدیو Ùˆ یا همه بدون ویدیو باید باشد" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -571,12 +619,11 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود یا باید همه ویدیوی آن Ø§Ø³ØªÙØ§Ø¯Ù‡ شود یا هیچ." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." -msgstr "" -"Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید همان تنظیمات 'زیرنویس ØÚ© شده' را داشته باشد." +msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید همان تنظیمات 'زیرنویس ØÚ© شده' را داشته باشد." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید همان تنظیمات 'Ø§Ø³ØªÙØ§Ø¯Ù‡ از زیرنویس' را داشته باشد." @@ -613,7 +660,7 @@ msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید تنظیمات اند msgid "Content to be joined must have the same fades." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید ÙÛŒÙØ¯ مشابه داشته باشد." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید پهنای Ú©Ù„ÛŒ مشابهی داشته باشد." @@ -621,31 +668,31 @@ msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید پهنای Ú©Ù„ÛŒ Ù…Ø msgid "Content to be joined must have the same picture size." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید اندازه تصویر مشابهی داشته باشد." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید موقعیت X زیرنویس مشابه داشته باشد." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید مقیاس X زیرنویس مشابه داشته باشد." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید موقعیتY زیرنویس مشابه داشته باشد." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید مقیاس Y زیرنویس مشابه داشته باشد." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید ÙÛŒÙØ¯ زیرنویس مشابه داشته باشد." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید ÙØ§ØµÙ„Ù‡ خط زیرنویس مشابه داشته باشد." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید نرخ ÙØ±ÛŒÙ… ویدیوی مشابه داشته باشد" @@ -653,23 +700,23 @@ msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید نرخ ÙØ±ÛŒÙ… ÙˆÛŒØ msgid "Content to be joined must have the same video frame type." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید نوع ÙØ±ÛŒÙ… ویدیوی مشابه داشته باشد." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید ترک دی سی Ù¾ÛŒ مشابه داشته باشد." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید Ùونتهای مشابه داشته باشد." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید رشته کد زیرنویس مشابه داشته باشد." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "Ù…ØØªÙˆØ§ÛŒÛŒ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود باید زبان نوشتاری مشابه داشته باشد." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Ù…ØØªÙˆØ§ÛŒ ویدیو %1x%2 است" @@ -677,14 +724,6 @@ msgstr "Ù…ØØªÙˆØ§ÛŒ ویدیو %1x%2 است" msgid "Copy DCP to TMS" msgstr "Ú©Ù¾ÛŒ دی سی Ù¾ÛŒ به تی ام اس" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیوی قدیمی" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیو به دی سی Ù¾ÛŒ" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "ارتباط با سرور ممکن نیست %1(%2)" @@ -701,20 +740,19 @@ msgstr "ÙØ§ÛŒÙ„ JPEG2000 رمزگشایی نشد %1(%2)" msgid "Could not decode image (%1)" msgstr "تصویر رمزگشایی نشد (%1)" -#: src/lib/unzipper.cc:64 -#, fuzzy +#: src/lib/unzipper.cc:76 msgid "Could not find file %1 in ZIP file" -msgstr "ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ دانلود شده باز نشد" +msgstr "ÙØ§ÛŒÙ„ 1% در ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ پیدا نشد" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 is " +"running." msgstr "" -"نمیتوان به سرورهای رمزگذاری راه دور گوش داد. ممکن است نسخه دیگری از دی سی Ù¾ÛŒ-" -"او-ماتیک در ØØ§Ù„ اجرا باشد." +"نمیتوان به سرورهای رمزگذاری راه دور گوش داد. ممکن است نسخه دیگری از 1% در ØØ§Ù„ " +"اجرا باشد." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "باز نشد %1" @@ -722,19 +760,19 @@ msgstr "باز نشد %1" msgid "Could not open %1 to send" msgstr "برای ارسال باز نشد %1" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ دانلود شده باز نشد" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ دانلود شده باز نشد (%1:%2:%3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "ÙØ§ÛŒÙ„ برای نوشتن باز نشد" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "ÙØ§ÛŒÙ„ خروجی باز نشد %1(%2)" @@ -750,19 +788,19 @@ msgstr "نمی توان انتقال را شروع کرد" msgid "Could not write to remote file (%1)" msgstr "نمیتوان در ÙØ§ÛŒÙ„ راه دور نوشت(%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "دی-باکس اصلی" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "دی-باکس ثانویه" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "دی بی Ù¾ÛŒ" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "دی بی اس" @@ -774,7 +812,7 @@ msgstr "دی سی Ø¢ÛŒ تخت" msgid "DCI Scope" msgstr "دی سی Ø¢ÛŒ اسکوپ" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "زیرنویس های XML دی سی Ù¾ÛŒ" @@ -791,51 +829,40 @@ msgstr "دی سی Ù¾ÛŒ با %.1f%% سرعت Ù…ØØªÙˆØ§ اجرا خواهد شد msgid "DCP will use every other frame of the content.\n" msgstr "دی سی Ù¾ÛŒ از هر ÙØ±ÛŒÙ… دیگر Ù…ØØªÙˆØ§ Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that can " +"be used with MPEG2 encoding." msgstr "" -"دی سی Ù¾ÛŒ-او-ماتیک نمی تواند ÙØ§ÛŒÙ„ %1(%2) را باز کند. ÙØ§ÛŒÙ„ یا وجود ندارد Ùˆ یا " -"ÙØ±Ù…ت مناسب." +"چهارچوب Ù…ØØªÙˆØ§ÛŒ شما توسط DOMروی 1920x1080تنظیم شد زیرا تنها گزینه ای است Ú©Ù‡ برای " +"رمزگذاری MPEG2 میتواند مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ قرارگیرد." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"دی سی Ù¾ÛŒ-او-ماتیک مجبور شد برای ارجاع به یک دی سی Ù¾ÛŒ به عنوان نسخه اصلی " -"تنظیمات شما را تغییر دهد. Ù„Ø·ÙØ§ آنها را بررسی کنید تا مطمئن شوید همان چیزی " -"است Ú©Ù‡ شما Ù…ÛŒ خواهید." +"در ØØ§Ù„ ØØ§Ø¶Ø±Ø³Ù‡ بعدی توسط DOM برای رمزگذاری MPEG2 پشتیبانی نمیشود به همین دلیل " +"Ùیلم شما روی دو بعدی تنظیم گردید." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 and " +"that is not a standard ratio with JPEG2000 encoding." msgstr "" -"دی سی Ù¾ÛŒ-او-ماتیک مجبور شد تنظیمات شما را تغییر دهد تا نرخ ÙØ±ÛŒÙ… Ùیلم برابر " -"Ù…ØØªÙˆØ§ÛŒ دالبی اتمز شما شود." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "" -"دی سی Ù¾ÛŒ-او-ماتیک دیگر از Ùیلتر'%1'پشتیبانی نمیکند، بنابراین خاموش شده است." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "اعلان دی سی Ù¾ÛŒ-او-ماتیک" +"DOM چهارچوب Ù…ØØªÙˆØ§ را روی DCI Flat تنظیم کرد، Ú©Ù‡ قبلا روی 1920x1080 بود Ú©Ù‡ برای " +"رمزگذاری JPEG2000 یک نسبت استاندارد نیست." #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 or AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "ضد-اینترلیسینگ" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 msgid "" "Dear Projectionist\n" "\n" @@ -847,7 +874,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "سینمادار عزیز\n" "\n" @@ -856,16 +883,20 @@ msgstr "" "سینما: $CINEMA_NAME\n" "سالن(ها) $SCREENS\n" "\n" -"اعتبار کلید از$START_TIMEتا $END_TIMEاست .\n" +"اعتبار کلید از$START_TIMEتا $END_TIMEاست .\n" "\n" "با Ø§ØØªØ±Ø§Ù…,\n" -"دی سی Ù¾ÛŒ-او-ماتیک" +"%1" + +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "هنگام نوشتن 1% دیسک پر شد" #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "دالبی CP650 یا CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "دانلود با خطا مواجه شد(%1 خطا%2)" @@ -889,19 +920,19 @@ msgstr "ایمیل کلیدها برای %1" msgid "Email notification" msgstr "اعلان ایمیل" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "گزارش مشکل ایمیل" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "گزارش مشکل ایمیل برای %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "رمزگذاری" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "قسمت" @@ -909,19 +940,19 @@ msgstr "قسمت" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "خطا در ÙØ§ÛŒÙ„ زیرنویس: % 1 دیدم در ØØ§Ù„ÛŒ Ú©Ù‡ انتظار % 2 را داشتم" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "خطا: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "رویداد" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 msgid "Examining audio" msgstr "بررسی صدا" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "بررسی صدا، زیرنویس Ùˆ ÙØ§ÛŒÙ„ زیرنویس" @@ -933,15 +964,15 @@ msgstr "بررسی Ù…ØØªÙˆØ§" msgid "Examining subtitles" msgstr "بررسی زیرنویس" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "بررسی ÙØ§ÛŒÙ„ های زیرنویس" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "استخراج کردن" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -949,51 +980,51 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Ø§ØØ±Ø§Ø² هویت با سرور ناموÙÙ‚(%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "رمزگذاری دی سی Ù¾ÛŒ ناموÙÙ‚." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "ارسال ایمیل ناموÙÙ‚" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Ùیلم بلند" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "نام ÙØ§ÛŒÙ„" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "نام ÙØ§ÛŒÙ„ها" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "ÙØ§ÛŒÙ„ها از زمانی Ú©Ù‡ به پروژه اضاÙÙ‡ شده اند تغییر کرده اند." -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Ùیلم" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "در ØØ§Ù„ ÛŒØ§ÙØªÙ† مدت" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "نرخ ÙØ±ÛŒÙ…" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "جمعه" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "کامل" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "کامل(0-%1)" @@ -1017,35 +1048,35 @@ msgstr "زمان کامل در ÙØ±ÛŒÙ…های ویدیوبرابر با نرخ Ø msgid "Full length in video frames at content rate" msgstr "زمان کامل در ÙØ±ÛŒÙ…های ویدیوبرابر با نرخ Ù…ØØªÙˆØ§" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "گاما22(BT470)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "گاما28(BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradient debander" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "اختلال شنوایی" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "ناشنوا" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "ضد نویزسه بعدی با Ú©ÛŒÙیت" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "نکات برجسته" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "برگردان اÙÙ‚ÛŒ" @@ -1053,115 +1084,115 @@ msgstr "برگردان اÙÙ‚ÛŒ" msgid "Hz" msgstr "هرتز" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB or sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -"اگر از 25 ÙØ±ÛŒÙ… بر ثانیه Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید استاندارد دی سی Ù¾ÛŒ خود را به اس ام Ù¾ÛŒ " -"تی ای تغییر دهید." +"اگر از 25 ÙØ±ÛŒÙ… بر ثانیه Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید استاندارد دی سی Ù¾ÛŒ خود را به اس ام Ù¾ÛŒ تی " +"ای تغییر دهید." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" -"In general it is now advisable to make SMPTE DCPs unless you have a " -"particular reason to use Interop. It is advisable to set your DCP to use " -"the SMPTE standard in the \"DCP\" tab." +"In general it is now advisable to make SMPTE DCPs unless you have a particular " +"reason to use Interop. It is advisable to set your DCP to use the SMPTE " +"standard in the \"DCP\" tab." msgstr "" "به طور Ú©Ù„ÛŒ اکنون توصیه میشود Ú©Ù‡ دی سی Ù¾ÛŒ اس ام Ù¾ÛŒ تی ای بسازید ØØªÛŒ اگر دلیل " "معینی برای Ø§Ø³ØªÙØ§Ø¯Ù‡ از اینتروپ دارید. توصیه میشود Ú©Ù‡ در زبانه \"دی سی Ù¾ÛŒ\" " "استاندارد اس ام Ù¾ÛŒ تی ای را برای دی سی Ù¾ÛŒ خودتان انتخاب کنید." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " -"Positioning should now be more correct, with respect to the standards, but " -"you should check any subtitles in your project to make sure that they are " -"placed where you want them." +"In this version there are changes to the way that subtitles are positioned. " +"Positioning should now be more correct, with respect to the standards, but you " +"should check any subtitles in your project to make sure that they are placed " +"where you want them." msgstr "" -"در این نسخه در Ù†ØÙˆÙ‡ جانمایی زیرنویسها تغییراتی وجود دارد. اکنون مطابق با " -"استانداردها، جانمایی بسیار دقیقتر است، اما شما باید همه زیرنویسهای پروژه خود " -"را برای اطمینان از جانمایی درست بررسی کنید." +"دراین نسخه از نرم Ø§ÙØ²Ø§Ø± در Ù†ØÙˆÙ‡ جانمایی زیرنویسها تغییراتی داده شده است. اکنون " +"مطابق با استانداردها، جانمایی بسیار دقیقتر است، اما شما باید همه زیرنویسهای " +"پروژه خود را برای اطمینان از جانمایی مناسب بررسی کنید." -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" -"It is advisable to put your first subtitle at least 4 seconds after the " -"start of the DCP to make sure it is seen." +"It is advisable to put your first subtitle at least 4 seconds after the start of " +"the DCP to make sure it is seen." msgstr "" -"توصیه میشود Ú©Ù‡ اولین زیرنویس خود را ØØ¯Ø§Ù‚Ù„ 4 ثانیه بعد از شروع دی سی Ù¾ÛŒ قرار " -"دهید تا مطمئن شوید Ú©Ù‡ دیده میشود." +"توصیه میشود Ú©Ù‡ اولین زیرنویس خود را ØØ¯Ø§Ù‚Ù„ 4 ثانیه بعد از شروع دی سی Ù¾ÛŒ قرار دهید " +"تا مطمئن شوید Ú©Ù‡ دیده میشود." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." -msgstr "معلوم نیست Ú†Ù‡ چیزی باعث این خطا شده است." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +msgid "It is not known what caused this error. %1" +msgstr "معلوم نیست Ú†Ù‡ چیزی باعث این خطا شده است. 1%" -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "تØÙˆÛŒÙ„ کلید: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "ضد اینترلیسر هسته" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "Ú†Ù¾" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Ú†Ù¾" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "مرکز- Ú†Ù¾" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "پشت سر- Ú†Ù¾ سراوند" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Ú†Ù¾ سراوند" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "مدت" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "اÙکت ÙØ±Ú©Ø§Ù†Ø³ پایین" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "اÙکت ÙØ±Ú©Ø§Ù†Ø³ پایین (sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Ù…ØØ¯ÙˆØ¯ شد" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 msgid "Limited / video (%1-%2)" msgstr "Ù…ØØ¯ÙˆØ¯ شد/ویدیو (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "خطی" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "لگاریتمی(Ù…ØØ¯ÙˆØ¯Ù‡ 100 به 1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "لگاریتمی(Ù…ØØ¯ÙˆØ¯Ù‡ 316 به 1)" @@ -1169,7 +1200,7 @@ msgstr "لگاریتمی(Ù…ØØ¯ÙˆØ¯Ù‡ 316 به 1)" msgid "Lost communication between main and writer processes" msgstr "قطع ارتباط بین پردازش های اصلی Ùˆ رایتر" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "سراوند Ú†Ù¾" @@ -1177,24 +1208,24 @@ msgstr "سراوند Ú†Ù¾" msgid "Mid-side decoder" msgstr "رمزگشای میانه" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Ù…ØªÙØ±Ù‚Ù‡" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "تعداد کانالهای صدا در دی سی Ù¾ÛŒ مطابقت ندارند" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "نرخ های نمونه صدا در دی سی Ù¾ÛŒ مطابقت ندارند" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "نرخ های ÙØ±ÛŒÙ… در دی سی Ù¾ÛŒ مطابقت ندارند" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "اندازه های ویدیو در دی سی Ù¾ÛŒ مطابقت ندارند" @@ -1202,19 +1233,19 @@ msgstr "اندازه های ویدیو در دی سی Ù¾ÛŒ مطابقت ندار msgid "Missing required setting %1" msgstr "تنظیم مورد نیاز وجود ندارد%1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "دوشنبه" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "مونو" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "ضد اینترلیسر جبران کننده ØØ±Ú©Øª" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "سی Ù¾ÛŒ الی در دی سی Ù¾ÛŒ وجود ندارد." @@ -1226,80 +1257,88 @@ msgstr "در قسمت اولویتها، زبانه ایمیل کلید، آدر msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "در قسمت اولویتها، زبانه ایمیل، آدرس سرور ایمیل خروجی تعیین نشده است" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "در این پوشه ÙØ§ÛŒÙ„ تصویر معتبری پیدا نشد." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "کاهش نویز" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "هیچکدام" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "مورد تایید" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 msgid "OK (ran for %1 from %2 to %3)" msgstr "مورد تایید (اجرا شد %1 از %2 تا %3)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "مورد تایید (اجرا شد %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" -"Ùقط اولین قسمت Ù…ØØªÙˆØ§ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ شروع " -"باشد." +"Ùقط اولین قسمت Ù…ØØªÙˆØ§ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ شروع باشد." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" -"Ùقط آخرین قسمت Ù…ØØªÙˆØ§ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ پایان " -"باشد." +"Ùقط آخرین قسمت Ù…ØØªÙˆØ§ Ú©Ù‡ Ø§Ù„ØØ§Ù‚ میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ پایان باشد." + +#: src/lib/text_type.cc:81 +msgid "Open captions" +msgstr "عنوان شروع Ùیلم" -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:79 msgid "Open subtitles" -msgstr "بازکردن زیرنویس" +msgstr "زیرنویس شروع Ùیلم" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -"بازکردن پروژه در دی سی Ù¾ÛŒ-او-ماتیک، بررسی تنظیمات، سپس ذخیره کنید قبل از " -"اینکه مجددا تلاش کنید." +"بازکردن پروژه در 1%ØŒ بررسی تنظیمات، سپس قبل از تلاش مجدد یک بار پروژه را ذخیره " +"کنید." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "جهت" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "ØØ§Ùظه پر شده" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "ضد نویز Ùوق کامل ویولت" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "Ù¾ÛŒ3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to %1" +msgstr "" +"Ù„Ø·ÙØ§ این مشکل را از طریق منوی \"راهنما --> گزارش یک مشکل\" Ùˆ یا ارسال ایمیل به " +"1% گزارش دهید" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "خط مشی" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "کانال Ø¢Ù„ÙØ§ پیش از ضرب" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "برای نرخ ÙØ±ÛŒÙ… ویدیو آماده است" @@ -1307,119 +1346,119 @@ msgstr "برای نرخ ÙØ±ÛŒÙ… ویدیو آماده است" msgid "Programming error at %1:%2 %3" msgstr "خطای برنامه نویسی در%1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "تبلیغاتی" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "سرویس اعلان عمومی" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "راست" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "آر جی بی / اس آر جی بی (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "رتبه بندی" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "توصیه نامه 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "توصیه نامه 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "توصیه نامه 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "توصیه نامه 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "راست" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "مرکز- راست" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "پشت سر- سراوند راست" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "سراوند راست" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "چرخش 90 درجه خلا٠عقربه ساعت" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "چرخش 90 درجه در جهت عقربه ساعت" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "سراوند راست" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" -"SMPTE DCPs with the type FTR (feature) should have markers for the first " -"frame of end credits (FFEC) and the first frame of moving credits (FFMC). " -"You should add these markers using the 'Markers' button in the \"DCP\" tab." +"SMPTE DCPs with the type FTR (feature) should have markers for the first frame " +"of end credits (FFEC) and the first frame of moving credits (FFMC). You should " +"add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -"دی سی Ù¾ÛŒ های استاندارد اس ام Ù¾ÛŒ تی ای از نوع Ùیلم بلند(FTR) باید برای اولین " -"ÙØ±ÛŒÙ… شروع تیتراژ پایانی Ùˆ آغاز دارای نشانگر باشند. در زبانه دی سی Ù¾ÛŒ توسط " -"\"نشانه گذار\" آنها را اضاÙÙ‡ کنید." +"دی سی Ù¾ÛŒ های استاندارد اس ام Ù¾ÛŒ تی ای از نوع Ùیلم بلند(FTR) باید برای اولین ÙØ±ÛŒÙ… " +"شروع تیتراژ پایانی Ùˆ آغاز دارای نشانگر باشند. در زبانه دی سی Ù¾ÛŒ توسط \"نشانه " +"گذار\" آنها را اضاÙÙ‡ کنید." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1427,32 +1466,31 @@ msgstr "SMPTE ST 432-1 D65 (2010)" msgid "SSH error [%1]" msgstr "خطای اس اس اچ [%1]" -#: src/lib/scp_uploader.cc:63 src/lib/scp_uploader.cc:76 -#: src/lib/scp_uploader.cc:83 +#: src/lib/scp_uploader.cc:63 src/lib/scp_uploader.cc:76 src/lib/scp_uploader.cc:83 msgid "SSH error [%1] (%2)" msgstr "خطای اس اس اچ [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "شنبه" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "اسکن ÙØ§ÛŒÙ„های تصویر" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "در ØØ§Ù„ ارسال ایمیل" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "کوتاه" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "امضاء" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "اندازه" @@ -1460,11 +1498,11 @@ msgstr "اندازه" msgid "Some audio will be resampled to %1Hz" msgstr "برخی صداها با %1هرتز مجدد نمونه برداری میشوند" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "برخی ÙØ§ÛŒÙ„ها از زمان اضاÙÙ‡ شدن به پروژه تغییر کرده اند." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1486,18 +1524,17 @@ msgstr "" "\n" "این ÙØ§ÛŒÙ„ها بررسی مجدد میشوند، ممکن است نیاز باشد تنظیمات آنها را کنترل کنید." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" -"Some of your closed captions span more than %1 lines, so they will be " -"truncated." +"Some of your closed captions span more than %1 lines, so they will be truncated." msgstr "" "برخی از زیرنویس‌های شما بیش از % 1 خطوط را شامل می‌شوند، بنابراین کوتاه می‌شوند." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" -"Some of your content has audio but you have not set the audio language. It " -"is advisable to set the audio language in the \"DCP\" tab unless your audio " -"has no spoken parts." +"Some of your content has audio but you have not set the audio language. It is " +"advisable to set the audio language in the \"DCP\" tab unless your audio has no " +"spoken parts." msgstr "" "بخش از Ù…ØØªÙˆØ§ÛŒ شما صدا دارد اما شما زبان آنرا تنظیم نکرده اید. توصیه میشود Ú©Ù‡ " "زبان را در زبانه \"دی سی Ù¾ÛŒ\" تنظیم کنید ØØªÛŒ اگرسکوت دارد." @@ -1514,11 +1551,11 @@ msgstr "بخشی از Ù…ØØªÙˆØ§ÛŒ شما نیازمند کلید است" msgid "Some of your content needs an OV" msgstr "بخشی از Ù…ØØªÙˆØ§ÛŒ شما نیازمند یک نسخه اصلی است(OV)" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "استریو" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "تصویر استریوگراÙ" @@ -1530,19 +1567,19 @@ msgstr "استریو به 5/1 میکسر A" msgid "Stereo to 5.1 up-mixer B" msgstr "استریو به 5/1 میکسر B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "یکشنبه" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "تیزر" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Ùیلتر تÙÙ„ÙÙ‡ سینما" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "آزمایش" @@ -1562,168 +1599,180 @@ msgstr "زنجیره گواهینامه نامعتبر است" msgid "The certificate chain for signing is invalid (%1)" msgstr "زنجیره گواهینامه نامعتبر است(%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a small " +"error which will prevent DCPs from being validated correctly on some systems. " +"It is advisable to re-create the signing certificate chain by clicking the \"Re-" +"make certificates and key...\" button in the Keys page of Preferences." msgstr "" -"زنجیره گواهینامه Ú©Ù‡ دی سی Ù¾ÛŒ-او-ماتیک برای امضاء دی سی Ù¾ÛŒ ها Ùˆ کلیدها " -"Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند دچار اشکال است Ùˆ ممکن است دی سی Ù¾ÛŒ تولید شده توسط آن در برخی " -"سیستمها به درستی اجرا نشوند. توصیه میشود با مراجعه به اولویتها در زبانه کلید " -"توسط \"ساخت مجدد گواهی نامه Ùˆ کلید..\" مجدد زنجیره گواهی نامه را ایجاد کنید." +"زنجیره گواهینامه Ú©Ù‡ 1% برای امضاء دی سی Ù¾ÛŒ ها Ùˆ کلیدها Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند دچار اشکال " +"است Ùˆ ممکن است دی سی Ù¾ÛŒ تولید شده توسط آن در برخی سیستمها به درستی اجرا نشوند. " +"توصیه میشود با مراجعه به اولویتها در زبانه کلید توسط \"ساخت مجدد گواهی نامه Ùˆ " +"کلید..\" مجدد زنجیره گواهی نامه را ایجاد کنید." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by clicking " +"the \"Re-make certificates and key...\" button in the Keys page of Preferences." msgstr "" -"مدت اعتبار زنجیره گواهینامه Ú©Ù‡ دی سی Ù¾ÛŒ-او-ماتیک برای امضاء دی سی Ù¾ÛŒ ها Ùˆ " -"کلیدها Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند بسیار زیاد است. Ú©Ù‡ موجب عدم نمایش دی سی Ù¾ÛŒ ها روی برخی " -"سیستمها میشود. توصیه میشود با مراجعه به اولویتها در زبانه کلید توسط \"ساخت " -"مجدد گواهی نامه Ùˆ کلید..\" مجدد زنجیره گواهی نامه را ایجاد کنید." +"مدت اعتبار زنجیره گواهینامه Ú©Ù‡ 1% برای امضاء دی سی Ù¾ÛŒ ها Ùˆ کلیدها Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند " +"بسیار زیاد است. Ú©Ù‡ موجب عدم نمایش دی سی Ù¾ÛŒ ها روی برخی سیستمها میشود. توصیه " +"میشود با مراجعه به اولویتها در زبانه کلید توسط \"ساخت مجدد گواهی نامه Ùˆ کلید..\" " +"مجدد زنجیره گواهی نامه را ایجاد کنید." -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " -"Please set it to 2D. You can still make a 3D DCP from this content by " -"ticking the 3D option in the DCP video tab." +"Please set it to 2D. You can still make a 3D DCP from this content by ticking " +"the 3D option in the DCP video tab." msgstr "" -"ÙØ§ÛŒÙ„ Ù…ØØªÙˆØ§ÛŒ %1 سه بعدی است اما تصویر سه بعدی در آن نیست. Ù„Ø·ÙØ§ آنرا دو بعدی " -"تنظیم کنید. شما هنوزمیتوانید از طریق زبانه دی سی Ù¾ÛŒ Ùˆ تیک زدن گزینه سه بعدی " -"یک دی سی Ù¾ÛŒ سه بعدی بسازید." +"ÙØ§ÛŒÙ„ Ù…ØØªÙˆØ§ÛŒ %1 سه بعدی است اما تصویر سه بعدی در آن نیست. Ù„Ø·ÙØ§ آنرا دو بعدی تنظیم " +"کنید. شما هنوزمیتوانید از طریق زبانه دی سی Ù¾ÛŒ Ùˆ تیک زدن گزینه سه بعدی یک دی سی " +"Ù¾ÛŒ سه بعدی بسازید." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" -"The drive that the film is stored on is low in disc space. Free some more " -"space and try again." +"The drive that the film is stored on is low in disc space. Free some more space " +"and try again." msgstr "" "ÙØ¶Ø§ÛŒ کاÙÛŒ در Ù…ØÙ„ ذخیره Ùیلم وجود ندارد. پس از خالی کردن ÙØ¶Ø§ مجددا تلاش کنید." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه جلوتر Ø§ÙØªØ§Ø¯." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه عقب تر Ø§ÙØªØ§Ø¯." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه تنظیم وکوتاه شد." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه تنظیم وبلند شد." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema really " +"wants an old-style MPEG2 DCP." +msgstr "" +"اکثر قریب به Ø§ØªÙØ§Ù‚ سینماها در اروپا، استرالیا Ùˆ آمریکای شمالی انتظار دارند دی سی " +"Ù¾ÛŒ را با روش رمزگذاری شده JPEG2000 Ø¯Ø±ÛŒØ§ÙØª کنند Ùˆ نه روش MPEG2 قدیمی. اطمینان " +"ØØ§ØµÙ„ کنید Ú©Ù‡ سینمای مد نظر دی سی Ù¾ÛŒ MPEG2 سبک قدیمی Ù…ÛŒ خواهد." + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your project " +"to make sure that they are placed where you want them." +msgstr "" +"کنترل تنظیم عمودی برای زیرنویس ها اکنون خلا٠جهت است برعکس ØØ§Ù„تی Ú©Ù‡ قبلا بود. " +"اما شما باید همه زیرنویسهای پروژه خود را برای اطمینان از جانمایی درست بررسی کنید." + +#: src/lib/hints.cc:250 msgid "" -"There is a large difference between the frame rate of your DCP and that of " -"some of your content. This will cause your audio to play back at a much " -"lower or higher pitch than it should. It is advisable to set your DCP frame " -"rate to one closer to your content, provided that your target projection " -"systems support your chosen DCP rate." +"There is a large difference between the frame rate of your DCP and that of some " +"of your content. This will cause your audio to play back at a much lower or " +"higher pitch than it should. It is advisable to set your DCP frame rate to one " +"closer to your content, provided that your target projection systems support " +"your chosen DCP rate." msgstr "" -"اختلا٠بسیاری مابین نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ Ùˆ برخی از Ù…ØØªÙˆØ§Ù‡Ø§ÛŒ شما وجود دارد. Ú©Ù‡ " -"باعث میشود صدای شنیده شده یا خیلی جلو Ùˆ یا خیلی عقبتر از تصویر شنیده شود. " -"توصیه میشود نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ خود را هر Ú†Ù‡ نزدیکتر به Ù…ØØªÙˆØ§ انتخاب کنید، " -"طوریکه سیستم نمایشی Ú©Ù‡ قرار است آنرا نمایش دهد از آن پشتیبانی نماید." +"اختلا٠بسیاری مابین نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ Ùˆ برخی از Ù…ØØªÙˆØ§Ù‡Ø§ÛŒ شما وجود دارد. Ú©Ù‡ باعث " +"میشود صدای شنیده شده یا خیلی جلو Ùˆ یا خیلی عقبتر از تصویر شنیده شود. توصیه میشود " +"نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ خود را هر Ú†Ù‡ نزدیکتر به Ù…ØØªÙˆØ§ انتخاب کنید، طوریکه سیستم نمایشی " +"Ú©Ù‡ قرار است آنرا نمایش دهد از آن پشتیبانی نماید." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "در این دی سی Ù¾ÛŒ ویدیو وجود ندارد" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" -"There was not enough memory to do this. If you are running a 32-bit " -"operating system try reducing the number of encoding threads in the General " -"tab of Preferences." +"There was not enough memory to do this. If you are running a 32-bit operating " +"system try reducing the number of encoding threads in the General tab of " +"Preferences." msgstr "" "ØØ§Ùظه کاÙÛŒ برای انجام این کار وجود ندارد. اگر از سیستم عامل 32 بیتی Ø§Ø³ØªÙØ§Ø¯Ù‡ " -"میکنید سعی کنید تعداد رشته های رمزگذاری را از طریق زبانه Ú©Ù„ÛŒ در اولویتها " -"کاهش دهید." - -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." -msgstr "این کلید برای دی سی Ù¾ÛŒ-او-ماتیک ساخته شده اما نه برای گواهی برگ آن." +"میکنید سعی کنید تعداد رشته های رمزگذاری را از طریق زبانه Ú©Ù„ÛŒ در اولویتها کاهش " +"دهید." #: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." -msgstr "این کلید برای گواهی نامه دی سی Ù¾ÛŒ-او-ماتیک ساخته نشده است." +msgid "This KDM was made for %1 but not for its leaf certificate." +msgstr "این کلید برای 1% ساخته شده اما نه برای گواهی برگ آن." + +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." +msgstr "این کلید برای گواهی نامه 1% ساخته نشده است." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 msgid "" -"This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"This error has probably occurred because you are running the 32-bit version of " +"%1 and trying to use too many encoding threads. Please reduce the 'number of " +"threads %2 should use' in the General tab of Preferences and try again." msgstr "" -"این خطا ممکن است به دلیل Ø§Ø³ØªÙØ§Ø¯Ù‡ شما از نسخه 32 بیتی دی سی Ù¾ÛŒ-او-ماتیک Ùˆ " -"Ø§Ø³ØªÙØ§Ø¯Ù‡ از تعداد زیاد رشته های رمزگذاری پیش آمده باشد. Ù„Ø·ÙØ§ پس از کاهش تعداد " -"رشته ها در بخش اولویتها زبانه Ú©Ù„ÛŒ \"تعداد رشته Ú©Ù‡ دی سی Ù¾ÛŒ-او-ماتیک باید " -"Ø§Ø³ØªÙØ§Ø¯Ù‡ کند\" مجددا تلاش کنید." +"این خطا ممکن است به دلیل Ø§Ø³ØªÙØ§Ø¯Ù‡ شما از نسخه 32 بیتی 1% Ùˆ Ø§Ø³ØªÙØ§Ø¯Ù‡ از تعداد زیاد " +"رشته های رمزگذاری پیش آمده باشد. Ù„Ø·ÙØ§ در بخش اولویتها در زبانه Ú©Ù„ÛŒ \"تعداد رشته " +"ای Ú©Ù‡ 2% باید Ø§Ø³ØªÙØ§Ø¯Ù‡ کند\" را کاهش دهید Ùˆ مجددا تلاش کنید." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" -"This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"This error has probably occurred because you are running the 32-bit version of " +"%1. Please re-install %2 with the 64-bit installer and try again." msgstr "" -"این مشکل ممکن است به دلیل نصب نسخه 32 بیتی دی سی Ù¾ÛŒ-او-ماتیک پیش آمده باشد. " -"Ù„Ø·ÙØ§ پس ازنصب با نسخه 64 بیتی دی سی Ù¾ÛŒ-او-ماتیک مجدد تلاش کنید." +"این مشکل ممکن است به دلیل نصب نسخه 32 بیتی 1% پیش آمده باشد. Ù„Ø·ÙØ§ پس ازنصب نسخه " +"64 بیتی 2% مجدد تلاش کنید." #: src/lib/exceptions.cc:113 msgid "" -"This file is a KDM. KDMs should be added to DCP content by right-clicking " -"the content and choosing \"Add KDM\"." +"This file is a KDM. KDMs should be added to DCP content by right-clicking the " +"content and choosing \"Add KDM\"." msgstr "" -"این یک ÙØ§ÛŒÙ„ کلید است. کلید را از طریق کلیک راست روی Ù…ØØªÙˆØ§ Ùˆ انتخاب \"اضاÙÙ‡ " -"کردن کلید\" به دی سی Ù¾ÛŒ اضاÙÙ‡ کنید." +"این یک ÙØ§ÛŒÙ„ کلید است. کلید را از طریق کلیک راست روی Ù…ØØªÙˆØ§ Ùˆ انتخاب \"اضاÙÙ‡ کردن " +"کلید\" به دی سی Ù¾ÛŒ اضاÙÙ‡ کنید." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded into " +"this version. Sorry!" msgstr "" -"این Ùیلم با نسخه جدیدتر دی سی Ù¾ÛŒ-او-ماتیک ساخته شده، Ùˆ در این نسخه قابل " -"ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. متاسÙÙ…!" +"این Ùیلم با نسخه جدیدتر 1% ساخته شده، Ùˆ در این نسخه قابل ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. متاسÙÙ…!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it cannot " +"be loaded into this version. You will need to create a new Film, re-add your " +"content and set it up again. Sorry!" msgstr "" -"این Ùیلم با نسخه قدیمی دی سی Ù¾ÛŒ-او-ماتیک ساخته شده Ùˆ Ù…ØªØ§Ø³ÙØ§Ù†Ù‡ در این نسخه " -"قابل ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. لازم است Ú©Ù‡ یک Ùیلم جدید ساخته، مجدد Ù…ØØªÙˆØ§ را به آن " -"اضاÙÙ‡ Ùˆ تنظیم کنید. متاسÙÙ…!" +"این Ùیلم با نسخه قدیمی 1% ساخته شده Ùˆ Ù…ØªØ§Ø³ÙØ§Ù†Ù‡ در این نسخه قابل ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. " +"لازم است Ú©Ù‡ یک Ùیلم جدید ساخته، مجدد Ù…ØØªÙˆØ§ را به آن اضاÙÙ‡ Ùˆ تنظیم کنید. متاسÙÙ…!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "پنجشنبه" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "متن زمان دار" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "تبلیغ Ùیلم" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "ترنسکدینگ %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "انتقالی" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "سه شنبه" @@ -1731,7 +1780,7 @@ msgstr "سه شنبه" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "ÙØ±Ù…ت غیره منتظره Ù…ØØªÙˆØ§ÛŒ ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡" @@ -1739,35 +1788,35 @@ msgstr "ÙØ±Ù…ت غیره منتظره Ù…ØØªÙˆØ§ÛŒ ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡" msgid "Unexpected image type received by server" msgstr "ÙØ±Ù…ت تصویر غیرمنتظره به سرور رسید" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "ناشناخته" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "خطای ناشناخته" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "ÙØ±Ù…ت نمونه صدای غیرقابل تشخیص(%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "ماسک ØºÛŒØ±ÙˆØ§Ø¶Ø Ùˆ تاری گاوسی" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "نامشخص" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "بدون عنوان" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Ø§Ø³ØªÙØ§Ø¯Ù‡ نشده" @@ -1779,7 +1828,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "اختلال بینایی" @@ -1787,11 +1836,11 @@ msgstr "اختلال بینایی" msgid "Verify DCP" msgstr "ØµØØª سنجی دی سی Ù¾ÛŒ" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "برگردان عمودی" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "دچار اختلال بصری است" @@ -1799,168 +1848,165 @@ msgstr "دچار اختلال بصری است" msgid "Waiting" msgstr "در ØØ§Ù„ انتظار" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Ùیلتر موج" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "چهارشنبه" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "با این ØØ§Ù„ یک Ùیلتر ضد اینترلیس دیگر" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " -"supported by all projectors. It is advisable to change the DCP frame rate " -"to %2 fps." +"supported by all projectors. It is advisable to change the DCP frame rate to %2 " +"fps." msgstr "" "تنظیمات دی سی Ù¾ÛŒ خود را روی نرخ ÙØ±ÛŒÙ… %1 گذاشته اید. این نرخ ÙØ±ÛŒÙ… روی همه " -"پروژکتورها پشتیبانی نمیشود. توصیه میشود نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ را به %2 ÙØ±ÛŒÙ… بر " -"ثانیه تغییر دهید." +"پروژکتورها پشتیبانی نمیشود. توصیه میشود نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ را به %2 ÙØ±ÛŒÙ… بر ثانیه " +"تغییر دهید." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " -"supported by all projectors. You may want to consider changing your frame " -"rate to %2 fps." +"supported by all projectors. You may want to consider changing your frame rate " +"to %2 fps." msgstr "" "تنظیمات دی سی Ù¾ÛŒ خود را روی نرخ ÙØ±ÛŒÙ… %1 گذاشته اید. این نرخ ÙØ±ÛŒÙ… روی همه " "پروژکتورها پشتیبانی نمیشود. ممکن است بخواهید نرخ ÙØ±ÛŒÙ… را به %2 ÙØ±ÛŒÙ… بر ثانیه " "تغییر دهید." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." msgstr "" -"تنظیمات دی سی Ù¾ÛŒ را روی 30 ÙØ±ÛŒÙ… بر ثانیه قرار داده اید Ú©Ù‡ همه پروژکتورها " -"قادر به نمایش آن نیستند. از این عدم سازگاری آگاه باشد." +"تنظیمات دی سی Ù¾ÛŒ را روی 30 ÙØ±ÛŒÙ… بر ثانیه قرار داده اید Ú©Ù‡ همه پروژکتورها قادر به " +"نمایش آن نیستند. از این عدم سازگاری آگاه باشد." -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may result " +"in poor-quality audio. If you continue, you should listen to the resulting DCP " +"in a cinema to make sure that it sounds good." msgstr "" -"شما از Ù…ØØªÙˆØ§ÛŒ سه بعدی Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید اما تنظیم دی سی Ù¾ÛŒ روی دو بعدی است. اگر " -"قرار است روی سیستم سه بعدی پلی شود تنظیم دی سی Ù¾ÛŒ خود را روی سه بعدی قرار " -"دهید(مانند Real-DØŒ MasterImageØŒ وغیره.)" +"شما از میکسر استریو به دالبی 5/1 نرم Ø§ÙØ²Ø§Ø± 1% Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید. Ú©Ù‡ به صورت آزمایشی " +"است Ùˆ ممکن است Ú©ÛŒÙیت صدا را کاهش دهد. اگرادامه کار میدهید، باید به صدای خروجی دی " +"سی Ù¾ÛŒ آن در یک سینما گوش دهید تا از درستی آن مطمئن شوید." -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:324 msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if you " +"want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" msgstr "" -"شما از میکسر استریو به دالبی 5/1 دی سی Ù¾ÛŒ-او-ماتیک Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید. Ú©Ù‡ به " -"صورت آزمایشی است Ùˆ ممکن است Ú©ÛŒÙیت صدا را کاهش دهد. اگرادامه کار میدهید، باید " -"به صدای خروجی دی سی Ù¾ÛŒ آن در یک سینما گوش دهید تا از درستی آن مطمئن شوید." +"شما از Ù…ØØªÙˆØ§ÛŒ سه بعدی Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید اما تنظیم دی سی Ù¾ÛŒ روی دو بعدی است. اگر " +"قرار است روی سیستم سه بعدی پلی شود تنظیم دی سی Ù¾ÛŒ خود را روی سه بعدی قرار " +"دهید(مانند Real-DØŒ MasterImageØŒ وغیره.)" -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" -"You have %1 files that look like they are VOB files from DVD. You should " -"join them to ensure smooth joins between the files." +"You have %1 files that look like they are VOB files from DVD. You should join " +"them to ensure smooth joins between the files." msgstr "" -"شما%1 ÙØ§ÛŒÙ„ دارید Ú©Ù‡ به نظر میرسد ÙØ±Ù…ت آنها ÙˆÛŒ او بی Ùˆ از دی ÙˆÛŒ دی هستند. " -"برای پرش Ù†ÛŒØ§ÙØªØ§Ø¯Ù† بین ÙØ§ÛŒÙ„ها باید آنها را به هم بچسبانید." +"شما%1 ÙØ§ÛŒÙ„ دارید Ú©Ù‡ به نظر میرسد ÙØ±Ù…ت آنها ÙˆÛŒ او بی Ùˆ از دی ÙˆÛŒ دی هستند. برای " +"پرش Ù†ÛŒØ§ÙØªØ§Ø¯Ù† بین ÙØ§ÛŒÙ„ها باید آنها را به هم بچسبانید." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -"شما بیش از یک Ù…ØØªÙˆØ§ÛŒ اتمز دارید Ú©Ù‡ نرخ ÙØ±ÛŒÙ… مشابهی ندارند. باید برخی از آنها " -"را ØØ°Ù کنید." +"شما بیش از یک Ù…ØØªÙˆØ§ÛŒ اتمز دارید Ú©Ù‡ نرخ ÙØ±ÛŒÙ… مشابهی ندارند. باید برخی از آنها را " +"ØØ°Ù کنید." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" -"You have overlapping closed captions, which are not allowed in Interop " -"DCPs. Change your DCP standard to SMPTE." +"You have overlapping closed captions, which are not allowed in Interop DCPs. " +"Change your DCP standard to SMPTE." msgstr "" -"زیرنویسهای شما همپوشانی دارند، Ú©Ù‡ در استاندارد اینتروپ مجاز نیست. استاندارد " -"دی سی Ù¾ÛŒ خود را به اس ام Ù¾ÛŒ تی ای تغییر دهید." +"زیرنویسهای شما همپوشانی دارند، Ú©Ù‡ در استاندارد اینتروپ مجاز نیست. استاندارد دی " +"سی Ù¾ÛŒ خود را به اس ام Ù¾ÛŒ تی ای تغییر دهید." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" -"You have specified a font file which is larger than 640kB. This is very " -"likely to cause problems on playback." +"You have specified a font file which is larger than 640kB. This is very likely " +"to cause problems on playback." msgstr "" -"یک ÙØ§ÛŒÙ„ Ùونت با اندازه بزرگتر از 640 کیلوبایت مشخص شده است. به Ø§ØØªÙ…ال زیاد " -"هنگام پلی Ùیلم مشکل ساز است." +"یک ÙØ§ÛŒÙ„ Ùونت با اندازه بزرگتر از 640 کیلوبایت مشخص شده است. به Ø§ØØªÙ…ال زیاد هنگام " +"پلی Ùیلم مشکل ساز است." #: src/lib/make_dcp.cc:56 msgid "You must add some content to the DCP before creating it" msgstr "شما قبل از ساخت دی س Ù¾ÛŒ باید به آن تعدادی Ù…ØØªÙˆØ§ اضاÙÙ‡ کنید" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " -"distributors to raise QC errors when they check your DCP. To avoid this, " -"set the DCP audio channels to 8 or 16." +"distributors to raise QC errors when they check your DCP. To avoid this, set " +"the DCP audio channels to 8 or 16." msgstr "" "دی سی Ù¾ÛŒ شما به جای 8 یا 16 کانال دارای %1 کانال صدا است. ممکن است هنگام ØµØØª " "سنجی دی سی Ù¾ÛŒ شما توسط Ø¯ÙØ§ØªØ± پخش با خطای Ú©ÛŒÙÛŒ مواجه شود. برای پرهیز از خطا، " "تعداد کانالهای دی سی Ù¾ÛŒ خود را روی 8 یا 16 قرار دهید." -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " -"projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"projectors. You may want to set the DCP to have 6 channels. It does not matter " +"if your content has fewer channels, as %1 will fill the extras with silence." msgstr "" "دی سی Ù¾ÛŒ شما کمتر از 6 کانال صدا دارد. این ممکن است در برخی پروژکتورها مشکل " -"ایجاد کند. ممکن است بخواهید دی سی Ù¾ÛŒ خود را روی 6 کانال تنظیم کنید. اگر " -"Ù…ØØªÙˆØ§ÛŒ شما تعداد کانال کمتری دارد مسئاله ای نیست، دی سی Ù¾ÛŒ-او-ماتیک کانالهای " -"اضاÙÙ‡ را با سکوت پر میکند." +"ایجاد کند. ممکن است بخواهید دی سی Ù¾ÛŒ خود را روی 6 کانال تنظیم کنید. اگر Ù…ØØªÙˆØ§ÛŒ " +"شما تعداد کانال کمتری دارد مساله ای نیست، 1% کانالهای اضاÙÙ‡ را با سکوت پر میکند." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." msgstr "" -"دی سی Ù¾ÛŒ شما نسبت ابعاد تصویر نامتعارÙÛŒ دارد. این ممکن در برخی پروژکتورها " -"مشکل ایجاد کند. اگر ممکن است، از نسبت ابعاد تخت یا اسکوپ Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید." +"دی سی Ù¾ÛŒ شما نسبت ابعاد تصویر نامتعارÙÛŒ دارد. این ممکن در برخی پروژکتورها مشکل " +"ایجاد کند. اگر ممکن است، از نسبت ابعاد تخت یا اسکوپ Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" -"Your audio level is very high (on %1). You should reduce the gain of your " -"audio content." -msgstr "" -"گین صدای شما خیلی زیاد است(روی %1). شما باید گین Ù…ØØªÙˆØ§ÛŒ خود را کاهش دهید." +"Your audio level is very high (on %1). You should reduce the gain of your audio " +"content." +msgstr "گین صدای شما خیلی زیاد است(روی %1). شما باید گین Ù…ØØªÙˆØ§ÛŒ خود را کاهش دهید." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "پروژه شامل ویدیویی است Ú©Ù‡ با یک مرز ÙØ±ÛŒÙ… هم راستا نشده است." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "پروژه شامل ویدیویی است Ú©Ù‡ Ø§ØµÙ„Ø§Ø Ø´Ø¯Ù‡ آن با یک مرز ÙØ±ÛŒÙ… هم راستا نیست." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[تصاویر Ù…ØªØØ±Ú©]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[تصویرثابت]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[زیرنویسها]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_ØÙ„قه%1" @@ -1992,11 +2038,11 @@ msgstr "در ØØ§Ù„ Ú©Ù¾ÛŒ%1" msgid "could not find stream information" msgstr "اطلاعات رشته پیدا نشد" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "دالبی اتمز قابل انتقال به داخل دی س Ù¾ÛŒ نیست(%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "صدا قابل انتقال به داخل دی س Ù¾ÛŒ نیست(%1)" @@ -2024,7 +2070,7 @@ msgstr "نمیتوان در ÙØ§ÛŒÙ„ نوشت%1(%2)" msgid "error during async_connect (%1)" msgstr "خطا در هنگام async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "خطا در هنگام async_read (%1)" @@ -2032,80 +2078,88 @@ msgstr "خطا در هنگام async_read (%1)" msgid "error during async_write (%1)" msgstr "خطا در هنگام async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "ÙØ±ÛŒÙ… بر ثانیه" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "ساعت" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "نرخ ÙØ±ÛŒÙ… آن با Ùیلم یکسان نیست." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" -"it has a different number of audio channels than the project; set the " -"project to have %1 channels." +"it has a different number of audio channels than the project; set the project to " +"have %1 channels." msgstr "" +"تعداد کانالهای صدا با تعداد کانالهای صدای پروژه Ù…ØªÙØ§ÙˆØª است; تعداد کانالهای صدای " +"پروژه را روی 1% قرار دهید." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 -msgid "" -"it has a start trim so its subtitles or closed captions must be re-written." +#: src/lib/dcp_content.cc:789 +msgid "it has a start trim so its subtitles or closed captions must be re-written." msgstr "نتقطه شروع Ø§ØµÙ„Ø§Ø Ø´Ø¯Ù‡ دارد بنابر این زیرنویس ها باید مجدد نوشته شوند." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "این 2k Ùˆ Ùیلم 4k است." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "این 4k Ùˆ Ùیلم 2k است." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "این استاندارد اینتروپ است ولی Ùیلم روی استاندارد اس ام Ù¾ÛŒ تی ای است." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "این استاندارد اس ام Ù¾ÛŒ تی ای است ولی Ùیلم روی استاندارد اینتروپ است." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." -msgstr "با سایر Ù…ØØªÙˆØ§ÛŒ صدا همپوشانی دارد; Ù…ØØªÙˆØ§ÛŒ دیگر را ØØ°Ù کنید." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +msgid "it overlaps other audio content." +msgstr "با سایر Ù…ØØªÙˆØ§ÛŒ صدا همپوشانی دارد." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +msgid "it overlaps other text content." +msgstr "با سایر Ù…ØØªÙˆØ§ÛŒ متنی همپوشانی دارد." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." -msgstr "با سایر Ù…ØØªÙˆØ§ÛŒ ویدیو همپوشانی دارد; Ù…ØØªÙˆØ§ÛŒ دیگر را ØØ°Ù کنید." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +msgid "it overlaps other video content." +msgstr "با سایر Ù…ØØªÙˆØ§ÛŒ ویدیو همپوشانی دارد." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" -"its reel lengths differ from those in the film; set the reel mode to 'split " -"by video content'." +"its reel lengths differ from those in the film; set the reel mode to 'split by " +"video content'." msgstr "" -"مدت این ØÙ„قه با مدتی Ú©Ù‡ در Ùیلم است ÙØ±Ù‚ دارد; مد ØÙ„قه را در ØØ§Ù„ت \"تقسیم " -"براساس Ù…ØØªÙˆØ§ÛŒ ویدیو\" تنظیم کنید." +"مدت این ØÙ„قه با مدتی Ú©Ù‡ در Ùیلم است ÙØ±Ù‚ دارد; مد ØÙ„قه را در ØØ§Ù„ت \"تقسیم براساس " +"Ù…ØØªÙˆØ§ÛŒ ویدیو\" تنظیم کنید." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "اندازه این ÙØ±ÛŒÙ… ویدیوبا اندازه ÙØ±ÛŒÙ… Ùیلم ÙØ±Ù‚ دارد." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "دقیقه" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "Ù…ØªØØ±Ú©" @@ -2114,48 +2168,54 @@ msgid "name" msgstr "اسم" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" -"one of its closed caption has a non-zero entry point so it must be re-" -"written." +"one of its closed caption has a non-zero entry point so it must be re-written." msgstr "" -"یکی از ØÙ„قه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره " -"نوشته شود." +"یکی از ØÙ„قه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره نوشته " +"شود." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" -"one of its subtitle reels has a non-zero entry point so it must be re-" -"written." +"one of its subtitle reels has a non-zero entry point so it must be re-written." msgstr "" -"یکی از ØÙ„قه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره " -"نوشته شود." +"یکی از ØÙ„قه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره نوشته " +"شود." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "ثانیه" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "اس آر جی بی" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "تصویرثابت" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "آنها روی نوشته های دیگر Ù…ÛŒ Ø§ÙØªÙ†Ø¯; Ù…ØØªÙˆØ§ÛŒ دیگر را ØØ°Ù کنید." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "ناشناخته" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "ÙØ±ÛŒÙ… های ویدیو" +#~ msgid "Copying old video file" +#~ msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیوی قدیمی" + +#~ msgid "Copying video file into DCP" +#~ msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیو به دی سی Ù¾ÛŒ" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "اعلان دی سی Ù¾ÛŒ-او-ماتیک" + +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "آنها روی نوشته های دیگر Ù…ÛŒ Ø§ÙØªÙ†Ø¯; Ù…ØØªÙˆØ§ÛŒ دیگر را ØØ°Ù کنید." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "در تمام ØÙ„قه های آن زیرنویس Ùیلم وجود ندارد." diff --git a/src/lib/po/fr_FR.po b/src/lib/po/fr_FR.po index 5ac99ba42..77ecb38d4 100644 --- a/src/lib/po/fr_FR.po +++ b/src/lib/po/fr_FR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DCP-o-matic FRENCH\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2024-06-18 00:17+0200\n" "Last-Translator: Grégoire AUSINA <gregoire@gisele-productions.eu>\n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.7.1\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Fréquence d'image du contenu %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Rogné à %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Ratio d'aspect de l'écran %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Ajout de bandes noires pour remplir le format image cible %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Mis à l'échelle à %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " le %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -94,39 +94,89 @@ msgstr "" "Durée: $LENGTH\n" "Taille: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [audio]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [vidéo]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic n'a pas pu ouvrir le fichier %1 (%2). Il n'existe peut-être pas " +"ou est dans un format inattendu." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic a dû modifier vos paramètres pour désigner les DCP en tant " +"qu'OV. Veuillez revoir ces paramètres pour vous assurer qu'ils " +"correspondent à ce que vous souhaitez." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"DCP-o-matic a dû modifier vos paramètres pour que la fréquence d'images du " +"film soit la même que celle de votre contenu Atmos." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic ne gère plus le filtre `%1'.  Il a donc été désactivé." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Notification par e-mail" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 images" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", ratio des pixels %.2f:1" @@ -163,11 +213,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Plein cadre)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "10" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "16" @@ -179,11 +229,11 @@ msgstr "2.35 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "Débruitage 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -194,32 +244,33 @@ msgstr "" "projecteur capable, il est conseillé de régler le DCP sur 2K dans l'onglet " "\"DCP→Vidéo\"." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "9" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 ips" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 restant ; fin prévue à %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>Vous venez de produire %1 DCPs avec DCP-o-matic !</h2><img width=\"20%%" "\" src=\"memory:me.jpg\" align=\"center\"><p>Bonjour. Je m'appelle Carl et " @@ -234,35 +285,37 @@ msgstr "" "faire un don de €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" "amount=10\">Aller sur Paypal pour faire un don de €10</a></ul><p>Merci !" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Quelques projecteurs ont des difficultés à lire les DCPs à très haut débit. " "Il est bon de réduire la bande passante de JPEG2000 à environ 200Mbit/s, ce " "qui ne devrait pas avoir d'effet visible sur l'image." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "Un fichier de sous-titres ou de sous-titres codés de ce projet est marqué " "avec la langue '%1', que DCP-o-matic ne reconnaît pas. La langue du fichier " "a été effacée." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Publicité" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -274,7 +327,7 @@ msgstr "" "cadre Flat (1.85:1). Vous pouvez préférer régler le conteneur de votre DCP " "sur Scope (2.39:1) dans l'onglet \"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -285,7 +338,7 @@ msgstr "" "pilier. Vous pouvez préférer que le conteneur de votre DCP ait le même " "ratio que votre contenu." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Une erreur s'est produite lors du traitement du fichier %1." @@ -293,28 +346,28 @@ msgstr "Une erreur s'est produite lors du traitement du fichier %1." msgid "Analysing audio" msgstr "Analyse de l'audio" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Analyse des sous-titres" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "Au moins un marqueur vient après la fin du projet et sera ignoré." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Au moins un de vos fichiers de sous-titres codés est plus gros que " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Au moins un de vos sous-titres codés a une partie XML plus grosse que " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Au moins un de vos fichiers de sous-titres est plus gros que " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -323,7 +376,7 @@ msgstr "" "Il est recommandé de faire en sorte que chaque ligne ait une longueur de 52 " "caractères au maximum." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -331,7 +384,7 @@ msgstr "" "Au moins une de vos lignes de sous-titres comporte plus de 79 caractères. " "Vous devez faire en sorte que chaque ligne ait 79 caractères au maximum." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -339,7 +392,7 @@ msgstr "" "Au moins un de vos sous-titres comporte plus de 3 lignes. Il est conseillé " "de ne pas utiliser plus de 3 lignes." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -347,7 +400,7 @@ msgstr "" "Au moins un de vos sous-titres dure moins de 15 images. Il est conseillé de " "faire en sorte que chaque sous-titre dure au moins 15 images." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -356,7 +409,7 @@ msgstr "" "précédent. Il est conseillé de faire en sorte que l'écart entre les sous-" "titres soit d'au moins 2 images." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -380,72 +433,72 @@ msgstr "L'audio sera ré-échantillonné à %1Hz" msgid "Audio will not be resampled" msgstr "L'audio ne sera pas ré-échantillonné" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 gamme de couleurs étendue" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 luminance constante" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 pour un système 10-bit" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 pour un système 12-bit" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 luminance non-constante" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits par pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Filtre de désentralecement Bob Weaver" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Annulé" @@ -457,11 +510,11 @@ msgstr "Slashes non autorisés" msgid "Cannot handle pixel format %1 during %2" msgstr "Impossible de gérer le format de pixel %1 pendant %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Impossible de créer un KDM car ce projet n'est pas crypté." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Centre" @@ -469,7 +522,7 @@ msgstr "Centre" msgid "Channels" msgstr "Canaux" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "Vérifiez leurs nouveaux paramètres, puis réessayez." @@ -477,27 +530,32 @@ msgstr "Vérifiez leurs nouveaux paramètres, puis réessayez." msgid "Checking content" msgstr "Vérification du contenu" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Vérification des données d'image existantes" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Luminance constante dérivée de la chrominance" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Luminance non constante dérivée de la chrominance" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "Clip" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Sous-titres codés" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Sous-titres ouverts" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Couleurs primaires" @@ -511,17 +569,17 @@ msgstr "Couleurs primaires" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Plage de couleurs" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Caractéristique de transfert des couleurs" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Espace colorimétrique" @@ -529,15 +587,15 @@ msgstr "Espace colorimétrique" msgid "Combine DCPs" msgstr "Combiner les DCPs" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Calcul en cours" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Calculs en cours" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "Félicitations !" @@ -555,21 +613,21 @@ msgstr "type de contenu" msgid "Content sample rate" msgstr "Fréquence d'échantillonnage du contenu audio" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "Les contenus à joindre doivent tous avoir ou ne pas avoir d'audio" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Les contenus à joindre doivent tous avoir ou ne pas avoir de sous-titres, " "codés ou non" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "Les contenus à joindre doivent tous avoir ou ne pas avoir de vidéo" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -580,11 +638,11 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "Le contenu à joindre doit avoir toutes ses vidéos utilisées ou non." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "Le contenu à joindre doit avoir le même réglage 'sous-titres gravés'." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Le contenu à joindre doit avoir le même réglage 'utiliser les sous-titres'." @@ -623,7 +681,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "Le contenu à joindre doit avoir le même réglage de fondu." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Le contenu à joindre doit avoir la même taille de contour." @@ -631,32 +689,32 @@ msgstr "Le contenu à joindre doit avoir la même taille de contour." msgid "Content to be joined must have the same picture size." msgstr "Le contenu à joindre doit avoir la même taille d'image." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "Le contenu à joindre doit avoir le même décalage X de sous-titre." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Le contenu à joindre doit avoir la même échelle X de sous-titre." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "Le contenu à joindre doit avoir le même décalage Y de sous-titre." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Le contenu à joindre doit avoir la même échelle Y de sous-titre." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "Le contenu à joindre doit avoir les mêmes fondus de sous-titres." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "Les contenus à ajouter doivent tous avoir le même espacement de lignes." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Le contenu à joindre doit avoir la même fréquence d'image" @@ -664,23 +722,23 @@ msgstr "Le contenu à joindre doit avoir la même fréquence d'image" msgid "Content to be joined must have the same video frame type." msgstr "Le contenu à joindre doit avoir le même type de trame vidéo." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Le contenu à joindre doit utiliser la même piste DCP." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Le contenu à joindre doit utiliser les mêmes polices." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Le contenu à joindre doit utiliser le même flux de sous-titres." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "Le contenu à joindre doit utiliser la même langue de texte." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Le contenu vidéo est %1x%2" @@ -688,14 +746,6 @@ msgstr "Le contenu vidéo est %1x%2" msgid "Copy DCP to TMS" msgstr "Copier le DCP dans le TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Copie de l'ancien fichier vidéo" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "Copie du fichier vidéo dans le DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Impossible de se connecter au serveur %1 (%2)" @@ -712,20 +762,21 @@ msgstr "Impossible de décoder le fichier JPEG2000 %1 (%2)" msgid "Could not decode image (%1)" msgstr "Impossible de décoder l'image (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Impossible d'ouvrir le fichier ZIP téléchargé" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Impossible d'écouter les serveurs d'encodage distants. Peut-être qu'une " "autre instance de DCP-o-matic est en cours d'exécution." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Impossible d'ouvrir %1" @@ -733,19 +784,19 @@ msgstr "Impossible d'ouvrir %1" msgid "Could not open %1 to send" msgstr "Impossible d'ouvrir %1 pour l'envoi" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Impossible d'ouvrir le fichier ZIP téléchargé" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Impossible d'ouvrir le fichier ZIP téléchargé (%1:%2 : %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Impossible d'ouvrir le fichier pour l'écriture" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "Impossible d'ouvrir le fichier de sortie %1 (%2)" @@ -761,19 +812,19 @@ msgstr "Impossible de démarrer le transfert" msgid "Could not write to remote file (%1)" msgstr "Impossible d'écrire dans le fichier distant (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX primaire" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX secondaire" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -785,7 +836,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "Sous-titres XML du DCP" @@ -802,50 +853,35 @@ msgstr "Le DCP sera lu à %.1f%% de la vitesse du contenu source.\n" msgid "DCP will use every other frame of the content.\n" msgstr "Le DCP utilisera une image sur deux du contenu.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic n'a pas pu ouvrir le fichier %1 (%2). Il n'existe peut-être pas " -"ou est dans un format inattendu." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic a dû modifier vos paramètres pour désigner les DCP en tant " -"qu'OV. Veuillez revoir ces paramètres pour vous assurer qu'ils " -"correspondent à ce que vous souhaitez." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic a dû modifier vos paramètres pour que la fréquence d'images du " -"film soit la même que celle de votre contenu Atmos." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic ne gère plus le filtre `%1'.  Il a donc été désactivé." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "Notification DCP-o-matic" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 ou AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Désentrelacement" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -857,7 +893,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Cher projectionniste,\n" "\n" @@ -871,11 +907,15 @@ msgstr "" "Meilleures salutations,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 ou CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Échec du téléchargement (erreur %1 %2)" @@ -899,19 +939,19 @@ msgstr "KDMs par e-mail pour %1" msgid "Email notification" msgstr "Notification par e-mail" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Rapport de problème par e-mail" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Rapport de problème par e-mail pour %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Encodage" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Épisode" @@ -921,20 +961,20 @@ msgstr "" "Erreur dans le fichier de sous-titres : %1 a été trouvé alors que %2 était " "attendu" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Erreur : %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "Événement" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Examen des sous-titres" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Examen de l'audio, des sous-titres et des sous-titres codés" @@ -946,15 +986,15 @@ msgstr "Examen du contenu" msgid "Examining subtitles" msgstr "Examen des sous-titres" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Examen des sous-titres et des sous-titres codés" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "Extraction" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -962,51 +1002,51 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Échec de l'authentification avec le serveur (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Échec de l'encodage du DCP." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Échec de l'envoi de l'e-mail" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Long métrage" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Nom de fichier" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "Noms de fichiers" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "Les fichiers ont été modifiés depuis qu'ils ont été ajoutés au projet." -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Recherche de la durée" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Fréquence d'image" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Vendredi" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Plein" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Entier (0-%1)" @@ -1030,35 +1070,35 @@ msgstr "Longueur totale en images vidéo à la fréquence du DCP" msgid "Full length in video frames at content rate" msgstr "Longueur totale en images vidéo à la fréquence du contenu" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Corrections des bandes par dégradé" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Malentendants" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Débruiteur 3D haute qualité" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "Points forts" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Retournement horizontal" @@ -1066,21 +1106,21 @@ msgstr "Retournement horizontal" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB ou sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" "Si vous utilisez 25 images par seconde, vous devez changer votre standard " "DCP pour SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1091,9 +1131,10 @@ msgstr "" "avez une raison particulière d'utiliser Interop. Il est conseillé de " "paramétrer votre DCP pour utiliser la norme SMPTE dans l'onglet \"DCP\"." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 +#, fuzzy msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." @@ -1104,7 +1145,7 @@ msgstr "" "titres de votre projet pour vous assurer qu'ils sont placés là où vous le " "souhaitez." -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1112,73 +1153,74 @@ msgstr "" "Il est conseillé de placer votre premier sous-titre au moins 4 secondes " "après le début du DCP pour être sûr qu'il soit vu." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "La cause de cette erreur n'est pas connue." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "Livraison KDM : $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Désentrelaceur à noyau" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Gauche" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Centre gauche" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Ambiance arrière gauche" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Ambiance gauche" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Durée" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limité" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Limité (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Linéaire" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logarithmique (plage 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logarithmique (plage 316:1)" @@ -1188,7 +1230,7 @@ msgstr "" "Perte de communication entre le processus principal et le processus " "d'écriture" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1196,24 +1238,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Décodeur mid-side" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Divers" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Comptes de canaux audio non concordants dans le DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Fréquences d'échantillonnage audio non concordantes dans le DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Fréquences d'images non concordantes dans le DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Tailles de vidéo non concordantes dans le DCP" @@ -1221,19 +1263,19 @@ msgstr "Tailles de vidéo non concordantes dans le DCP" msgid "Missing required setting %1" msgstr "Paramètre requis %1 manquant" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Lundi" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Désentrelaceur à compensation de mouvement" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Aucune CPL trouvée dans le DCP." @@ -1247,79 +1289,93 @@ msgstr "Aucun serveur mail configuré dans les préférences" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Aucun serveur mail configuré dans les préférences" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Aucun fichier image valide n'a été trouvé dans le dossier." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Réduction de bruit" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Aucun" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (exécuté pendant %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (exécuté pendant %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Seul le premier élément de contenu à joindre peut avoir une coupe de départ." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" "Seul le dernier élément de contenu à joindre peut avoir une coupe finale." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Sous-titres codés" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Sous-titres ouverts" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 +#, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Ouvrez le projet dans DCP-o-matic, vérifiez les paramètres, puis enregistrez-" "le avant de réessayer." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Orientation" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Mémoire insuffisante" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Réduction de bruit par ondelettes" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Veuillez reporter ce problème en utilisant le menu Aide -> Signaler un " +"problème ou par e-mail à carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Code de conduite" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Préparé pour la fréquence d'images vidéo" @@ -1327,93 +1383,93 @@ msgstr "Préparé pour la fréquence d'images vidéo" msgid "Programming error at %1:%2 %3" msgstr "Erreur de programmation à %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promo" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Annonce d'intérêt public" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "D" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Classification" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Droit" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Centre droit" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Ambiance arrière droite" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Ambiance droite" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Pivoter de 90 degrés à gauche" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Pivoter de 90 degrés à droite" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1424,23 +1480,23 @@ msgstr "" "générique mobile (FFMC). Vous devez ajouter ces marqueurs en utilisant le " "bouton \"Marqueurs\" dans l'onglet \"DCP\"." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 pour systèmes 10, 12, 14 et 16 bits" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1453,27 +1509,27 @@ msgstr "Erreur SSH [%1]" msgid "SSH error [%1] (%2)" msgstr "Erreur SSH [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Samedi" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Vérification des fichiers images" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Envoi d'e-mail" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Court métrage" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Signe" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Taille" @@ -1481,12 +1537,12 @@ msgstr "Taille" msgid "Some audio will be resampled to %1Hz" msgstr "Certains sons seront ré-échantillonné à %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" "Certains fichiers ont été modifiés depuis qu'ils ont été ajoutés au projet." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1509,7 +1565,7 @@ msgstr "" "Ces fichiers seront maintenant réexaminés, vous devrez donc peut-être " "vérifier leurs paramètres." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." @@ -1517,7 +1573,7 @@ msgstr "" "Certaines de vos sous-titres codés font plus de %1 lignes, ils seront donc " "tronqués." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1539,11 +1595,11 @@ msgstr "Certains de vos contenus ont besoin d'un KDM" msgid "Some of your content needs an OV" msgstr "Une partie de votre contenu a besoin d'une OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stéréo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "Carte stéréo 3D" @@ -1555,19 +1611,19 @@ msgstr "Upmixer stéréo vers 5.1 A" msgid "Stereo to 5.1 up-mixer B" msgstr "Upmixer stéréo vers 5.1 B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Dimanche" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Filtre téléciné" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1588,14 +1644,14 @@ msgstr "La chaîne de certificats pour la signature n'est pas valide" msgid "The certificate chain for signing is invalid (%1)" msgstr "La chaîne de certificats pour la signature n'est pas valide (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 #, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "La chaîne de certificats que DCP-o-matic utilise pour signer les DCP et les " "KDM contient une petite erreur qui empêchera les DCP d'être validés " @@ -1603,14 +1659,14 @@ msgstr "" "chaîne de certificats de signature en cliquant sur le bouton \"Re-créer les " "certificats et la clé...\" dans la page Clés des préférences." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 #, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "La chaîne de certificats que DCP-o-matic utilise pour signer les DCP et les " "KDM a une période de validité trop longue. Cela entraîne des problèmes de " @@ -1618,7 +1674,7 @@ msgstr "" "chaîne de certificats de signature en cliquant sur le bouton \"Re-créer les " "certificats et la clé...\" dans la page Clés des préférences." -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1628,7 +1684,7 @@ msgstr "" "d'images 3D. Veuillez le définir en 2D. Vous pouvez néanmoins créer un DCP " "3D à partir de ce contenu en cochant l'option 3D dans l'onglet vidéo DCP." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1636,23 +1692,43 @@ msgstr "" "Le disque sur lequel le film est stocké est à court d'espace disque. " "Libérez un peu plus d'espace et réessayez." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Le fichier %1 a été déplacé de %2 millisecondes plus tôt." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Le fichier %1 a été déplacé de %2 millisecondes plus tard." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Le fichier %1 a été raccourci de %2 millisecondes." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Le fichier %1 a été allongé de %2 millisecondes." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +#, fuzzy +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" +"Dans cette version, des changements ont été apportés à la façon dont les " +"sous-titres sont positionnés. Le positionnement devrait maintenant être " +"plus correct, par rapport aux normes, mais vous devez vérifier tous les sous-" +"titres de votre projet pour vous assurer qu'ils sont placés là où vous le " +"souhaitez." + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1667,11 +1743,11 @@ msgstr "" "vous assurant que vos systèmes de projection supportent la cadence DCP " "choisie." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Il n'y a aucune vidéo dans ce DCP" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1681,34 +1757,37 @@ msgstr "" "système d'exploitation 32 bits, essayez de réduire le nombre de threads " "d'encodage dans l'onglet Général des préférences." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" "Ce KDM a été fait pour DCP-o-matic mais pas pour son certificat d'entité " "finale." -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "" "Ce KDM n'a pas été fait pour le certificat de décryptage de DCP-o-matic." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "Cette erreur s'est probablement produite parce que vous exécutez la version " "32 bits de DCP-o-matic et essayez d'utiliser trop de threads d'encodage. " "Veuillez réduire le nombre de threads que DCP-o-matic doit utiliser dans " "l'onglet Général des préférences et réessayez." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "Cette erreur s'est probablement produite parce que vous exécutez la version " "32 bits de DCP-o-matic. Veuillez réinstaller DCP-o-matic avec le programme " @@ -1722,46 +1801,48 @@ msgstr "" "Ce fichier est un KDM. Les KDMs doivent être ajoutées au contenu du DCP en " "cliquant droit sur le contenu et en sélectionnant \"Ajouter un KDM\"." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Ce film a été créé avec une nouvelle version de DCP-o-matic et il ne peut " "être ouvert dans cette version du programme. Désolé !" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Ce film a été créé avec une ancienne version de DCP-o-matic, et il ne peut " "malheureusement pas être chargé dans cette version. Vous devrez créer un " "nouveau film, réintroduire votre contenu et le configurer à nouveau. " "Désolé !" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Jeudi" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Texte programmé" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Transcodage de %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitionnel" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Mardi" @@ -1769,7 +1850,7 @@ msgstr "Mardi" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Contenu inattendu du fichier ZIP" @@ -1777,35 +1858,35 @@ msgstr "Contenu inattendu du fichier ZIP" msgid "Unexpected image type received by server" msgstr "Type d'image inattendu reçu par le serveur" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Inconnu" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Erreur inconnue" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Format d'échantillon audio non reconnu (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Masque de flou et flou gaussien" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Non spécifié" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Sans titre" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Non utilisé" @@ -1817,7 +1898,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1825,11 +1906,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Vérifier le DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Retournement vertical" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Malvoyants" @@ -1837,23 +1918,23 @@ msgstr "Malvoyants" msgid "Waiting" msgstr "En cours" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Filtre par tissage (Weave)" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Mercredi" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " @@ -1863,7 +1944,7 @@ msgstr "" "par tous les projecteurs. Nous vous conseillons de modifier la cadence " "d'images de votre DCP à %2 ips." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1873,7 +1954,7 @@ msgstr "" "Cette fréquence d'images n'est pas supportée par tous les projecteurs. Vous " "pourriez envisager de modifier la fréquence d'images de votre DCP à %2 ips." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1882,19 +1963,11 @@ msgstr "" "qui n'est pas supportée par tous les projecteurs. Attention à de probables " "problèmes de compatibilité." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Vous utilisez un contenu 3D mais votre DCP est réglé sur 2D. Réglez votre " -"DCP sur 3D si vous souhaitez le projeter sur un système 3D (par exemple : " -"Real-D, MasterImage, etc.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Vous utilisez l'upmixer stéréo vers 5.1 de DCP-o-matic. Cet outil est " @@ -1902,7 +1975,16 @@ msgstr "" "continuez, vous devriez écouter le résultat dans un cinéma pour vous assurer " "que le son est bon." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Vous utilisez un contenu 3D mais votre DCP est réglé sur 2D. Réglez votre " +"DCP sur 3D si vous souhaitez le projeter sur un système 3D (par exemple : " +"Real-D, MasterImage, etc.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1910,7 +1992,7 @@ msgstr "" "Vous avez %1 fichiers qui semblent être des fichiers VOB de DVD. Vous devez " "les joindre afin d'assurer une liaison fluide entre les fichiers." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1918,7 +2000,7 @@ msgstr "" "Vous avez plus d'un morceau de contenu Atmos, et ils n'ont pas la même " "fréquence d'images. Vous devez supprimer une partie du contenu Atmos." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1926,7 +2008,7 @@ msgstr "" "Des sous-titres se chevauchent, ce qui n'est pas autorisé dans les DCP au " "standard Interop. Modifiez votre standard de DCP en SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1938,7 +2020,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Vous devez ajouter du contenu au DCP avant de le créer" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " @@ -1948,19 +2030,20 @@ msgstr "" "erreur lors de la vérification par votre distributeur. Sélectionnez 8 ou 16 " "canaux audio pour éviter cela." -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "Votre DCP a moins de 6 canaux audio. Cela peut causer des problèmes sur " "certains projecteurs. Vous voudrez peut-être régler le DCP pour qu'il ait 6 " "canaux. Cela n'a pas d'importance si votre contenu a moins de canaux, car " "DCP-o-matic remplira les extras de silence." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1969,7 +2052,7 @@ msgstr "" "problèmes sur certains projecteurs. Si possible, utilisez Flat ou Scope " "pour le ratio du DCP." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1977,14 +2060,14 @@ msgstr "" "Votre volume sonore est très élevé (sur %1). Vous devriez réduire le gain " "de votre contenu audio." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "Votre projet contient du contenu vidéo qui n'a pas été aligné sur une limite " "du cadre de l'image." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1992,21 +2075,21 @@ msgstr "" "Votre projet contient du contenu vidéo dont le découpage n'a pas été aligné " "sur une limite du cadre de l'image." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[séquence d'images]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[image fixe]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[sous-titres]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_bobine%1" @@ -2038,11 +2121,11 @@ msgstr "copie de %1" msgid "could not find stream information" msgstr "impossible de trouver les informations du flux" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "impossible de déplacer une ressource atmos dans le DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "impossible de déplacer une ressource audio dans le DCP (%1)." @@ -2070,7 +2153,7 @@ msgstr "impossible d'écrire dans le fichier %1 (%2)" msgid "error during async_connect (%1)" msgstr "erreur pendant async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "erreur pendant async_read (%1)" @@ -2078,28 +2161,28 @@ msgstr "erreur pendant async_read (%1)" msgid "error during async_write (%1)" msgstr "erreur pendant async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "images par seconde" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "la fréquence des images est différente de celle du film." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" @@ -2107,36 +2190,46 @@ msgstr "" "donc être réécrits." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "c'est en 2K mais le film est en 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "c'est en 4K mais le film est en 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "c'est en Interop alors que le film est réglé sur SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "c'est en SMPTE alors que le film est réglé sur Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "contenus audio superposés ; enlevez les autres contenus." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "contenus audio superposés ; enlevez les autres contenus." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "" "il se superpose à un autre contenu vidéo ; supprimez cet autre contenu." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2145,16 +2238,16 @@ msgstr "" "le mode 'découper par contenu vidéo'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "la taille de l'image diffère de celle du film." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "séquence" @@ -2163,7 +2256,7 @@ msgid "name" msgstr "nom" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2172,7 +2265,7 @@ msgstr "" "réécrite." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." @@ -2181,30 +2274,38 @@ msgstr "" "être réécrite." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "fixe" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "Superposition de texte. Supprimer l'autre élément." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "inconnu" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "images vidéo" +#~ msgid "Copying old video file" +#~ msgstr "Copie de l'ancien fichier vidéo" + +#~ msgid "Copying video file into DCP" +#~ msgstr "Copie du fichier vidéo dans le DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "Notification DCP-o-matic" + +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "Superposition de texte. Supprimer l'autre élément." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "pas de sous-titres codés dans toutes ses bobines." @@ -2215,13 +2316,6 @@ msgstr "images vidéo" #~ msgstr "pas de son dans toutes ses bobines." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Veuillez reporter ce problème en utilisant le menu Aide -> Signaler un " -#~ "problème ou par e-mail à carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "Votre conteneur par défaut n'est pas valide et a été changé en Flat " diff --git a/src/lib/po/hu_HU.po b/src/lib/po/hu_HU.po index 81ec0ab03..b6c77b01b 100644 --- a/src/lib/po/hu_HU.po +++ b/src/lib/po/hu_HU.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2022-08-31 21:35+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.1.1\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Tartalom képkockaszáma %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Méretre vágva: %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "MegjelenÃtési arány: %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Fekete kerettel körbekerÃtve, hogy beleférjen a %1 (%2x%3) konténerbe." -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Skálázva a következÅ‘ méretre: %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " on %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -94,39 +94,78 @@ msgstr "" "Hosszúság: $LENGTH\n" "Méret: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [hang]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [videó]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Email értesÃtés" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 képkocka" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixel arány %.2f:1" @@ -163,11 +202,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Teljes keret)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "10" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "16" @@ -179,11 +218,11 @@ msgstr "2.35 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D denoiser" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -193,32 +232,33 @@ msgstr "" "hogy ezt a DCP-t olyan projektoron játszod le, amely támogatja ezt, javasolt " "a 2K felbontás beállÃtása a “DCP->Video†menüpontban." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "9" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 van hátra; befejezés: %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>Már %1 DCPt elkészÃtettél a DCP-o-matic programmal.</h2><img width=“20%" "%†src=“memory:me.jpg†align=“centerâ€><p>Szia, én Carl vagyok a DCP-o-matic " @@ -232,10 +272,11 @@ msgstr "" "href=“https://dcpomatic.com/donate_amount?amount=10â€>€10 támogatása PayPal-" "on keresztül</a></ul><p>Nagyon szépen köszönöm!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Pár projektornak gondja lehet a magas bitrátával rendelkezÅ‘ DCPk " @@ -243,25 +284,26 @@ msgstr "" "állÃtani, ez nagy eséllyel nem fog semmilyen vizuális változást eredményezni " "a képen." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "A felirat vagy a hangleÃró felirat fájl ebben a projektben ‘%1’ nyelvként " "lett megjelölve, amit a DCP-o-matic nem ismer fel. A fájl nyelve törölve " "lett." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 (‘Hybrid log-gamma’)" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Advertisement" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -272,7 +314,7 @@ msgstr "" "(1.85:1). Ez egy fekete keretet fog eredményezni. Javasoljuk a DCP konténer " "Scope (2.39:1) használatát a “DCP’ fülön belül." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -282,7 +324,7 @@ msgstr "" "ra van állÃtva. Javasoljuk a DCP konténerét ugyanarra állÃtani, amilyen a " "tartalom." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Hiba a %1 fájl kezelése közben." @@ -290,30 +332,30 @@ msgstr "Hiba a %1 fájl kezelése közben." msgid "Analysing audio" msgstr "Hang vizsgálata" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Felirat vizsgálata" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Legalább egy jelölÅ‘ a projekt vége után van beállÃtva. Ez nem lesz " "figyelembe véve." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Legalább egy hangleÃró felirat nagyobb, mint " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Legalább egy hangleÃró felirat XML fájlja nagyobb, mint " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Legalább egy felirat nagyobb, mint " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -321,7 +363,7 @@ msgstr "" "Legalább egy felirat sor több karaktert tartalmaz, mint 52. Javasolt, hogy " "egy sor felirat maximum 52 karakter legyen." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -329,7 +371,7 @@ msgstr "" "Legalább egy felirat sor több karaktert tartalmaz, mint 79. Javasolt, hogy " "egy sor felirat maximum 79 karakter legyen." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -337,7 +379,7 @@ msgstr "" "Legalább egy felirat bekezdése több, mint 3 sort tartalmaz. Javasolt, hogy " "ne legyen egy bekezdés 3 sornál több." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -345,7 +387,7 @@ msgstr "" "Legalább egy felirat képkocka száma kisebb, mint 15. Javasolt, hogy egy " "felirat legalább 15 képkocka hosszú legyen." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -353,7 +395,7 @@ msgstr "" "Legalább egy felirat kevesebb, mint 2 képkockával következik a másik után. " "Javasolt, hogy legalább 2 képkockányi hely legyen két felirat között." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -377,72 +419,72 @@ msgstr "A hang újra lesz keverve %1Hz-re" msgid "Audio will not be resampled" msgstr "A hang nem lesz újrakeverve" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 extended colour gamut" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 constant luminance" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 for a 10-bit system" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 for a 12-bit system" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 non-constant luminance" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits per pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Bob Weaver Deinterlacing Filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "MegszakÃtva" @@ -454,11 +496,11 @@ msgstr "Nem tartalmazhat / jeleket" msgid "Cannot handle pixel format %1 during %2" msgstr "Nem kezelhetÅ‘ a %1 pixel formátum %2 közben" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Nem lehet KDM-et létrehozni, mivel ez a projekt nem titkosÃtott." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Közép" @@ -466,7 +508,7 @@ msgstr "Közép" msgid "Channels" msgstr "Csatornák" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "Kérlek ellenÅ‘rizd az új beállÃtásokat és próbáld újra." @@ -474,27 +516,32 @@ msgstr "Kérlek ellenÅ‘rizd az új beállÃtásokat és próbáld újra." msgid "Checking content" msgstr "Tartalom vizsgálata" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "MeglévÅ‘ kép adatok ellenÅ‘rzése" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Chroma-derived constant luminance" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Chroma-derived non-constant luminance" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "HangleÃró felirat" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Felirat megnyitása" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "ElsÅ‘dleges szÃnek" @@ -508,17 +555,17 @@ msgstr "ElsÅ‘dleges szÃnek" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "SzÃntartomány" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "SzÃnátviteli jellemzÅ‘k" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "SzÃntér" @@ -526,15 +573,15 @@ msgstr "SzÃntér" msgid "Combine DCPs" msgstr "DCPk egyesÃtése" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Digitális ujjlenyomatok létrehozása" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Digitális ujjlenyomatok létrehozása" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "Gratulálok!" @@ -552,24 +599,24 @@ msgstr "tartalom tÃpusa" msgid "Content sample rate" msgstr "Tartalom mintavételezési frekvenciája" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" "A beszúrni kÃvánt tartalomnak végig vagy egyáltalán nem kell hangjának lennie" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "A beszúrni kÃvánt tartalomnak végig vagy egyáltalán nem kell feliratának " "vagy hangleÃró feliratának lennie" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" "A beszúrni kÃvánt tartalomnak végig vagy egyáltalán nem kell videót " "tartalmaznia" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -582,11 +629,11 @@ msgstr "" "A beszúrni kÃvánt tartalomnak végig vagy egyáltalán nem kell a videóját " "használni." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "A beszúrni kÃvánt tartalomnak " -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" @@ -622,7 +669,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "" -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "" @@ -630,31 +677,31 @@ msgstr "" msgid "Content to be joined must have the same picture size." msgstr "" -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "" -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "" @@ -662,23 +709,23 @@ msgstr "" msgid "Content to be joined must have the same video frame type." msgstr "" -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "" -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "" -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "" -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "" -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "" @@ -686,14 +733,6 @@ msgstr "" msgid "Copy DCP to TMS" msgstr "DCP másolása a TMS-re" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "" @@ -710,18 +749,18 @@ msgstr "" msgid "Could not decode image (%1)" msgstr "" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "nem sikerült a(z) %1 fájlt megnyitni Ãrásra (%2)" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "" @@ -729,19 +768,19 @@ msgstr "" msgid "Could not open %1 to send" msgstr "" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "" @@ -757,19 +796,19 @@ msgstr "" msgid "Could not write to remote file (%1)" msgstr "" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX elsÅ‘dleges" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX másodlagos" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -781,7 +820,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML feliratok" @@ -798,43 +837,35 @@ msgstr "" msgid "DCP will use every other frame of the content.\n" msgstr "" -#: src/lib/job.cc:172 src/lib/job.cc:187 -msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." -msgstr "" - -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "DCP-o-matic értesÃtés" - #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 vagy AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -846,7 +877,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Kedves mozigépész\n" "\n" @@ -860,11 +891,15 @@ msgstr "" "Üdvözlettel,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 vagy CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Letöltés közben hiba lépett fel (%1 hiba %2)" @@ -888,19 +923,19 @@ msgstr "KDM küldése a következÅ‘höz: %1" msgid "Email notification" msgstr "Email értesÃtés" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Hibajelentés küldése" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Hibajelentés küldése a következÅ‘höz: %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Kódolás" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Episode" @@ -908,20 +943,20 @@ msgstr "Episode" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Hiba: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Feliratok vizsgálata" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Hang, feliratok és hangleÃró feliratok vizsgálata" @@ -933,15 +968,15 @@ msgstr "Tartalom vizsgálata" msgid "Examining subtitles" msgstr "Feliratok vizsgálata" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Feliratok és hangleÃró feliratok vizsgálata" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "Kicsomagolás" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -949,51 +984,51 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Teljes" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "" @@ -1017,35 +1052,35 @@ msgstr "" msgid "Full length in video frames at content rate" msgstr "" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "FüggÅ‘leges elforgatás" @@ -1053,106 +1088,106 @@ msgstr "FüggÅ‘leges elforgatás" msgid "Hz" msgstr "" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB vagy sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +msgid "It is not known what caused this error. %1" msgstr "" -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Bal" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Bal közép" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Bal hátsó térhangzás" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Bal térhangzás" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Hossz" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (mély)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limitált" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Limitált (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Lineáris" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logaritmikus (100:1 intervallum)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logaritmikus (316:1 intervallum)" @@ -1160,7 +1195,7 @@ msgstr "Logaritmikus (316:1 intervallum)" msgid "Lost communication between main and writer processes" msgstr "Elveszett a kommunikáció és a fÅ‘ és az Ãró folyamat között" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1168,24 +1203,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Mid-side decoder" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Misc" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "A hangcsatornák száma nem egyezik a DCP-ben" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "A képkocka szám nem egyezik a DCP-ben." -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "A videó méret nem egyezik a DCP-ben" @@ -1193,19 +1228,19 @@ msgstr "A videó méret nem egyezik a DCP-ben" msgid "Missing required setting %1" msgstr "Hiányzó beállÃtás: %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "HétfÅ‘" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Nem található CPL fájl a DCP-ben." @@ -1219,77 +1254,91 @@ msgstr "Nincs email szerver beállÃtva" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Nincs email szerver beállÃtva" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Nem található érvényes képfájl a mappában." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Zajcsökkentés" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Semmi" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (eltelt idÅ‘: %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (eltelt idÅ‘: %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "HangleÃró felirat" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Felirat megnyitása" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 +#, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Nyisd meg a projektet a DCP-o-matic programban és mentsd el, mielÅ‘tt " "újrapróbálod." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Orientáció" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Kifogyott a memória" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Kérlek jelentsd ezt a hibát a SegÃtség -> Probléma jelentése gombra " +"kattintva, vagy emailben: carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Policy" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "" @@ -1297,93 +1346,93 @@ msgstr "" msgid "Programming error at %1:%2 %3" msgstr "Programhiba, itt: %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promo" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Public Service Announcement" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Rating" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Jobb" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Jobb közép" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Jobb hátsó térhangzás" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Jobb térhangzás" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "90 fokos elforgatás óramutatóval ellentétes irányba" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "90 fokos elforgatás óramutatóval megegyezÅ‘ irányba" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1394,23 +1443,23 @@ msgstr "" "jelölÅ‘kkel. Javasolt a jelölÅ‘k hozzáadása a ‘JelölÅ‘k’ gombra kattintva a " "“DCP†fülön." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 a 10, 12, 14 és 16 bit rendszerekre" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1423,27 +1472,27 @@ msgstr "SSH hiba [%1]" msgid "SSH error [%1] (%2)" msgstr "SSH hiba [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Szombat" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Képfájlok szkennelése" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Email küldése" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Short" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "AláÃrás" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Méret" @@ -1451,11 +1500,11 @@ msgstr "Méret" msgid "Some audio will be resampled to %1Hz" msgstr "" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1470,13 +1519,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1495,11 +1544,11 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Sztereó" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Sztereó" @@ -1512,19 +1561,19 @@ msgstr "" msgid "Stereo to 5.1 up-mixer B" msgstr "" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Vasárnap" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1544,54 +1593,68 @@ msgstr "" msgid "The certificate chain for signing is invalid (%1)" msgstr "" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." msgstr "" -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "" -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "" -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "" -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "" -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1600,38 +1663,37 @@ msgid "" "systems support your chosen DCP rate." msgstr "" -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " "tab of Preferences." msgstr "" -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1640,40 +1702,40 @@ msgid "" "the content and choosing \"Add KDM\"." msgstr "" -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Csütörtök" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "%1 konvertálása" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Kedd" @@ -1681,7 +1743,7 @@ msgstr "Kedd" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "" @@ -1689,35 +1751,35 @@ msgstr "" msgid "Unexpected image type received by server" msgstr "" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Ismeretlen" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Ismeretlen hiba" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Nincs megadva" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Név nélküli" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Nem használt" @@ -1729,7 +1791,7 @@ msgstr "" msgid "Upmix R" msgstr "" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1737,11 +1799,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "DCP ellenÅ‘rzése" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "" @@ -1749,74 +1811,74 @@ msgstr "" msgid "Waiting" msgstr "Várakozás" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Szerda" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " "to %2 fps." msgstr "" -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " "rate to %2 fps." msgstr "" -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." msgstr "" -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." msgstr "" -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:324 msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" msgstr "" -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." msgstr "" -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1826,59 +1888,59 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." msgstr "" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "" -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "" -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[mozgó képek]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[álló]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[felirat]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_reel%1" @@ -1910,11 +1972,11 @@ msgstr "%1 másolása" msgid "could not find stream information" msgstr "nem található az adatfolyam információ" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "nem sikerült az atmos anyagot DCP-be Ãrni (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "nem sikerült a hanganyagot DCP-be Ãrni (%1)" @@ -1942,7 +2004,7 @@ msgstr "hiba a fájlba Ãrás közben %1 (%2)" msgid "error during async_connect (%1)" msgstr "hiba a csatlakozás közben (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "hiba az olvasás közben (%1)" @@ -1950,78 +2012,85 @@ msgstr "hiba az olvasás közben (%1)" msgid "error during async_write (%1)" msgstr "hiba az Ãrás közben (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "képkocka per másodperc" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "óra" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "" -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "" -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +msgid "it overlaps other audio content." +msgstr "" + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +msgid "it overlaps other text content." msgstr "" -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +msgid "it overlaps other video content." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "" #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "perc" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "mozgó" @@ -2030,47 +2099,39 @@ msgid "name" msgstr "név" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "másodperc" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "még" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "" - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "ismeretlen" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "videó képkockái" -#~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Kérlek jelentsd ezt a hibát a SegÃtség -> Probléma jelentése gombra " -#~ "kattintva, vagy emailben: carl@dcpomatic.com" +#~ msgid "DCP-o-matic notification" +#~ msgstr "DCP-o-matic értesÃtés" diff --git a/src/lib/po/it_IT.po b/src/lib/po/it_IT.po index 49029dd1c..42b33b3a6 100644 --- a/src/lib/po/it_IT.po +++ b/src/lib/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: IT VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2018-09-30 14:16+0200\n" "Last-Translator: William Fanelli <william.f@impronte.com>\n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.7\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Frequenza fotogrammi del contenuto %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Ritagliato a %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Rapporto schermo %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Aggiunto nero per adattare al contenitore %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Scalato a %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " on %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -94,39 +94,83 @@ msgstr "" "Lunghezza: $ LUNGHEZZA\n" "Dimensioni: $ DIMENSIONI\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$NOME_LAVORO: $STATO_LAVORO" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [audio]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [video]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-MATIC non riesce ad aprire il file %1 (%2). Forse non esiste oppure è " +"un formato non riconosciuto." + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" +"DCP-o-MATIC non supporta più il filtro '%1', quindi è stato disattivato." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Notifica Email" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", rapporto pixel %.2f:1" @@ -163,11 +207,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Fotogramma intero)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -180,71 +224,72 @@ msgstr "2.35 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "Riduzione rumore 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 rimanente; alla fine %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Alcuni proiettori hanno problemi durante la riproduzione di DCP con un bit-" "rate molto alto. È consigliato mantenere la banda JPEG2000 intorno ai " "200Mbit/s; è improbabile che si vedano effetti significativi sull'immagine." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('log-gamma ibrido')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Pubblicità " -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -256,7 +301,7 @@ msgstr "" "Forse è preferibile impostare il contenitore DCP su Scope (2.39:1) nel tab " "\"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -267,7 +312,7 @@ msgstr "" "questo modo il contenuto sarà della dimensione Flat (1.85:1). Forse è " "preferibile impostare il contenitore DCP su Flat (1.85:1) nel tab \"DCP\"." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Errore durante l'elaborazione del file %1." @@ -276,59 +321,59 @@ msgstr "Errore durante l'elaborazione del file %1." msgid "Analysing audio" msgstr "Analizza l'audio" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 #, fuzzy msgid "Analysing subtitles" msgstr "Trova sottotitoli" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -347,73 +392,73 @@ msgstr "L'audio sarà ricampionato a %1Hz" msgid "Audio will not be resampled" msgstr "L'audio non sarà ricampionato" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 gamma colori estesa" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 luminanza costante" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 per sistema a 10-bit" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 per sistema a 12-bit" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 luminanza non costante" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits per pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 #, fuzzy msgid "Bob Weaver Deinterlacing Filter" msgstr "Altro filtro di deinterlacciamento" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Cancellato" @@ -425,12 +470,12 @@ msgstr "Non può contenere slash" msgid "Cannot handle pixel format %1 during %2" msgstr "Impossibile gestire il formato pixel %1 durante %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "" "Impossibile creare un KDM in quanto questo progetto non è crittografato." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Centro" @@ -438,7 +483,7 @@ msgstr "Centro" msgid "Channels" msgstr "Canali" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -447,28 +492,33 @@ msgstr "" msgid "Checking content" msgstr "Controllo del contenuto modificato" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Controllo dati immagine esistente in corso" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Luminanza costante derivata dal Chroma" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Luminanza non costante derivata dal Chroma" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 #, fuzzy msgid "Closed captions" msgstr "Riduzione rumore" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Testo sottotitoli" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Colori primari" @@ -482,17 +532,17 @@ msgstr "Colori primari" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Gamma colori" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Caratteristica di trasferimento del colore" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Spazio colore" @@ -500,15 +550,15 @@ msgstr "Spazio colore" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Calcolo assimilazione dati" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Calcolo assimilazioni dati" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -526,20 +576,20 @@ msgstr "tipo di contenuto" msgid "Content sample rate" msgstr "Frequenza di campionamento del contenuto audio" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "Tutti i contenuti da unire possono avere o non avere la traccia audio" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 #, fuzzy msgid "Content to be joined must all have or not have subtitles or captions" msgstr "Tutti i contenuti da unire possono avere o non avere i sottotitoli" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "Tutti i contenuti da unire possono avere o non avere la traccia video" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 #, fuzzy msgid "" "Content to be joined must both be main subtitle languages or both additional." @@ -550,13 +600,13 @@ msgstr "Il contenuto da unire deve avere la stessa interlinea dei sottotitoli." msgid "Content to be joined must have all its video used or not used." msgstr "Il contenuto da unire deve avere la stessa frequenza fotogrammi" -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "Il contenuto da unire deve avere le stesse impostazioni di 'masterizza " "sottotitoli'." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Il contenuto da unire deve avere le stesse impostazioni di 'usa sottotitoli'." @@ -598,7 +648,7 @@ msgstr "Il contenuto da unire deve avere la stessa scala." msgid "Content to be joined must have the same fades." msgstr "Il contenuto da unire deve avere le stesse dissolvenze." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Il contenuto da unire deve avere la stessa dimensione." @@ -606,34 +656,34 @@ msgstr "Il contenuto da unire deve avere la stessa dimensione." msgid "Content to be joined must have the same picture size." msgstr "Il contenuto da unire deve avere la stessa dimensione dell'immagine." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" "Il contenuto da unire deve avere lo stesso spostamento X dei sottotitoli." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Il contenuto da unire deve avere la stessa scala X dei sottotitoli." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" "Il contenuto da unire deve avere lo stesso spostamento Y dei sottotitoli." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Il contenuto da unire deve avere la stessa scala Y dei sottotitoli." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" "Il contenuto da unire deve avere le stesse dissolvenze dei sottotitoli." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "Il contenuto da unire deve avere la stessa interlinea dei sottotitoli." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Il contenuto da unire deve avere la stessa frequenza fotogrammi" @@ -641,25 +691,25 @@ msgstr "Il contenuto da unire deve avere la stessa frequenza fotogrammi" msgid "Content to be joined must have the same video frame type." msgstr "Il contenuto da unire deve avere lo stesso tipo di fotogramma video." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 #, fuzzy msgid "Content to be joined must use the same DCP track." msgstr "Il contenuto da unire deve usare gli stessi caratteri." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Il contenuto da unire deve usare gli stessi caratteri." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Il contenuto da unire deve usare lo stesso flusso di sottotitoli." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 #, fuzzy msgid "Content to be joined must use the same text language." msgstr "Il contenuto da unire deve usare gli stessi caratteri." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Il contenuto video è %1x%2" @@ -667,15 +717,6 @@ msgstr "Il contenuto video è %1x%2" msgid "Copy DCP to TMS" msgstr "Copia DCP nel TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -#, fuzzy -msgid "Copying video file into DCP" -msgstr "La dimensione video nel DCP non corrisponde" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Impossibile connettersi al server %1 (%2)" @@ -693,20 +734,21 @@ msgstr "Impossibile decodificare il file JPEG2000 %1 (%2)" msgid "Could not decode image (%1)" msgstr "Impossibile decodificare il file immagine (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Impossibile aprire il file ZIP scaricato" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Impossibile connettersi ai server di codifica remoti. Forse è in esecuzione " "un'altra istanza di DCP-o-MATIC." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Impossibile aprire %1" @@ -714,21 +756,21 @@ msgstr "Impossibile aprire %1" msgid "Could not open %1 to send" msgstr "Impossibile aprire %1 da inviare" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Impossibile aprire il file ZIP scaricato" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 #, fuzzy msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Impossibile aprire il file ZIP scaricato" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 #, fuzzy msgid "Could not open file for writing" msgstr "impossibile aprire il file %1 per la scrittura (%2)" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 #, fuzzy msgid "Could not open output file %1 (%2)" msgstr "Impossibile scrivere il file %1 (%2)" @@ -745,19 +787,19 @@ msgstr "Impossibile avviare il trasferimento" msgid "Could not write to remote file (%1)" msgstr "Impossibile scrivere il file remoto (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX principale" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX secondario" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -769,7 +811,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML sottotitoli" @@ -786,46 +828,35 @@ msgstr "Il DCP andrà al %.1f%% della velocità originale.\n" msgid "DCP will use every other frame of the content.\n" msgstr "Il DCP utilizzerà ogni altro fotogramma del contenuto.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-MATIC non riesce ad aprire il file %1 (%2). Forse non esiste oppure è " -"un formato non riconosciuto." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "" -"DCP-o-MATIC non supporta più il filtro '%1', quindi è stato disattivato." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "DCP-o-MATIC notifica" - #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "De-interlacciamento" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -837,7 +868,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Spett. Proiezionista\n" "\n" @@ -851,12 +882,16 @@ msgstr "" "Distinti saluti,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 #, fuzzy msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 e CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 #, fuzzy msgid "Download failed (%1 error %2)" msgstr "Download fallito (%1/%2 errore %3)" @@ -882,19 +917,19 @@ msgstr "Email KDM per %1" msgid "Email notification" msgstr "Notifica Email" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Email rapporto problemi" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Email rapporto problemi per %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Codifica" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -902,20 +937,20 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Errore nel file dei sottotitoli: letto %1 ma era atteso %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Errore: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Trova sottotitoli" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Esamino il contenuto" @@ -929,17 +964,17 @@ msgstr "Analisi contenuto" msgid "Examining subtitles" msgstr "Trova sottotitoli" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Esamino il contenuto" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 #, fuzzy msgid "Extracting" msgstr "Punteggio" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -947,54 +982,54 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Autenticazione con il server fallita (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 #, fuzzy msgid "Failed to encode the DCP." msgstr "Invio email fallito (%1)" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 #, fuzzy msgid "Failed to send email" msgstr "Invio email fallito (%1)" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Lungometraggio" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Nome file" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Nome file" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Determina lunghezza" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Frequenza fotogrammi" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Venerdì" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Completo" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Completo (0-%1)" @@ -1018,35 +1053,35 @@ msgstr "Lunghezza completa nei fotogrammi video alla frequenza del DCP" msgid "Full length in video frames at content rate" msgstr "Lunghezza completa nei fotogrammi video alla frequenza del contenuto" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradiente debander" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Non udenti" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Riduzzione del rumore 3D di alta qualità " -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Vibrazione orizzontale" @@ -1054,106 +1089,107 @@ msgstr "Vibrazione orizzontale" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB o sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Non è chiaro cosa ha causato l'errore." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "Consegna KDM: $NOME_CPL" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Deinterlacciatore Kernel" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Sinistro" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Sinistro centro" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Surround posteriore sinistro" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Surround sinistro" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Lunghezza" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limitato" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Limitato (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Lineare" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logaritmico (ampiezza 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logaritmico (ampiezza 316:1)" @@ -1161,7 +1197,7 @@ msgstr "Logaritmico (ampiezza 316:1)" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1169,24 +1205,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Decodificatore Mid-Side" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Varie" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Il numero di canali audio nel DCP non corrisponde" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "La frequenza di campionamento audio nel DCP non corrisponde" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "La frequenza fotogrammi nel DCP non corrisponde" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "La dimensione video nel DCP non corrisponde" @@ -1194,19 +1230,19 @@ msgstr "La dimensione video nel DCP non corrisponde" msgid "Missing required setting %1" msgstr "Impostazione obbligatoria mancante %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Lunedì" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Dinterlacciatore con compensazione di movimento" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Nessun CPLs trovato nel DCP." @@ -1220,77 +1256,87 @@ msgstr "Nessun server di posta configurato nelle impostazioni" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Nessun server di posta configurato nelle impostazioni" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Nessun file immagine valido trovato nella cartella." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Riduzione rumore" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Nulla" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (eseguito in: %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (eseguito in: %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Solo la prima parte del contenuto da unire può avere un taglio iniziale." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Solo l'ultima parte del contenuto da unire può avere un taglio finale." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Riduzione rumore" + +#: src/lib/text_type.cc:79 #, fuzzy msgid "Open subtitles" msgstr "Testo sottotitoli" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Orientamento" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Memoria esaurita" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Analisi per la riduzione del rumore completata" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Linea di condotta" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Preparato per la frequenza fotogrammi del video" @@ -1298,116 +1344,116 @@ msgstr "Preparato per la frequenza fotogrammi del video" msgid "Programming error at %1:%2 %3" msgstr "Errore di programmazione a %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Annuncio di pubblico servizio" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Punteggio" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Destro" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Destro centro" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Surround posteriore destro" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Surround destro" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Ruota di 90 gradi in senso antiorario" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Ruota di 90 gradi in senso orario" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 per sistemi a 10, 12, 14 e 16 bit" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1422,27 +1468,27 @@ msgstr "Errore SSH (%1)" msgid "SSH error [%1] (%2)" msgstr "Errore SSH (%1)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Sabato" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Scansione file immagine" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Invia e-mail" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Corto" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Dimensione" @@ -1450,11 +1496,11 @@ msgstr "Dimensione" msgid "Some audio will be resampled to %1Hz" msgstr "Parte dell'audio sarà ricampionato a %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1469,13 +1515,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1495,11 +1541,11 @@ msgstr "Alcuni dei tuoi contenuti richiedono una KDM" msgid "Some of your content needs an OV" msgstr "Alcuni dei tuoi contenuti richiedono un OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Stereo" @@ -1512,19 +1558,19 @@ msgstr "Da Stereo a 5.1 up-mixer A" msgid "Stereo to 5.1 up-mixer B" msgstr "Da Stereo a 5.1 up-mixer B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Domenica" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Filtro Telecine" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1544,32 +1590,32 @@ msgstr "La catena del certificato per la firma non è valida" msgid "The certificate chain for signing is invalid (%1)" msgstr "La catena del certificato per la firma non è valida (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1577,23 +1623,37 @@ msgstr "" "Sul disco dove è memorizzato il film non c'è abbastanza spazio. Liberare " "altro spazio e riprovare." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Il file %1 é stato anticipato di %2 millisecondi." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Il file %1 é stato posticipato di %2 millisecondi." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Il file %1 é stato tagliato di %2 millisecondi in meno." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Il file %1 é stato tagliato di %2 millisecondi in piú." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1609,11 +1669,11 @@ msgstr "" "che i sistemi di proiezione selezionati supportino la frequenza del DCP " "scelta." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Nessun video in questo DCP" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1623,27 +1683,30 @@ msgstr "" "operativo a 32 bit, provare a ridurre il numero di thread di codifica nella " "scheda Generale delle Preferenze." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" +"Non c'e abbastanza memoria per fare questo. Se si utilizza un sistema " +"operativo a 32 bit, provare a ridurre il numero di thread di codifica nella " +"scheda Generale delle Preferenze." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1654,47 +1717,49 @@ msgstr "" "Questo file è un KDM, deve essere aggiunti al contenuto DCP facendo clic con " "il pulsante destro del mouse sul contenuto e scegliendo \"Aggiungi KDM\"." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Questo film è stato creato con una versione più recente di DCP-o-matic e non " "può essere caricato in questa versione. Scusate!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Questo film è stato creato con una versione precedente di DCP-o-matic e " "sfortunatamente non può essere caricato in questa versione. Dovrai creare un " "nuovo film, aggiungere nuovamente i tuoi contenuti e configurarli " "nuovamente. Scusate!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Giovedì" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 #, fuzzy msgid "Transcoding %1" msgstr "Transcodifica %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Di transizione" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Martedì" @@ -1702,7 +1767,7 @@ msgstr "Martedì" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Contenuti dei file ZIP non corretti" @@ -1710,36 +1775,36 @@ msgstr "Contenuti dei file ZIP non corretti" msgid "Unexpected image type received by server" msgstr "Immagine ricevuta dal server inaspettata" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 #, fuzzy msgid "Unknown" msgstr "sconosciuto" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Errore sconosciuto" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Formato campionamento audio non riconosciuto (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Maschera di contrasto e sfocatura Gaussiana" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Non specificato" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Senza titolo" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Non utilizzato" @@ -1751,7 +1816,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1759,11 +1824,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Verifica DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Vibrazione verticale" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Visivamente alterata" @@ -1771,23 +1836,23 @@ msgstr "Visivamente alterata" msgid "Waiting" msgstr "Attendere" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Filtro Weave" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Mercoledì" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Altro filtro di deinterlacciamento" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1798,7 +1863,7 @@ msgstr "" "supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di " "creare un DCP SMPTE." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1809,7 +1874,7 @@ msgstr "" "supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di " "creare un DCP SMPTE." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 #, fuzzy msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " @@ -1819,19 +1884,11 @@ msgstr "" "supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di " "creare un DCP SMPTE." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Sono presenti contenuti in 3D ma il DCP è impostato su 2D. Imposta il DCP su " -"3D se vuoi vedere il contenuto su un vero sistema 3D (come Real-D, " -"MasterImage, ecc.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Stai utilizzando l'upmixer stereo-a-5.1 di DCP-o-MATIC. Questa funzione è " @@ -1839,7 +1896,16 @@ msgstr "" "dovresti ascoltare il DCP creato in un cinema per assicurarti che il suono " "sia buono." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Sono presenti contenuti in 3D ma il DCP è impostato su 2D. Imposta il DCP su " +"3D se vuoi vedere il contenuto su un vero sistema 3D (come Real-D, " +"MasterImage, ecc.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1847,19 +1913,19 @@ msgstr "" "Hai %1 files che sembrano provenire da un DVD (files VOB). Dovresti unirli " "per assicurare una transizione senza salti." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1871,22 +1937,22 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Devi aggiungere dei contenuti al DCP prima di crearlo" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -1896,7 +1962,7 @@ msgstr "" "causare problemi su alcuni proiettori. Se possibile, usa Flat o Scope come " "contenitore per il DCP" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1904,14 +1970,14 @@ msgstr "" "Il tuo livello audio è molto alto (su %1). Dovresti ridurre il guadagno del " "tuo contenuto audio." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "Il tuo progetto contiene contenuti video non allineati a un margine del " "fotogramma." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1919,21 +1985,21 @@ msgstr "" "Il tuo progetto contiene video il cui assetto non era allineato al margine " "del fotogramma." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[spostamento immagini]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[fermo immagine]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[sottotitoli]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "" @@ -1965,12 +2031,12 @@ msgstr "copia %1" msgid "could not find stream information" msgstr "non riesco a trovare informazioni sul flusso" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 #, fuzzy msgid "could not move atmos asset into the DCP (%1)" msgstr "impossibile spostare la risorsa audio nel DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "impossibile spostare la risorsa audio nel DCP (%1)" @@ -2001,7 +2067,7 @@ msgstr "Impossibile scrivere il file %1 (%2)" msgid "error during async_connect (%1)" msgstr "errore durante la connessione asincrona (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "errore durante la lettura asincrona (%1)" @@ -2009,64 +2075,74 @@ msgstr "errore durante la lettura asincrona (%1)" msgid "error during async_write (%1)" msgstr "errore durante la scrittura asincrona (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "fotogrammi per secondo" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "il DCP ha una frequenza fotogrammi diversa rispetto al film." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 #, fuzzy msgid "it is 2K and the film is 4K." msgstr "il film è impostato su Interop e questo DCP è SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 #, fuzzy msgid "it is 4K and the film is 2K." msgstr "il film è impostato su Interop e questo DCP è SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "il film è impostato su Interop e questo DCP è SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "il film è impostato su SMPTE e questo DCP è Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." msgstr "c'è un altro flusso audio che si sovrappone; rimuoverlo." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." +msgstr "c'è un altro flusso audio che si sovrappone; rimuoverlo." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "c'è un altro flusso video che si sovrappone; rimuoverlo." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2075,16 +2151,16 @@ msgstr "" "bobina su \"dividi per contenuto video\"." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "la dimensione del frame nel film è diversa da quella del DCP." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "spostamento" @@ -2093,46 +2169,52 @@ msgid "name" msgstr "nome" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "fermo immagine" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "c'è un altro flusso video che si sovrappone; rimuoverlo." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "sconosciuto" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "fotogrammi video" #, fuzzy +#~ msgid "Copying video file into DCP" +#~ msgstr "La dimensione video nel DCP non corrisponde" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "DCP-o-MATIC notifica" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "c'è un altro flusso video che si sovrappone; rimuoverlo." + +#, fuzzy #~ msgid "it does not have closed captions in all its reels." #~ msgstr "il DCP non ha sonoro in nessuna delle parti." diff --git a/src/lib/po/ka_KA.po b/src/lib/po/ka_KA.po index 16e93a77a..d82c29bff 100644 --- a/src/lib/po/ka_KA.po +++ b/src/lib/po/ka_KA.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,50 +17,50 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" "Content frame rate %.4f\n" msgstr "" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" msgstr "" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" "Display aspect ratio %.2f:1" msgstr "" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" msgstr "" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" msgstr "" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr "" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr "" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -74,39 +74,77 @@ msgid "" "Size: $SIZE\n" msgstr "" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +msgid "%1 notification" +msgstr "" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr "" @@ -143,11 +181,11 @@ msgstr "" msgid "1.90 (Full frame)" msgstr "" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "" @@ -159,68 +197,68 @@ msgstr "" msgid "2.39 (Scope)" msgstr "" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -228,14 +266,14 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " "DCP's container to have the same ratio as your content." msgstr "" -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "" @@ -243,58 +281,58 @@ msgstr "" msgid "Analysing audio" msgstr "" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -313,72 +351,72 @@ msgstr "" msgid "Audio will not be resampled" msgstr "" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "" @@ -390,11 +428,11 @@ msgstr "" msgid "Cannot handle pixel format %1 during %2" msgstr "" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "" -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "" @@ -402,7 +440,7 @@ msgstr "" msgid "Channels" msgstr "" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -410,27 +448,31 @@ msgstr "" msgid "Checking content" msgstr "" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +msgid "Closed subtitles" +msgstr "" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "" @@ -444,17 +486,17 @@ msgstr "" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "" @@ -462,15 +504,15 @@ msgstr "" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -486,19 +528,19 @@ msgstr "" msgid "Content sample rate" msgstr "" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -507,11 +549,11 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "" -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" @@ -547,7 +589,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "" -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "" @@ -555,31 +597,31 @@ msgstr "" msgid "Content to be joined must have the same picture size." msgstr "" -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "" -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "" @@ -587,23 +629,23 @@ msgstr "" msgid "Content to be joined must have the same video frame type." msgstr "" -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "" -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "" -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "" -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "" -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "" @@ -611,14 +653,6 @@ msgstr "" msgid "Copy DCP to TMS" msgstr "" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "" @@ -635,17 +669,17 @@ msgstr "" msgid "Could not decode image (%1)" msgstr "" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 msgid "Could not find file %1 in ZIP file" msgstr "" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "" @@ -653,19 +687,19 @@ msgstr "" msgid "Could not open %1 to send" msgstr "" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "" @@ -681,19 +715,19 @@ msgstr "" msgid "Could not write to remote file (%1)" msgstr "" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "" @@ -705,7 +739,7 @@ msgstr "" msgid "DCI Scope" msgstr "" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "" @@ -722,43 +756,34 @@ msgstr "" msgid "DCP will use every other frame of the content.\n" msgstr "" -#: src/lib/job.cc:172 src/lib/job.cc:187 -msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." -msgstr "" - -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "" - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 msgid "" "Dear Projectionist\n" "\n" @@ -770,14 +795,18 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" +msgstr "" + +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" msgstr "" #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "" @@ -801,19 +830,19 @@ msgstr "" msgid "Email notification" msgstr "" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -821,19 +850,19 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 msgid "Examining audio" msgstr "" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -845,15 +874,15 @@ msgstr "" msgid "Examining subtitles" msgstr "" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "" @@ -861,51 +890,51 @@ msgstr "" msgid "Failed to authenticate with server (%1)" msgstr "" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "" @@ -929,35 +958,35 @@ msgstr "" msgid "Full length in video frames at content rate" msgstr "" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "" @@ -965,105 +994,105 @@ msgstr "" msgid "Hz" msgstr "" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +msgid "It is not known what caused this error. %1" msgstr "" -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 msgid "Limited / video (%1-%2)" msgstr "" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "" @@ -1071,7 +1100,7 @@ msgstr "" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "" @@ -1079,24 +1108,24 @@ msgstr "" msgid "Mid-side decoder" msgstr "" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "" @@ -1104,19 +1133,19 @@ msgstr "" msgid "Missing required setting %1" msgstr "" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "" @@ -1128,74 +1157,83 @@ msgstr "" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "" -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 msgid "OK (ran for %1 from %2 to %3)" msgstr "" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +msgid "Open captions" +msgstr "" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "" @@ -1203,116 +1241,116 @@ msgstr "" msgid "Programming error at %1:%2 %3" msgstr "" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "" @@ -1325,27 +1363,27 @@ msgstr "" msgid "SSH error [%1] (%2)" msgstr "" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "" @@ -1353,11 +1391,11 @@ msgstr "" msgid "Some audio will be resampled to %1Hz" msgstr "" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1372,13 +1410,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1397,11 +1435,11 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "" @@ -1413,19 +1451,19 @@ msgstr "" msgid "Stereo to 5.1 up-mixer B" msgstr "" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "" @@ -1445,54 +1483,68 @@ msgstr "" msgid "The certificate chain for signing is invalid (%1)" msgstr "" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." msgstr "" -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "" -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "" -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "" -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "" -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1501,38 +1553,37 @@ msgid "" "systems support your chosen DCP rate." msgstr "" -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " "tab of Preferences." msgstr "" -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1541,40 +1592,40 @@ msgid "" "the content and choosing \"Add KDM\"." msgstr "" -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "" @@ -1582,7 +1633,7 @@ msgstr "" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "" @@ -1590,35 +1641,35 @@ msgstr "" msgid "Unexpected image type received by server" msgstr "" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "" @@ -1630,7 +1681,7 @@ msgstr "" msgid "Upmix R" msgstr "" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "" @@ -1638,11 +1689,11 @@ msgstr "" msgid "Verify DCP" msgstr "" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "" @@ -1650,74 +1701,74 @@ msgstr "" msgid "Waiting" msgstr "" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " "to %2 fps." msgstr "" -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " "rate to %2 fps." msgstr "" -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." msgstr "" -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." msgstr "" -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:324 msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" msgstr "" -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." msgstr "" -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1727,59 +1778,59 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." msgstr "" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "" -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "" -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "" @@ -1811,11 +1862,11 @@ msgstr "" msgid "could not find stream information" msgstr "" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "" @@ -1843,7 +1894,7 @@ msgstr "" msgid "error during async_connect (%1)" msgstr "" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "" @@ -1851,78 +1902,85 @@ msgstr "" msgid "error during async_write (%1)" msgstr "" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "" -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "" -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +msgid "it overlaps other audio content." msgstr "" -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +msgid "it overlaps other text content." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:739 +msgid "it overlaps other video content." +msgstr "" + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "" #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "" @@ -1931,40 +1989,36 @@ msgid "name" msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "" - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "" diff --git a/src/lib/po/nl_NL.po b/src/lib/po/nl_NL.po index c2bbd828d..c166832c1 100644 --- a/src/lib/po/nl_NL.po +++ b/src/lib/po/nl_NL.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: DCP-o-matic\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" -"PO-Revision-Date: 2024-07-11 23:32+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" +"PO-Revision-Date: 2024-11-12 04:23+0100\n" "Last-Translator: Rob van Nieuwkerk <dcpomatic-translations@berrymount.nl>\n" "Language-Team: Rob van Nieuwkerk <dcpomatic-translations@berrymount.nl>\n" "Language: nl_NL\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.4.4\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "Content frame rate %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -35,7 +35,7 @@ msgstr "" "\n" "Bijgesneden naar %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Weergave-beeldverhouding %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -52,7 +52,7 @@ msgstr "" "\n" "Opgevuld met zwart om in container %1 (%2x%3) te passen" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -60,18 +60,18 @@ msgstr "" "\n" "Geschaald naar %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " op %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -95,39 +95,89 @@ msgstr "" "Lengte: $LENGTH\n" "Grootte: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [audio]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [video]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [video]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"%1 kan het bestand %2 (%3) niet openen. Misschien bestaat het niet of wordt " +"het formaat niet ondersteund." + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"%1 moest uw instellingen voor refereren aan DCP's als OV wijzigen. " +"Controleer a.u.b. deze instellingen om er zeker van te zijn dat ze zijn " +"zoals u wilt." + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"%1 moest uw instellingen wijzigen zodat de frame rate van de film hetzelfde " +"is als die van uw Atmos-content." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" +"%1 moest een van uw aangepaste reel-grenzen verwijderen omdat deze niet meer " +"binnen de film valt." + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" +"%1 moest een aantal van uw aangepaste reel-grenzen verwijderen, omdat ze " +"niet meer binnen de film vallen." + +#: src/lib/ffmpeg_content.cc:122 +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" +"%1 ondersteunt het filter `%2' niet langer, daarom is het uitgeschakeld." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +msgid "%1 notification" +msgstr "%1 notificatie" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 frames" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixel-beeldverhouding %.2f:1" @@ -164,11 +214,11 @@ msgstr "1,85:1 (Flat)" msgid "1.90 (Full frame)" msgstr "1,896:1 (Full Container)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "10" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "16" @@ -180,11 +230,11 @@ msgstr "2,35:1 (old Scope)" msgid "2.39 (Scope)" msgstr "2,39:1 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D-ruisonderdrukking" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -194,75 +244,75 @@ msgstr "" "Tenzij u weet dat u deze DCP gaat afspelen op een geschikte projector, is " "het raadzaam om de DCP in te stellen op 2K in het \"DCP/Video\"-tabblad." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "9" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 resterend; klaar om %2%3" -#: src/lib/analytics.cc:65 -msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" -msgstr "" -"<h2>U heeft %1 DCP's gemaakt met DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hallo. Ik ben Carl en ik ben de " -"ontwikkelaar van DCP-o-matic. Ik werk eraan in mijn vrije tijd (met de hulp " -"van een fijn vrijwilligersteam van testers en vertalers) en ik geef het vrij " -"als gratis software.<p>Als u DCP-o-matic nuttig vindt, overweeg dan een " -"donatie aan het project. Financiële ondersteuning zal me helpen om meer " -"tijd te besteden aan de ontwikkeling van DCP-o-matic en het beter te maken!" -"<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?amount=40\">Ga naar " -"Paypal om €40 te doneren</a><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=20\">Ga naar Paypal om €20 te doneren</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=10\">Ga naar Paypal om €10 " -"te doneren</a></ul><p>Dank u wel!" - -#: src/lib/hints.cc:167 +#: src/lib/analytics.cc:66 +msgid "" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" +msgstr "" +"<h2>U heeft %1 DCP's gemaakt met %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hallo. Ik ben Carl en ik ben de " +"ontwikkelaar van %3. Ik werk eraan in mijn vrije tijd (met de hulp van een " +"fijn vrijwilligersteam van testers en vertalers) en ik geef het vrij als " +"gratis software.<p>Als u %4 nuttig vindt, overweeg dan een donatie aan het " +"project. Financiële ondersteuning zal me helpen om meer tijd te besteden " +"aan de ontwikkeling van %5 en het beter te maken!<p><ul><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=40\">Ga naar Paypal om €40 " +"te doneren</a><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=20\">Ga naar Paypal om €20 te doneren</a><li><a href=\"https://" +"dcpomatic.com/donate_amount?amount=10\">Ga naar Paypal om €10 te doneren</" +"a></ul><p>Dank u wel!</font>" + +#: src/lib/hints.cc:178 msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Sommige projectoren hebben afspeelproblemen met DCP's met een hele hoge bit-" -"rate. Het is verstandig om de JPEG2000-bandbreedte tot ongeveer 200 Mbit/s " +"rate. Het is verstandig om de video-bandbreedte tot ongeveer 200 Mbit/s " "terug te brengen; dit heeft vrijwel zeker geen zichtbaar effect op de " "beeldkwaliteit." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "Een ondertitel of closed caption bestand in dit project is gemarkeerd met de " -"taal '%1', die DCP-o-matic niet herkent. De taal van het bestand is gewist." +"taal '%1', die %2 niet herkent. De taal van het bestand is gewist." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid Log-Gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Advertisement" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -274,7 +324,7 @@ msgstr "" "balken zullen komen. Mogelijk wilt u de DCP-container op Scope (2,39:1) " "instellen bij de DCP-instellingen." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -285,7 +335,7 @@ msgstr "" "balken zullen komen. U kunt ervoor kiezen om de DCP-container op dezelfde " "beeldverhouding als uw content in te stellen." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Er is een fout opgetreden bij de verwerking van bestand %1." @@ -293,30 +343,30 @@ msgstr "Er is een fout opgetreden bij de verwerking van bestand %1." msgid "Analysing audio" msgstr "Analyseren audio" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Analyseren ondertitels" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Ten minste één marker komt na het einde van het project en wordt genegeerd." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Ten minste één van uw closed caption bestanden is groter dan " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" "Ten minste één XML-gedeelte van uw closed caption bestanden is groter dan " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Ten minste één van uw ondertitelbestanden is groter dan " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -324,7 +374,7 @@ msgstr "" "Ten minste één van uw ondertitel-regels heeft meer dan 52 tekens. Het wordt " "aanbevolen om niet meer dan 52 tekens in een regel te gebruiken." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -332,7 +382,7 @@ msgstr "" "Ten minste één van uw ondertitel-regels heeft meer dan 79 tekens. U moet " "elke regel maximaal 79 tekens lang maken." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -340,7 +390,7 @@ msgstr "" "Ten minste één van uw ondertitels heeft meer dan 3 regels. Het is " "verstandig om niet meer dan 3 regels te gebruiken." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -348,7 +398,7 @@ msgstr "" "Ten minste één van uw ondertitels duurt minder dan 15 frames. Het is " "verstandig om elke ondertitel minstens 15 frames lang te maken." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -356,7 +406,7 @@ msgstr "" "Ten minste één van uw ondertitels begint minder dan 2 frames na de vorige. " "Het is verstandig om minstens 2 frames tussen ondertitels te laten." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -379,72 +429,72 @@ msgstr "Audio wordt geresampled naar %1Hz" msgid "Audio will not be resampled" msgstr "Audio wordt niet geresampled" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 uitgebreid gamut" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 constante luminantie" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 voor een 10-bits systeem" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 voor een 12-bits systeem" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 niet-constante luminantie" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits per pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Bob Weaver Deinterlacing Filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Geannuleerd" @@ -456,11 +506,11 @@ msgstr "Mag geen slash bevatten" msgid "Cannot handle pixel format %1 during %2" msgstr "Kan pixelformaat %1 niet verwerken tijdens %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Kan geen KDM maken omdat dit project niet is versleuteld." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Midden (C)" @@ -468,7 +518,7 @@ msgstr "Midden (C)" msgid "Channels" msgstr "Kanalen" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "Controleer hun nieuwe instellingen en probeer het opnieuw." @@ -476,27 +526,31 @@ msgstr "Controleer hun nieuwe instellingen en probeer het opnieuw." msgid "Checking content" msgstr "Controleren content" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Controleren bestaande beelddata" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Chroma-afgeleide constante luminantie" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Chroma-afgeleide niet-constante luminantie" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "Clip" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Closed captions" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +msgid "Closed subtitles" +msgstr "Gesloten ondertitels" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Primaire kleuren" @@ -510,17 +564,17 @@ msgstr "Primaire kleuren" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Kleurbereik" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Kleuroverdrachtskarakteristiek" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Kleurruimte" @@ -528,15 +582,15 @@ msgstr "Kleurruimte" msgid "Combine DCPs" msgstr "Combineer DCP's" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Berekenen samenvatting" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Berekenen samenvattingen" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "Gefeliciteerd!" @@ -552,25 +606,25 @@ msgstr "Content bit depth" msgid "Content sample rate" msgstr "Content sample rate" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" "Samen te voegen content moet allemaal wel audio, of allemaal geen audio " "hebben" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Samen te voegen content moet allemaal wel ondertitels/captions, of allemaal " "geen ondertitels/captions hebben" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" "Samen te voegen content moet allemaal wel video, of allemaal geen video " "hebben" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -583,13 +637,13 @@ msgstr "" "Video van samen te voegen content moet allemaal wel, of allemaal niet " "gebruikt worden." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "Samen te voegen content moeten dezelfde 'inbranden ondertitels'-instelling " "hebben." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Samen te voegen content moet dezelfde 'gebruik ondertitels'-instelling " @@ -633,7 +687,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "Samen te voegen content moet dezelfde fade-instelling hebben." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "" "Samen te voegen content moet dezelfde ondertitel omlijnings-breedte hebben." @@ -642,35 +696,35 @@ msgstr "" msgid "Content to be joined must have the same picture size." msgstr "Samen te voegen content moet dezelfde beeldgrootte hebben." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" "Samen te voegen content moet dezelfde ondertitel X-verschuiving hebben." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Samen te voegen content moet dezelfde ondertitel X-schaling hebben." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" "Samen te voegen content moet dezelfde ondertitel Y-verschuiving hebben." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Samen te voegen content moet dezelfde ondertitel Y-schaling hebben." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" "Samen te voegen content moet dezelfde ondertitel fade-instelling hebben." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "Samen te voegen content moet dezelfde regelafstand voor ondertitels hebben." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Samen te voegen content moet dezelfde video frame rate hebben" @@ -678,23 +732,23 @@ msgstr "Samen te voegen content moet dezelfde video frame rate hebben" msgid "Content to be joined must have the same video frame type." msgstr "Samen te voegen content moet hetzelfde video frame type hebben." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Samen te voegen content moet dezelfde DCP track gebruiken." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Samen te voegen content moet dezelfde fonts gebruiken." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Samen te voegen content moet dezelfde ondertitel-stream gebruiken." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "Samen te voegen content moet dezelfde tekst-taal hebben." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Content-video is %1x%2" @@ -702,14 +756,6 @@ msgstr "Content-video is %1x%2" msgid "Copy DCP to TMS" msgstr "Kopieer DCP naar TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Kopiëren oud video-bestand" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "Kopiëren video-bestand naar DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Kan geen verbinding maken met server %1 (%2)" @@ -726,19 +772,19 @@ msgstr "Kan JPEG2000-bestand %1 niet decoderen (%2)" msgid "Could not decode image (%1)" msgstr "Kan beeld niet decoderen (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 msgid "Could not find file %1 in ZIP file" msgstr "Kan bestand %1 niet in ZIP-bestand vinden" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Kan niet luisteren naar externe encodeer-servers. Misschien draait er al " -"een andere instantie van DCP-o-matic." +"een andere instantie van %1." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Kan %1 niet openen" @@ -746,19 +792,19 @@ msgstr "Kan %1 niet openen" msgid "Could not open %1 to send" msgstr "Kan %1 niet openen om te verzenden" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Kan gedownload ZIP-bestand niet openen" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Kan gedownload ZIP-bestand niet openen (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Kan bestand niet openen om te schrijven" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "Kan output-bestand %1 niet openen (%2)" @@ -774,19 +820,19 @@ msgstr "Kan overdracht niet starten" msgid "Could not write to remote file (%1)" msgstr "Kan extern bestand niet schrijven (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX primair (DBP)" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX secundair (DBS)" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -798,7 +844,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML ondertitels" @@ -815,52 +861,40 @@ msgstr "DCP zal afspelen met %.1f%% van de content-snelheid.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP zal om het andere frame van de content gebruiken.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 -msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." -msgstr "" -"DCP-o-matic kan het bestand %1 (%2) niet openen. Misschien bestaat het niet " -"of wordt het formaat niet ondersteund." - -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic moest uw instellingen voor refereren aan DCP's als OV wijzigen. " -"Controleer a.u.b. deze instellingen om er zeker van te zijn dat ze zijn " -"zoals u wilt." +"DCP-o-matic moest uw container instellen op 1920x1080, omdat dit de enige is " +"die kan worden gebruikt met MPEG2-codering." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic moest uw instellingen wijzigen zodat de frame rate van de film " -"hetzelfde is als die van uw Atmos-content." +"DCP-o-matic moest uw film op 2D instellen, omdat 3D nog niet wordt " +"ondersteund met MPEG2-codering." -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic ondersteunt het filter `%1' niet langer, daarom is het " -"uitgeschakeld." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "DCP-o-matic notificatie" +"DCP-o-matic heeft uw container op DCI Flat ingesteld, omdat deze voorheen " +"1920x1080 was. Dit is geen standaardverhouding bij JPEG2000-codering." #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 of AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Deinterlacing" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 msgid "" "Dear Projectionist\n" "\n" @@ -872,7 +906,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Geachte Operateur,\n" "\n" @@ -884,13 +918,17 @@ msgstr "" "De KDM's zijn geldig van $START_TIME tot $END_TIME.\n" "\n" "Met vriendelijke groet,\n" -"DCP-o-matic" +"%1" + +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "Schijf vol bij het schrijven van %1" #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 of CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Download mislukt (%1 fout %2)" @@ -914,19 +952,19 @@ msgstr "E-mail KDM's voor %2" msgid "Email notification" msgstr "E-mail notificatie" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "E-mail probleemrapport" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "E-mail probleemrapport voor %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Encoderen" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Episode" @@ -934,19 +972,19 @@ msgstr "Episode" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Fout in ondertitelbestand: %1 gelezen terwijl %2 verwacht werd" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Fout: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "Event" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 msgid "Examining audio" msgstr "Onderzoeken audio" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Onderzoeken audio, ondertitels en closed captions" @@ -958,15 +996,15 @@ msgstr "Onderzoeken content" msgid "Examining subtitles" msgstr "Onderzoeken ondertitels" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Onderzoeken ondertitels en closed captions" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "Uitpakken" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -974,51 +1012,51 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Authenticatiefout met server (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Encoderen van de DCP mislukt." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Verzenden e-mail mislukt" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Feature" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Bestandsnaam" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "Bestandsnamen" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "Bestanden zijn gewijzigd sinds ze aan het project zijn toegevoegd." -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Bepalen lengte" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Frame rate" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Vrijdag" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Full" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Full (0-%1)" @@ -1042,35 +1080,35 @@ msgstr "Volledige lengte in video frames bij DCP-snelheid" msgid "Full length in video frames at content rate" msgstr "Volledige lengte in video frames bij content-snelheid" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradient debander" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Slechthorenden (HI)" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Hoge kwaliteit 3D-ruisonderdrukking" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "Highlights" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Spiegel horizontaal" @@ -1078,21 +1116,21 @@ msgstr "Spiegel horizontaal" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB of sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" "Als u een frame rate van 25 fps gebruikt, moet u de DCP-standaard wijzigen " "in SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " @@ -1102,19 +1140,19 @@ msgstr "" "bepaalde reden heeft om Interop te gebruiken. U wordt geadviseerd om de DCP-" "standaard op SMPTE in te stellen in het \"DCP\"-tabblad." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" "In deze versie zijn er wijzigingen in de manier waarop ondertitels worden " -"geplaatst. De positionering zou nu correcter moeten zijn, met betrekking tot " -"de standaarden, maar u moet alle ondertitels in uw project controleren om er " -"zeker van te zijn dat ze worden geplaatst waar u ze wilt hebben." +"geplaatst. De positionering zou nu correcter moeten zijn, met betrekking " +"tot de standaarden, maar u moet alle ondertitels in uw project controleren " +"om er zeker van te zijn dat ze worden geplaatst waar u ze wilt hebben." -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1122,72 +1160,72 @@ msgstr "" "Het is raadzaam om uw eerste ondertitel minstens 4 seconden na het begin van " "de DCP te plaatsen om er zeker van te zijn dat deze wordt gezien." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." -msgstr "Het is onbekend hoe deze fout is ontstaan." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +msgid "It is not known what caused this error. %1" +msgstr "Het is onbekend hoe deze fout is ontstaan. %1" -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "KDM-levering: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Kernel deinterlacer" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Links (L)" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Links midden (Lc)" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Achter surround links (BsL)" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Links surround (Ls)" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Lengte" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Subwoofer (Lfe)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limited" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 msgid "Limited / video (%1-%2)" msgstr "Limited / video (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Lineair" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logaritmisch (100: 1 bereik)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logaritmisch (316: 1 bereik)" @@ -1195,7 +1233,7 @@ msgstr "Logaritmisch (316: 1 bereik)" msgid "Lost communication between main and writer processes" msgstr "Verbroken communicatie tussen hoofd- en schrijfprocessen" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1203,24 +1241,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Midden-zijkant decoder" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Diversen" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Ongelijke aantallen audio-kanalen in DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Ongelijke audio sample rates in DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Ongelijke frame rates in DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Ongelijke beeldgroottes in DCP" @@ -1228,19 +1266,19 @@ msgstr "Ongelijke beeldgroottes in DCP" msgid "Missing required setting %1" msgstr "Ontbrekende verplichte instelling %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Maandag" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Motion compensating deinterlacer" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Geen CPL's gevonden in DCP." @@ -1256,80 +1294,91 @@ msgstr "" "Geen Uitgaande mailserver geconfigureerd in het \"E-mail\"-tabblad bij " "Voorkeuren" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Geen geldige beeldbestanden gevonden in de map." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Ruisonderdrukking" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Geen" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "OK" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (%1 bezig, van %2 tot %3)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (%1 bezig)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Alleen bij het eerste deel van samengevoegde content kan het begin " "bijgeknipt worden." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" "Alleen bij het laatste deel van samengevoegde content kan het einde " "bijgeknipt worden." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +msgid "Open captions" +msgstr "Open captions" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Open ondertitels" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -"Open het project in DCP-o-matic, controleer de instellingen en bewaar " -"voordat u het opnieuw probeert." +"Open het project in %1, controleer de instellingen en bewaar voordat u het " +"opnieuw probeert." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Oriëntatie" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Onvoldoende geheugen" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Overcomplete wavelet denoiser" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Rapporteer dit probleem a.u.b. via \"Help -> Meld een probleem...\" of per e-" +"mail naar %1" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Policy" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "Premultiply alpha channel" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Voorbereid voor video frame rate" @@ -1337,93 +1386,93 @@ msgstr "Voorbereid voor video frame rate" msgid "Programming error at %1:%2 %3" msgstr "Programmeerfout op %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promo" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Public Service Announcement" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Rating" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Rechts (R)" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Rechts midden (Rc)" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Achter surround rechts (Bsr)" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Rechts surround (Rs)" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Roteer 90 graden tegen de klok in" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Roteer 90 graden met de klok mee" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1434,23 +1483,23 @@ msgstr "" "frame van de bewegende aftiteling (FFMC: first frame of moving credits). U " "moet deze markers toevoegen met de knop 'Markers' in het \"DCP\"-tabblad." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 voor 10-, 12-, 14- en 16-bits systemen" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1463,27 +1512,27 @@ msgstr "SSH-fout [%1]" msgid "SSH error [%1] (%2)" msgstr "SSH-fout [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Zaterdag" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Scannen beeldbestanden" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Verzenden e-mail" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Short" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Sign" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Grootte" @@ -1491,12 +1540,12 @@ msgstr "Grootte" msgid "Some audio will be resampled to %1Hz" msgstr "Een deel van de audio wordt geresampled naar %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" "Sommige bestanden zijn gewijzigd sinds ze aan het project zijn toegevoegd." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1519,7 +1568,7 @@ msgstr "" "Deze bestanden worden nu opnieuw onderzocht, dus het kan nodig zijn om hun " "instellingen te controleren." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." @@ -1527,7 +1576,7 @@ msgstr "" "Een deel van uw closed captions heeft meer dan %1 regels, dus worden ze " "afgekapt." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1549,11 +1598,11 @@ msgstr "Een deel van uw content heeft een KDM nodig" msgid "Some of your content needs an OV" msgstr "Een deel van uw content heeft een OV nodig" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "Stereo card" @@ -1565,19 +1614,19 @@ msgstr "Stereo naar 5.1 up-mixer A" msgid "Stereo to 5.1 up-mixer B" msgstr "Stereo naar 5.1 up-mixer B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Zondag" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Telecine-filter" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1597,37 +1646,36 @@ msgstr "De certificaat-keten voor ondertekening is ongeldig" msgid "The certificate chain for signing is invalid (%1)" msgstr "De certificaat-keten voor ondertekening is ongeldig (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -"De certificaat-keten die DCP-o-matic gebruikt voor het ondertekenen van " -"DCP's en KDM's bevat een kleine fout die ervoor zorgt dat DCP's als " -"incorrect worden gevalideerd op sommige systemen. U wordt geadviseerd om " -"deze certificaat-keten opnieuw aan te maken door op de knop \"Maak " -"certificaten en sleutel opnieuw...\" in het \"Sleutels\"-tabblad bij " -"Voorkeuren te klikken." +"De certificaat-keten die %1 gebruikt voor het ondertekenen van DCP's en " +"KDM's bevat een kleine fout die ervoor zorgt dat DCP's als incorrect worden " +"gevalideerd op sommige systemen. U wordt geadviseerd om deze certificaat-" +"keten opnieuw aan te maken door op de knop \"Maak certificaten en sleutel " +"opnieuw...\" in het \"Sleutels\"-tabblad bij Voorkeuren te klikken." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -"De certificaat-keten die DCP-o-matic gebruikt voor het ondertekenen van " -"DCP's en KDM's heeft een te lange geldigheidsduur. Dit zal op sommige " -"systemen problemen veroorzaken bij het afspelen van DCP's. U wordt " -"geadviseerd om deze certificaat-keten opnieuw aan te maken door op de knop " -"\"Maak certificaten en sleutel opnieuw...\" in het \"Sleutels\"-tabblad bij " +"De certificaat-keten die %1 gebruikt voor het ondertekenen van DCP's en " +"KDM's heeft een te lange geldigheidsduur. Dit zal op sommige systemen " +"problemen veroorzaken bij het afspelen van DCP's. U wordt geadviseerd om " +"deze certificaat-keten opnieuw aan te maken door op de knop \"Maak " +"certificaten en sleutel opnieuw...\" in het \"Sleutels\"-tabblad bij " "Voorkeuren te klikken." -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1637,7 +1685,7 @@ msgstr "" "bevatten. Stel het a.u.b. in op 2D. U kunt nog steeds een 3D-DCP van deze " "content maken door in het \"DCP/Video\"-tabblad de 3D-optie aan te vinken." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1645,23 +1693,44 @@ msgstr "" "De harddisk waarop de film is opgeslagen heeft te weinig vrije ruimte. Maak " "meer ruimte vrij en probeer het opnieuw." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Het bestand %1 is naar %2 milliseconden eerder verplaatst." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Het bestand %1 is naar %2 milliseconden later verplaatst." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Van het bestand %1 is %2 milliseconden minder weggeknipt." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Van het bestand %1 is %2 milliseconden meer weggeknipt." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" +"De overgrote meerderheid van bioscopen in Europa, Australazië en Noord-" +"Amerika verwacht DCP's die zijn gecodeerd met JPEG2000 in plaats van MPEG2. " +"Controleer of de bioscoop echt een ouderwetse MPEG2 DCP wil." + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" +"De verticale verschuiving voor sommige ondertitels werkt nu in de " +"tegenovergestelde richting van hoe het voorheen was. Controleer alle " +"ondertitels in uw project om er zeker van te zijn dat ze op de gewenste " +"plaats staan." + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1676,11 +1745,11 @@ msgstr "" "op voorwaarde dat uw doelprojectiesystemen de door u gekozen DCP frame rate " "ondersteunen." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Deze DCP heeft geen video" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1690,37 +1759,33 @@ msgstr "" "threads te verminderen in het \"Algemeen\"-tabblad bij Voorkeuren als u een " "32-bits operating system draait." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." -msgstr "" -"Deze KDM is gemaakt voor DCP-o-matic maar niet voor het leaf-certificaat." - #: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." -msgstr "" -"Deze KDM is niet gemaakt voor het ontsleutelings-certificaat van DCP-o-matic." +msgid "This KDM was made for %1 but not for its leaf certificate." +msgstr "Deze KDM is gemaakt voor %1 maar niet voor het leaf-certificaat." + +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." +msgstr "Deze KDM is niet gemaakt voor het ontsleutelings-certificaat van %1." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" -"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van DCP-o-" -"matic gebruikt en probeert te veel encoderings-threads te gebruiken. " -"Verminder a.u.b. het 'Aantal threads dat DCP-o-matic moet gebruiken' in het " -"\"Algemeen\"-tabblad bij Voorkeuren en probeer het opnieuw." +"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van %1 " +"gebruikt en probeert te veel encoderings-threads te gebruiken. Verminder a." +"u.b. het 'Aantal threads dat %2 moet gebruiken' in het \"Algemeen\"-tabblad " +"bij Voorkeuren en probeer het opnieuw." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" -"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van DCP-o-" -"matic gebruikt. Installeer a.u.b. de 64-bits versie van DCP-o-matic en " -"probeer het opnieuw." +"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van %1 " +"gebruikt. Installeer a.u.b. de 64-bits versie van %2 en probeer het opnieuw." #: src/lib/exceptions.cc:113 msgid "" @@ -1731,45 +1796,45 @@ msgstr "" "met de rechtermuisknop op de content te klikken en \"Voeg KDM toe\" te " "kiezen." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" -"Deze film is aangemaakt met een nieuwere versie van DCP-o-matic en kan niet " -"met deze versie geladen worden. Sorry!" +"Deze film is aangemaakt met een nieuwere versie van %1 en kan niet met deze " +"versie geladen worden. Sorry!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" -"Deze film is aangemaakt met een oudere versie van DCP-o-matic en kan niet " -"met deze versie geladen worden. U moet een nieuwe film aanmaken en de " -"content opnieuw toevoegen en configureren. Sorry!" +"Deze film is aangemaakt met een oudere versie van %1 en kan niet met deze " +"versie geladen worden. U moet een nieuwe film aanmaken en de content " +"opnieuw toevoegen en configureren. Sorry!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Donderdag" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Timed text" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Transcoderen %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitional" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Dinsdag" @@ -1777,7 +1842,7 @@ msgstr "Dinsdag" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Onverwachte inhoud ZIP-bestand" @@ -1785,35 +1850,35 @@ msgstr "Onverwachte inhoud ZIP-bestand" msgid "Unexpected image type received by server" msgstr "Onverwacht beeldtype ontvangen door server" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Onbekend" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Onbekende fout" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" -msgstr "Niet herkend audio sample-formaat (%1)" +msgstr "Niet-herkend audio sample-formaat (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Onscherpheidsmasker en Gaussische onscherpte" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Niet gespecificeerd" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Zonder titel" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Ongebruikt" @@ -1825,7 +1890,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1833,11 +1898,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Controleer DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Spiegel verticaal" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Slechtzienden (VI)" @@ -1845,23 +1910,23 @@ msgstr "Slechtzienden (VI)" msgid "Waiting" msgstr "Wachten" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Weave-filter" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Woensdag" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " @@ -1871,7 +1936,7 @@ msgstr "" "wordt niet door alle projectoren ondersteund. U wordt geadviseerd om de DCP " "frame rate te wijzigen in %2 fps." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1881,7 +1946,7 @@ msgstr "" "wordt niet door alle projectoren ondersteund. U kunt overwegen om de DCP " "frame rate te wijzigen in %2 fps." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1890,7 +1955,18 @@ msgstr "" "wordt niet door alle projectoren ondersteund. Houd er rekening mee dat u " "compatibiliteitsproblemen kunt krijgen." -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 +msgid "" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." +msgstr "" +"U gebruikt de stereo naar 5.1 up-mixer van %1. Deze is experimenteel en kan " +"leiden tot audio van slechte kwaliteit. Als u doorgaat, kunt u beter in een " +"bioscoop naar de resulterende DCP luisteren om er zeker van te zijn dat het " +"goed klinkt." + +#: src/lib/hints.cc:324 msgid "" "You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " "you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" @@ -1898,18 +1974,7 @@ msgstr "" "U gebruikt 3D-content, maar uw DCP is op 2D ingesteld. Stel de DCP in op 3D " "als u hem wilt afspelen op een 3D-systeem (bv. Real-D, MasterImage etc.)" -#: src/lib/hints.cc:120 -msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." -msgstr "" -"U gebruikt de stereo naar 5.1 up-mixer van DCP-o-matic. Deze is " -"experimenteel en kan leiden tot audio van slechte kwaliteit. Als u " -"doorgaat, kunt u beter in een bioscoop naar de resulterende DCP luisteren om " -"er zeker van te zijn dat het goed klinkt." - -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1917,7 +1982,7 @@ msgstr "" "U heeft %1 bestanden die VOB-bestanden van een DVD lijken te zijn. U kunt " "deze beter samenvoegen om van soepele aansluitingen verzekerd te zijn." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1925,7 +1990,7 @@ msgstr "" "U heeft meer dan één stuk Atmos-content en ze hebben niet dezelfde frame " "rate. U moet een deel van de Atmos-content verwijderen." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1933,7 +1998,7 @@ msgstr "" "U heeft overlappende closed captions. Die zijn niet toegestaan in Interop " "DCP's. Verander uw DCP-standaard in SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1945,7 +2010,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "U moet content aan de DCP toevoegen voor hij gemaakt kan worden" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " @@ -1956,19 +2021,19 @@ msgstr "" "DCP controleren. Om dit te voorkomen, stelt u het aantal audio-kanalen van " "de DCP in op 8 of 16." -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "Uw DCP heeft minder dan 6 audio-kanalen. Dit kan problemen geven met " "sommige installaties. Mogelijk wilt u de DCP instellen op 6 kanalen. Het " -"maakt niet uit of uw content minder kanalen heeft, DCP-o-matic vult de extra " -"kanalen met stilte." +"maakt niet uit of uw content minder kanalen heeft, %1 vult de extra kanalen " +"met stilte." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1977,7 +2042,7 @@ msgstr "" "problemen geven met sommige projectoren. Gebruik, indien mogelijk, Flat of " "Scope voor de container-beeldverhouding van de DCP." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1985,35 +2050,35 @@ msgstr "" "Uw audio-niveau is zeer hoog (op %1). U kunt beter de versterking van uw " "audio-content verminderen." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" -"Uw project bevat video-content die niet was uitgelijnd op een framegrens." +"Uw project bevat video-content die niet was uitgelijnd op een frame-grens." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "" "Uw project bevat video-content waarvan het bijknippen niet was uitgelijnd op " -"een framegrens." +"een frame-grens." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[bewegende beelden]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[stilstaand beeld]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[ondertitels]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_reel%1" @@ -2045,11 +2110,11 @@ msgstr "kopiëren van %1" msgid "could not find stream information" msgstr "kan geen stream-informatie vinden" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "kan Atmos asset niet naar de DCP verplaatsen (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "kan audio asset niet naar de DCP verplaatsen (%1)" @@ -2077,7 +2142,7 @@ msgstr "kan niet schrijven naar bestand %1 (%2)" msgid "error during async_connect (%1)" msgstr "fout tijdens async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "fout tijdens async_read (%1)" @@ -2085,21 +2150,21 @@ msgstr "fout tijdens async_read (%1)" msgid "error during async_write (%1)" msgstr "fout tijdens async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "frames per seconde" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "hij heeft een andere frame rate dan de film." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." @@ -2108,7 +2173,7 @@ msgstr "" "in op %1 kanalen." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" @@ -2116,35 +2181,42 @@ msgstr "" "captions moeten opnieuw geschreven worden." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "hij is 2K en de film is 4k." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "hij is 4K en de film is 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "hij is Interop en de film is SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "hij is SMPTE en de film is Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." -msgstr "hij overlapt met andere audio-content; verwijder deze andere content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +msgid "it overlaps other audio content." +msgstr "hij overlapt met andere audio-content." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +msgid "it overlaps other text content." +msgstr "hij overlapt met andere tekst-content." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." -msgstr "hij overlapt met andere video-content; verwijder deze andere content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +msgid "it overlaps other video content." +msgstr "hij overlapt met andere video-content." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2153,16 +2225,16 @@ msgstr "" "'splits per video-content'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "zijn video-beeldgrootte verschilt van die in de film." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "verplaatsen" @@ -2171,7 +2243,7 @@ msgid "name" msgstr "naam" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2180,7 +2252,7 @@ msgstr "" "moet opnieuw geschreven worden." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." @@ -2189,30 +2261,39 @@ msgstr "" "moet opnieuw geschreven worden." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "stilstaand beeld" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "ze overlappen met andere tekst-content; verwijder deze andere content." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "onbekend" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "video frames" +#~ msgid "Copying old video file" +#~ msgstr "Kopiëren oud video-bestand" + +#~ msgid "Copying video file into DCP" +#~ msgstr "Kopiëren video-bestand naar DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "DCP-o-matic notificatie" + +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "" +#~ "ze overlappen met andere tekst-content; verwijder deze andere content." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "hij heeft niet closed captions in alle reels." @@ -2223,13 +2304,6 @@ msgstr "video frames" #~ msgstr "hij heeft niet audio in alle reels." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Rapporteer dit probleem a.u.b. via \"Help -> Meld een probleem...\" of " -#~ "per e-mail naar carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "Uw standaardcontainer is niet geldig en is gewijzigd in Flat (1,85:1)" diff --git a/src/lib/po/pl_PL.po b/src/lib/po/pl_PL.po index dffec8c24..d4f09a01e 100644 --- a/src/lib/po/pl_PL.po +++ b/src/lib/po/pl_PL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2022-05-10 16:47+0200\n" "Last-Translator: MichaÅ‚ Tomaszewski <goku1933@gmail.com>\n" "Language-Team: Polish <http://translations.dcpomatic.com/projects/dcpomatic/" @@ -20,7 +20,7 @@ msgstr "" "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Poedit 3.0.1\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -29,7 +29,7 @@ msgstr "" "\n" "Liczba kl/s pliku video %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -37,7 +37,7 @@ msgstr "" "\n" "Wykadrowany do %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -46,7 +46,7 @@ msgstr "" "\n" "Proporcje obrazu %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -54,7 +54,7 @@ msgstr "" "\n" "Dodane czarne pasy, aby dopasować do formatu %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -62,18 +62,18 @@ msgstr "" "\n" "Przeskalowany do %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " w %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -97,39 +97,89 @@ msgstr "" "DÅ‚ugość: $LENGTH\n" "Rozmiar: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [dźwiÄ™k]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [obraz]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic nie mógÅ‚ otworzyć pliku %1 (%2). Plik nie istnieje lub jest w " +"niewspieranym formacie." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"Program DCP-o-matic musiaÅ‚ zmienić ustawienia Projektu, żeby DCP mógÅ‚ zostać " +"oznaczony jako OV. ProszÄ™ sprawdzić, czy ustawienia sÄ… zgodne z " +"oczekiwanymi." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"Program DCP-o-matic musiaÅ‚ zmienić ustawienia Projektu, żeby liczba klatek/s " +"Projektu byÅ‚a taka sama jak w pliku Atmos." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic nie wspiera już filtru `%1', wiÄ™c zostaÅ‚ on wyłączony." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Powiadomienie email" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 klatki" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", proporcje piksela %.2f:1" @@ -166,11 +216,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (PeÅ‚na klatka)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -183,11 +233,11 @@ msgstr "2.35 (Scope kinowy)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "Odszumianie 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -197,32 +247,33 @@ msgstr "" "wiesz, czy paczka DCP zostanie otworzona na źródÅ‚owym projektorze, ustaw " "rozdzielczość na 2K w zakÅ‚adce \"DCP→Wideo\"." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 kl/s" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 pozostaÅ‚o; koniec o %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>StworzyÅ‚eÅ› już %1 paczek DCP dziÄ™ki DCP-o-matic!</h2><img width=\"20%%\" " "src=\"memory:me.jpg\" align=\"center\"><p>Witaj, nazywam siÄ™ Carl i jestem " @@ -237,35 +288,37 @@ msgstr "" "dcpomatic.com/donate_mount?amount=10\">Przejdź do PayPal i wpÅ‚ać 10 EUR</a></" "ul><p>DziÄ™kujÄ™!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Niektóre stare serwery mogÄ… mieć problem z odtwarzaniem DCP o bardzo wysokim " "bitracie. Dobra rada to zmniejszenie go do granicy ok. 200Mbit/s, zwÅ‚aszcza, " "że nie powinno wpÅ‚ynąć to na jakość obrazu." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "Plik napisów lub plik napisów kodowanych w tym Projekcie ma oznaczenie " "jÄ™zyka '%1', którego DCP-o-matic nie rozpoznaje. Oznaczenie jÄ™zyka zostaÅ‚o " "wyczyszczone." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrydowa log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Reklama" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -277,7 +330,7 @@ msgstr "" "skompensować różnice formatów. Być może lepiej ustawić kontener DCP na " "Scope (2.39:1) w zakÅ‚adce \"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -288,7 +341,7 @@ msgstr "" "pionowych pasów, by skompensować różnice formatów. Być może lepiej ustawić " "kontener DCP na Flat (1.85:1) w zakÅ‚adce \"DCP\"." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "WystÄ…piÅ‚ błąd podczas przetwarzania pliku %1." @@ -296,31 +349,31 @@ msgstr "WystÄ…piÅ‚ błąd podczas przetwarzania pliku %1." msgid "Analysing audio" msgstr "AnalizujÄ™ dźwiÄ™k" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "AnalizujÄ™ napisy" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Znaczniki, które pojawiajÄ… siÄ™ za czasem koÅ„cowym Projektu zostanÄ… " "zignorowane." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Co najmniej jeden z plików napisów kodowanych jest wiÄ™kszy niż " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" "Co najmniej jedna część pliku XML z napisami kodowanymi jest wiÄ™ksza niż " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Co najmniej jeden z plików z napisami jest wiÄ™kszy niż " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -328,7 +381,7 @@ msgstr "" "W napisach znajdujÄ… siÄ™ linie, które majÄ… powyżej 52 znaków. Zaleca siÄ™, " "aby żadna z linii nie przekraczaÅ‚a 52 znaków." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -336,7 +389,7 @@ msgstr "" "W napisach znajdujÄ… siÄ™ linie, które majÄ… powyżej 79 znaków. Å»adna linia " "nie powinna przekraczać 79 znaków." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -344,7 +397,7 @@ msgstr "" "W pliku znajdujÄ… siÄ™ napisy, które majÄ… ponad 3 linie. Zaleca siÄ™ użycie " "maksymalnie 3 linii." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -353,7 +406,7 @@ msgstr "" "obrazu. Zaleca siÄ™, aby każdy napis byÅ‚ widoczny co najmniej przez 15 " "klatek obrazu." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -361,7 +414,7 @@ msgstr "" "Niektóre napisy w pliku majÄ… odstÄ™p czasowy poniżej 2 klatek obrazu. Zaleca " "siÄ™, aby odstÄ™p miÄ™dzy napisami wynosiÅ‚ co najmniej 2 klatki obrazu." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -385,72 +438,72 @@ msgstr "Próbkowanie dźwiÄ™ku zostanie zmienione na %1Hz" msgid "Audio will not be resampled" msgstr "Próbkowanie dźwiÄ™ku nie zostanie zmienione" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 rozszerzony gamut" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 staÅ‚a luminancja" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 dla systemów 10-bitowych" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 dla systemów 12-bitowych" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 zmienna luminancja" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bitów na piksel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Filtr usuwania przeplotu Boba Weavera" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Anulowane" @@ -462,11 +515,11 @@ msgstr "Nie może zawierać ukoÅ›ników" msgid "Cannot handle pixel format %1 during %2" msgstr "Nie można przetworzyć modelu barw %1 podczas %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Nie mogÄ™ stworzyć KDM, ponieważ ten Projekt nie jest zaszyfrowany." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Centralny" @@ -474,7 +527,7 @@ msgstr "Centralny" msgid "Channels" msgstr "KanaÅ‚y dźwiÄ™kowe" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "Sprawdź nowe ustawienia, a nastÄ™pnie spróbuj ponownie." @@ -483,27 +536,32 @@ msgstr "Sprawdź nowe ustawienia, a nastÄ™pnie spróbuj ponownie." msgid "Checking content" msgstr "Szukam zmian w materiale" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Sprawdzanie danych obrazu" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "StaÅ‚a luminancja ze skÅ‚adowÄ… różnicowÄ… chrominancji" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Zmienna luminancja ze skÅ‚adowÄ… różnicowÄ… chrominancji" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Napisy kodowane" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Napisy otwarte" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Kolory podstawowe" @@ -517,17 +575,17 @@ msgstr "Kolory podstawowe" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Zakres barw" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Specyfika przenoszenia barw" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "PrzestrzeÅ„ kolorów" @@ -535,15 +593,15 @@ msgstr "PrzestrzeÅ„ kolorów" msgid "Combine DCPs" msgstr "Połącz paczki DCP" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Obliczanie danych" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Obliczanie danych" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "Gratulacje!" @@ -561,19 +619,19 @@ msgstr "typ materiaÅ‚u" msgid "Content sample rate" msgstr "CzÄ™stotliwość dźwiÄ™ku dodanego materiaÅ‚u" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "ÅÄ…czone pliki muszÄ… jednoczeÅ›nie posiadać lub nie posiadać dźwiÄ™ku" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "ÅÄ…czone pliki muszÄ… jednoczeÅ›nie posiadać lub nie posiadać napisów" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "ÅÄ…czone pliki muszÄ… jednoczeÅ›nie posiadać lub nie posiadać obrazu" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -584,12 +642,12 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "ÅÄ…czone pliki muszÄ… wykorzystywać wideo w caÅ‚oÅ›ci albo wcale." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "ÅÄ…czone pliki muszÄ… mieć takie same ustawienia w sekcji \"wypal napisy\"." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "ÅÄ…czone pliki muszÄ… mieć takie same ustawienia w sekcji \"użyj napisów\"." @@ -628,7 +686,7 @@ msgstr "ÅÄ…czone pliki muszÄ… mieć takie same ustawienia rozdzielczoÅ›ci." msgid "Content to be joined must have the same fades." msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam efekt zanikania obrazu." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rozmiar obrysu zewnÄ™trznego." @@ -636,32 +694,32 @@ msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rozmiar obrysu zewnÄ™trznego." msgid "Content to be joined must have the same picture size." msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rozmiar obrazu." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość X przesuniÄ™cia napisów." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość X rozmiaru napisów." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość Y przesuniÄ™cia napisów." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość Y rozmiaru napisów." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" "ÅÄ…czone pliki muszÄ… mieć taki same czasy rozjaÅ›nienia/wyciemnienia napisów." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "ÅÄ…czone pliki muszÄ… mieć takie odstÄ™py miÄ™dzy liniami napisów." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… liczbÄ™ kl/s" @@ -669,23 +727,23 @@ msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… liczbÄ™ kl/s" msgid "Content to be joined must have the same video frame type." msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rodzaj klatek." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "ÅÄ…czone pliki muszÄ… korzystać z tej samej Å›cieżki DCP." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "ÅÄ…czone pliki muszÄ… mieć takie same czcionki." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "ÅÄ…czone pliki muszÄ… używać tego samego źródÅ‚a napisów." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam jÄ™zyk napisów." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Rozdzielczość pliku video %1x%2" @@ -693,14 +751,6 @@ msgstr "Rozdzielczość pliku video %1x%2" msgid "Copy DCP to TMS" msgstr "Kopiuj DCP do TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "KopiujÄ™ plik wideo ze starej paczki" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "KopiujÄ™ plik wideo do paczki DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Nie można połączyć z serwerem %1 (%2)" @@ -717,20 +767,21 @@ msgstr "Nie można zdekodować pliku JPEG2000 %1 (%2)" msgid "Could not decode image (%1)" msgstr "Nie można zdekodować pliku obrazu (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Nie udaÅ‚o siÄ™ otworzyć pobranego archiwum ZIP" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Nie można nasÅ‚uchiwać serwerów zdalnych. Być może jest uruchomione drugie " "okno DCP-o-matic." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Nie udaÅ‚o siÄ™ otworzyć %1" @@ -738,19 +789,19 @@ msgstr "Nie udaÅ‚o siÄ™ otworzyć %1" msgid "Could not open %1 to send" msgstr "Nie udaÅ‚o siÄ™ otworzyć %1 do wysÅ‚ania" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Nie udaÅ‚o siÄ™ otworzyć pobranego archiwum ZIP" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Nie udaÅ‚o siÄ™ otworzyć pobranego archiwum ZIP (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Nie udaÅ‚o siÄ™ otworzyć pliku do zapisu" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "Nie udaÅ‚o siÄ™ otworzyć pliku wyjÅ›ciowego %1 (%2)" @@ -766,19 +817,19 @@ msgstr "Nie udaÅ‚o siÄ™ rozpocząć transferu" msgid "Could not write to remote file (%1)" msgstr "Nie udaÅ‚o siÄ™ zapisać do pliku zdalnego (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX główny" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX kolejny" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -790,7 +841,7 @@ msgstr "1.85 (Flat)" msgid "DCI Scope" msgstr "2.35 (Scope)" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "Napisy DCP XML" @@ -807,50 +858,35 @@ msgstr "DCP bÄ™dzie odtwarzany z %.1f%% prÄ™dkoÅ›ci.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP bÄ™dzie używaÅ‚ co drugiej klatki materiaÅ‚u.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic nie mógÅ‚ otworzyć pliku %1 (%2). Plik nie istnieje lub jest w " -"niewspieranym formacie." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"Program DCP-o-matic musiaÅ‚ zmienić ustawienia Projektu, żeby DCP mógÅ‚ zostać " -"oznaczony jako OV. ProszÄ™ sprawdzić, czy ustawienia sÄ… zgodne z " -"oczekiwanymi." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"Program DCP-o-matic musiaÅ‚ zmienić ustawienia Projektu, żeby liczba klatek/s " -"Projektu byÅ‚a taka sama jak w pliku Atmos." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic nie wspiera już filtru `%1', wiÄ™c zostaÅ‚ on wyłączony." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "Powiadomienie DCP-o-matic" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 lub AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Usuwanie przeplotu" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -862,7 +898,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Szanowni,\n" "\n" @@ -876,11 +912,15 @@ msgstr "" "Z poważaniem,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 lub CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Pobieranie nie powiodÅ‚o siÄ™ (%1 błąd %2)" @@ -905,19 +945,19 @@ msgstr "WyÅ›lij KDMy do %2" msgid "Email notification" msgstr "Powiadomienie email" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "WyÅ›lij raport błędu" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "WyÅ›lij raport błędu do %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Kodowanie" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Odcinek" @@ -925,20 +965,20 @@ msgstr "Odcinek" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Błąd w pliku napisów: jest %1, powinno być %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Błąd: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Analizowanie napisów" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Sprawdzam audio, napisy i napisy kodowane" @@ -950,15 +990,15 @@ msgstr "Analizowanie materiaÅ‚u" msgid "Examining subtitles" msgstr "Analizowanie napisów" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Analizowanie napisów i napisów kodowanych" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "Wypakowywanie" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -966,52 +1006,52 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Błąd uwierzytelniania na serwerze (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Nie udaÅ‚o siÄ™ przygotować DCP." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Nie udaÅ‚o siÄ™ wysÅ‚ać wiadomoÅ›ci" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "PeÅ‚nometrażowy" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Nazwa pliku" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Nazwa pliku" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "Pliki ulegÅ‚y zmianie od ostatniego otwarcia Projektu." -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Obliczanie czasu trwania" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Liczba kl/s" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "PiÄ…tek" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "PeÅ‚ny" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "PeÅ‚ny (0-%1)" @@ -1036,35 +1076,35 @@ msgstr "PeÅ‚na dÅ‚ugość klatek obrazu przy czÄ™stotliwoÅ›ci DCP" msgid "Full length in video frames at content rate" msgstr "PeÅ‚na dÅ‚ugość klatek obrazu przy czÄ™stotliwoÅ›ci materiaÅ‚u" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Zachowaj przejÅ›cia tonalne" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "KanaÅ‚ dla osób niedosÅ‚yszÄ…cych" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Dla niedosÅ‚yszÄ…cych" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Odszumianie 3D wysokiej jakoÅ›ci" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Przerzuć w poziomie" @@ -1072,19 +1112,19 @@ msgstr "Przerzuć w poziomie" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB lub sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "Przy 25 FPS powinieneÅ› zmienić standard paczki DCP na SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1095,15 +1135,15 @@ msgstr "" "użycie standardu Interlop jest uzasadnione. Zaleca siÄ™ wybranie standardu " "SMPTE z zakÅ‚adki „DCP†dla tego Projektu." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1111,73 +1151,74 @@ msgstr "" "Zaleca siÄ™, aby pierwszy napis pojawiÅ‚ siÄ™ co najmniej 4 sekundy przed " "czasem poczÄ…tkowym paczki DCP, by ten byÅ‚ widoczny." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "WystÄ…piÅ‚ nieznany błąd." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "WysyÅ‚anie klucza: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Usuwanie przeplotu metodÄ… Kernel" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Lewy" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Lewy centralny" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Lewy tylny surround" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Lewy surround" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "DÅ‚ugość" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (subwoofer)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Ograniczony" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Ograniczony (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Liniowy" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logarytmiczny (skala 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logarytmiczny (skala 316:1)" @@ -1185,7 +1226,7 @@ msgstr "Logarytmiczny (skala 316:1)" msgid "Lost communication between main and writer processes" msgstr "Brak komunikacji miÄ™dzy procesem głównym i procesem zapisu" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1193,24 +1234,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Dekoder Mid-side" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Różne" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "NieprawidÅ‚owa liczba kanałów dźwiÄ™kowych w DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "NieprawidÅ‚owe próbkowanie Å›cieżek dźwiÄ™kowych w DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "NieprawidÅ‚owe liczby kl/s w DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "NieprawidÅ‚owe rozmiary plików obrazu w DCP" @@ -1218,19 +1259,19 @@ msgstr "NieprawidÅ‚owe rozmiary plików obrazu w DCP" msgid "Missing required setting %1" msgstr "Brakuje wymaganych ustawieÅ„ %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "PoniedziaÅ‚ek" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Usuwanie przeplotu z kompensacjÄ… ruchu" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Nie znaleziono plików CPL w paczce DCP." @@ -1244,77 +1285,91 @@ msgstr "Brak konfiguracji serwera email w Preferencjach" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Brak konfiguracji serwera email w Preferencjach" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "W folderze nie znaleziono obsÅ‚ugiwanych plików obrazów." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Redukcja szumu" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Brak" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (czas trwania %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (czas trwania %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "Tylko pierwszy z łączonych plików może być przyciÄ™ty na poczÄ…tku." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Tylko ostatni z łączonych plików może być przyciÄ™ty na koÅ„cu." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Napisy kodowane" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Napisy otwarte" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 +#, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Otwórz Projekt w programie DCP-o-matic, sprawdź ustawienia, a nastÄ™pnie " "zapisz je przed ponownÄ… próbÄ…." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Orientacja" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "ZabrakÅ‚o pamiÄ™ci RAM" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Odszumianie DWT" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"ZgÅ‚oÅ› ten problem używajÄ…c menu „Pomoc -> ZgÅ‚oÅ› błąd albo napisz maila do " +"carl@dcpomatic.comâ€" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Umowa" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Przygotowany na liczbÄ™ kl/s" @@ -1322,93 +1377,93 @@ msgstr "Przygotowany na liczbÄ™ kl/s" msgid "Programming error at %1:%2 %3" msgstr "Błąd programowania w linii %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "MateriaÅ‚ promocyjny" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Komunikat publiczny" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Klasyfikacja" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Prawy" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Prawy centralny" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Prawy tylny surround" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Prawy surround" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Obróć o 90 stopni przeciwnie do ruchu wskazówek zegara" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Obróć o 90 stopni zgodnie ze wskazówkami zegara" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1419,23 +1474,23 @@ msgstr "" "pierwszej klatki listy pÅ‚ac (FFMC). Zaleca siÄ™ dodanie tych znaczników " "wciskajÄ…c przycisk „Znaczniki†w zakÅ‚adce „DCPâ€." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 dla systemów 10-, 12-, 14- i 16-bitowych" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1448,27 +1503,27 @@ msgstr "Błąd SSH [%1]" msgid "SSH error [%1] (%2)" msgstr "Błąd SSH [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Sobota" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "SkanujÄ™ pliki obrazu" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "WysyÅ‚am wiadomość" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Krótkometrażowy" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Podpis" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Rozdzielczość" @@ -1476,11 +1531,11 @@ msgstr "Rozdzielczość" msgid "Some audio will be resampled to %1Hz" msgstr "NastÄ…pi zmiana czÄ™stotliwoÅ›ci niektórych Å›cieżek dźwiÄ™kowych do %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "Niektóre pliki ulegÅ‚y zmianie od ostatniego otwarcia Projektu." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1501,7 +1556,7 @@ msgstr "" "\n" "Pliki te zostanÄ… ponownie zbadane, sprawdź ustawienia." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." @@ -1509,7 +1564,7 @@ msgstr "" "Niektóre z napisów dzielÄ… siÄ™ na wiÄ™cej niż %1 linii, dlatego zostanÄ… " "przyciÄ™te." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1532,11 +1587,11 @@ msgstr "Część twoich materiałów wymaga klucza KDM" msgid "Some of your content needs an OV" msgstr "Część twoich materiałów wymaga wersji OV paczki DCP" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Stereo" @@ -1549,19 +1604,19 @@ msgstr "Miksuj 2.0 do 5.1 wersja A" msgid "Stereo to 5.1 up-mixer B" msgstr "Miksuj 2.0 do 5.1 wersja B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Niedziela" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Zapowiedź" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Filtr Telecine" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Testowy" @@ -1583,25 +1638,25 @@ msgstr "Certyfikat jest nieprawidÅ‚owy" msgid "The certificate chain for signing is invalid (%1)" msgstr "Certyfikat jest nieprawidÅ‚owy (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1611,7 +1666,7 @@ msgstr "" "3D. Ustaw rodzaj wideo na 2D. Możesz stworzyć paczkÄ™ DCP 3D zawierajÄ…cÄ… " "ten materiaÅ‚ zaznaczajÄ…c opcjÄ™ 3D w zakÅ‚adce „DCPâ€." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1619,23 +1674,37 @@ msgstr "" "Dysk, na którym zapisany jest Projekt ma maÅ‚o wolnego miejsca. Zwolnij " "miejsce na dysku i spróbuj ponownie." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Plik %1 zostaÅ‚ przesuniÄ™ty o 2% milisekund wczeÅ›niej." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Plik %1 zostaÅ‚ przesuniÄ™ty o 2% milisekund później." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "DÅ‚ugość pliku %1 zostaÅ‚a skrócona o %2 milisekund." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "DÅ‚ugość pliku %1 zostaÅ‚a wydÅ‚użona o %2 milisekund." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1650,11 +1719,11 @@ msgstr "" "s paczki DCP bliższej tej używanej w twoich materiaÅ‚ach, zakÅ‚adajÄ…c, że " "docelowy serwer wspiera wybranÄ… liczbÄ™ klatek/s." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Paczka DCP nie zawiera wideo" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1663,35 +1732,38 @@ msgstr "" "Brakuje pamiÄ™ci, aby wykonać tÄ™ operacjÄ™. JeÅ›li twój system jest 32-bitowy, " "spróbuj zmniejszyć liczbÄ™ wÄ…tków kodujÄ…cych w Preferencjach." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" "Ten klucz KDM jest kompatybilny z programem DCP-o-matic, ale zawarty " "certyfikat jest błędny." -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "" "Ten klucz KDM jest niekompatybilny z certyfikatem deszyfrujÄ…cym programu DCP-" "o-matic." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "Obecny błąd wystÄ…piÅ‚, ponieważ używasz 32-bitowej wersji programu DCP-o-" "matic i chcesz wykorzystać zbyt dużo wÄ…tków kodujÄ…cych. Zmniejsz 'LiczbÄ™ " "wÄ…tków używanych przez DCP-o-matic' w zakÅ‚adce „Ogólne†Preferencji i " "spróbuj ponownie." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "Obecny błąd wystÄ…piÅ‚, ponieważ używasz 32-bitowej wersji programu DCP-o-" "matic. Zainstaluj ponownie program w wersji 64-bitowej i spróbuj ponownie." @@ -1705,45 +1777,47 @@ msgstr "" "klikajÄ…c prawym przyciskiem na wybranych materiaÅ‚ach i wybierajÄ…c opcjÄ™ " "\"Dodaj KDM\"." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Projekt zostaÅ‚ utworzony przy pomocy nowszej wersji DCP-o-matic i nie może " "być otwarty w tej wersji. Przepraszamy!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Projekt zostaÅ‚ utworzony przy pomocy starszej wersji DCP-o-matic i nie może " "być otwarty w tej wersji. Musisz stworzyć nowy Projekt i ponownie dodać " "materiaÅ‚y i ustawienia. Przepraszamy!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Czwartek" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Tekst z kodami czasowymi" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Zwiastun" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Transkodowanie %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "PrzejÅ›cie" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Wtorek" @@ -1751,7 +1825,7 @@ msgstr "Wtorek" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Archiwum ZIP zawiera nieobsÅ‚ugiwane pliki" @@ -1759,35 +1833,35 @@ msgstr "Archiwum ZIP zawiera nieobsÅ‚ugiwane pliki" msgid "Unexpected image type received by server" msgstr "Serwer otrzymaÅ‚ nieobsÅ‚ugiwany typ obrazu" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Nieznany" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Nieznany błąd" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Nieznany rodzaj pliku dźwiÄ™kowego (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Wyostrzanie i filtr Gausowski" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "NieokreÅ›lony" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Nowy" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Nieużywany" @@ -1799,7 +1873,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1807,11 +1881,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Sprawdź DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Przerzuć w pionie" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Dla niedowidzÄ…cych" @@ -1819,23 +1893,23 @@ msgstr "Dla niedowidzÄ…cych" msgid "Waiting" msgstr "Czekam" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Filtr Telecine" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Åšroda" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "I jeszcze jeden filtr usuwania przeplotu" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1846,7 +1920,7 @@ msgstr "" "obsÅ‚ugiwana przez wszystkie projektory. Zaleca siÄ™ zmianÄ™ liczby klatek/s " "na wartość %2 FPS." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1856,7 +1930,7 @@ msgstr "" "obsÅ‚ugiwana przez wszystkie projektory. Rozważ zmianÄ™ liczby klatek/s na " "wartość %2 FPS." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1865,19 +1939,11 @@ msgstr "" "przez wszystkie projektory. Paczka może nie być kompatybilna ze wszystkimi " "systemami." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Używasz w Projekcie materiałów 3D, jednak DCP jest ustawiony na 2D. Ustaw " -"opcje DCP na 3D, jeÅ›li chcesz odtwarzać go na systemach 3D (jak Real-D, " -"MasterImage itd.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Używasz wbudowanego miksera stereo-do-5.1. Nie jest jeszcze w peÅ‚ni " @@ -1885,7 +1951,16 @@ msgstr "" "źródÅ‚owego. JeÅ›li chcesz go użyć, zaleca siÄ™, by sprawdzić paczkÄ™ DCP w " "kinie i upewnić siÄ™, że dźwiÄ™k jest poprawny." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Używasz w Projekcie materiałów 3D, jednak DCP jest ustawiony na 2D. Ustaw " +"opcje DCP na 3D, jeÅ›li chcesz odtwarzać go na systemach 3D (jak Real-D, " +"MasterImage itd.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1893,7 +1968,7 @@ msgstr "" "Używasz %1 plików, które zdajÄ… siÄ™ być plikami .vob z DVD. PowinieneÅ› je " "połączyć w jeden plik, by mieć pewność pÅ‚ynnych przejść kolejnych fragmentów." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1901,7 +1976,7 @@ msgstr "" "Co najmniej jeden z twoich materiałów zawiera dźwiÄ™k Atmos, a materiaÅ‚y majÄ… " "różne wartoÅ›ci klatek/s. Musisz usunąć materiaÅ‚ z dźwiÄ™kiem Atmos." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1909,7 +1984,7 @@ msgstr "" "Projekt zawiera nakÅ‚adajÄ…ce siÄ™ napisy, które nie sÄ… dozwolone w standardzie " "Interlop. ZmieÅ„ standard paczki na SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1921,26 +1996,27 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Musisz najpierw dodać materiaÅ‚y zanim utworzysz DCP" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "Docelowa paczka DCP ma mniej niż 6 kanałów dźwiÄ™kowych. To może powodować " "problemy z odtwarzaniem na niektórych serwerach. Twoje DCP może mieć 6 " "kanałów dźwiÄ™kowych. Dodane materiaÅ‚y mogÄ… mieć mniej kanałów dźwiÄ™kowych, " "DCP-o-matic wypeÅ‚ni nieużywane kanaÅ‚y ciszÄ…." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1949,7 +2025,7 @@ msgstr "" "problemy z odtwarzaniem na niektórych serwerach. JeÅ›li to możliwe, ustaw " "kontener DCP na Flat lub Scope." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1957,14 +2033,14 @@ msgstr "" "Poziom dźwiÄ™ku jest bardzo wysoki (%1). PowinieneÅ› zmniejszyć gÅ‚oÅ›ność " "materiaÅ‚u dźwiÄ™kowego." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "Twój Projekt zawiera materiaÅ‚ wideo, który nie jest wyrównany do granicy " "obrazu." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1972,21 +2048,21 @@ msgstr "" "Twój Projekt zawiera skadrowany materiaÅ‚ wideo, który nie jest wyrównany do " "granicy obrazu." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[ruchome obrazy]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[stopklatka]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[napisy]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_rolka%1" @@ -2018,11 +2094,11 @@ msgstr "kopiowanie %1" msgid "could not find stream information" msgstr "nie udaÅ‚o siÄ™ znaleźć informacji o strumieniu" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "nie udaÅ‚o siÄ™ przenieść materiałów Atmos do DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "nie udaÅ‚o siÄ™ przenieść dźwiÄ™ku do DCP (%1)" @@ -2050,7 +2126,7 @@ msgstr "nie udaÅ‚o siÄ™ zapisać do pliku %1 (%2)" msgid "error during async_connect (%1)" msgstr "wystÄ…piÅ‚ błąd podczas async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "wystÄ…piÅ‚ błąd podczas async_read (%1)" @@ -2058,28 +2134,28 @@ msgstr "wystÄ…piÅ‚ błąd podczas async_read (%1)" msgid "error during async_write (%1)" msgstr "wystÄ…piÅ‚ błąd podczas async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "klatek na sekundÄ™" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "liczba kl/s w Projekcie i DCP różniÄ… siÄ™." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" @@ -2087,35 +2163,45 @@ msgstr "" "nowo." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "ma rozdzielczość 2K, a film jest w 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "ma rozdzielczość 4K, a film jest w 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "jest ustawiony na Interop, podczas gdy docelowy DCP jest SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "jest ustawiony na SMPTE, podczas gdy docelowy DCP jest Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "inny materiaÅ‚ audio nakÅ‚ada siÄ™ na ten w DCP; usuÅ„ go." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "inny materiaÅ‚ audio nakÅ‚ada siÄ™ na ten w DCP; usuÅ„ go." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "inny materiaÅ‚ wideo nakÅ‚ada siÄ™ na ten w DCP; usuÅ„ go." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2124,16 +2210,16 @@ msgstr "" "rolek na 'podziel zgodnie z zawartoÅ›ciÄ… paczki' w zakÅ‚adce 'DCP'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "kontener ustawiony w Projekcie rożni siÄ™ od tej w DCP." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "min" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "przenoszenie" @@ -2142,7 +2228,7 @@ msgid "name" msgstr "nazwa" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2151,7 +2237,7 @@ msgstr "" "zapisany ponownie." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." @@ -2160,31 +2246,39 @@ msgstr "" "zapisana ponownie." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "stopklatka" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "inne napisy nakÅ‚adajÄ… siÄ™ na te w DCP; usuÅ„ je." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "nieznany" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "klatki obrazu" +#~ msgid "Copying old video file" +#~ msgstr "KopiujÄ™ plik wideo ze starej paczki" + +#~ msgid "Copying video file into DCP" +#~ msgstr "KopiujÄ™ plik wideo do paczki DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "Powiadomienie DCP-o-matic" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "inne napisy nakÅ‚adajÄ… siÄ™ na te w DCP; usuÅ„ je." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "nie posiada napisów kodowanych w żadnej rolce." @@ -2195,13 +2289,6 @@ msgstr "klatki obrazu" #~ msgstr "nie ma dźwiÄ™ku w żadnej rolce." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "ZgÅ‚oÅ› ten problem używajÄ…c menu „Pomoc -> ZgÅ‚oÅ› błąd albo napisz maila do " -#~ "carl@dcpomatic.comâ€" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "Twój domyÅ›lny kontener byÅ‚ niestandardowy i zostaÅ‚ zmieniony na Flat " diff --git a/src/lib/po/pt_BR.po b/src/lib/po/pt_BR.po index 6abd45555..b0f82d00a 100644 --- a/src/lib/po/pt_BR.po +++ b/src/lib/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2018-01-15 16:19-0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.5\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Taxa de quadros do conteúdo %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Redimensionado para %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Proporções de exibição %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Preenchido com barras pretas %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Redimensionado para %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " em %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -94,39 +94,82 @@ msgstr "" "Duração: $LENGTH\n" "Tamanho: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Dolby Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [audio]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [movie]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [video]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"O DCP-o-matic não pôde abrir o arquivo %1 (%2). Talvez o arquivo não exista " +"ou tenha um formato não suportado." + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" +"O DCP-o-matic não aceita mais o filtro `%1', portanto ele foi desativado." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +msgid "%1 notification" +msgstr "" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", aspect ratio do pixel %.2f:1" @@ -163,11 +206,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Tela cheia)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -180,49 +223,50 @@ msgstr "2.35 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "Redutor de ruÃdo 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 faltando; terminando em %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Alguns projetores apresentam problemas no playback de DCPs com bit-rates " @@ -230,22 +274,22 @@ msgstr "" "esse bit-rate produz conteúdo que é visualmente quase indistinguÃvel de " "conteúdos encodados no limite de 250Mbits/s." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Comercial" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -257,7 +301,7 @@ msgstr "" "superior e inferior do frame Flat. Talvez seja mais indicado criar um DCP " "Scope, escolhendo Scope (2.39:1) no tab \"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -269,7 +313,7 @@ msgstr "" "do frame Scope. Talvez seja mais indicado criar um DCP Flat, escolhendo Flat " "(1.85:1) no tab \"DCP\"." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Ocorreu um erro de processamento com o arquivo %1." @@ -278,59 +322,59 @@ msgstr "Ocorreu um erro de processamento com o arquivo %1." msgid "Analysing audio" msgstr "Analisar áudio" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 #, fuzzy msgid "Analysing subtitles" msgstr "Buscando legendas" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -349,73 +393,73 @@ msgstr "O áudio será convertido para %1Hz" msgid "Audio will not be resampled" msgstr "O áudio não terá sua taxa de amostragem alterada" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "Gama de cores extendida BT1361" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 com luminância constante" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 para sistema de 10-bits" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 para sistema de 12-bits" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 com luminância não-constante" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits por pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 #, fuzzy msgid "Bob Weaver Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter (YADIF)" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Cancelado" @@ -428,11 +472,11 @@ msgstr "não pode conter barras" msgid "Cannot handle pixel format %1 during %2" msgstr "ImpossÃvel processar formato de pixel %1 durante %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "" -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Central" @@ -440,7 +484,7 @@ msgstr "Central" msgid "Channels" msgstr "Canais" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -449,30 +493,35 @@ msgstr "" msgid "Checking content" msgstr "Examinar conteúdo" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Verificando dados existentes de imagem" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 #, fuzzy msgid "Chroma-derived constant luminance" msgstr "BT2020 com luminância constante" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 #, fuzzy msgid "Chroma-derived non-constant luminance" msgstr "BT2020 com luminância não-constante" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 #, fuzzy msgid "Closed captions" msgstr "Redução de ruÃdo" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Legendas em texto" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Primárias de cor" @@ -486,17 +535,17 @@ msgstr "Primárias de cor" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Gama de cores" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "CaracterÃstica de transferência de cores" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Espaço de cor" @@ -504,15 +553,15 @@ msgstr "Espaço de cor" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Computando processamento" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Computando processamento" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -530,23 +579,23 @@ msgstr "tipo de conteúdo" msgid "Content sample rate" msgstr "Taxa de amostragem de áudio do conteúdo" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" "Todos os conteúdos a serem concatenados devem conter ou não conter áudio" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 #, fuzzy msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Todos os conteúdos a serem concatenados devem conter ou não conter legendas" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" "Todos os conteúdos a serem concatenados devem conter ou não conter vÃdeo" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 #, fuzzy msgid "" "Content to be joined must both be main subtitle languages or both additional." @@ -559,13 +608,13 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "O conteúdo a ser concatenado deve ter a mesma taxa de quadros" -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "O conteúdo a ser concatenado deve ter a mesma configuração de 'queimar " "legendas na imagem'." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "O conteúdo a ser concatenado deve ter a mesma configuração em 'usar " @@ -611,7 +660,7 @@ msgid "Content to be joined must have the same fades." msgstr "" "O conteúdo a ser concatenado deve ter as mesmas 'fade in' e 'fade out'." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "O conteúdo a ser concatenado deve ter a mesma largura de borda." @@ -619,41 +668,41 @@ msgstr "O conteúdo a ser concatenado deve ter a mesma largura de borda." msgid "Content to be joined must have the same picture size." msgstr "O conteúdo a ser concatenado deve ter o mesmo tamanho de imagem." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" "O conteúdo a ser concatenado deve ter o mesmo reposicionamento de legenda no " "eixo X." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" "O conteúdo a ser concatenado deve ter o mesmo redimensionamento de legenda " "no eixo X." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" "O conteúdo a ser concatenado deve ter o mesmo reposicionamento de legenda no " "eixo Y." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "" "O conteúdo a ser concatenado deve ter o mesmo redimensionamento de legenda " "no eixo Y." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "O conteúdo a ser concatenado deve ter os mesmos fades de legendas." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "O conteúdo a ser concatenado deve ter o mesmo espaçamento de linha de " "legenda." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "O conteúdo a ser concatenado deve ter a mesma taxa de quadros" @@ -661,25 +710,25 @@ msgstr "O conteúdo a ser concatenado deve ter a mesma taxa de quadros" msgid "Content to be joined must have the same video frame type." msgstr "O conteúdo a ser concatenado deve ter o mesmo tipo de quadro." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 #, fuzzy msgid "Content to be joined must use the same DCP track." msgstr "O conteúdo a ser concatenado deve usar as mesmas fontes." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "O conteúdo a ser concatenado deve usar as mesmas fontes." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "O conteúdo a ser concatenado deve usar a mesma faixa de legendas." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 #, fuzzy msgid "Content to be joined must use the same text language." msgstr "O conteúdo a ser concatenado deve usar as mesmas fontes." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "O conteúdo tem %1x%2" @@ -687,15 +736,6 @@ msgstr "O conteúdo tem %1x%2" msgid "Copy DCP to TMS" msgstr "Copiar DCP para TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -#, fuzzy -msgid "Copying video file into DCP" -msgstr "Tamanhos de conteúdo inconsistentes no DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "ImpossÃvel conectar com o servidor %1 (%2)" @@ -713,20 +753,21 @@ msgstr "ImpossÃvel decodificar arquivo JPEG2000 %1 (%2)" msgid "Could not decode image (%1)" msgstr "ImpossÃvel decodificar arquivo de imagem (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "ImpossÃvel abrir arquivo ZIP baixado" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "ImpossÃvel buscar servidores de codificação remotos. Talvez haja outra " "instância de DCP-o-matic aberta." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "ImpossÃvel abrir %1" @@ -734,21 +775,21 @@ msgstr "ImpossÃvel abrir %1" msgid "Could not open %1 to send" msgstr "ImpossÃvel abrir %1 para enviar" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "ImpossÃvel abrir arquivo ZIP baixado" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 #, fuzzy msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "ImpossÃvel abrir arquivo ZIP baixado" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 #, fuzzy msgid "Could not open file for writing" msgstr "não foi possÃvel abrir o arquivo %1 para gravação (%2)" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 #, fuzzy msgid "Could not open output file %1 (%2)" msgstr "não foi possÃvel modificar o arquivo %1 (%2)" @@ -765,19 +806,19 @@ msgstr "ImpossÃvel iniciar transferência" msgid "Could not write to remote file (%1)" msgstr "ImpossÃvel modificar arquivo remoto (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX primário" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX secundário" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -789,7 +830,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "Legendas XML do DCP" @@ -806,46 +847,35 @@ msgstr "O DCP vai ser exibido a %.1f%% da velocidade do conteúdo.\n" msgid "DCP will use every other frame of the content.\n" msgstr "O DCP vai utilizar frames intercalados do conteúdo.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"O DCP-o-matic não pôde abrir o arquivo %1 (%2). Talvez o arquivo não exista " -"ou tenha um formato não suportado." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." -msgstr "" - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "" -"O DCP-o-matic não aceita mais o filtro `%1', portanto ele foi desativado." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Desentrelaçamento de conteúdo" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -857,7 +887,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Querido projecionista,\n" "\n" @@ -871,12 +901,16 @@ msgstr "" "Atenciosamente,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 #, fuzzy msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 e CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 #, fuzzy msgid "Download failed (%1 error %2)" msgstr "Download falhou (%1/%2 erro %3)" @@ -902,19 +936,19 @@ msgstr "Enviar KDMs por email para %1" msgid "Email notification" msgstr "" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Enviar relatório de erros por email" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Enviar relatório de erros por email para %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Codificação" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -922,20 +956,20 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Erro no arquivo de legenda:: %1 encontrado quando se esperava %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Erro: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Buscando legendas" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -949,17 +983,17 @@ msgstr "Examinar conteúdo" msgid "Examining subtitles" msgstr "Buscando legendas" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Buscando legendas" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 #, fuzzy msgid "Extracting" msgstr "Classificação" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -967,54 +1001,54 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Falha na autenticação com o servidor (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 #, fuzzy msgid "Failed to encode the DCP." msgstr "Falha no envio de email (%1)" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 #, fuzzy msgid "Failed to send email" msgstr "Falha no envio de email (%1)" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Longa-metragem" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Nome do arquivo" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Nome do arquivo" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Filme" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Buscando duração" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Taxa de quadros" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Full" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Full (0-%1)" @@ -1038,35 +1072,35 @@ msgstr "Duração total em quadros de conteúdo na taxa do DCP" msgid "Full length in video frames at content rate" msgstr "Duração total em quadros de conteúdo na taxa do conteúdo" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gama 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gama 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Removedor de posterização em gradações" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Trilha deficientes auditivos" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Redutor de ruÃdo 3D de alta qualidade" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "" @@ -1074,106 +1108,107 @@ msgstr "" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB ou sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Erro desconhecido." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "Entrega de KDM: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Desentrelaçador (kernel)" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Esquerdo" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Esquerdo central" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Surround traseiro esquerdo" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Surround esquerdo" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Duração" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limitado" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Limitado (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Linear" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "LogarÃtmico (faixa 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "LogarÃtmico (faixa 316:1)" @@ -1181,7 +1216,7 @@ msgstr "LogarÃtmico (faixa 316:1)" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1189,24 +1224,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Decodificador Mid-Side (MS)" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Misc" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Contagem de canais inconsistente no DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Taxas de amostragem de áudio inconsistentes no DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Taxas de quadros inconsistentes no DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Tamanhos de conteúdo inconsistentes no DCP" @@ -1215,19 +1250,19 @@ msgstr "Tamanhos de conteúdo inconsistentes no DCP" msgid "Missing required setting %1" msgstr "falta configuração obrigatória %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Desentrelaçador com compensação de movimento" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "" @@ -1241,77 +1276,87 @@ msgstr "Nenhum servidor de email configurado nas preferências" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Nenhum servidor de email configurado nas preferências" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Não foram encontradas imagens válidas na pasta." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Redução de ruÃdo" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Nenhum" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (executou por %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (executou por %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Apenas o primeiro conteúdo a ser concatenado pode ter um corte de inÃcio." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Apenas o último conteúdo a ser concatenado pode ter um corte de fim." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Redução de ruÃdo" + +#: src/lib/text_type.cc:79 #, fuzzy msgid "Open subtitles" msgstr "Legendas em texto" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Sem memória" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Redução de ruÃdo tipo overcomplete wavelet" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Comunicado" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Preparado para frame rate de vÃdeo" @@ -1319,116 +1364,116 @@ msgstr "Preparado para frame rate de vÃdeo" msgid "Programming error at %1:%2 %3" msgstr "Erro de programação em %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Anúncio de Utilidade Pública" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Classificação" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Direito" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Direito central" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Surround traseiro direito" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Surround direito" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 para sistemas de 10, 12, 14 e 16 bits" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1443,27 +1488,27 @@ msgstr "SSH erro (%1)" msgid "SSH error [%1] (%2)" msgstr "SSH erro (%1)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Processando arquivos de imagem" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Enviando email" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Curta-metragem" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Tamanho" @@ -1471,11 +1516,11 @@ msgstr "Tamanho" msgid "Some audio will be resampled to %1Hz" msgstr "Alguns áudios serão reamostrados para %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1490,13 +1535,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1518,11 +1563,11 @@ msgstr "uma parte do seu conteúdo necessita de KDM" msgid "Some of your content needs an OV" msgstr "uma parte do seu conteúdo necessita de uma versão original (OV)" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Stereo" @@ -1535,19 +1580,19 @@ msgstr "Upmix de estéreo para 5.1, tipo A" msgid "Stereo to 5.1 up-mixer B" msgstr "Upmix de estéreo para 5.1, tipo B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Filtro de Telecine" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Teste" @@ -1567,32 +1612,32 @@ msgstr "A cadeia de certificado para assinatura é inválida" msgid "The certificate chain for signing is invalid (%1)" msgstr "A cadeia de certificado para assinatura é inválida (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1600,23 +1645,37 @@ msgstr "" "O drive que contém o filme está com pouco espaço. Libere espaço e tente " "novamente." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "O arquivo %1 foi adiantado %2 milissegundos." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "O arquivo %1 foi atrasado %2 milissegundos." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "O arquivo %1 foi cortado por %2 milissegundos a menos." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "O arquivo %1 foi cortado por %2 milissegundos a mais." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1625,11 +1684,11 @@ msgid "" "systems support your chosen DCP rate." msgstr "" -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1639,27 +1698,30 @@ msgstr "" "de 32 bits, tente reduzir o número de threads para codificação no tab Geral " "das Preferências, no menu Editar." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" +"Não há memória suficiente para esta ação. Se você está rodando em um sistema " +"de 32 bits, tente reduzir o número de threads para codificação no tab Geral " +"das Preferências, no menu Editar." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1670,48 +1732,50 @@ msgstr "" "Este arquivo é um KDM. KDMs devem ser adicionados a conteúdos DCPs clicando-" "se com o botão direito no conteúdo e escolhendo \"Adicionar KDM\"." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Este filme foi criado com uma versão mais recente de DCP-o-matic, e não pode " "ser carregado nesta versão. Desculpe-nos, e considere instalar uma versão " "mais recente!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Este filme foi criado com uma versão mais recente de DCP-o-matic, e não pode " "ser carregado nesta versão. Será necessário criar um novo Filme, readicionar " "seu conteúdo e refazer os ajustes. Desculpe-nos, e considere instalar uma " "versão mais recente!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 #, fuzzy msgid "Transcoding %1" msgstr "Transcodificar %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transicional" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "" @@ -1719,7 +1783,7 @@ msgstr "" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Conteúdo inesperado no arquivo ZIP" @@ -1727,36 +1791,36 @@ msgstr "Conteúdo inesperado no arquivo ZIP" msgid "Unexpected image type received by server" msgstr "Tipo de imagem inesperada recebida pelo servidor" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 #, fuzzy msgid "Unknown" msgstr "desconhecido" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Erro desconhecido" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Formato de amostragem de áudio desconhecido (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Unsharp Mask e Blur Gaussiano" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Não especificado" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Sem_TÃtulo" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Sem uso" @@ -1768,7 +1832,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1776,11 +1840,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Trilha descritiva" @@ -1788,24 +1852,24 @@ msgstr "Trilha descritiva" msgid "Waiting" msgstr "Aguardando" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 #, fuzzy msgid "Weave filter" msgstr "Filtro de Telecine" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter (YADIF)" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1816,7 +1880,7 @@ msgstr "" "suportada. Recomendamos a alteração da taxa de quadros do seu DCP para um " "valor padrão, ou que faça um DCP SMPTE." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1827,7 +1891,7 @@ msgstr "" "suportada. Recomendamos a alteração da taxa de quadros do seu DCP para um " "valor padrão, ou que faça um DCP SMPTE." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 #, fuzzy msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " @@ -1837,7 +1901,14 @@ msgstr "" "suportada. Recomendamos a alteração da taxa de quadros do seu DCP para um " "valor padrão, ou que faça um DCP SMPTE." -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 +msgid "" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." +msgstr "" + +#: src/lib/hints.cc:324 msgid "" "You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " "you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" @@ -1846,14 +1917,7 @@ msgstr "" "o DCP para 3D se quiser reprodução correta em um sistema 3D (por exemplo " "Real-D, MasterImage, etc.)" -#: src/lib/hints.cc:120 -msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." -msgstr "" - -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1861,19 +1925,19 @@ msgstr "" "Você tem %1 arquivos que parecem ser arquivos VOB de um DVD. É recomendado " "que você os concatene previamente para garantir uma reprodução sem cortes." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1886,22 +1950,22 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "você precisa adicionar conteúdo ao DCP antes de criá-lo" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -1911,21 +1975,21 @@ msgstr "" "alguns projetores. Se possÃvel, use apenas Flat ou Scope nos formatos de " "container." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "" "Seu nÃvel de áudio é muito alto (no %1). Reduza o ganho no conteúdo de áudio." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "Seu projeto contém conteúdo de vÃdeo que não foi alinhado a uma borda de " "quadro." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1933,21 +1997,21 @@ msgstr "" "Seu projeto contém conteúdo de vÃdeo cujo corte não foi alinhado a uma borda " "de quadro." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[sequência de imagens]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[imagem estática]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[legendas]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "" @@ -1979,12 +2043,12 @@ msgstr "copiando %1" msgid "could not find stream information" msgstr "não foi possÃvel encontrar informação do stream" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 #, fuzzy msgid "could not move atmos asset into the DCP (%1)" msgstr "não foi possÃvel mover os arquivos de áudio para o DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "não foi possÃvel mover os arquivos de áudio para o DCP (%1)" @@ -2015,7 +2079,7 @@ msgstr "não foi possÃvel modificar o arquivo %1 (%2)" msgid "error during async_connect (%1)" msgstr "erro durante async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "erro durante async_read (%1)" @@ -2023,69 +2087,77 @@ msgstr "erro durante async_read (%1)" msgid "error during async_write (%1)" msgstr "erro durante async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "quadros por segundo" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 #, fuzzy msgid "it has a different frame rate to the film." msgstr "O filme tem uma taxa de quadros diferente deste DCP." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 #, fuzzy msgid "it is 2K and the film is 4K." msgstr "O filme está configurado como Interop e este DCP é SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 #, fuzzy msgid "it is 4K and the film is 2K." msgstr "O filme está configurado como Interop e este DCP é SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 #, fuzzy msgid "it is Interop and the film is set to SMPTE." msgstr "O filme está configurado como Interop e este DCP é SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 #, fuzzy msgid "it is SMPTE and the film is set to Interop." msgstr "O filme está configurado como SMPTE e este DCP é Interop." -#: src/lib/dcp_content.cc:736 +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 #, fuzzy -msgid "it overlaps other audio content; remove the other content." +msgid "it overlaps other audio content." msgstr "Há outros conteúdos de áudio sobrepostos neste DCP. Remova-os." -#: src/lib/dcp_content.cc:700 +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 #, fuzzy -msgid "it overlaps other video content; remove the other content." +msgid "it overlaps other text content." +msgstr "Há outros conteúdos de áudio sobrepostos neste DCP. Remova-os." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "Há outros conteúdos de vÃdeo sobrepostos neste DCP. Remova-os." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 #, fuzzy msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " @@ -2095,17 +2167,17 @@ msgstr "" "'Rolos' em 'Dividir por arquivo de conteúdo'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 #, fuzzy msgid "its video frame size differs from the film's." msgstr "O tamanho de quadro do vÃdeo difere daquele do DCP." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "movendo" @@ -2114,46 +2186,49 @@ msgid "name" msgstr "nome" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "imagem estática" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "Há outros conteúdos de vÃdeo sobrepostos neste DCP. Remova-os." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "desconhecido" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "quadros de vÃdeo" #, fuzzy +#~ msgid "Copying video file into DCP" +#~ msgstr "Tamanhos de conteúdo inconsistentes no DCP" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "Há outros conteúdos de vÃdeo sobrepostos neste DCP. Remova-os." + +#, fuzzy #~ msgid "it does not have closed captions in all its reels." #~ msgstr "O DCP não tem som em todos os rolos." diff --git a/src/lib/po/pt_PT.po b/src/lib/po/pt_PT.po index 758500720..ca18d6de7 100644 --- a/src/lib/po/pt_PT.po +++ b/src/lib/po/pt_PT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DCP-o-matic PORTUGUESE (Portugal)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2016-03-19 18:19+0000\n" "Last-Translator: Tiago Casal Ribeiro <tiago@casalribeiro.com>\n" "Language-Team: \n" @@ -18,7 +18,7 @@ msgstr "" "X-Generator: Poedit 1.8.7.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, fuzzy, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "Cadência de fotogramas do conteúdo %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 #, fuzzy msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "Recortado para %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, fuzzy, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "Rácio do ecrã %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 #, fuzzy msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "Preenchido com negro para caber no contentor %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 #, fuzzy msgid "" "\n" @@ -63,18 +63,18 @@ msgstr "" "\n" "Redimensionado para %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr "" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr "" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -88,41 +88,83 @@ msgid "" "Size: $SIZE\n" msgstr "" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 #, fuzzy msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [áudio]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [movie]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 #, fuzzy msgid "%1 [video]" msgstr "%1 [movie]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"O DCP-o-matic não conseguiu abrir o ficheiro %1. Talvez não exista ou está " +"num formato inesperado." + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "O DCP-o-matic já não suporta o filtro '%1', e este foi desactivado." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +msgid "%1 notification" +msgstr "" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, fuzzy, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", rácio de pixeis %.2f:1" @@ -161,11 +203,11 @@ msgstr "" msgid "1.90 (Full frame)" msgstr "Full frame" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -178,68 +220,68 @@ msgstr "" msgid "2.39 (Scope)" msgstr "" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "Remoção de ruÃdo 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Publicidade" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -247,14 +289,14 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " "DCP's container to have the same ratio as your content." msgstr "" -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Ocorreu um erro ao manipular o ficheiro %1." @@ -263,59 +305,59 @@ msgstr "Ocorreu um erro ao manipular o ficheiro %1." msgid "Analysing audio" msgstr "Analizar áudio" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 #, fuzzy msgid "Analysing subtitles" msgstr "À procura das legendas" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -334,74 +376,74 @@ msgstr "A taxa de amostragem será alterada para %1Hz" msgid "Audio will not be resampled" msgstr "A taxa de amostragem será alterada" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "Gama de cores ampliada BT1361" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "Luminância constante BT2020" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 para um sistema de 10-bit" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 para um sistema de 12-bit" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "Luminância não constante BT2020" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bits por pixel" # It's a filter name, has no translation to portuguese. -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 #, fuzzy msgid "Bob Weaver Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Cancelado" @@ -414,11 +456,11 @@ msgstr "não pode conter barras" msgid "Cannot handle pixel format %1 during %2" msgstr "ImpossÃvel manusear o formato de pixeis %1 durante %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "" -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Central" @@ -426,7 +468,7 @@ msgstr "Central" msgid "Channels" msgstr "Canais" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -435,30 +477,35 @@ msgstr "" msgid "Checking content" msgstr "Examinar conteúdo" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "A verificar dados de imagem existentes" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 #, fuzzy msgid "Chroma-derived constant luminance" msgstr "Luminância constante BT2020" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 #, fuzzy msgid "Chroma-derived non-constant luminance" msgstr "Luminância não constante BT2020" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 #, fuzzy msgid "Closed captions" msgstr "Redução de ruÃdo" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Legendas de texto" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Cores preliminares" @@ -472,17 +519,17 @@ msgstr "Cores preliminares" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Gama de cores" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "CaracterÃstica de transferência de cores" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Espaço de cor" @@ -490,16 +537,16 @@ msgstr "Espaço de cor" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "A processar o resumo" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 #, fuzzy msgid "Computing digests" msgstr "A processar o resumo" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -517,22 +564,22 @@ msgstr "tipo de conteúdo" msgid "Content sample rate" msgstr "Cadência de fotogramas do conteúdo de áudio" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 #, fuzzy msgid "Content to be joined must all have or not have audio" msgstr "O conteúdo a ser unido deve ter o mesmo ganho de áudio." -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 #, fuzzy msgid "Content to be joined must all have or not have subtitles or captions" msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas." -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 #, fuzzy msgid "Content to be joined must all have or not have video" msgstr "O conteúdo a ser unido deve ter os mesmos fades." -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 #, fuzzy msgid "" "Content to be joined must both be main subtitle languages or both additional." @@ -543,12 +590,12 @@ msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas." msgid "Content to be joined must have all its video used or not used." msgstr "O conteúdo a ser unido deve ter a mesma cadência de fotogramas." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "O conteúdo a ser unido deve ter a mesma configuração 'gravar legendas'." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "O conteúdo a ser unido deve ter a mesma configuração 'usar legendas'." @@ -590,7 +637,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "O conteúdo a ser unido deve ter os mesmos fades." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 #, fuzzy msgid "Content to be joined must have the same outline width." msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas." @@ -599,33 +646,33 @@ msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas." msgid "Content to be joined must have the same picture size." msgstr "O conteúdo a ser unido deve ter o mesmo tamanho de imagem." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "O conteúdo a ser unido deve ter o mesmo alinhamento X nas legendas." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "O conteúdo a ser unido deve ter o mesmo alinhamento Y nas legendas." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "O conteúdo a ser unido deve ter a mesma escala Y nas legendas." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 #, fuzzy msgid "Content to be joined must have the same subtitle fades." msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 #, fuzzy msgid "Content to be joined must have the same subtitle line spacing." msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 #, fuzzy msgid "Content to be joined must have the same video frame rate" msgstr "O conteúdo a ser unido deve ter a mesma cadência de fotogramas." @@ -634,25 +681,25 @@ msgstr "O conteúdo a ser unido deve ter a mesma cadência de fotogramas." msgid "Content to be joined must have the same video frame type." msgstr "O conteúdo a ser unido deve ter o mesmo tipo de fotogramas de vÃdeo." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 #, fuzzy msgid "Content to be joined must use the same DCP track." msgstr "O conteúdo a ser unido deve usar os mesmos tipos de letra." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "O conteúdo a ser unido deve usar os mesmos tipos de letra." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "O conteúdo a ser unido deve usar o mesmo fluxo de legendas." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 #, fuzzy msgid "Content to be joined must use the same text language." msgstr "O conteúdo a ser unido deve usar os mesmos tipos de letra." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "O vÃdeo do conteúdo tem %1x%2" @@ -660,15 +707,6 @@ msgstr "O vÃdeo do conteúdo tem %1x%2" msgid "Copy DCP to TMS" msgstr "Copiar DCP para TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -#, fuzzy -msgid "Copying video file into DCP" -msgstr "Dimensões de vÃdeo do DCP inválidas" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Não foi possivel ligar ao servidor %1 (%2)" @@ -686,20 +724,21 @@ msgstr "Não foi possÃvel descodificar o ficheiro JPEG2000 %1 (%2)" msgid "Could not decode image (%1)" msgstr "Não foi possÃvel descodificar a imagem (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Não foi possÃvel abrir o ficheiro ZIP descarregado" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Não foi possÃvel procurar por servidores de codificação remotos. Talvez " "outra instância do DCP-o-matic esteja em execução." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Não foi possÃvel abrir %1" @@ -707,21 +746,21 @@ msgstr "Não foi possÃvel abrir %1" msgid "Could not open %1 to send" msgstr "Não foi possÃvel abrir %1 para enviar" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Não foi possÃvel abrir o ficheiro ZIP descarregado" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 #, fuzzy msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Não foi possÃvel abrir o ficheiro ZIP descarregado" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 #, fuzzy msgid "Could not open file for writing" msgstr "não foi possÃvel abrir o ficheiro para leitura" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 #, fuzzy msgid "Could not open output file %1 (%2)" msgstr "não foi possÃvel escrever para o ficheiro %1 (%2)" @@ -739,19 +778,19 @@ msgstr "Não foi possÃvel iniciar a transferência" msgid "Could not write to remote file (%1)" msgstr "Não foi possÃvel escrever para o ficheiro remoto (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX primário" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX secundário" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -765,7 +804,7 @@ msgstr "Flat" msgid "DCI Scope" msgstr "Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "Legendas XML DCP" @@ -783,46 +822,35 @@ msgstr "O DCP será reproduzido a %.1f%% da velocidade do conteúdo.\n" msgid "DCP will use every other frame of the content.\n" msgstr "O DCP usará todos os outros fotogramas do conteúdo.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 -#, fuzzy -msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." -msgstr "" -"O DCP-o-matic não conseguiu abrir o ficheiro %1. Talvez não exista ou está " -"num formato inesperado." - -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "O DCP-o-matic já não suporta o filtro '%1', e este foi desactivado." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "A Desentrelaçar" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -834,7 +862,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Caro Projeccionista\n" "\n" @@ -848,12 +876,16 @@ msgstr "" "Cumprimentos,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 #, fuzzy msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 e CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 #, fuzzy msgid "Download failed (%1 error %2)" msgstr "O download falhou (%1/%2 erro %3)" @@ -879,19 +911,19 @@ msgstr "Enviar chaves KDM por email para %1" msgid "Email notification" msgstr "" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Enviar relatório de problemas" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Enviar relatório de problemas para %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -899,20 +931,20 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Erro no ficheiro de legendas: encontrou %1 mas esperava %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Erro: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "À procura das legendas" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Examen du contenu" @@ -927,17 +959,17 @@ msgstr "Examinar conteúdo" msgid "Examining subtitles" msgstr "À procura das legendas" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Examen du contenu" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 #, fuzzy msgid "Extracting" msgstr "Classificação" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -945,55 +977,55 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "A autenticação com o servidor falhou (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 #, fuzzy msgid "Failed to encode the DCP." msgstr "Falha no envio de email (%1)" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 #, fuzzy msgid "Failed to send email" msgstr "Falha no envio de email (%1)" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Longa-metragem" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filename" msgstr "nome" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "nome" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Filme" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "À procura da duração" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Cadência de fotogramas" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Sexta-feira" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Full" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Full (0-%1)" @@ -1019,35 +1051,35 @@ msgstr "Duração total dos fotogramas de vÃdeo à cadência do DCP" msgid "Full length in video frames at content rate" msgstr "Duração total dos fotogramas de vÃdeo à cadência do conteúdo" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gama 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gama 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Alterar banda do gradiente" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "DA" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Deficientes auditivos" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Remoção de ruido 3D de alta qualidade" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 #, fuzzy msgid "Horizontal flip" msgstr "Filtre dé-bloc horizontal" @@ -1056,106 +1088,107 @@ msgstr "Filtre dé-bloc horizontal" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB ou sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "A causa do erro não é conhecida." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "Envio de chaves KDM: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Desentrelaçador do núcleo" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "E" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Esquerdo" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Esquerdo central" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Esquerdo traseiro surround" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Esquerdo surround" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Duração" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limitado" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Limitado (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Linear" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "LogarÃtmico (variação 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "LogarÃtmico (Variação 316:1)" @@ -1163,7 +1196,7 @@ msgstr "LogarÃtmico (Variação 316:1)" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Es" @@ -1171,24 +1204,24 @@ msgstr "Es" msgid "Mid-side decoder" msgstr "Descodificador Mid-side" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Misc" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Canais de áudio do DCP em número inválido" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Taxa de amostragem de áudio do DCP inválida" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Cadência de fotogramas do DCP inválida" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Dimensões de vÃdeo do DCP inválidas" @@ -1197,19 +1230,19 @@ msgstr "Dimensões de vÃdeo do DCP inválidas" msgid "Missing required setting %1" msgstr "falta definição necessária %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Segunda-feira" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Desentrelaçador de compensação de movimento" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "" @@ -1223,76 +1256,86 @@ msgstr "Servidor de correio não configura nas preferências" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Servidor de correio não configura nas preferências" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Não foram encontrados ficheiros de imagem válidos na pasta." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Redução de ruÃdo" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (executado durante %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (executado durante %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "Apenas o primeiro elemento a ser unido pode ser aparado no inÃcio." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Apenas o último elemento a ser unido pode ser aparado no fim." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Redução de ruÃdo" + +#: src/lib/text_type.cc:79 #, fuzzy msgid "Open subtitles" msgstr "Legendas de texto" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Memória esgotada" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Redutor de ruÃdo de onda" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Regra" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "" @@ -1301,119 +1344,119 @@ msgstr "" msgid "Programming error at %1:%2 %3" msgstr "Erro de programação em %1:%2" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Anúncio Público" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "D" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Classificação" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 #, fuzzy msgid "Rec. 1886" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 #, fuzzy msgid "Rec. 2020" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Direito" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Direita central" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Direito traseiro surround" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Direito surround" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Ds" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 #, fuzzy msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "" @@ -1428,28 +1471,28 @@ msgstr "Erro de SSH (%1)" msgid "SSH error [%1] (%2)" msgstr "Erro de SSH (%1)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Sábado" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 #, fuzzy msgid "Scanning image files" msgstr "A processar o resumo de imagem" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "A enviar email" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Curta-metragem" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Tamanho" @@ -1457,11 +1500,11 @@ msgstr "Tamanho" msgid "Some audio will be resampled to %1Hz" msgstr "Algum áudio vais ser alterado para %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1476,13 +1519,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1501,11 +1544,11 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "" @@ -1517,19 +1560,19 @@ msgstr "Multiplicador de canais de Stereo para 5.1 A" msgid "Stereo to 5.1 up-mixer B" msgstr "Multiplicador de canais de Stereo para 5.1 B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Domingo" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Filtro de telecinema" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Teste" @@ -1550,32 +1593,32 @@ msgstr "A cadeia de certificação para assinatura é inválida" msgid "The certificate chain for signing is invalid (%1)" msgstr "A cadeia de certificação para assinatura é inválida" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1583,23 +1626,37 @@ msgstr "" "O disco onde o filme está armazenado está com pouco espaço. Liberte algum " "espaço e tente de novo." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "" -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "" -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "" -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "" -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1608,11 +1665,11 @@ msgid "" "systems support your chosen DCP rate." msgstr "" -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1622,27 +1679,30 @@ msgstr "" "sistema de 32-bit tente reduzir o número de linhas de execução na aba Geral " "das Preferências." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" +"Não há memória suficiente para concluir esta acção. Se estiver a usar um " +"sistema de 32-bit tente reduzir o número de linhas de execução na aba Geral " +"das Preferências." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1651,46 +1711,48 @@ msgid "" "the content and choosing \"Add KDM\"." msgstr "" -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Este filme foi criado com uma versão mais recente do DCP-o-matic, e não pode " "ser carregado nesta. Desculpe!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Este filme foi criado com uma versão anterior do DCP-o-matic, e infelizmente " "não pode ser carregado nesta. Necessita criar um novo Filme, voltar a " "adicionar o conteúdo e configurá-lo de novo. Desculpe!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Quinta-feira" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 #, fuzzy msgid "Transcoding %1" msgstr "Transcodificar %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitório" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Terça-feira" @@ -1698,7 +1760,7 @@ msgstr "Terça-feira" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Conteúdos inesperados no ficheiro ZIP" @@ -1706,36 +1768,36 @@ msgstr "Conteúdos inesperados no ficheiro ZIP" msgid "Unexpected image type received by server" msgstr "Tipo de imagem inesperada recebida pelo servidor" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 #, fuzzy msgid "Unknown" msgstr "desconhecido" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Erro desconhecido" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Formato de amostragem áudio desconhecido (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Máscara de nitidez e desfoque de Gauss" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Não especificado" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Sem tÃtulo" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Não utilizado" @@ -1747,7 +1809,7 @@ msgstr "Combinar E" msgid "Upmix R" msgstr "Combinar D" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "DV" @@ -1755,11 +1817,11 @@ msgstr "DV" msgid "Verify DCP" msgstr "" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Deficientes Visuais" @@ -1767,76 +1829,76 @@ msgstr "Deficientes Visuais" msgid "Waiting" msgstr "A aguardar" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 #, fuzzy msgid "Weave filter" msgstr "Filtro de telecinema" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Quarta-feira" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" # It's a filter name, has no translation to portuguese. -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " "to %2 fps." msgstr "" -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " "rate to %2 fps." msgstr "" -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." msgstr "" -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." msgstr "" -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:324 msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" msgstr "" -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." msgstr "" -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1847,59 +1909,59 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Deve adicionar algum conteúdo ao DCP antes de o criar" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." msgstr "" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "" -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "" -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[moving images]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[still]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[subtitles]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "" @@ -1931,12 +1993,12 @@ msgstr "a copiar %1" msgid "could not find stream information" msgstr "não foi possÃvel encontrar a informação do fluxo" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 #, fuzzy msgid "could not move atmos asset into the DCP (%1)" msgstr "não foi possÃvel enviar o áudio para o DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "não foi possÃvel enviar o áudio para o DCP (%1)" @@ -1967,7 +2029,7 @@ msgstr "não foi possÃvel escrever para o ficheiro %1 (%2)" msgid "error during async_connect (%1)" msgstr "erro durante conexão assÃncrona (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "erro durante leitura assÃncrona (%1)" @@ -1975,64 +2037,72 @@ msgstr "erro durante leitura assÃncrona (%1)" msgid "error during async_write (%1)" msgstr "erro durante escrita assÃncrona (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "fotogramas por segundo" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "" -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "" -#: src/lib/dcp_content.cc:736 +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 #, fuzzy -msgid "it overlaps other audio content; remove the other content." +msgid "it overlaps other audio content." msgstr "Existe outro conteúdo áudio sobreposto a este DCP; remova-o." -#: src/lib/dcp_content.cc:700 +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 #, fuzzy -msgid "it overlaps other video content; remove the other content." +msgid "it overlaps other text content." +msgstr "Existe outro conteúdo áudio sobreposto a este DCP; remova-o." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "Existe outro conteúdo video sobreposto a este DCP; remova-o." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 #, fuzzy msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " @@ -2042,16 +2112,16 @@ msgstr "" "'Bobinas' para 'Dividir por conteúdo de vÃdeo'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "" #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "a mover" @@ -2060,46 +2130,49 @@ msgid "name" msgstr "nome" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "imagem estática" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "Existe outro conteúdo video sobreposto a este DCP; remova-o." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "desconhecido" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "fotogramas de vÃdeo" #, fuzzy +#~ msgid "Copying video file into DCP" +#~ msgstr "Dimensões de vÃdeo do DCP inválidas" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "Existe outro conteúdo video sobreposto a este DCP; remova-o." + +#, fuzzy #~ msgid "it does not have closed captions in all its reels." #~ msgstr "Não há nenhuma bobina de audio no DCP" diff --git a/src/lib/po/ru_RU.po b/src/lib/po/ru_RU.po index 85f45924b..2e3bd6318 100644 --- a/src/lib/po/ru_RU.po +++ b/src/lib/po/ru_RU.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DCP\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2022-02-11 22:17+0500\n" "Last-Translator: Mikhail Epshteyn <virus-2006@yandex.ru>\n" "Language-Team: Mikhail Epshteyn\n" @@ -17,7 +17,7 @@ msgstr "" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPath-0: .\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "ЧаÑтота кадров контента: %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Размер при кадрировании: %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Соотношение Ñторон Ñкрана - %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Заполнено черным Ð´Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾Ð½ÐºÐ¸ под контейнер %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "МаÑштаб: %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " на %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -94,39 +94,89 @@ msgstr "" "ДлительноÑть: $LENGTH\n" "Размер: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 ГБ) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [аудио]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [фильм]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [видео]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic не удалоÑÑŒ открыть файл %1 (%2). Возможно, он не ÑущеÑтвует или " +"имеет неожиданный формат." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки DCP как OV. ПожалуйÑта, " +"проверьте Ñти наÑтройки, чтобы убедитьÑÑ, что Ñто то, чего вы хотите." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки. Теперь чаÑтота кадров фильма " +"ÑоответÑтвует вашему контенту Atmos." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" +"DCP-o-matic больше не поддерживает фильтр `%1', поÑтому он был выключен." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "Почтовое уведомление" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 кадров" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", Ñоотношение Ñторон пикÑÐµÐ»Ñ %.2f:1" @@ -163,11 +213,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Full frame)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -180,11 +230,11 @@ msgstr "2.35 (35-мм Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "Подавитель шума 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -194,32 +244,33 @@ msgstr "" "уверены, что ваш DCP будет воÑпроизводитьÑÑ Ð½Ð° ÑовмеÑтимом проекторе, " "рекомендуетÑÑ Ð·Ð°Ð´Ð°Ñ‚ÑŒ DCP 2K на вкладке \"DCP→Видео\"." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 кадр/Ñек" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; оÑталоÑÑŒ %1; Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>Ð’Ñ‹ Ñоздали %1 DCP Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ DCP-o-matic!</h2><img width=\"20%%\" " "src=\"memory:me.jpg\" align=\"center\"><p>Привет. ÐœÐµÐ½Ñ Ð·Ð¾Ð²ÑƒÑ‚ Карл и Ñ " @@ -234,34 +285,36 @@ msgstr "" "dcpomatic.com/donate_amount?amount=10\">Перейти в Paypal Ð´Ð»Ñ Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ " "€10</a></ul><p>Благодарю ваÑ!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Ðекоторые проекторы имеют проблемы Ñ Ð²Ð¾Ñпроизведением DCP Ñ Ð¾Ñ‡ÐµÐ½ÑŒ выÑоким " "битрейтом. Хорошей идеей будет Ñнизить пропуÑкную ÑпоÑобноÑть JPEG2000 до " "200Мбит/Ñ; Ñто не должно привеÑти к заметным изменениÑм изображениÑ." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "Файл Ñубтитров в Ñтом проекте помечен Ñзыком '%1', который неизвеÑтен Ð´Ð»Ñ " "DCP-o-matic. Языковой файл был очищен." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "ADV (Рекламный)" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -273,7 +326,7 @@ msgstr "" "Ð’Ñ‹ можете изменить формат контейнера DCP на SCOPE (2.39:1) на вкладке " "\"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -284,7 +337,7 @@ msgstr "" "контента будут чёрные облаÑти. Ð’Ñ‹ можете задать Ñоотношение контейнера DCP " "таким же, как и ваш контент." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Произошла ошибка при обращении к файлу %1." @@ -292,30 +345,30 @@ msgstr "Произошла ошибка при обращении к файлу msgid "Analysing audio" msgstr "Ðнализ аудио" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Ðнализ Ñубтитров" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Ðайдены маркеры, уÑтановленные поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°. Они будут " "проигнорированы." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Ðайдены файлы Ñ Ñубтитрами CC, которые больше, чем " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Ðайдены файлы Ñ Ñубтитрами CC, XML-чаÑть которых больше, чем " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Ðайдены файлы Ñ Ñубтитрами, которые больше, чем " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -323,7 +376,7 @@ msgstr "" "Ðайдена Ñтрока Ñубтитров, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð»Ð¸Ð½Ð½ÐµÐµ 52 Ñимволов. РекомендуетÑÑ " "ограничить длину вÑех Ñтрок до 52 Ñимволов." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -331,7 +384,7 @@ msgstr "" "Ðайдена Ñтрока Ñубтитров, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð»Ð¸Ð½Ð½ÐµÐµ 79 Ñимволов. Ð’Ñ‹ должны ограничить " "длину вÑех Ñтрок до 79 Ñимволов." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -339,7 +392,7 @@ msgstr "" "Ðайдены Ñубтитры из более трёх Ñтрок. РекомендуетÑÑ Ð¸Ñпользовать не более " "трёх Ñтрок." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -347,7 +400,7 @@ msgstr "" "Ðайдены Ñубтитры, продолжительноÑть которых менее 15 кадров. РекомендуетÑÑ " "задать продолжительноÑть Ð´Ð»Ñ Ð²Ñех Ñубтитров как минимум 15 кадров." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -356,7 +409,7 @@ msgstr "" "предыдущего. РекомендуетÑÑ Ð·Ð°Ð´Ð°Ñ‚ÑŒ промежуток между Ñубтитрами как минимум 2 " "кадра." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -379,72 +432,72 @@ msgstr "ЧаÑтота аудио будет изменена на %1 Гц" msgid "Audio will not be resampled" msgstr "ЧаÑтота аудио не будет изменена" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 раÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð³Ð°Ð¼Ð¼Ð° (ECG)" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 поÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 Ð´Ð»Ñ 10-битной ÑиÑтемы" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 Ð´Ð»Ñ 12-битной ÑиÑтемы" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 непоÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Бит на пикÑель" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Фильтр деинтерлейÑинга bwdif" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Отменено" @@ -456,11 +509,11 @@ msgstr "Ðе может Ñодержать ÑлÑши" msgid "Cannot handle pixel format %1 during %2" msgstr "Ðевозможно обработать формат пикÑÐµÐ»Ñ %1 во Ð²Ñ€ÐµÐ¼Ñ %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Ðевозможно Ñоздать KDM, Ñ‚.к. Ñтот проект не зашифрован." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "C - Центральный" @@ -468,7 +521,7 @@ msgstr "C - Центральный" msgid "Channels" msgstr "Каналы" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "Проверьте их новые наÑтройки и попробуйте Ñнова." @@ -477,27 +530,32 @@ msgstr "Проверьте их новые наÑтройки и попробуРmsgid "Checking content" msgstr "Проверка контента на предмет изменений" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Проверка данных изображениÑ" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "ХроматичеÑÐºÐ°Ñ Ð¿Ð¾ÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "ХроматичеÑÐºÐ°Ñ Ð½ÐµÐ¿Ð¾ÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Скрытые Ñубтитры" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Открытые Ñубтитры (вшитые)" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "ОÑновные цвета" @@ -511,17 +569,17 @@ msgstr "ОÑновные цвета" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð³Ð°Ð¼Ð¼Ð°" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "ХарактериÑтика цветопередачи" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Цветовое проÑтранÑтво" @@ -529,15 +587,15 @@ msgstr "Цветовое проÑтранÑтво" msgid "Combine DCPs" msgstr "Объединить DCP" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Проверка целоÑтноÑти" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Проверка целоÑтноÑти" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "ПоздравлениÑ!" @@ -555,19 +613,19 @@ msgstr "тип контента" msgid "Content sample rate" msgstr "ЧаÑтота диÑкретизации аудио-контента" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "ВеÑÑŒ добавлÑемый контент должен иметь либо не иметь аудио" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "ВеÑÑŒ добавлÑемый контент должен иметь либо не иметь Ñубтитры" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "ВеÑÑŒ добавлÑемый контент должен иметь либо не иметь видео" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -579,13 +637,13 @@ msgid "Content to be joined must have all its video used or not used." msgstr "" "ВеÑÑŒ добавлÑемый видеоконтент должен быть помечен как иÑпользуемый либо нет." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "ВеÑÑŒ добавлÑемый контент должен иметь одинаковые наÑтройки \"вшить " "Ñубтитры\"." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "ВеÑÑŒ добавлÑемый контент должен иметь одинаковые наÑтройки \"иÑпользовать " @@ -624,7 +682,7 @@ msgstr "ВеÑÑŒ добавлÑемый контент должен иметь Ð msgid "Content to be joined must have the same fades." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковое затухание." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковую ширину контура." @@ -632,41 +690,41 @@ msgstr "ВеÑÑŒ добавлÑемый контент должен иметь Ð msgid "Content to be joined must have the same picture size." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый размер изображениÑ." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" "ВеÑÑŒ добавлÑемый контент должен иметь одинаковое горизонтальное Ñмещение " "Ñубтитров." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый размер Ñубтитров по " "горизонтали." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" "ВеÑÑŒ добавлÑемый контент должен иметь одинаковое вертикальное Ñмещение " "Ñубтитров." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "" "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый размер Ñубтитров по " "вертикали." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковое затухание Ñубтитров." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый межÑтрочный интервал " "Ñубтитров." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковую чаÑтота кадров видео" @@ -674,23 +732,23 @@ msgstr "ВеÑÑŒ добавлÑемый контент должен иметь Ð msgid "Content to be joined must have the same video frame type." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый тип кадров видео." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "ВеÑÑŒ добавлÑемый контент должен иÑпользовать ту же дорожку DCP." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковые шрифты." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь ту же дорожку Ñубтитров." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый Ñзык текÑта." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Разрешение контента: %1x%2" @@ -698,14 +756,6 @@ msgstr "Разрешение контента: %1x%2" msgid "Copy DCP to TMS" msgstr "Копировать DCP на TMS (Theater Management System)" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Копирую Ñтарый видеофайл" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "Копирую видеофайл в DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Ðе удалоÑÑŒ подключитьÑÑ Ðº Ñерверу %1 (%2)" @@ -722,20 +772,21 @@ msgstr "Ðе удалоÑÑŒ декодировать JPEG2000-файл(Ñ‹) %1 (% msgid "Could not decode image (%1)" msgstr "Ðе удалоÑÑŒ декодировать изображение (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Ðе удалоÑÑŒ открыть загруженный ZIP-файл" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Ðе удалоÑÑŒ доÑтучатьÑÑ Ð´Ð¾ удалённого Ñервера кодированиÑ. Возможно запущена " "ещё одна ÐºÐ¾Ð¿Ð¸Ñ DCP-o-matic." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Ðе удалоÑÑŒ открыть %1" @@ -743,19 +794,19 @@ msgstr "Ðе удалоÑÑŒ открыть %1" msgid "Could not open %1 to send" msgstr "Ðе удалоÑÑŒ открыть %1 Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Ðе удалоÑÑŒ открыть загруженный ZIP-файл" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Ðе удалоÑÑŒ открыть загруженный ZIP-файл (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Ðе удалоÑÑŒ открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "Ðе удалоÑÑŒ открыть файл вывода %1 (%2)" @@ -771,19 +822,19 @@ msgstr "Ðе удалоÑÑŒ начать передачу" msgid "Could not write to remote file (%1)" msgstr "Ðе удалоÑÑŒ запиÑать в удалённый файл (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX оÑновной (DBP)" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX второÑтепенный (DBS)" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -795,7 +846,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML Ñубтитры" @@ -812,50 +863,35 @@ msgstr "DCP будет воÑпроизводитьÑÑ Ð½Ð° %.1f%% от ÑÐºÐ¾Ñ msgid "DCP will use every other frame of the content.\n" msgstr "DCP будет иÑпользовать каждый второй кадр контента.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic не удалоÑÑŒ открыть файл %1 (%2). Возможно, он не ÑущеÑтвует или " -"имеет неожиданный формат." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки DCP как OV. ПожалуйÑта, " -"проверьте Ñти наÑтройки, чтобы убедитьÑÑ, что Ñто то, чего вы хотите." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки. Теперь чаÑтота кадров фильма " -"ÑоответÑтвует вашему контенту Atmos." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "" -"DCP-o-matic больше не поддерживает фильтр `%1', поÑтому он был выключен." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "Уведомление DCP-o-matic" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 или AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "ДеинтерлейÑинг" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -867,7 +903,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Уважаемый киномеханик\n" "\n" @@ -881,11 +917,15 @@ msgstr "" "С наилучшими пожеланиÑми,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 или CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Ошибка загрузки (%1 ошибка %2)" @@ -910,19 +950,19 @@ msgstr "Отправка ключей KDM Ð´Ð»Ñ %1" msgid "Email notification" msgstr "Почтовое уведомление" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Сообщить о проблеме" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Сообщить о проблеме Ð´Ð»Ñ %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Завершено" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "EPS (Ðпизод)" @@ -930,20 +970,20 @@ msgstr "EPS (Ðпизод)" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Ошибка в файле Ñубтитров: найдено %1, Ñ…Ð¾Ñ‚Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾ÑÑŒ %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Ошибка: (%1)" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Проверка Ñубтитров" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Проверка аудио, открытых и Ñкрытых Ñубтитров" @@ -955,15 +995,15 @@ msgstr "Проверка контента" msgid "Examining subtitles" msgstr "Проверка Ñубтитров" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Проверка Ñубтитров" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "Извлечение" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -971,52 +1011,52 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Ошибка аутентификации на Ñервере (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Ошибка ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ DCP." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Ошибка отправки пиÑьма" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "FTR (Полнометражный фильм)" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "Файлы были изменены поÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² проект." -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Проект" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "РаÑчёт длительноÑти" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "ЧаÑтота кадров" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "ПÑтница" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Полный" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Полный (0-%1)" @@ -1040,35 +1080,35 @@ msgstr "ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° видеокадров Ð´Ð»Ñ Ñ‡Ð°Ñтоты кРmsgid "Full length in video frames at content rate" msgstr "ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° видеокадров Ð´Ð»Ñ Ñ‡Ð°Ñтоты кадров контента" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Гамма 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Гамма 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Разбиение градиента" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Ð”Ð»Ñ ÑлабоÑлышащих" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Ð’Ñ‹ÑококачеÑтвенный подавитель шума 3D" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Отразить по горизонтали" @@ -1076,21 +1116,21 @@ msgstr "Отразить по горизонтали" msgid "Hz" msgstr "Гц" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB или sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" "ЕÑли вы иÑпользуете 25 кадр/Ñек, вам Ñледует изменить Ñтандарт вашего DCP на " "SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1101,15 +1141,15 @@ msgstr "" "причины Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Interop. РекомендуетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ñтандарт DCP на " "SMPTE на вкладке \"DCP\"." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1117,73 +1157,74 @@ msgstr "" "РекомендуетÑÑ Ñ€Ð°Ñположить первый Ñубтитр поÑле 4 Ñекунд от начала, чтобы " "гарантировать его видимоÑть." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "ÐеизвеÑтно, что вызвало Ñту ошибку." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "ДоÑтавка KDM: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "ДеинтерлейÑинг Ñдром" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "L - Левый" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "LC - Левый центральный" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "LRS - Левый задний объёмный" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "LS - Левый объёмный" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "ДлительноÑть" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "LFE" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "LFE - ÐЧ (Ñабвуфер)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Ограничен" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Ограничен (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Линейный" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "ЛогарифмичеÑкий (диапазон 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "ЛогарифмичеÑкий (диапазон 316:1)" @@ -1191,7 +1232,7 @@ msgstr "ЛогарифмичеÑкий (диапазон 316:1)" msgid "Lost communication between main and writer processes" msgstr "ПотерÑна ÑвÑзь между оÑновным и запиÑывающим процеÑÑами" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1199,24 +1240,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Декодер mid-side" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Разное" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "ÐеÑоответÑтвие количеÑтва аудиоканалов в DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "ÐеÑоответÑтвие чаÑтоты диÑкретизации аудио в DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "ÐеÑоответÑтвие чаÑтоты кадров в DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "ÐеÑоответÑтвие размера видео в DCP" @@ -1224,19 +1265,19 @@ msgstr "ÐеÑоответÑтвие размера видео в DCP" msgid "Missing required setting %1" msgstr "ОтÑутÑтвует обÑзательный параметр %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Понедельник" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Моно" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "ДиентерлейÑер компенÑации движениÑ" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Ð’ DCP не обнаружены CPL-файлы." @@ -1250,79 +1291,93 @@ msgstr "Ð’ наÑтройках не задан почтовый Ñервер" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Ð’ наÑтройках не задан почтовый Ñервер" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Ð’ папке не найдено подходÑщих изображений." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Подавление шума" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Ðе задан" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "Готово! (выполнено за %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "Готово! (выполнено за %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Только первый Ñлемент добавлÑемого контента может иметь обрезку Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" "Только поÑледний Ñлемент добавлÑемого контента может иметь обрезку Ñ ÐºÐ¾Ð½Ñ†Ð°." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Скрытые Ñубтитры" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Открытые Ñубтитры (вшитые)" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 +#, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Откройте проект DCP-o-matic, проверьте наÑтройки, Ñохраните их и попробуйте " "ещё раз." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "ОриентациÑ" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "ÐедоÑтаточно памÑти" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Подавитель шума owdenoise" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"ПожалуйÑта, Ñообщите о данной проблеме, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐŸÐ¾Ð¼Ð¾Ñ‰ÑŒ -> Сообщить о " +"проблеме. Или отправьте пиÑьмо на carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "POL (СтратегичеÑкий трейлер)" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Подготовлено Ð´Ð»Ñ Ñ‡Ð°Ñтоты кадров видео" @@ -1330,93 +1385,93 @@ msgstr "Подготовлено Ð´Ð»Ñ Ñ‡Ð°Ñтоты кадров видео" msgid "Programming error at %1:%2 %3" msgstr "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "PRO (Промо-ролик)" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "PSA (Ð¡Ð¾Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€ÐµÐºÐ»Ð°Ð¼Ð°)" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "RTG (Рейтинговый)" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "R - Правый" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "RC - Правый центральный" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "RRS - Правый задний объёмный" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "RS - Правый объёмный" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Повернуть на 90º против чаÑовой Ñтрелки" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Повернуть на 90º по чаÑовой Ñтрелке" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1427,23 +1482,23 @@ msgstr "" "титров). Ð’Ñ‹ должны добавить Ñти маркеры, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ½Ð¾Ð¿ÐºÑƒ \"Маркеры\" на " "вкладке \"DCP\"." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 Ð´Ð»Ñ 10, 12, 14 и 16-битных ÑиÑтем" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1456,27 +1511,27 @@ msgstr "Ошибка SSH [%1]" msgid "SSH error [%1] (%2)" msgstr "Ошибка SSH [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Суббота" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Сканирование файлов изображений" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Отправка почты" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "SHR (Короткометражный фильм)" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "ЖеÑÑ‚" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Размер" @@ -1484,11 +1539,11 @@ msgstr "Размер" msgid "Some audio will be resampled to %1Hz" msgstr "ЧаÑтота некоторых аудио будет изменена на %1 Гц" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "Ðекоторые файлы изменилиÑÑŒ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° их Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² проект." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1511,7 +1566,7 @@ msgstr "" "Ðти файлы ÑÐµÐ¹Ñ‡Ð°Ñ Ð±ÑƒÐ´ÑƒÑ‚ перепроверены. Возможно, вам придётÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ‚ÑŒ их " "наÑтройки." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." @@ -1519,7 +1574,7 @@ msgstr "" "Ðекоторые из ваших Ñкрытых Ñубтитров занимают более %1 Ñтрок. Они будут " "обрезаны." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1541,11 +1596,11 @@ msgstr "ЧаÑть вашего контента требует KDM" msgid "Some of your content needs an OV" msgstr "ЧаÑть вашего контента требует OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Стерео" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Стерео" @@ -1558,19 +1613,19 @@ msgstr "Преобразователь Стерео->5.1 типа A" msgid "Stereo to 5.1 up-mixer B" msgstr "Преобразователь Стерео->5.1 типа B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "ВоÑкреÑенье" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "TSR (Тизер)" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Фильтр Telecine" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "TST (ТеÑтовый ролик)" @@ -1590,25 +1645,25 @@ msgstr "Цепочка Ñертификатов Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи невер msgid "The certificate chain for signing is invalid (%1)" msgstr "Цепочка Ñертификатов Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи неверна (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1618,7 +1673,7 @@ msgstr "" "тип 2D. Тем не менее, вы можете Ñделать 3D DCP, отметив опцию 3D на вкладке " "\"DCP->Видео\"." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1626,23 +1681,37 @@ msgstr "" "Ðа уÑтройÑтво, на котором хранитÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚, заканчиваетÑÑ Ð¼ÐµÑто. ОÑвободите " "меÑто и попробуйте Ñнова." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Файл %1 был перемещен на %2 миллиÑекунд ранее." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Файл %1 был перемещен на %2 миллиÑекунд позднее." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Файл %1 был обрезан на %2 миллиÑекунд меньше." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Файл %1 был обрезан на %2 миллиÑекунд больше." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1657,11 +1726,11 @@ msgstr "" "к вашему контенту, при уÑловии, что ваша Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема поддерживает " "выбранную вами чаÑтоту кадров DCP." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Ð’ данном DCP нет видео" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1671,31 +1740,34 @@ msgstr "" "попробуйте уменьшить чиÑло потоков ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÐаÑтройках на вкладке " "\"ОÑновные\"." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" "Ðтот KDM был Ñделан Ð´Ð»Ñ DCP-o-matic, но не Ð´Ð»Ñ ÐµÐ³Ð¾ конечного Ñертификата." -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "Ðтот KDM не был Ñделан Ð´Ð»Ñ Ñертификата раÑшифровки DCP-o-matic." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "ВероÑтно, Ñта ошибка произошла в 32-битной верÑии DCP-o-matic при попытке " "иÑпользовать Ñлишком много потоков кодированиÑ. ПожалуйÑта, уменьшите чиÑло " "потоков ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÐаÑтройках на вкладке \"ОÑновные\" и попробуйте Ñнова." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "ВероÑтно, Ñта ошибка произошла в 32-битной верÑии DCP-o-matic. ПожалуйÑта, " "уÑтановите 64-битную верÑию и попробуйте Ñнова." @@ -1708,45 +1780,47 @@ msgstr "" "Ðтот файл - ключ KDM. Ключи нужно добавлÑть нажатием правой кнопки мыши на " "контент и выбором \"Добавить KDM\"." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Проект был Ñоздан более новой верÑией DCP-o-matic и не может быть загружен " "Ñтой верÑией. Извините!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Проект был Ñоздан более Ñтарой верÑией DCP-o-matic и, к Ñожалению, не может " "быть загружен Ñтой верÑией. Вам необходимо Ñоздать новый проект, заново " "добавить контент и повторно наÑтроить его. Извините!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Четверг" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Субтитры" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "TRL (Трейлер)" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "ТранÑкодирование %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "XSN (Транзитный)" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Вторник" @@ -1754,7 +1828,7 @@ msgstr "Вторник" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Ðеожиданное Ñодержимое ZIP-файла" @@ -1762,35 +1836,35 @@ msgstr "Ðеожиданное Ñодержимое ZIP-файла" msgid "Unexpected image type received by server" msgstr "Сервером получен неожиданный тип изображениÑ" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "ÐеизвеÑтно" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "ÐераÑпознанный формат аудио (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Ðерезкое маÑкирование и Размытие по ГауÑÑу" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Ðе указано" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "БезымÑнный" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Ðе иÑпользуетÑÑ" @@ -1802,7 +1876,7 @@ msgstr "Преобразовать Л" msgid "Upmix R" msgstr "Преобразовать П" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1810,11 +1884,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Проверить DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Отразить по горизонтали" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Ð”Ð»Ñ ÑлабовидÑщих" @@ -1822,23 +1896,23 @@ msgstr "Ð”Ð»Ñ ÑлабовидÑщих" msgid "Waiting" msgstr "Ожидание" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Фильтр Weave" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Среда" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Фильтр деинтерлейÑинга YADIF" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1849,7 +1923,7 @@ msgstr "" "поддерживаетÑÑ Ð½Ðµ вÑеми проекторами. РекомендуетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ чаÑтоту кадров " "вашего DCP на %2 кадр/Ñек." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1859,7 +1933,7 @@ msgstr "" "поддерживаетÑÑ Ð½Ðµ вÑеми проекторами. Возможно, вы захотите изменить чаÑтоту " "на %2 кадр/Ñек." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1868,19 +1942,11 @@ msgstr "" "поддерживаетÑÑ Ð½Ðµ вÑеми проекторами. Учтите, что у Ð²Ð°Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть проблемы " "ÑовмеÑтимоÑти." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Ð’Ñ‹ иÑпользуете 3D контент, но ваш DCP имеет тип 2D. Измените тип DCP на 3D, " -"еÑли хотите воÑпроизвеÑти его на 3D-ÑиÑтеме (напр. Real-D, MasterImage и Ñ‚." -"п.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Ð’Ñ‹ иÑпользуете преобразователь Стерео->5.1. Ðто ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¸ " @@ -1888,7 +1954,16 @@ msgstr "" "проÑлушать полученный DCP в кинотеатре, чтобы убедитьÑÑ, что он звучит " "хорошо." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Ð’Ñ‹ иÑпользуете 3D контент, но ваш DCP имеет тип 2D. Измените тип DCP на 3D, " +"еÑли хотите воÑпроизвеÑти его на 3D-ÑиÑтеме (напр. Real-D, MasterImage и Ñ‚." +"п.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1896,7 +1971,7 @@ msgstr "" "У Ð²Ð°Ñ %1 файлов, которые похожи на VOB-файлы из DVD. Вам необходимо " "объединить их, чтобы гарантировать плавный переход между файлами." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1904,7 +1979,7 @@ msgstr "" "Обнаружено неÑколько чаÑтей контента Atmos Ñ Ñ€Ð°Ð·Ð½Ð¾Ð¹ чаÑтотой кадров. Вам " "нужно удалить чаÑть контента Atmos." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1912,7 +1987,7 @@ msgstr "" "Ваши Ñкрытые Ñубтитры Ñодержат переÑÐµÑ‡ÐµÐ½Ð¸Ñ (overlap), которые не допуÑкаютÑÑ " "Ð´Ð»Ñ Interop DCP. Измените ваш Ñтандарт DCP на SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1924,26 +1999,27 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Вам необходимо добавить контент в DCP перед его Ñозданием" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "Ваш DCP Ñодержит менее 6 аудиоканалов. Ðто может вызвать проблемы на " "некоторых проекторах. Возможно, вы захотите указать 6 каналов Ð´Ð»Ñ DCP. " "Даже еÑли у Ð²Ð°Ñ Ð¼ÐµÐ½ÑŒÑˆÐµ каналов, DCP-o-matic автоматичеÑки заполнит " "недоÑтающие тишиной." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1952,7 +2028,7 @@ msgstr "" "привеÑти к проблемам на некоторых проекторах. ЕÑли возможно, иÑпользуйте " "Ñоотношение Ñторон Flat или Scope Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð° DCP." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1960,14 +2036,14 @@ msgstr "" "Уровень вашего аудио Ñлишком выÑок (на %1). Вам Ñтоит понизить уровень " "уÑÐ¸Ð»ÐµÐ½Ð¸Ñ (gain) вашего аудиоконтента." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "Ð’ вашем проекте ÑодержитÑÑ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, который не был привÑзан к границе " "кадра." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1975,21 +2051,21 @@ msgstr "" "Ð’ вашем проекте ÑодержитÑÑ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, обрезка которого не была выровнена " "по границе кадра." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[движущийÑÑ]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[Ñтатичный]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[Ñубтитры]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_reel%1" @@ -2021,11 +2097,11 @@ msgstr "копирование %1" msgid "could not find stream information" msgstr "не удалоÑÑŒ найти информацию о потоке" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "не удалоÑÑŒ перемеÑтить atmos в DCP-пакет (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "не удалоÑÑŒ перемеÑтить аудио в DCP-пакет (%1)" @@ -2053,7 +2129,7 @@ msgstr "не удалоÑÑŒ запиÑать в файл %1 (%2)" msgid "error during async_connect (%1)" msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_read (%1)" @@ -2061,62 +2137,72 @@ msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_read (%1)" msgid "error during async_write (%1)" msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "кадра(ов) в Ñекунду" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "ч" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "чаÑтота кадров проекта отличаетÑÑ Ð¾Ñ‚ чаÑтоты кадров DCP." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "имеетÑÑ Ð¾Ð±Ñ€ÐµÐ·ÐºÐ° Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, поÑтому Ñубтитры должны быть перезапиÑаны." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "ÑвлÑетÑÑ 2K, а проект - 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "ÑвлÑетÑÑ 4K, а проект - 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "ÑвлÑетÑÑ Interop, а проект наÑтроен как SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "ÑвлÑетÑÑ SMPTE, а проект наÑтроен как Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "перекрывает другой аудиоконтент; удалите другой контент." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "перекрывает другой аудиоконтент; удалите другой контент." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "перекрывает другой видеоконтент; удалите другой контент." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2125,16 +2211,16 @@ msgstr "" "режим чаÑтей фильма \"РазделÑть по видеоконтенту\"." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "размер кадра видео в проекте отличаетÑÑ Ð¾Ñ‚ размера видео DCP." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "м" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "движущийÑÑ" @@ -2143,7 +2229,7 @@ msgid "name" msgstr "название" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2152,7 +2238,7 @@ msgstr "" "быть перезапиÑан." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." @@ -2161,31 +2247,39 @@ msgstr "" "быть перезапиÑан." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "Ñ" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "Ñтатичный" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "перекрывает другой текÑтовый контент; удалите другой контент." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "неизвеÑтно" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "видеокадры" +#~ msgid "Copying old video file" +#~ msgstr "Копирую Ñтарый видеофайл" + +#~ msgid "Copying video file into DCP" +#~ msgstr "Копирую видеофайл в DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "Уведомление DCP-o-matic" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "перекрывает другой текÑтовый контент; удалите другой контент." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "во вÑех чаÑÑ‚ÑÑ… фильма нет Ñкрытых Ñубтитров (CC)." @@ -2196,13 +2290,6 @@ msgstr "видеокадры" #~ msgstr "во вÑех чаÑÑ‚ÑÑ… фильма нет звука." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "ПожалуйÑта, Ñообщите о данной проблеме, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐŸÐ¾Ð¼Ð¾Ñ‰ÑŒ -> Сообщить о " -#~ "проблеме. Или отправьте пиÑьмо на carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "Ваш Ñтандартный контейнер некорректен, поÑтому был изменён на Flat " diff --git a/src/lib/po/sk_SK.po b/src/lib/po/sk_SK.po index 8c252a04f..fe04381a2 100644 --- a/src/lib/po/sk_SK.po +++ b/src/lib/po/sk_SK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2016-01-06 00:23+0100\n" "Last-Translator: Tomáš HlaváÄ\n" "Language-Team: \n" @@ -18,7 +18,7 @@ msgstr "" "X-Generator: Poedit 1.8.6\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, fuzzy, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "SnÃmacia frekvencia obsahu %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 #, fuzzy msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "ZmenÅ¡ené na %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, fuzzy, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "Pomer strán displeja %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 #, fuzzy msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "Vyplnené Äiernou, aby sa zmestil do kontajnera %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 #, fuzzy msgid "" "\n" @@ -63,18 +63,18 @@ msgstr "" "\n" "ZmenÅ¡ené na %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr "" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr "" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -88,41 +88,83 @@ msgid "" "Size: $SIZE\n" msgstr "" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 #, fuzzy msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [zvuk]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [video]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 #, fuzzy msgid "%1 [video]" msgstr "%1 [video]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic nemohol otvoriÅ¥ %1. Možno, že súbor neexistuje alebo nie je " +"podporovaný." + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +msgid "%1 notification" +msgstr "" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, fuzzy, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pomer strán obrazových bodov %.2f:1" @@ -161,11 +203,11 @@ msgstr "" msgid "1.90 (Full frame)" msgstr "Full frame (Celý obraz)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -178,68 +220,68 @@ msgstr "" msgid "2.39 (Scope)" msgstr "" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D denoiser" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Reklama" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -247,14 +289,14 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " "DCP's container to have the same ratio as your content." msgstr "" -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Vyskytla sa chyba poÄas spracovávania súboru %1." @@ -263,59 +305,59 @@ msgstr "Vyskytla sa chyba poÄas spracovávania súboru %1." msgid "Analysing audio" msgstr "AnalyzovaÅ¥ zvuk" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 #, fuzzy msgid "Analysing subtitles" msgstr "Hľadám titulky" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -334,73 +376,73 @@ msgstr "Zvuk bude re-samplovaný na %1Hz" msgid "Audio will not be resampled" msgstr "Zvuk nebude resamplovaný" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 rozÅ¡Ãrený rozsah farieb" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 konÅ¡tansta jasu" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 pre 10-bit systém" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 pre 12-bit systém" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 non-constant luminance" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bitov na pixel" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 #, fuzzy msgid "Bob Weaver Deinterlacing Filter" msgstr "Len Äalšà deinterlacing filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "ZruÅ¡ené" @@ -413,11 +455,11 @@ msgstr "nemôže obsahovaÅ¥ lomky" msgid "Cannot handle pixel format %1 during %2" msgstr "Nemôžem spracovaÅ¥ formát pixelu %1 poÄas %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "" -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Center" @@ -426,7 +468,7 @@ msgstr "Center" msgid "Channels" msgstr "Zvukové kanály" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -435,30 +477,35 @@ msgstr "" msgid "Checking content" msgstr "VypoÄÃtavam obsah" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Kontrolujem existujúce video dáta" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 #, fuzzy msgid "Chroma-derived constant luminance" msgstr "BT2020 konÅ¡tansta jasu" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 #, fuzzy msgid "Chroma-derived non-constant luminance" msgstr "BT2020 non-constant luminance" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 #, fuzzy msgid "Closed captions" msgstr "Redukcia hluku" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "[titulky]" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Primárne voľby fariem" @@ -472,17 +519,17 @@ msgstr "Primárne voľby fariem" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Rozsah farieb" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Charakteristika prenosu farieb" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Farebný priestor" @@ -490,16 +537,16 @@ msgstr "Farebný priestor" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "PoÄÃtam zhrnutie" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 #, fuzzy msgid "Computing digests" msgstr "PoÄÃtam zhrnutie" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -517,22 +564,22 @@ msgstr "typ obsahu" msgid "Content sample rate" msgstr "SnÃmacia frekvencia obsahu" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 #, fuzzy msgid "Content to be joined must all have or not have audio" msgstr "Aby sa spojil obsah, musà maÅ¥ tú istú hlasitosÅ¥ zvuku." -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 #, fuzzy msgid "Content to be joined must all have or not have subtitles or captions" msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú X mierku. " -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 #, fuzzy msgid "Content to be joined must all have or not have video" msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaké miznutie." -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 #, fuzzy msgid "" "Content to be joined must both be main subtitle languages or both additional." @@ -543,11 +590,11 @@ msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú X mierku. " msgid "Content to be joined must have all its video used or not used." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaký poÄet obrázkov za sekundu." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "Aby sa spojil obsah, musà maÅ¥ tie isté 'vypálené titulky' nastavenia." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "Aby sa spojil obsah, musà maÅ¥ tie isté 'použiÅ¥ titulky' nastavenia." @@ -586,7 +633,7 @@ msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaké nastavenia orezania." msgid "Content to be joined must have the same fades." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaké miznutie." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 #, fuzzy msgid "Content to be joined must have the same outline width." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú X mierku. " @@ -595,33 +642,33 @@ msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú X mierku. " msgid "Content to be joined must have the same picture size." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú veľkosÅ¥ obrazu." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaký titulkový X offset. " -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú X mierku. " -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaký titulkový Y offset." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú Y mierku." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 #, fuzzy msgid "Content to be joined must have the same subtitle fades." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú X mierku. " -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 #, fuzzy msgid "Content to be joined must have the same subtitle line spacing." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnakú titulkovú X mierku. " -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 #, fuzzy msgid "Content to be joined must have the same video frame rate" msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaký poÄet obrázkov za sekundu." @@ -630,25 +677,25 @@ msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaký poÄet obrázkov za sekundu." msgid "Content to be joined must have the same video frame type." msgstr "Aby sa spojil obsah, musà maÅ¥ rovnaký typ videa." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 #, fuzzy msgid "Content to be joined must use the same DCP track." msgstr "Aby sa spojil obsah, musà použÃvaÅ¥ rovnaké pÃsma." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Aby sa spojil obsah, musà použÃvaÅ¥ rovnaké pÃsma." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Aby sa spojil obsah, musà použÃvaÅ¥ rovnaký titulkový stream." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 #, fuzzy msgid "Content to be joined must use the same text language." msgstr "Aby sa spojil obsah, musà použÃvaÅ¥ rovnaké pÃsma." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Video je %1x%2" @@ -656,15 +703,6 @@ msgstr "Video je %1x%2" msgid "Copy DCP to TMS" msgstr "KopÃrovaÅ¥ DCP do TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -#, fuzzy -msgid "Copying video file into DCP" -msgstr "Nehoduje sa veľkosÅ¥ videa v DCO" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Nemôžem sa pripojiÅ¥ k serveru %1 (%2)" @@ -682,20 +720,21 @@ msgstr "Nemôžem dekódovaÅ¥ JPEG2000 súbor %1 (%2)" msgid "Could not decode image (%1)" msgstr "Nemôžem dekódovaÅ¥ video súbor (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Nemôžem otvoriÅ¥ ZIP súbor" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Nemôžem skontrolovaÅ¥ vzdialené enkódovacie servre. Možno je už DCP-o-matic " "zapnutý." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Nemôžem otvoriÅ¥ %1" @@ -703,21 +742,21 @@ msgstr "Nemôžem otvoriÅ¥ %1" msgid "Could not open %1 to send" msgstr "Nemôžem otvoriÅ¥ %1 na poslanie" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Nemôžem otvoriÅ¥ ZIP súbor" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 #, fuzzy msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Nemôžem otvoriÅ¥ ZIP súbor" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 #, fuzzy msgid "Could not open file for writing" msgstr "Datei konnte nicht zum Lesen geöffnet werden." -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 #, fuzzy msgid "Could not open output file %1 (%2)" msgstr "nemôžem zapisovaÅ¥ do súboru %1 (%2)" @@ -735,19 +774,19 @@ msgstr "Nemôžem zaÄaÅ¥ prenos" msgid "Could not write to remote file (%1)" msgstr "Nemôžem zapisovaÅ¥ do vzdialeného súboru (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX primárne" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX sekundárne" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -761,7 +800,7 @@ msgstr "Flat" msgid "DCI Scope" msgstr "Scope (2.39:1)" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML titulky" @@ -779,46 +818,35 @@ msgstr "DCP bude bežaÅ¥ na %.1f%% obsahu videa.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP bude použÃvaÅ¥ každý druhý frame obsahu \n" -#: src/lib/job.cc:172 src/lib/job.cc:187 -#, fuzzy -msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." -msgstr "" -"DCP-o-matic nemohol otvoriÅ¥ %1. Možno, že súbor neexistuje alebo nie je " -"podporovaný." - -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "De-interlacing" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -830,7 +858,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Milý premietaÄ,\n" "\n" @@ -844,12 +872,16 @@ msgstr "" "ÄŽakujem a prajem pekný deň,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 #, fuzzy msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 a CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 #, fuzzy msgid "Download failed (%1 error %2)" msgstr "SÅ¥ahovanie zlyhalo (%1/%2 chyba %3)" @@ -875,19 +907,19 @@ msgstr "Email KDM pre %1" msgid "Email notification" msgstr "" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Správa o probléme s Emailom" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Správa o probléme s Emailom pre %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -896,20 +928,20 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Chyba v SubRip súbore: videný %1 a bol oÄakávaný %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Chyba: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Hľadám titulky" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -923,17 +955,17 @@ msgstr "VypoÄÃtavam obsah" msgid "Examining subtitles" msgstr "Hľadám titulky" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Hľadám titulky" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 #, fuzzy msgid "Extracting" msgstr "PrÃstupnosÅ¥" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -941,57 +973,57 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Chyba pri autentifikovanà so serverom (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 #, fuzzy msgid "Failed to encode the DCP." msgstr "Chyba pri posielanà emailu (%1)" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 #, fuzzy msgid "Failed to send email" msgstr "Chyba pri posielanà emailu (%1)" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Feature" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filename" msgstr "meno" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "meno" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 #, fuzzy msgid "Finding length" msgstr "Dĺžka videa" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 #, fuzzy msgid "Frame rate" msgstr "Frame rate videa (poÄet obrázkov za sekundu)" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Piatok" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Full" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Full (0-%1)" @@ -1016,35 +1048,35 @@ msgstr "" msgid "Full length in video frames at content rate" msgstr "" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradient debander" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Sluchovo postihnutý(Ã)" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Vysoko kvalitný 3D denoiser" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 #, fuzzy msgid "Horizontal flip" msgstr "Horizontaler De-Blocker" @@ -1053,106 +1085,107 @@ msgstr "Horizontaler De-Blocker" msgid "Hz" msgstr "" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB alebo sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Neviem, Äo zaprÃÄinilo túto chybu." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "KDM donáška: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Kernel deinterlacer" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Left (Ľavá)" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Left centre (Ľavý stred)" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Left rear surround (Ľavý zadný priestorový)" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Left surround (Ľavý zadný)" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (Subwoofer)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Limitovaný" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Limitovaný (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Lineárny" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logarmitmický (rozsah 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logarmitmický (rozsah 316:1 )" @@ -1160,7 +1193,7 @@ msgstr "Logarmitmický (rozsah 316:1 )" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1168,24 +1201,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Mid-side dekóder" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Rôzne" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "PoÄet zvukových kanálov sa nezhoduje v DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Vzorkovacà kmitoÄet zvuku sa nezhoduje v DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Nezhoduje sa poÄet obrázkov za sekundu v DPC" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Nehoduje sa veľkosÅ¥ videa v DCO" @@ -1194,19 +1227,19 @@ msgstr "Nehoduje sa veľkosÅ¥ videa v DCO" msgid "Missing required setting %1" msgstr "chýbajúce potrebné nastavenia %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Pondelok" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Pohybový kompenzaÄný odstraňovaÄ" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "" @@ -1218,76 +1251,86 @@ msgstr "" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Žiadne platné súbory nebolo nájdené v prieÄinku." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Redukcia hluku" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (hotovo za %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (hotovo za %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "Iba prvá ÄasÅ¥ pripojeného obsahu môže byÅ¥ upravená od zaÄiatku." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Iba posledná ÄasÅ¥ pripojeného obsahu môže byÅ¥ upravená od konca." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Redukcia hluku" + +#: src/lib/text_type.cc:79 #, fuzzy msgid "Open subtitles" msgstr "[titulky]" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Málo pamäte" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Overcomplete wavelet denoiser" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Policy" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "" @@ -1296,119 +1339,119 @@ msgstr "" msgid "Programming error at %1:%2 %3" msgstr "Chyba pri programovanà na %1:%2" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Public Service Announcement (Verejné oznámenie služby)" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "PrÃstupnosÅ¥" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 #, fuzzy msgid "Rec. 1886" msgstr "Rec. 601 (SD)" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 #, fuzzy msgid "Rec. 2020" msgstr "Rec. 601 (SD)" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601 (SD)" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709 (HD)" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Right (Pravý)" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Right centre (Pravý stredný)" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Right rear surround (Pravý zadný priestorový)" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Right surround (Pravý priestorový)" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 #, fuzzy msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "" @@ -1423,28 +1466,28 @@ msgstr "SSH chyba (%1)" msgid "SSH error [%1] (%2)" msgstr "SSH chyba (%1)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Sobota" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 #, fuzzy msgid "Scanning image files" msgstr "PoÄÃtam súhrn videa" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Posielam email" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Short (Krátky film)" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "" @@ -1452,11 +1495,11 @@ msgstr "" msgid "Some audio will be resampled to %1Hz" msgstr "Nejaké audio bude prevzorkované na %1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1471,13 +1514,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1496,11 +1539,11 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "" @@ -1512,19 +1555,19 @@ msgstr "Stereo na 5.1 up-mixer A" msgid "Stereo to 5.1 up-mixer B" msgstr "Stereo na 5.1 up-mixer B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Nedel'a" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser (Krátka upútavka)" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Telecine Filter" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1546,32 +1589,32 @@ msgstr "ReÅ¥az certifikátov pre podpisovanie je neplatná" msgid "The certificate chain for signing is invalid (%1)" msgstr "ReÅ¥az certifikátov pre podpisovanie je neplatná" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1579,23 +1622,37 @@ msgstr "" "Disk, na ktorom sa nachádza film už má málo voľného miesta. NieÄo vymažte a " "skúste to znovu." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "" -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "" -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "" -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "" -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1604,11 +1661,11 @@ msgid "" "systems support your chosen DCP rate." msgstr "" -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1617,27 +1674,29 @@ msgstr "" "Zostáva málo pamäte. Ak je váš operaÄný system 32-bitový, skúste znÞiÅ¥ " "poÄet enkódovacÃch threadov v záložke VÅ¡eobecné, v nastaveniach." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" +"Zostáva málo pamäte. Ak je váš operaÄný system 32-bitový, skúste znÞiÅ¥ " +"poÄet enkódovacÃch threadov v záložke VÅ¡eobecné, v nastaveniach." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1646,46 +1705,48 @@ msgid "" "the content and choosing \"Add KDM\"." msgstr "" -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Tento film bol vytvorený novÅ¡ou verziou DCP-o-matic, a nemôže byÅ¥ naÄÃtaný " "touto verziou. PrepáÄte !" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Tento film bol vytvorený starÅ¡ou verziou DCP-o-matic, a bohužiaľ nemôže byÅ¥ " "naÄÃtaný do tejto verzie. Budete musieÅ¥ vytvoriÅ¥ nový Film, znovu pridaÅ¥ váš " "obsah a znovu to nastaviÅ¥." -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "ÄŒetrtek" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 #, fuzzy msgid "Transcoding %1" msgstr "Transkódovanie %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitional (Prechod)" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Utorok" @@ -1693,7 +1754,7 @@ msgstr "Utorok" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "NeoÄakávaný obsah ZIP" @@ -1701,36 +1762,36 @@ msgstr "NeoÄakávaný obsah ZIP" msgid "Unexpected image type received by server" msgstr "NeoÄakávaný typ obrazu obdŕžaný od servera " -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 #, fuzzy msgid "Unknown" msgstr "neznáme" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Neznáma chyba" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Nerozpoznaná vzorkovacia frekvencia audia (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Doostrenie a Gaussove rozostrenie" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "NeÅ¡pecifikované" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Nepomenované" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Nepoužité" @@ -1742,7 +1803,7 @@ msgstr "Upmix L" msgid "Upmix R" msgstr "Upmix R" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1750,11 +1811,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Zrakovo postihnutý(Ã)" @@ -1762,75 +1823,75 @@ msgstr "Zrakovo postihnutý(Ã)" msgid "Waiting" msgstr "ÄŒakám" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 #, fuzzy msgid "Weave filter" msgstr "Telecine Filter" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Streda" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Len Äalšà deinterlacing filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " "to %2 fps." msgstr "" -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " "rate to %2 fps." msgstr "" -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." msgstr "" -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." msgstr "" -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:324 msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" msgstr "" -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." msgstr "" -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1841,59 +1902,59 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "MusÃte pridaÅ¥ obsah do DCP pred tým, ako ho vytvorÃte" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." msgstr "" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "" -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "" -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[presúvam obrázky]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[stále]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[titulky]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "" @@ -1925,12 +1986,12 @@ msgstr "kopÃrujem %1" msgid "could not find stream information" msgstr "nemôžem nájsÅ¥ informácie o streame" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 #, fuzzy msgid "could not move atmos asset into the DCP (%1)" msgstr "nemôžem presunúť audio do DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "nemôžem presunúť audio do DCP (%1)" @@ -1961,7 +2022,7 @@ msgstr "nemôžem zapisovaÅ¥ do súboru %1 (%2)" msgid "error during async_connect (%1)" msgstr "chyba poÄas async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "chyba poÄas async_read (%1)" @@ -1969,64 +2030,72 @@ msgstr "chyba poÄas async_read (%1)" msgid "error during async_write (%1)" msgstr "chyba poÄas async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "obrázky za sekundu" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "h" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "" -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "" -#: src/lib/dcp_content.cc:736 +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 #, fuzzy -msgid "it overlaps other audio content; remove the other content." +msgid "it overlaps other audio content." msgstr "Už sa tu nachádza iný zvuk, ktorý sa prekrýva s DCP; zmaže ho." -#: src/lib/dcp_content.cc:700 +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 #, fuzzy -msgid "it overlaps other video content; remove the other content." +msgid "it overlaps other text content." +msgstr "Už sa tu nachádza iný zvuk, ktorý sa prekrýva s DCP; zmaže ho." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "Už sa tu nachádza iné video, ktoré sa prekrýva s DCP; zmaže ho." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 #, fuzzy msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " @@ -2036,16 +2105,16 @@ msgstr "" "podľa obsahu videa'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "" #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "presúvam" @@ -2054,46 +2123,49 @@ msgid "name" msgstr "meno" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "stále" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "Už sa tu nachádza iné video, ktoré sa prekrýva s DCP; zmaže ho." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "neznáme" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "video snÃmky" #, fuzzy +#~ msgid "Copying video file into DCP" +#~ msgstr "Nehoduje sa veľkosÅ¥ videa v DCO" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "Už sa tu nachádza iné video, ktoré sa prekrýva s DCP; zmaže ho." + +#, fuzzy #~ msgid "it does not have closed captions in all its reels." #~ msgstr "DCP nemá zvuk vo vÅ¡etkých reeloch." diff --git a/src/lib/po/sl_SI.po b/src/lib/po/sl_SI.po index f735363e8..a8970f8ea 100644 --- a/src/lib/po/sl_SI.po +++ b/src/lib/po/sl_SI.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2024-02-10 16:15+0100\n" "Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.1\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Hitrost vsebine v sliÄicah %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Obrezano na %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Prikazano razmerje stranic %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Obdano s Ärnino, da se prilega vsebniku %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Velikost spremenjena na %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " na %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -94,39 +94,89 @@ msgstr "" "Dolžina: $LENGTH\n" "Velikost: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [zvok]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [video]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic ne more odpreti datoteke %1 (%2). Morda ne obstaja ali pa je v " +"nepriÄakovani obliki." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic je moral spremeniti vaÅ¡e nastavitve, da DCP lahko nosi oznako " +"OV. Preglejte te nastavitve, da se prepriÄate, da so skladne z vaÅ¡imi " +"željami." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"DCP-o-matic je moral spremeniti nastavitve, tako da je hitrost sliÄic filma " +"enaka tisti vaÅ¡e vsebine Atmos." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic ne podpira veÄ filtra »%1«, zato je bil izklopljen." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "E-poÅ¡tno obvestilo" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 sliÄic" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", razmerje stranic slikovne toÄke %.2f:1" @@ -163,11 +213,11 @@ msgstr "1,85 (ploski, Flat)" msgid "1.90 (Full frame)" msgstr "1,90 (cela sliÄica, Full frame)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "10" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "16" @@ -179,11 +229,11 @@ msgstr "2,35 (35-mm Å¡iroki/scope)" msgid "2.39 (Scope)" msgstr "2,39 (Å¡iroki/scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D-razÅ¡umnik" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -193,32 +243,33 @@ msgstr "" "prepriÄani, da boste predvajali ta DCP na primernemu projektorju, je " "priporoÄljivo, da nastavite DCP na 2K pod »DCP → Video«." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "9" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 sl/s" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 preostalo; zakljuÄevanje ob %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>%1 DCP ste izdelali z DCP-o-matic!</h2><img width=\"20%%\" src=\"memory:" "me.jpg\" align=\"center\"><p>Pozdravljeni. Jaz sem Carl in sem razvijalec " @@ -232,34 +283,36 @@ msgstr "" "donirajte €20</a></li><li><a href=\"https://dcpomatic.com/donate_amount?" "amount=10\">Pojdite na PayPal in donirajte 10 €</a></li></ul><p>Hvala!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "Nekateri projektorji imajo težave s predvajanjem DCP-jev z zelo visoko bitno " "hitrostjo. Dobro je, da spustite pasovno Å¡irino JPEG2000 na približno 200 " "Mbit/s; to verjetno ne bo imelo opaznega uÄinka na sliko." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "Datoteka podnaslovov ali zaprtih napisov v tem projektu je oznaÄena z " "jezikom »%1«, ki ga DCP-o-matic ne prepozna. Jezik datoteke je poÄiÅ¡Äen." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 (»Hibridna log-gama«)" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Oglas" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -271,7 +324,7 @@ msgstr "" "zgoraj in spodaj v ravnem prikazu (1,85:1, Flat). Vsebnik DCP-ja bi morda " "raje nastavili na ukrivljeni format (2,39:1, Scope) na zavihku »DCP«." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -282,7 +335,7 @@ msgstr "" "levem in desnem robu. Morda bi raje nastavili vsebnik DCP, da ima enako " "razmerje kot vaÅ¡a vsebina." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Pri obravnavi datoteke %1 je priÅ¡lo do napake." @@ -290,28 +343,28 @@ msgstr "Pri obravnavi datoteke %1 je priÅ¡lo do napake." msgid "Analysing audio" msgstr "Analiziranje zvoka" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Analiziranje podnaslovov" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "Vsaj ena oznaka sledi po koncu projekta in bo prezrta." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Vsaj ena od datotek z zaprtimi napisi je veÄja od " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Vsaj en del datotek XML zaprtih napisov je veÄji od " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Vsaj ena od datotek podnaslovov je veÄja od " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -319,7 +372,7 @@ msgstr "" "Vsaj ena od vrstic podnaslovov ima veÄ kot 52 znakov. PriporoÄljivo je, da " "ima vsaka vrstica najveÄ 52 znakov." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -327,7 +380,7 @@ msgstr "" "Vsaj ena od vrstic podnaslovov ima veÄ kot 79 znakov. PriporoÄljivo je, da " "ima vsaka vrstica najveÄ 79 znakov." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -335,7 +388,7 @@ msgstr "" "Vsaj eden od vaÅ¡ih podnaslovov ima veÄ kot 3 vrstice. PriporoÄljivo je " "uporabiti najveÄ 3 vrstice." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -343,7 +396,7 @@ msgstr "" "Vsaj en vaÅ¡ podnaslov traja manj kot 15 sliÄic. PriporoÄljivo je, da vsak " "podnaslov dolg vsaj 15 sliÄic." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -351,7 +404,7 @@ msgstr "" "Vsaj eden od vaÅ¡ih podnaslovov se zaÄne manj kot 2 sliÄici po prejÅ¡njem. " "PriporoÄljivo je, da je vrzel med podnaslovi vsaj 2 sliÄici." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -373,72 +426,72 @@ msgstr "Zvok bo prevzorÄen na %1 Hz" msgid "Audio will not be resampled" msgstr "Zvok ne bo prevzroÄen" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 z razÅ¡irjenim barvnim gamutom" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 s konstantno svetilnostjo" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 za 10-bitni sistem" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 za 12-bitni sistem" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 s spremenljivo svetilnostjo" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bitov na slik. toÄko" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Filter razpletanja Boba Weaverja" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR (D)" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Preklicano" @@ -450,11 +503,11 @@ msgstr "Ne sme vsebovati poÅ¡evnic" msgid "Cannot handle pixel format %1 during %2" msgstr "Formata slikovne toÄke %1 ni mogoÄe procesirati med %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "KDM ni mogoÄe narediti, ker ta projekt ni Å¡ifriran." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Sredinsko" @@ -462,7 +515,7 @@ msgstr "Sredinsko" msgid "Channels" msgstr "Kanali" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "Preverite njihove nove nastavitve in poskusite znova." @@ -470,27 +523,32 @@ msgstr "Preverite njihove nove nastavitve in poskusite znova." msgid "Checking content" msgstr "Preverjanje vsebine" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Preverjanje obstojeÄih slikovnih podatkov" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Konstantna svetilnost iz krome" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Nekonstantna svetilnost iz krome" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "Posnetek" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Zaprti napisi" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Odpri podnaslove" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Primarne barve" @@ -504,17 +562,17 @@ msgstr "Primarne barve" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Barvni obseg" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "ZnaÄilnost barvnega prenosa" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Barvni prostor" @@ -522,15 +580,15 @@ msgstr "Barvni prostor" msgid "Combine DCPs" msgstr "Združi DCP-je" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "RaÄunanje povzetka" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "RaÄunanje povzetkov" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "ÄŒestitamo!" @@ -546,23 +604,23 @@ msgstr "Bitna globina vsebine" msgid "Content sample rate" msgstr "Mera vzorÄenja vsebine" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "Vsebina, ki jo želite združiti, mora imeti vse ali ne imeti zvoka" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Vsebina, ki jo želite združiti, mora imeti vsa podnaslove oz. napise ali pa " "jih sploh ne imeti." -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" "Vsebina, ki jo želite združiti, mora imeti vsa videoposnetek ali ga sploh ne " "imeti." -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -575,13 +633,13 @@ msgstr "" "Vsebina, ki jo želite združiti, mora imeti uporabljene vse videoposnetke ali " "pa nobenega." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "Vsebina, ki jo želite združiti, mora imeti enako nastavitev »zapeci " "podnaslove«." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Vsebina, ki jo želite združiti, mora imeti enako nastavitev »uporabi " @@ -625,7 +683,7 @@ msgid "Content to be joined must have the same fades." msgstr "" "Vsebina, ki jo želite združiti, mora imeti enake odtemnitve/zatemnitve." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Vsebina, ki jo želite združiti, mora imeti enako Å¡irino orisa." @@ -633,35 +691,35 @@ msgstr "Vsebina, ki jo želite združiti, mora imeti enako Å¡irino orisa." msgid "Content to be joined must have the same picture size." msgstr "Vsebina, ki jo želite združiti, mora imeti enako velikost slike." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "Vsebina, ki jo želite združiti, mora imeti enak odmik podnaslovov X." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "Vsebina, ki jo želite združiti, mora imeti enako merilo podnaslovov X." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "Vsebina, ki jo želite združiti, mora imeti enak odmik podnaslovov Y." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "Vsebina, ki jo želite združiti, mora imeti enako merilo podnaslovov Y." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" "Vsebina, ki jo želite združiti, mora imeti enake odtemnitve/zatemnitve " "podnaslovov." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "Vsebina, ki jo želite združiti, mora imeti enak razmik med vrsticami " "podnaslovov." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Vsebina, ki jo želite združiti, mora imeti enako hitrost video sliÄic." @@ -669,24 +727,24 @@ msgstr "Vsebina, ki jo želite združiti, mora imeti enako hitrost video sliÄic msgid "Content to be joined must have the same video frame type." msgstr "Vsebina, ki jo želite združiti, mora imeti enako vrsto video sliÄice." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "" "Vsebina, ki jo želite združiti, mora uporabljati isto stezo/posnetek DCP." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Vsebina, ki jo želite združiti, mora uporabljati iste pisave." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Vsebina, ki jo želite združiti, mora uporabljati isti tok podnaslovov." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "Vsebina, ki jo želite združiti, mora uporabljati isti jezik besedila." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Video vsebine je %1x%2" @@ -694,14 +752,6 @@ msgstr "Video vsebine je %1x%2" msgid "Copy DCP to TMS" msgstr "Kopiraj DCP v TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Kopiranje stare video datoteke" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "Kopiranje video datoteke v DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Ni mogoÄe vzpostaviti povezave s strežnikom %1 (%2)" @@ -718,20 +768,21 @@ msgstr "Datoteke JPEG2000 %1 (%2) ni mogoÄe dekodirati" msgid "Could not decode image (%1)" msgstr "Slike ni mogoÄe dekodirati (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Ni bilo mogoÄe odpreti prenesene datoteke ZIP" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Ni bilo mogoÄe prisluhniti oddaljenim strežnikom kodiranja. Morda je zagnan " "Å¡e en primerek programa DCP-o-matic." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Ni mogoÄe odpreti: %1" @@ -739,19 +790,19 @@ msgstr "Ni mogoÄe odpreti: %1" msgid "Could not open %1 to send" msgstr "Za poÅ¡iljanje ni bilo mogoÄe odpreti %1" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Ni bilo mogoÄe odpreti prenesene datoteke ZIP" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Ni bilo mogoÄe odpreti prenesene datoteke ZIP (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Ni bilo mogoÄe odpreti datoteke za pisanje" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "Izhodne datoteke %1 (%2) ni bilo mogoÄe odpreti" @@ -767,19 +818,19 @@ msgstr "Prenosa ni mogoÄe zaÄeti" msgid "Could not write to remote file (%1)" msgstr "Ni mogoÄe pisati v oddaljeno datoteko (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX, primarni" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX, sekundarni" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -791,7 +842,7 @@ msgstr "DCI, ploski (flat)" msgid "DCI Scope" msgstr "DCI, ukrivljeni (scope)" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "Podnaslovi DCP XML" @@ -808,50 +859,35 @@ msgstr "DCP bo predvajan pri %.1f%% hitrosti vsebine.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP bo uporabil vsako drugo sliÄico vsebine.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic ne more odpreti datoteke %1 (%2). Morda ne obstaja ali pa je v " -"nepriÄakovani obliki." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic je moral spremeniti vaÅ¡e nastavitve, da DCP lahko nosi oznako " -"OV. Preglejte te nastavitve, da se prepriÄate, da so skladne z vaÅ¡imi " -"željami." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic je moral spremeniti nastavitve, tako da je hitrost sliÄic filma " -"enaka tisti vaÅ¡e vsebine Atmos." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic ne podpira veÄ filtra »%1«, zato je bil izklopljen." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "Obvestilo DCP-o-matic" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 ali AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Razpletanje" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -863,7 +899,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Dragi/a projekcionist/ka,\n" "\n" @@ -877,11 +913,15 @@ msgstr "" "Lep pozdrav,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 ali CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Prenos ni uspel (%1 napaka %2)" @@ -905,19 +945,19 @@ msgstr "E-poÅ¡lji KDM-je za %1" msgid "Email notification" msgstr "E-poÅ¡tno obvestilo" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "PoroÄilo o težavah z e-poÅ¡to" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "PoroÄilo o težavah z e-poÅ¡to za %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Kodiranje" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Epizoda" @@ -925,19 +965,19 @@ msgstr "Epizoda" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Napaka v datoteki podnaslovov: zaznano %1, priÄakovano %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr " Napaka: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "Dogodek" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 msgid "Examining audio" msgstr "PreuÄevanje zvoka" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "PreuÄevanje zvoka, podnaslovov in zaprtih napisov" @@ -949,15 +989,15 @@ msgstr "PreuÄevanje vsebine" msgid "Examining subtitles" msgstr "PreuÄevanje podnaslovov" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "PreuÄevanje podnaslovov in zaprtih napisov" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "RazÅ¡irjanje" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -965,51 +1005,51 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Preverjanje pristnosti s strežnikom (%1) je spodletelo" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Kodiranje DCP-ja je spodletelo." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "PoÅ¡iljanje e-poÅ¡te je spodletelo" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "CeloveÄerni film" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Ime datoteke" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "Imena datotek" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "Datoteke so se spremenile, odkar so bile dodane v projekt." -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Iskanje dolžine" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Hitrost sliÄic" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Petek" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Polno" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Polno (0-%1)" @@ -1033,35 +1073,35 @@ msgstr "Polna dolžina v video sliÄicah pri hitrosti DCP" msgid "Full length in video frames at content rate" msgstr "Polna dolžina v video sliÄicah pri hitrosti vsebine" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gama 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gama 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Razpasovnik preliva" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Za osebe z okvarami sluha" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Visokokakovostni 3D-razÅ¡umnik" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "Svetli toni" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Vodoravno preobrni" @@ -1069,19 +1109,19 @@ msgstr "Vodoravno preobrni" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB ali SYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "ÄŒe uporabljate 25 sl/s, morate spremeniti standard DCP v SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " @@ -1091,9 +1131,10 @@ msgstr "" "poseben razlog za uporabo Interop. Svetujemo, da vaÅ¡ DCP uporablja standard " "SMPTE, kar doloÄite na zavihku »DCP«." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 +#, fuzzy msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." @@ -1103,7 +1144,7 @@ msgstr "" "preveriti vse podnaslove v svojem projektu, da se prepriÄate, da so umeÅ¡Äeni " "na želeno mesto." -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1111,72 +1152,73 @@ msgstr "" "PriporoÄljivo je, da postavite svoj prvi podnaslov vsaj 4 sekunde po zaÄetku " "DCP, da se prepriÄate, da je viden." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Ni znano, kaj je povzroÄilo to napako." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "Dostava KDM: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Razpletalnik jedra" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Levo" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Levo, sredina" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Levo, zadaj, okolica" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Levo, okolica" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Dolžina" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "Lfe" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "Lfe (sub/pod)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Omejeno" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 msgid "Limited / video (%1-%2)" msgstr "Omejeno/video (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Linearno" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logaritemsko (obseg 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logaritemsko (obseg 316:1)" @@ -1184,7 +1226,7 @@ msgstr "Logaritemsko (obseg 316:1)" msgid "Lost communication between main and writer processes" msgstr "Izgubljena komunikacija med glavnimi in zapisovalnimi procesi" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1192,24 +1234,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Srednje-stranski dekodirnik" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Razno" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Neskladno Å¡tevilo zvoÄnih kanalov v DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "Neskladne mere vzorÄenja zvoka v DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Neskladna hitrost v sliÄicah v DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Neskladna velikost videa v DCP" @@ -1217,19 +1259,19 @@ msgstr "Neskladna velikost videa v DCP" msgid "Missing required setting %1" msgstr "Manjka zahtevana nastavitev %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Ponedeljek" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Razpletalnik s kompenzacijo gibanja" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "V DCP-ju ni CPL-jev." @@ -1242,78 +1284,89 @@ msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "" "Noben odhodni poÅ¡tni strežnik ni doloÄen v nastavitvah na zavihku e-poÅ¡te" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "V mapi ni najdenih veljavnih slikovnih datotek." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "ZmanjÅ¡anje Å¡uma" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Brez" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "V redu" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 msgid "OK (ran for %1 from %2 to %3)" msgstr "V redu (potekalo %1 od %2 do %3)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "V redu (potekalo %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" "Samo prvi del vsebine, ki ga želite združiti, ima lahko zaÄetno porezavo." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" "Samo zadnji del vsebine, ki ga želite združiti, ima lahko konÄno porezavo." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Zaprti napisi" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Odpri podnaslove" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 +#, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "Odprite projekt v DCP-o-matic, preverite nastavitve in ga shranite, preden " "poskusite znova." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Usmerjenost" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Zmanjkalo pomnilnika" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Nadpopoln razÅ¡umnik valÄkov" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Politika" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "Vnaprej pomnoži kanal alfa" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Pripravljeno za hitrost video sliÄic" @@ -1321,93 +1374,93 @@ msgstr "Pripravljeno za hitrost video sliÄic" msgid "Programming error at %1:%2 %3" msgstr "Programska napaka na %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promo" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Obvestilo o javnih storitvah" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Ocena" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "desna" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Desno, sredina" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Desno, zadaj, okolica" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Desno, okolica" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Zasukaj za 90° v nasprotni SUK" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Zasukaj za 90° v SUK" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs (Ds)" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1418,23 +1471,23 @@ msgstr "" "napisov (FFMC). Te oznake morate dodati z gumbom »OznaÄevalci« na zavihku " "»DCP«." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 za 10-, 12-, 14- in 16-bitne sisteme" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1447,27 +1500,27 @@ msgstr "Napaka SSH [%1]" msgid "SSH error [%1] (%2)" msgstr "Napaka SSH [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Sobota" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Pregledovanje slikovnih datotek" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "PoÅ¡iljanje e-poÅ¡te" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Kratki film" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Sign" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Velikost" @@ -1475,11 +1528,11 @@ msgstr "Velikost" msgid "Some audio will be resampled to %1Hz" msgstr "Nekateri zvoÄni elementi bodo prevzorÄeni na %1 Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "Nekatere datoteke so bile spremenjene, odkar so bile dodane v projekt." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1502,14 +1555,14 @@ msgstr "" "Te datoteke bodo zdaj ponovno pregledane, zato boste morda morali preveriti " "njihove nastavitve." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" "Nekateri vaÅ¡i zaprti napisi segajo presegajo %1 vrstic, zato bodo odrezani." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1531,11 +1584,11 @@ msgstr "Nekatere vaÅ¡e vsebine potrebujejo KDM" msgid "Some of your content needs an OV" msgstr "Nekatere vaÅ¡e vsebine potrebujejo OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "Stereo kartica" @@ -1547,19 +1600,19 @@ msgstr "Stereo na 5,1; meÅ¡alnik/pretvornik A" msgid "Stereo to 5.1 up-mixer B" msgstr "Stereo na 5,1: meÅ¡alnik/pretvornik B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Nedelja" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Dražilnik (teaser)" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Filter telekiniranja" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Preizkus" @@ -1579,13 +1632,14 @@ msgstr "Veriga potrdil za podpisovanje ni veljavna" msgid "The certificate chain for signing is invalid (%1)" msgstr "Veriga potrdil za podpisovanje ni veljavna (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 +#, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "Veriga potrdil, ki jo DCP-o-matic uporablja za podpisovanje DCP-jev in KDM-" "jev, vsebuje majhno napako, ki bo prepreÄila pravilno preverjanje " @@ -1593,13 +1647,14 @@ msgstr "" "verigo potrdil za podpisovanje s klikom gumba »Ponovno izdelaj potrdila in " "kljuÄ â€¦Â« na strani KljuÄi v Nastavitvah." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 +#, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "Veriga potrdil, ki jo DCP-o-matic uporablja za podpisovanje DCP-jev in KDM-" "jev, ima predolgo obdobje veljavnosti. To bo povzroÄilo težave pri " @@ -1607,7 +1662,7 @@ msgstr "" "verigo potrdil za podpisovanje s klikom gumba »Ponovno izdelaj potrdila in " "kljuÄ â€¦Â« na strani KljuÄi v nastavitvah." -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1617,7 +1672,7 @@ msgstr "" "Nastavite jo na 2D. Iz te vsebine lahko Å¡e vedno naredite 3D-DCP, tako da " "na zavihku videoposnetka DCP potrdite možnost 3D." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1625,23 +1680,42 @@ msgstr "" "Pogon, na katerem je film shranjen, ima malo nezasedenega prostora. " "Sprostite nekaj veÄ prostora in poskusite znova." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Datoteka %1 je bila premaknjena %2 milisekund naprej." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Datoteka %1 je bila premaknjena %2 milisekund nazaj." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Datoteka %1 je bila obrezana za %2 milisekund manj." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Datoteka %1 je bila obrezana za %2 milisekund veÄ." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +#, fuzzy +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" +"V tej razliÄici je priÅ¡lo do sprememb naÄina postavitve podnaslovov. " +"UmeÅ¡Äanje mora biti zdaj bolj pravilno glede na standarde, vendar morate " +"preveriti vse podnaslove v svojem projektu, da se prepriÄate, da so umeÅ¡Äeni " +"na želeno mesto." + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1655,11 +1729,11 @@ msgstr "" "DCP na takÅ¡no, ki je bližje vaÅ¡i vsebini, pod pogojem, da ciljni sistemi " "projekcije podpirajo izbrano hitrost DCP." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "V tem DCP-ju ni videa" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1669,32 +1743,35 @@ msgstr "" "sistem, poskusite zmanjÅ¡ati Å¡tevilo niti Å¡ifriranja na zavihku SploÅ¡no v " "Nastavitvah." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" "Ta KDM je bil izdelan za DCP-o-matic, vendar ne za njegovo listno potrdilo." -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "Ta KDM ni bil narejen za potrdilo za deÅ¡ifriranje DCP-o-matic." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "Do te napake je verjetno priÅ¡lo, ker izvajate 32-bitno razliÄico DCP-o-matic " "in poskuÅ¡ate uporabiti preveÄ niti za kodiranje. Prosimo, zmanjÅ¡ajte " "»število niti, ki naj jih uporablja DCP-o-matic« na zavihku SploÅ¡no v " "nastavitvah in poskusite znova." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "Do te napake je verjetno priÅ¡lo, ker izvajate 32-bitno razliÄico DCP-o-" "matic. Ponovno namestite DCP-o-matic s 64-bitnim namestitvenim programom in " @@ -1708,45 +1785,47 @@ msgstr "" "Ta datoteka je KDM. KDM-je je treba dodati vsebini DCP vsebini tako, da z " "desno tipko miÅ¡ke kliknete vsebino in izberete »Dodaj KDM«." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Ta film je nastal z novejÅ¡o razliÄico DCP-o-matic in ga ni mogoÄe naložiti v " "to razliÄico. Oprostite!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Ta film je nastal s starejÅ¡o razliÄico DCP-o-matic in ga žal ni mogoÄe " "naložiti v to razliÄico. Ustvariti morate nov film, znova dodati vsebino in " "jo znova nastaviti. Oprostite!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "ÄŒetrtek" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "ÄŒasovno opredeljeno besedilo" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Napovednik" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Prekodiranje %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Prehodni" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Torek" @@ -1754,7 +1833,7 @@ msgstr "Torek" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "NepriÄakovana vsebina datoteke ZIP" @@ -1762,35 +1841,35 @@ msgstr "NepriÄakovana vsebina datoteke ZIP" msgid "Unexpected image type received by server" msgstr "NepriÄakovana vrsta slike, ki jo je prejel strežnik" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Neznano" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Neznana napaka" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Neprepoznana oblika vzorca zvoka (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Razostri masko in Gaussova zabrisanost" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "NedoloÄeno" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Neimenovano" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Neuporabljeno" @@ -1802,7 +1881,7 @@ msgstr "ZmeÅ¡aj navzgor L" msgid "Upmix R" msgstr "ZmeÅ¡aj navzgor R (D)" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1810,11 +1889,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Preveri DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "NavpiÄno preobrni" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Za slabovidne osebe" @@ -1822,23 +1901,23 @@ msgstr "Za slabovidne osebe" msgid "Waiting" msgstr "ÄŒakanje" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Filter tkanja" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Sreda" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Å e en filter za razpletanje" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " @@ -1848,7 +1927,7 @@ msgstr "" "podpirajo vsi projektorji. Svetujemo vam, da spremenite hitrost predvajanja " "DCP na %2 sl/s." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1858,7 +1937,7 @@ msgstr "" "podpirajo vsi projektorji. Morda boste želeli razmisliti o spremembi " "hitrosti sliÄic na %2 sl/s." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1866,18 +1945,11 @@ msgstr "" "Nastavljeno imate za hitrost sliÄic DCP 30 sl/s, ki je ne podpirajo vsi " "projektorji. Zavedajte se, da imate morda težave z združljivostjo." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Uporabljate 3D-vsebino, vendar je vaÅ¡ DCP nastavljen na 2D. Nastavite DCP " -"na 3D, Äe ga želite predvajati na 3D-sistemu (npr. Real-D, MasterImage itn.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Uporabljate funkcijo programa DCP-o-matic za spremembo stereo zvoka v " @@ -1885,7 +1957,15 @@ msgstr "" "kakovost zvoka. ÄŒe nadaljujete, morate posluÅ¡ati rezultat DCP v " "kinodvorani, da se prepriÄate, da je sliÅ¡ati dobro." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Uporabljate 3D-vsebino, vendar je vaÅ¡ DCP nastavljen na 2D. Nastavite DCP " +"na 3D, Äe ga želite predvajati na 3D-sistemu (npr. Real-D, MasterImage itn.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1893,7 +1973,7 @@ msgstr "" "Imate %1 datotek, za katere kaže, da so datoteke VOB z DVD-ja. Združite jih, " "da zagotovite gladke spoje med datotekami." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1901,7 +1981,7 @@ msgstr "" "Imate veÄ kot en kos vsebine Atmos, in nimajo enake hitrosti sliÄic. " "Odstraniti morate nekaj vsebine Atmos." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1909,7 +1989,7 @@ msgstr "" "Imate prekrivanje zaprtih napisov, ki niso dovoljeni v DCP-jih Interop. " "Spremenite standard DCP v SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1921,7 +2001,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Preden jo ustvarite, morate DCP-ju dodati nekaj vsebin" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " @@ -1931,19 +2011,20 @@ msgstr "" "distributerji pri preverjanju kakovosti vaÅ¡ega DCP sporoÄijo napake. ÄŒe se " "želite temu izogniti, nastavite Å¡tevilo zvoÄnih kanalov DCP na 8 ali 16." -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "VaÅ¡ DCP ima manj kot 6 zvoÄnih kanalov. To lahko povzroÄi težave pri " "nekaterih projektorjih. DCP lahko nastavite tako, da ima 6 kanalov. Ni " "pomembno, ali ima vaÅ¡a vsebina manj kanalov, saj bo DCP-o-matic dodatne " "napolnil s tiÅ¡ino." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1952,7 +2033,7 @@ msgstr "" "nekaterih projektorjih. ÄŒe je mogoÄe, uporabite plosko (flat) ali Å¡iroko " "(scope) za razmerje vsebnika DCP." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1960,13 +2041,13 @@ msgstr "" "Raven zvoka je zelo visoka (na %1). ZmanjÅ¡ati morate ojaÄitev zvoÄne " "vsebine." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "VaÅ¡ projekt vsebuje video vsebino, ki ni bila usklajena z robom sliÄic." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1974,21 +2055,21 @@ msgstr "" "VaÅ¡ projekt vsebuje video vsebino, katere porezava ni poravnana z robom " "sliÄic." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[gibljive slike]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[fotografija]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[podnaslovi]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_reel%1" @@ -2020,11 +2101,11 @@ msgstr "kopiranje %1" msgid "could not find stream information" msgstr "podatkov o toku ni mogoÄe najti" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "sredstva atmos ni bilo mogoÄe premakniti v DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "zvoÄnega sredstva ni bilo mogoÄe premakniti v DCP (%1)" @@ -2052,7 +2133,7 @@ msgstr "ni mogoÄe pisati v datoteko %1 (%2)" msgid "error during async_connect (%1)" msgstr "napaka med async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "napaka med async_read (%1)" @@ -2060,28 +2141,28 @@ msgstr "napaka med async_read (%1)" msgid "error during async_write (%1)" msgstr "napaka med async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "sliÄic na sekundo" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "u" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "ima drugaÄno hitrost sliÄic kot film." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" @@ -2089,35 +2170,45 @@ msgstr "" "napisi ponovno zapisani." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "Je 2K, film pa 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "Je 4K, film pa 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "je Interop in film je nastavljen na SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "je SMPTE in film je nastavljen na Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "prekriva druge zvoÄne vsebine; odstranite drugo vsebino." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "prekriva druge zvoÄne vsebine; odstranite drugo vsebino." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "prekriva drugo video vsebino; odstranite drugo vsebino." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2126,16 +2217,16 @@ msgstr "" "kolutov na »razdeli po video vsebini«." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "njegova velikost video sliÄice se razlikuje od velikosti v filmu." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "m" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "gibljive slike" @@ -2144,7 +2235,7 @@ msgid "name" msgstr "ime" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2153,7 +2244,7 @@ msgstr "" "ponovno zapisati." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." @@ -2162,26 +2253,34 @@ msgstr "" "ponovno zapisati." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "s" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "fotografija" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "prekrivajo drugo besedilno vsebino; odstranite drugo vsebino." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "neznano" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "video sliÄice" + +#~ msgid "Copying old video file" +#~ msgstr "Kopiranje stare video datoteke" + +#~ msgid "Copying video file into DCP" +#~ msgstr "Kopiranje video datoteke v DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "Obvestilo DCP-o-matic" + +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "prekrivajo drugo besedilno vsebino; odstranite drugo vsebino." diff --git a/src/lib/po/sv_SE.po b/src/lib/po/sv_SE.po index f64e4d947..2482e0199 100644 --- a/src/lib/po/sv_SE.po +++ b/src/lib/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: DCP-o-matic\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2021-12-28 14:46+0100\n" "Last-Translator: Mattias Mattsson <vitplister@gmail.com>\n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.3\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Källmaterialets bildhastighet är %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -34,7 +34,7 @@ msgstr "" "\n" "Beskuren till %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -43,7 +43,7 @@ msgstr "" "\n" "Bildformat %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -51,7 +51,7 @@ msgstr "" "\n" "Svarta kanter tillagda för att passa %1-behÃ¥llaren (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -59,18 +59,18 @@ msgstr "" "\n" "Skalat till %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " pÃ¥ %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -94,39 +94,89 @@ msgstr "" "Speltid: $LENGTH\n" "Storlek: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [ljud]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [film]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [bild]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic kunde inte öppna %1 (%2). Kanske finns inte filen eller har ett " +"okänt format." + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic var tvungen att ändra dina inställningar för att referera till " +"DCP:er som OV. Var vänlig kontrollera dessa inställningar sÃ¥ att det är " +"korrekta." + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" +"DCP-o-matic var tvungen att ändra dina inställningar sÃ¥ att filmens " +"bildhastighet är samma som för Atmos-innehÃ¥llet." + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic stödjer inte längre '%1'-filtret, sÃ¥ det har inaktiverats." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "E-postmeddelande" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixlarnas höjd/bredd-förhÃ¥llande %.2f:1" @@ -163,11 +213,11 @@ msgstr "1,85 (Flat)" msgid "1.90 (Full frame)" msgstr "1,90 (Full frame)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1,66" @@ -180,11 +230,11 @@ msgstr "2,35 (35 mm Cinemascope)" msgid "2.39 (Scope)" msgstr "2,39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D brusreducering" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -194,32 +244,33 @@ msgstr "" "denna DCP pÃ¥ en sÃ¥dan projektor är det lämpligt att ställa om DCP:n till 2K " "under fliken \"DCP→Video\"." -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 Ã¥terstÃ¥r; klar kl. %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 +#, fuzzy msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>Du har gjort %1 DCP:er med DCP-o-matic!</h2><img width=\"20%%\" " "src=\"memory:me.jpg\" align=\"center\"><p>Hej. Jag heter Carl och är " @@ -233,34 +284,36 @@ msgstr "" "via Paypal</a><li><a href=\"https://dcpomatic.com/donate_amount?" "amount=10\">Ge 10 EUR via Paypal</a></ul><p>Stort tack!" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "En del utrustning har problem att spela upp DCP:er med hög bitrate. " "Rekommenderat är en JPEG2000-bitrate pÃ¥ ungefär 200 Mbit/s; detta ger " "troligen ingen synbar försämring av bildkvaliteten." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "En fil med undertext i detta projekt är markerat med sprÃ¥ket '%1', vilket " "DCP-omatic inte känner igen. Filens sprÃ¥k-fält har tömts." -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "Advertisement" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -272,7 +325,7 @@ msgstr "" "upp- och nertill inuti en 1,85:1-ruta. Rekommenderat är att istället välja " "DCP-behÃ¥llare Scope (2.39:1) pÃ¥ \"DCP\"-fliken." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -283,7 +336,7 @@ msgstr "" "pÃ¥ sidorna inuti en 2,39:1-ruta . Rekommenderat är att istället välja en DCP-" "behÃ¥llare med samma bildformat som källmaterialet." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Ett fel inträffade vid hantering av filen %1." @@ -291,30 +344,30 @@ msgstr "Ett fel inträffade vid hantering av filen %1." msgid "Analysing audio" msgstr "Analyserar ljud" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "Analyserar undertexter" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Ã…tminstone en markering kommer efter slutet av projektet och kommer att " "ignoreras." -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "Ã…tminstone en av dina undertextfiler är större än " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Ã…tminstone en av dina undertextfilers XML-del är större än " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "Ã…tminstone en av dina undertextfiler är större än " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." @@ -322,7 +375,7 @@ msgstr "" "Ã…tminstone en av dina rader i undertexten är längre än 52 bokstaver. Det är " "lämpligt att se till att varje rad är max 52 bokstäver lÃ¥g." -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -330,7 +383,7 @@ msgstr "" "Ã…tminstone en av dina rader i undertexten är längre än 79 bokstaver. Det är " "lämpligt att se till att varje rad är max 79 bokstäver lÃ¥g." -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -338,7 +391,7 @@ msgstr "" "Ã…tminstone en av dina undertexter innehÃ¥ller mer än 3 rader. Det är lämpligt " "att använda max 3 rader." -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -346,7 +399,7 @@ msgstr "" "Ã…tminstone en av dina undertexter är kortare än 15 bildrutor. Det är " "lämpligt att använda minst 15 bildrutor." -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." @@ -354,7 +407,7 @@ msgstr "" "Ã…tminstone en av dina undertexter börjar mindre än 2 bildrutor efter " "föregÃ¥ende undertext. Det är lämpligt att använda minst 2 bildrutor mellan." -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -377,73 +430,73 @@ msgstr "LjudspÃ¥ret kommer samplas om till %1 Hz" msgid "Audio will not be resampled" msgstr "LjudspÃ¥ret kommer inte samplas om" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 utökat färgomfÃ¥ng" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 konstant luminans" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 för ett 10-bitars system" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 för ett 12-bitars system" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 icke-konstant luminans" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Bitar per pixel" # Filtret heter sÃ¥, ska ej översättas -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Bob Weaver Deinterlacing Filter" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Avbruten" @@ -455,11 +508,11 @@ msgstr "FÃ¥r inte innehÃ¥lla snedstreck" msgid "Cannot handle pixel format %1 during %2" msgstr "Kan inte hantera pixelformat %1 under %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Kan inte göra KDM eftersom projektet inte är krypterat." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Center" @@ -467,7 +520,7 @@ msgstr "Center" msgid "Channels" msgstr "Antal kanaler" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -476,27 +529,32 @@ msgstr "" msgid "Checking content" msgstr "Kontrollerar om källmaterialet har ändrats" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Kontrollerar befintlig bilddata" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Krominans-härledd konstant luminans" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Krominans-härledd icke-konstant luminans" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "Dövtextning" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "Undertexter" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "Primärfärger" @@ -510,17 +568,17 @@ msgstr "Primärfärger" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "FärgomrÃ¥de" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "Färgsystemkarakteristisk" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Färgrymd" @@ -528,15 +586,15 @@ msgstr "Färgrymd" msgid "Combine DCPs" msgstr "Kombinera DCP:er" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Beräknar hashsumma" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Beräknar hashsummor" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "Hurra!" @@ -554,23 +612,23 @@ msgstr "filmtyp" msgid "Content sample rate" msgstr "Källmaterialets samplingsfrekvens" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" "Källmaterial som ska sammanfogas mÃ¥ste alla antingen ha eller inte ha ljud" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Källmaterial som ska sammanfogas mÃ¥ste alla antingen ha eller inte ha " "undertext" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" "Källmaterial som ska sammanfogas mÃ¥ste alla antingen ha eller inte ha video" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -581,13 +639,13 @@ msgid "Content to be joined must have all its video used or not used." msgstr "" "Källmaterial som ska sammanfogas mÃ¥ste ha allt sitt video använt eller inte." -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "Källmaterial som ska sammanfogas mÃ¥ste använda samma inställning för 'bränn " "in undertexter'." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Källmaterial som ska sammanfogas mÃ¥ste använda samma inställning för 'använd " @@ -637,7 +695,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "Källmaterial som ska sammanfogas mÃ¥ste ha samma in- och uttoning." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Texten i undertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma konturbredd." @@ -645,31 +703,31 @@ msgstr "Texten i undertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma konturbredd. msgid "Content to be joined must have the same picture size." msgstr "Källmaterial som ska sammanfogas mÃ¥ste ha samma bildstorlek." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "UndertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma förskjutning i x-led." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "UndertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma skalning i x-led." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "UndertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma förskjutning i y-led." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "UndertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma skalning i y-led." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "UndertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma in- och uttoning." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "UndertextspÃ¥r som ska sammanfogas mÃ¥ste ha samma radavstÃ¥nd." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Källmaterial som ska sammanfogas mÃ¥ste ha samma bildhastighet" @@ -677,23 +735,23 @@ msgstr "Källmaterial som ska sammanfogas mÃ¥ste ha samma bildhastighet" msgid "Content to be joined must have the same video frame type." msgstr "Källmaterial som ska sammanfogas mÃ¥ste ha samma 2D-/3D-typ." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "Källmaterial som ska sammanfogas mÃ¥ste ha samma DCP-spÃ¥r." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Källmaterial som ska sammanfogas mÃ¥ste använda samma typsnitt." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Källmaterial som ska sammanfogas mÃ¥ste använda undertext-ström." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "Källmaterial som ska sammanfogas mÃ¥ste använda samma sprÃ¥k för text." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Källmaterialet är %1x%2" @@ -701,14 +759,6 @@ msgstr "Källmaterialet är %1x%2" msgid "Copy DCP to TMS" msgstr "Kopiera DCP till TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "Kopierar tidigare videofil" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "Kopierar in videofil till DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Kunde inte ansluta till server %1 (%2)" @@ -725,20 +775,21 @@ msgstr "Kunde inte avkoda JPEG2000-fil %1 (%2)" msgid "Could not decode image (%1)" msgstr "Kunde inte avkoda bild (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Kunde inte öppna hämtad ZIP-fil" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Kunde inte lyssna efter kodnings-servrar. Kanske en annan instans av DCP-o-" "matic körs." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Kunde inte öppna %1" @@ -746,19 +797,19 @@ msgstr "Kunde inte öppna %1" msgid "Could not open %1 to send" msgstr "Kunde inte öppna %1 för att skicka" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Kunde inte öppna hämtad ZIP-fil" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Kunde inte öppna hämtad ZIP-fil" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "Kunde inte öppna fil %1 för skrivning (%2)" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "Kunde inte öppna ut-fil %1 (%2)" @@ -774,19 +825,19 @@ msgstr "Kunde inte starta överföring" msgid "Could not write to remote file (%1)" msgstr "Kunde inte skriva till fjärrfil (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX primär" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX sekundär" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -798,7 +849,7 @@ msgstr "Flat" msgid "DCI Scope" msgstr "Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML-undertexter" @@ -815,50 +866,35 @@ msgstr "DCP:n kommer spelas upp i %.1f %% av källmaterialets hastighet.\n" msgid "DCP will use every other frame of the content.\n" msgstr "DCP:n kommer använda varannan bild frÃ¥n källmaterialet.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic kunde inte öppna %1 (%2). Kanske finns inte filen eller har ett " -"okänt format." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -"DCP-o-matic var tvungen att ändra dina inställningar för att referera till " -"DCP:er som OV. Var vänlig kontrollera dessa inställningar sÃ¥ att det är " -"korrekta." -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -"DCP-o-matic var tvungen att ändra dina inställningar sÃ¥ att filmens " -"bildhastighet är samma som för Atmos-innehÃ¥llet." - -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic stödjer inte längre '%1'-filtret, sÃ¥ det har inaktiverats." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "Meddelande frÃ¥n DCP-o-matic" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "Datasat AP20 eller AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "Avflätning" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -870,7 +906,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Hej maskinist!\n" "\n" @@ -884,11 +920,15 @@ msgstr "" "Vänliga hälsningar,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 eller CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "Nedladdning misslyckades (%1 fel %2)" @@ -914,19 +954,19 @@ msgstr "E-posta KDM:er för %2" msgid "Email notification" msgstr "E-postmeddelande" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "E-posta felrapport" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "E-posta felrapport för %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "Kodar" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "Episode" @@ -934,20 +974,20 @@ msgstr "Episode" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Fel i undertext-file: sÃ¥g %1 men vi förväntade oss %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Fel: %1" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Läser undertexter" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "Undersöker ljud och undertexter" @@ -959,15 +999,15 @@ msgstr "Läser källmaterial" msgid "Examining subtitles" msgstr "Läser undertexter" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "Undersöker undertexter" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "Extraherar" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -975,53 +1015,53 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Misslyckades att autentisera med server (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "Misslyckades att omvandla DCPn." -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "Misslyckades att skicka e-post" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "Feature" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Filnamn" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Filnamn" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Film" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "Söker längd" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "Bildhastighet" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "Fredag" # Sammanhang? -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Komplett" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Komplett (0-%1)" @@ -1045,36 +1085,36 @@ msgstr "Speltid i bildrutor i DCP:ns hastighet" msgid "Full length in video frames at content rate" msgstr "Speltid i bildrutor i källmaterialets hastighet" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Gamma 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Gamma 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Gradientutjämnare" # Sammanhang? -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "LjudspÃ¥r för hörslinga" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "Högkvalitativ brusreducering för 3D" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Horisontell spegling" @@ -1082,19 +1122,19 @@ msgstr "Horisontell spegling" msgid "Hz" msgstr "Hz" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB eller sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "Om 25 fps används bör DCP-standard vara SMPTE." -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1105,15 +1145,15 @@ msgstr "" "specifikt skäl till att använda Interop. Du bör säkerställa att din DCP " "använder SMPTE under fliken \"DCP\"." -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." @@ -1121,73 +1161,74 @@ msgstr "" "Det är lämpligt att lägga din första undertext minst 2 sekunder efter " "starten pÃ¥ DCPn för att säkerställa att den syns." -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Det är inte känt vad som orsakade detta fel." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "KDM-leverans: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "Kärn-avflätare" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Vänster" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Vänster center" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Vänster baksurround" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Vänster surround" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "Speltid" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "LFE" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "LFE (Sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Begränsat" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Begränsat (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Linjär" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Logaritmisk (100:1 omfÃ¥ng)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Logaritmisk (316:1 omfÃ¥ng)" @@ -1195,7 +1236,7 @@ msgstr "Logaritmisk (316:1 omfÃ¥ng)" msgid "Lost communication between main and writer processes" msgstr "Tappade kommunikationen mellan huvud- och skrivprocessen" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1203,24 +1244,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Mid-side decoder" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Diverse" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Antalet ljudkanaler är inte enhetligt genom hela DCP:n" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "LjudspÃ¥rets samplingsfrekvens är inte enhetlig genom hela DCP:n" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "Bildhastigheten är inte enhetlig genom hela DCP:n" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "Bildstorleken är inte enhetlig genom hela DCP:n" @@ -1228,19 +1269,19 @@ msgstr "Bildstorleken är inte enhetlig genom hela DCP:n" msgid "Missing required setting %1" msgstr "Nödvändig inställning saknas: %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "MÃ¥ndag" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Mono" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "Rörelsekompenserande avflätare" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "Inga CPL:er hittades i DCP:n." @@ -1254,78 +1295,91 @@ msgstr "Ingen e-postserver har angetts i inställningar" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Ingen e-postserver har angetts i inställningar" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "Inga giltiga bildfiler hittades i mappen." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "Brusreducering" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Inget" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "OK (tog %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "OK (tog %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "Endast det första blocket källmaterial kan trimmas frÃ¥n start." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Endast det sista blocket källmaterial kan trimmas frÃ¥n slutet." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "Dövtextning" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "Undertexter" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 #, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" "NÃ¥gra filer har ändrats sedan de lades till i projektet. Öppna projektet i " "DCP-o-matic, kolla inställningarna, spara sedan innan du försöker igen." -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "Orientering" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "Minnet slut" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Överkomplett wavelet-brusreducering" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"Vänligen rapportera detta problem genom att använda 'Hjälp -> Rapportera " +"problem' eller via e-post till carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "Policy" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Förberedd för videobildshastighet" @@ -1333,93 +1387,93 @@ msgstr "Förberedd för videobildshastighet" msgid "Programming error at %1:%2 %3" msgstr "Programmeringsfel vid %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "Promo" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "Public Service Announcement" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "Rating" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Höger" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Höger center" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Höger baksurround" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Höger surround" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Rotera 90 grader moturs" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Rotera 90 grader medurs" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1429,23 +1483,23 @@ msgstr "" "av eftertexterna (FFEC) och första bildrutan av rullande eftertexter " "(FFMC). Du bör lägga till dessa markeringar i fliken \"DCP\"." -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 för 10-, 12-, 14- och 16-bitars system" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1458,27 +1512,27 @@ msgstr "SSH fel [%1]" msgid "SSH error [%1] (%2)" msgstr "SSH fel [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Lördag" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "GÃ¥r igenom bildfiler" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Skickar e-post" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "Short" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "Tecken" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Upplösning" @@ -1486,7 +1540,7 @@ msgstr "Upplösning" msgid "Some audio will be resampled to %1Hz" msgstr "En del av ljudspÃ¥ret kommer samplas om till %1 Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 #, fuzzy msgid "Some files have been changed since they were added to the project." msgstr "" @@ -1495,7 +1549,7 @@ msgstr "" "Dessa filer kommer nu att genomsökas pÃ¥ nytt, deras inställningar kan " "därefter behöva kontrolleras." -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 #, fuzzy msgid "" "Some files have been changed since they were added to the project.\n" @@ -1519,7 +1573,7 @@ msgstr "" "Dessa filer kommer nu att genomsökas pÃ¥ nytt, deras inställningar kan " "därefter behöva kontrolleras." -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." @@ -1527,7 +1581,7 @@ msgstr "" "NÃ¥gra av dina dolda undertext-block har fler än %1 rader. De överskjutande " "raderna kommer förmodligen klippas bort." -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1549,11 +1603,11 @@ msgstr "En del av ditt källmaterial behöver en KDM" msgid "Some of your content needs an OV" msgstr "En del av ditt källmaterial behöver en OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Stereo" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Stereo" @@ -1566,19 +1620,19 @@ msgstr "Stereo till 5.1 upp-mixare A" msgid "Stereo to 5.1 up-mixer B" msgstr "Stereo till 5.1 upp-mixare B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "Söndag" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "Teaser" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Telecine-filter" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "Test" @@ -1598,25 +1652,25 @@ msgstr "Certifikatkedjan för att signera är ogiltig" msgid "The certificate chain for signing is invalid (%1)" msgstr "Certifikatkedjan för att signera är ogiltig (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1626,7 +1680,7 @@ msgstr "" "Vänligen ange den som 2D. Det gÃ¥r fortfarande att göra en 3D DCP frÃ¥n detta " "källmaterial genom att kryssa i 3D-vaket i fliken för DCP-video." -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1634,23 +1688,37 @@ msgstr "" "Filsystemet som filmen lagras pÃ¥ har för lite ledigt utrymme. Frigör utrymme " "och försök igen." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Filen %1 har flyttats %2 millisekunder tidigare." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Filen %1 har flyttats %2 millisekunder senare." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Filen %1 har trimmats med %2 millisekunder mindre." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Filen %1 har trimmats med %2 millisekunder mer." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1665,11 +1733,11 @@ msgstr "" "att ange DCP:ns bildhastighet närmare källmaterialets, förutsatt att den " "tänkta utrustningen för uppspelning klarar den angivna bildhastigheten." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "Det finns inget bildspÃ¥r i denna DCP" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1679,30 +1747,33 @@ msgstr "" "operativsystem, försök att minska antalet kodnings-trÃ¥dar i Allmänt-fliken " "under Inställningar." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "Denna KDM är skapad för DCP-o-matic men inte för dess löv-certifikat." -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "Denna KDM är inte gjord för DCP-o-matics dekrypterings-certifikat." -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "Detta fel beror troligen pÃ¥ att du kör en 32-bitars version av DCP-o-matic " "och försöker köra för mÃ¥nga kodningstrÃ¥dar. Vänligen minska antalet trÃ¥dar " "i inställningarna och försök igen." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "Detta fel beror troligen pÃ¥ att du kör en 32-bitars version av DCP-o-matic. " "Vänligen ominstallera med en 64-bitars version och försök igen." @@ -1715,45 +1786,47 @@ msgstr "" "Detta är en KDM. KDM:er ska läggas till DCP:er genom att högerklicka pÃ¥ " "källmaterialet och välja \"Lägg till KDM\"." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Denna film skapades i en nyare version av DCP-o-matic, och den kan inte " "öppnas i denna version. FörlÃ¥t!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Denna film skapades i en äldre version av DCP-o-matic, och tyvärr kan den " "inte öppnas i denna version. Du mÃ¥ste skapa en ny film, lägga till ditt " "källmaterial och ange inställningar pÃ¥ nytt. FörlÃ¥t!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Torsdag" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "Undertexter" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "Trailer" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "Transkoderar %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "Transitional" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Tisdag" @@ -1761,7 +1834,7 @@ msgstr "Tisdag" msgid "USL" msgstr "USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Oväntat innehÃ¥ll i ZIP-fil" @@ -1769,35 +1842,35 @@ msgstr "Oväntat innehÃ¥ll i ZIP-fil" msgid "Unexpected image type received by server" msgstr "Oväntad bildtyp mottogs av server" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "Okänd" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Okänt fel" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Okänt ljudsamplingsformat (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "Oskarp mask och gaussisk oskärpa" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Ospecificerad" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Utan titel" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Oanvänd" @@ -1810,7 +1883,7 @@ msgid "Upmix R" msgstr "Uppmixa R" # Sammanhang? -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1818,11 +1891,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Verifiera DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Vertikal spegling" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Uppläst text" @@ -1830,24 +1903,24 @@ msgstr "Uppläst text" msgid "Waiting" msgstr "Väntar" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Weave-filter" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Onsdag" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" # Filtret heter sÃ¥, ska ej översättas -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1857,7 +1930,7 @@ msgstr "" "Vald bildhastighet är %1 fps. Denna bildhastighet stöds inte av all " "uppspelningsutrustning. Rekommenderat är att ändra bildhastighet till %2 fps." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1866,7 +1939,7 @@ msgstr "" "Vald bildhastighet är %1 fps. Denna bildhastighet stöds inte av all " "uppspelningsutrustning. Överväg att ändra bildhastighet till %2 fps." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." @@ -1874,19 +1947,11 @@ msgstr "" "Vald bildhastighet är 30 fps. Denna bildhastighet stöds inte av all " "uppspelningsutrustning. Problem vid uppspelning kan förekomma." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Du använder källmaterial i 3D, men DCP:n är inställd för 2D. Ställ in DCP:n " -"för 3D om du vill spela upp den med 3D-utrustning (t.ex. Real-D, MasterImage " -"etc.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "DCP-o-matics stereo-till-5.1-uppmixare används. Denna har experimentstatus " @@ -1894,7 +1959,16 @@ msgstr "" "rekommenderas att du provlyssnar den färdiga DCP:n pÃ¥ biograf för att " "säkerställa att den lÃ¥ter bra." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Du använder källmaterial i 3D, men DCP:n är inställd för 2D. Ställ in DCP:n " +"för 3D om du vill spela upp den med 3D-utrustning (t.ex. Real-D, MasterImage " +"etc.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1902,7 +1976,7 @@ msgstr "" "Du har %1 filer som ser ut att vara VOB-filer frÃ¥n en DVD. Du bör sammanfoga " "dem för att säkerställa korrekta skarvar mellan filerna." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." @@ -1910,7 +1984,7 @@ msgstr "" "Du har mer än en Atmos-del i innehÃ¥llet, och de har inte samma " "bildhastighet. Du mÃ¥ste ta bort nÃ¥gon/nÃ¥gra Atmos-delar." -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1918,7 +1992,7 @@ msgstr "" "Du har överlappande dolda undertextspÃ¥r. Detta är inte tillÃ¥tet för Interop-" "DCP:er. Ändra DCP-standard till SMPTE." -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1930,26 +2004,27 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Du mÃ¥ste lägga till källmaterial till DCP:n innan du skapar den" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "Din DCP har mindre än 6 kanaler ljud. Detta kan skapa problem för en del " "projektorer. Du bör ange 6 kanaler för din DCP. Det spelar ingen roll om " "ditt innehÃ¥ll har färre kanaler, DCP-o-matic fyller i de extra kanalerna med " "tystnad." -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1958,7 +2033,7 @@ msgstr "" "uppspelning pÃ¥ en del utrustning. Använd Flat eller Scope som bildformat om " "möjligt." -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1966,12 +2041,12 @@ msgstr "" "Din ljudnivÃ¥ är mycket hög (pÃ¥ %1). Rekommenderat är att sänka gain pÃ¥ " "ljudspÃ¥ret." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "Ditt projekt innehÃ¥ller bild som inte passar mot en hel bildruta." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1979,21 +2054,21 @@ msgstr "" "Ditt projekt innehÃ¥ller bild som är trimmat sÃ¥ att det inte passar mot en " "hel bildruta." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[bildsekvens]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[stillbild]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[undertexter]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_akt%1" @@ -2025,11 +2100,11 @@ msgstr "kopierar %1" msgid "could not find stream information" msgstr "kunde inte hitta information om strömmen" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "kunde inte flytta in atmos innehÃ¥llet till DCP:n (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "kunde inte flytta in ljud till DCP:n (%1)" @@ -2057,7 +2132,7 @@ msgstr "kunde inte skriva till fil %1 (%2)" msgid "error during async_connect (%1)" msgstr "fel vid async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "fel vid async_read (%1)" @@ -2065,62 +2140,72 @@ msgstr "fel vid async_read (%1)" msgid "error during async_write (%1)" msgstr "fel vid async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "bilder per sekund" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "tim" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "den har en annan bildhastighet än filmen." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "den har en beskärning i början sÃ¥ dess undertitlar mÃ¥ste skrivas om." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "den är i 2K men filmen är i 4K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "den är i 4K men filmen är i 2K." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "den är i Interop men filmen är inställd att vara i SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "den är i SMPTE men filmen är inställd att vara i Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." +msgstr "den överlappar med annat ljud-källmaterial; ta bort detta." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." msgstr "den överlappar med annat ljud-källmaterial; ta bort detta." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "den överlappar med annat video-källmaterial; ta bort detta." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2129,17 +2214,17 @@ msgstr "" "'dela upp enligt källmaterial'." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "bildrutornas storlek skiljer sig frÃ¥n filmens." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "min" # Sammanhang? -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "rörlig" @@ -2148,7 +2233,7 @@ msgid "name" msgstr "namn" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." @@ -2156,7 +2241,7 @@ msgstr "" "en av dess undertitlar har en icke-noll början sÃ¥ den mÃ¥ste skrivas om." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." @@ -2164,31 +2249,39 @@ msgstr "" "en av dess undertexter har en icke-noll början sÃ¥ den mÃ¥ste skrivas om." #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "sek" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "stillbild" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "den överlappar med annat undertext-källmaterial; ta bort detta." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "okänd" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "bildrutor" +#~ msgid "Copying old video file" +#~ msgstr "Kopierar tidigare videofil" + +#~ msgid "Copying video file into DCP" +#~ msgstr "Kopierar in videofil till DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "Meddelande frÃ¥n DCP-o-matic" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "den överlappar med annat undertext-källmaterial; ta bort detta." + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "den har inte dold undertext i alla akter." @@ -2199,13 +2292,6 @@ msgstr "bildrutor" #~ msgstr "den har inte ljud i alla akter." #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "Vänligen rapportera detta problem genom att använda 'Hjälp -> Rapportera " -#~ "problem' eller via e-post till carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "" #~ "Din standard-behÃ¥llare är inte korrekt och har justerats till Flat " diff --git a/src/lib/po/tr_TR.po b/src/lib/po/tr_TR.po index 16e93a77a..d82c29bff 100644 --- a/src/lib/po/tr_TR.po +++ b/src/lib/po/tr_TR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,50 +17,50 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" "Content frame rate %.4f\n" msgstr "" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" msgstr "" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" "Display aspect ratio %.2f:1" msgstr "" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" msgstr "" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" msgstr "" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr "" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr "" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -74,39 +74,77 @@ msgid "" "Size: $SIZE\n" msgstr "" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "" + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +msgid "%1 notification" +msgstr "" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr "" @@ -143,11 +181,11 @@ msgstr "" msgid "1.90 (Full frame)" msgstr "" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "" @@ -159,68 +197,68 @@ msgstr "" msgid "2.39 (Scope)" msgstr "" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -228,14 +266,14 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " "DCP's container to have the same ratio as your content." msgstr "" -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "" @@ -243,58 +281,58 @@ msgstr "" msgid "Analysing audio" msgstr "" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -313,72 +351,72 @@ msgstr "" msgid "Audio will not be resampled" msgstr "" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "" @@ -390,11 +428,11 @@ msgstr "" msgid "Cannot handle pixel format %1 during %2" msgstr "" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "" -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "" @@ -402,7 +440,7 @@ msgstr "" msgid "Channels" msgstr "" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -410,27 +448,31 @@ msgstr "" msgid "Checking content" msgstr "" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +msgid "Closed subtitles" +msgstr "" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "" @@ -444,17 +486,17 @@ msgstr "" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "" @@ -462,15 +504,15 @@ msgstr "" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -486,19 +528,19 @@ msgstr "" msgid "Content sample rate" msgstr "" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "" @@ -507,11 +549,11 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "" -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" @@ -547,7 +589,7 @@ msgstr "" msgid "Content to be joined must have the same fades." msgstr "" -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "" @@ -555,31 +597,31 @@ msgstr "" msgid "Content to be joined must have the same picture size." msgstr "" -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "" -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "" -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "" @@ -587,23 +629,23 @@ msgstr "" msgid "Content to be joined must have the same video frame type." msgstr "" -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "" -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "" -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "" -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "" -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "" @@ -611,14 +653,6 @@ msgstr "" msgid "Copy DCP to TMS" msgstr "" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "" @@ -635,17 +669,17 @@ msgstr "" msgid "Could not decode image (%1)" msgstr "" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 msgid "Could not find file %1 in ZIP file" msgstr "" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "" @@ -653,19 +687,19 @@ msgstr "" msgid "Could not open %1 to send" msgstr "" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "" @@ -681,19 +715,19 @@ msgstr "" msgid "Could not write to remote file (%1)" msgstr "" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "" @@ -705,7 +739,7 @@ msgstr "" msgid "DCI Scope" msgstr "" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "" @@ -722,43 +756,34 @@ msgstr "" msgid "DCP will use every other frame of the content.\n" msgstr "" -#: src/lib/job.cc:172 src/lib/job.cc:187 -msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." -msgstr "" - -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "" - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 msgid "" "Dear Projectionist\n" "\n" @@ -770,14 +795,18 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" +msgstr "" + +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" msgstr "" #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "" @@ -801,19 +830,19 @@ msgstr "" msgid "Email notification" msgstr "" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -821,19 +850,19 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 msgid "Examining audio" msgstr "" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -845,15 +874,15 @@ msgstr "" msgid "Examining subtitles" msgstr "" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "" @@ -861,51 +890,51 @@ msgstr "" msgid "Failed to authenticate with server (%1)" msgstr "" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "" @@ -929,35 +958,35 @@ msgstr "" msgid "Full length in video frames at content rate" msgstr "" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "" @@ -965,105 +994,105 @@ msgstr "" msgid "Hz" msgstr "" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +msgid "It is not known what caused this error. %1" msgstr "" -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 msgid "Limited / video (%1-%2)" msgstr "" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "" @@ -1071,7 +1100,7 @@ msgstr "" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "" @@ -1079,24 +1108,24 @@ msgstr "" msgid "Mid-side decoder" msgstr "" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "" @@ -1104,19 +1133,19 @@ msgstr "" msgid "Missing required setting %1" msgstr "" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "" @@ -1128,74 +1157,83 @@ msgstr "" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "" -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 msgid "OK (ran for %1 from %2 to %3)" msgstr "" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "" -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "" -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +msgid "Open captions" +msgstr "" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "" @@ -1203,116 +1241,116 @@ msgstr "" msgid "Programming error at %1:%2 %3" msgstr "" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "" @@ -1325,27 +1363,27 @@ msgstr "" msgid "SSH error [%1] (%2)" msgstr "" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "" @@ -1353,11 +1391,11 @@ msgstr "" msgid "Some audio will be resampled to %1Hz" msgstr "" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1372,13 +1410,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1397,11 +1435,11 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "" @@ -1413,19 +1451,19 @@ msgstr "" msgid "Stereo to 5.1 up-mixer B" msgstr "" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "" @@ -1445,54 +1483,68 @@ msgstr "" msgid "The certificate chain for signing is invalid (%1)" msgstr "" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." msgstr "" -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "" -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "" -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "" -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "" -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 msgid "" "There is a large difference between the frame rate of your DCP and that of " "some of your content. This will cause your audio to play back at a much " @@ -1501,38 +1553,37 @@ msgid "" "systems support your chosen DCP rate." msgstr "" -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " "tab of Preferences." msgstr "" -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1541,40 +1592,40 @@ msgid "" "the content and choosing \"Add KDM\"." msgstr "" -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "" @@ -1582,7 +1633,7 @@ msgstr "" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "" @@ -1590,35 +1641,35 @@ msgstr "" msgid "Unexpected image type received by server" msgstr "" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "" @@ -1630,7 +1681,7 @@ msgstr "" msgid "Upmix R" msgstr "" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "" @@ -1638,11 +1689,11 @@ msgstr "" msgid "Verify DCP" msgstr "" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "" @@ -1650,74 +1701,74 @@ msgstr "" msgid "Waiting" msgstr "" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. It is advisable to change the DCP frame rate " "to %2 fps." msgstr "" -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " "rate to %2 fps." msgstr "" -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." msgstr "" -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." msgstr "" -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:324 msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" msgstr "" -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." msgstr "" -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1727,59 +1778,59 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." msgstr "" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "" -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "" -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "" @@ -1811,11 +1862,11 @@ msgstr "" msgid "could not find stream information" msgstr "" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "" @@ -1843,7 +1894,7 @@ msgstr "" msgid "error during async_connect (%1)" msgstr "" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "" @@ -1851,78 +1902,85 @@ msgstr "" msgid "error during async_write (%1)" msgstr "" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "" -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "" -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +msgid "it overlaps other audio content." msgstr "" -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +msgid "it overlaps other text content." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:739 +msgid "it overlaps other video content." +msgstr "" + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "" #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "" @@ -1931,40 +1989,36 @@ msgid "name" msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "" - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "" diff --git a/src/lib/po/uk_UA.po b/src/lib/po/uk_UA.po index 73e0d2208..6695a6d6a 100644 --- a/src/lib/po/uk_UA.po +++ b/src/lib/po/uk_UA.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" "PO-Revision-Date: 2018-08-20 19:32+0300\n" "Last-Translator: Igor Voytovich <i.voyt@dualvfilms.com>\n" "Language-Team: УкраїнÑька\n" @@ -15,7 +15,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -24,7 +24,7 @@ msgstr "" "\n" "ЧаÑтота кадрів контенту %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -32,7 +32,7 @@ msgstr "" "\n" "Розмір при кадруванні: %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -41,7 +41,7 @@ msgstr "" "\n" "Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін контенту %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -49,7 +49,7 @@ msgstr "" "\n" "Заповнено чорним Ð´Ð»Ñ Ð¿Ñ–Ð´Ð³Ð¾Ð½ÐºÐ¸ контейнера %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -57,18 +57,18 @@ msgstr "" "\n" "Розмір при маÑштабуванні: %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " на %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 #, fuzzy msgid "" "$CPL_NAME\n" @@ -92,39 +92,82 @@ msgstr "" "ТриваліÑть: $LENGTH\n" "Розмір: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [Atmos]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [аудіо]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [відео]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [відео]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +#, fuzzy +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "" +"DCP-o-matic не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %1 (%2). Можливо він не Ñ–Ñнує або має " +"неочікуваний формат." + +#: src/lib/film.cc:1659 +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" + +#: src/lib/film.cc:1627 +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "DCP-o-matic більше не підтримує фильтр `%1', тому він був вимкнений." + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "E-mail повідомленнÑ" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін пікÑелей %.2f:1" @@ -161,11 +204,11 @@ msgstr "1.85 (Flat)" msgid "1.90 (Full frame)" msgstr "1.90 (Full frame)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 #, fuzzy msgid "16" msgstr "1.66" @@ -178,71 +221,72 @@ msgstr "2.35 (35mm Scope)" msgid "2.39 (Scope)" msgstr "2.39 (Scope)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ 3D" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " "advisable to set the DCP to be 2K in the \"DCP→Video\" tab." msgstr "" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 кадр/Ñек" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; %1 залишилоÑÑŒ; Ñ‡Ð°Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %2%3" -#: src/lib/analytics.cc:65 +#: src/lib/analytics.cc:66 msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "ДеÑкі проектори мають проблеми із відтвореннÑм DCP з дуже виÑоким бітрейтом. " "Гарною ідеєю було б знизити пропуÑкну здатніÑть JPEG2000 до 200Мбит/Ñ; " "наврÑд чи це призведе до помітних змін зображеннÑ." -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 ('Hybrid log-gamma')" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "ADV (Реклама)" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -253,7 +297,7 @@ msgstr "" "означає, що у кадрі зверху та знизу вашого контенту будуть чорні облаÑті. Ви " "можете змінити формат кадра вашого DCP на SCOPE (2.39:1) на вкладці \"DCP\"." -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -265,7 +309,7 @@ msgstr "" "будуть чорні облаÑті. Ви можете змінити формат кадра вашого DCP на FLAT " "(1.85:1) на вкладці \"DCP\"." -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "Виникла помилка при зверненні до файлу %1." @@ -274,59 +318,59 @@ msgstr "Виникла помилка при зверненні до файлу msgid "Analysing audio" msgstr "Ðналіз аудіо" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 #, fuzzy msgid "Analysing subtitles" msgstr "Пошук Ñубтитрів" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -345,73 +389,73 @@ msgstr "Ðудіо будет реÑемпловано в %1 Гц" msgid "Audio will not be resampled" msgstr "Ðудіо не буде реÑемпловано" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361 розширена колірна гамма" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 поÑтійна ÑÑкравіÑть" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 Ð´Ð»Ñ 10-бітної ÑиÑтеми" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 Ð´Ð»Ñ 12-бітної ÑиÑтеми" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 непоÑтійна ÑÑкравіÑть" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "Біт на пікÑель" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 #, fuzzy msgid "Bob Weaver Deinterlacing Filter" msgstr "Ще один фільтр деінтерлейÑинга" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "BsL" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "BsR" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "C" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "Відмінено" @@ -423,11 +467,11 @@ msgstr "Ðе може міÑтити Ñлеші" msgid "Cannot handle pixel format %1 during %2" msgstr "Ðеможливо обробити формат пікÑÐµÐ»Ñ %1 під Ñ‡Ð°Ñ %2" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "Ðе можна Ñтворити KDM так Ñк цей проект не зашифрований." -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "Центральний" @@ -435,7 +479,7 @@ msgstr "Центральний" msgid "Channels" msgstr "Канали" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "" @@ -444,28 +488,33 @@ msgstr "" msgid "Checking content" msgstr "Перевірка контенту" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "Перевірка данних зображеннÑ" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "Хроматична поÑтійна ÑÑкравіÑть" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "Хроматична непоÑтійна ÑÑкравіÑть" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 #, fuzzy msgid "Closed captions" msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "ТекÑтові Ñубтитри" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "ОÑновні кольори" @@ -479,17 +528,17 @@ msgstr "ОÑновні кольори" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "Колірна гамма" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "ХарактериÑтика передачі кольору" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "Кольорова палітра" @@ -497,15 +546,15 @@ msgstr "Кольорова палітра" msgid "Combine DCPs" msgstr "" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "Перевірка цілоÑтноÑті" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "Перевірка цілоÑтноÑті" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "" @@ -523,23 +572,23 @@ msgstr "тип контенту" msgid "Content sample rate" msgstr "ШвидкіÑть аудіо-контенту" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ контенту, вÑÑ– інші мають міÑтити або не міÑтити аудіо" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 #, fuzzy msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ контенту, вÑÑ– інші мають міÑтити або не міÑтити Ñубтитри" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ контенту, вÑÑ– інші мають міÑтити або не міÑтити відео" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 #, fuzzy msgid "" "Content to be joined must both be main subtitle languages or both additional." @@ -551,12 +600,12 @@ msgstr "" msgid "Content to be joined must have all its video used or not used." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути така Ñама чаÑтота кадрів відео" -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ мають бути такі Ñамі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ \"вшити Ñубтитри\"." -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ мають бути такі Ñамі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ \"викориÑтовувати " @@ -598,7 +647,7 @@ msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ мають бути Ñ‚Ð°ÐºÑ msgid "Content to be joined must have the same fades." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме згаÑаннÑ." -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути однакова ширина обводки." @@ -606,36 +655,36 @@ msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути однакРmsgid "Content to be joined must have the same picture size." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий розмір зображеннÑ." -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме горизонтальне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñубтитрів." -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме розмір Ñубтитрів по горизонталі." -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме вертикальне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñубтитрів." -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме розмір Ñубтитрів по вертикалі." -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути однакове згаÑÐ°Ð½Ð½Ñ Ñубтитрів." -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "" "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий інтервал між Ñ€Ñдками Ñубтитрів." -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути така Ñама чаÑтота кадрів відео" @@ -643,25 +692,25 @@ msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути така Ñ msgid "Content to be joined must have the same video frame type." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий тип відео." -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 #, fuzzy msgid "Content to be joined must use the same DCP track." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий шрифт." -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий шрифт." -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ необхідно викориÑтовувати ті Ñамі Ñубтитри." -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 #, fuzzy msgid "Content to be joined must use the same text language." msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий шрифт." -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "Розмір контенту: %1x%2" @@ -669,15 +718,6 @@ msgstr "Розмір контенту: %1x%2" msgid "Copy DCP to TMS" msgstr "Копіювати DCP на TMS (Theater Management System)" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "" - -#: src/lib/reel_writer.cc:407 -#, fuzzy -msgid "Copying video file into DCP" -msgstr "ÐевідповідніÑть розміру відео в DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ð¸ÑÑ Ð´Ð¾ Ñерверу %1 (%2)" @@ -695,20 +735,21 @@ msgstr "Ðе вдалоÑÑŒ декодувати JPEG2000-файл %1 (%2)" msgid "Could not decode image (%1)" msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ (%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ завантажений ZIP-архів" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "" "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñлухати віддалений Ñервер кодуваннÑ. Можливо працює ще одна " "ÐºÐ¾Ð¿Ñ–Ñ DCP-o-matic." -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1" @@ -716,21 +757,21 @@ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1" msgid "Could not open %1 to send" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1 Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²ÐºÐ¸" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ завантажений ZIP-архів" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 #, fuzzy msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ завантажений ZIP-архів" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 #, fuzzy msgid "Could not open file for writing" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %1 Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу (%2)" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 #, fuzzy msgid "Could not open output file %1 (%2)" msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати в файл %1 (%2)" @@ -747,19 +788,19 @@ msgstr "Ðе вдалоÑÑ Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¸ передачу" msgid "Could not write to remote file (%1)" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати в віддалений файл (%1)" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "D-BOX оÑновний (DBP)" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "D-BOX другорÑдний (DBS)" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -771,7 +812,7 @@ msgstr "DCI Flat" msgid "DCI Scope" msgstr "DCI Scope" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XML Ñубтитри" @@ -788,45 +829,35 @@ msgstr "DCP буде програватиÑÑ Ð½Ð° %.1f%% від швидкоÑÑ msgid "DCP will use every other frame of the content.\n" msgstr "DCP буде викориÑтовувати кажний другий кадр контенту.\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %1 (%2). Можливо він не Ñ–Ñнує або має " -"неочікуваний формат." -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." msgstr "" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." msgstr "" -#: src/lib/ffmpeg_content.cc:121 -msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "DCP-o-matic більше не підтримує фильтр `%1', тому він був вимкнений." - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ DCP-o-matic" - #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "ДеинтерлейÑинг" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -838,7 +869,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "Шановний кіномеханик\n" "\n" @@ -852,12 +883,16 @@ msgstr "" "Із найкращими побажаннÑми,\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 #, fuzzy msgid "Dolby CP650 or CP750" msgstr "Dolby CP650 и CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 #, fuzzy msgid "Download failed (%1 error %2)" msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ (%1/%2 помилка %3)" @@ -883,19 +918,19 @@ msgstr "Відправка ключей %1 по Email" msgid "Email notification" msgstr "E-mail повідомленнÑ" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "Повідомити про проблему" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "Помилка відправки ключей %1 по Email" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "КодуваннÑ" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "" @@ -903,20 +938,20 @@ msgstr "" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "Помилка у файлі Ñубтитрів: знайдено %1, однак очікуєтьÑÑ %2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "Помилка: (%1)" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "" -#: src/lib/hints.cc:397 +#: src/lib/hints.cc:417 #, fuzzy msgid "Examining audio" msgstr "Пошук Ñубтитрів" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -930,17 +965,17 @@ msgstr "Перевірка контенту" msgid "Examining subtitles" msgstr "Пошук Ñубтитрів" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Пошук Ñубтитрів" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 #, fuzzy msgid "Extracting" msgstr "RTG (Рейтинг)" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -948,54 +983,54 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "Помилка аутентифікації Ñервером (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 #, fuzzy msgid "Failed to encode the DCP." msgstr "Помилка відправки email (%1)" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 #, fuzzy msgid "Failed to send email" msgstr "Помилка відправки email (%1)" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "FTR (Фільм)" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "Ім`Ñ Ñ„Ð°Ð¹Ð»Ñƒ" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 #, fuzzy msgid "Filenames" msgstr "Ім`Ñ Ñ„Ð°Ð¹Ð»Ñƒ" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "Проект" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "РаÑчет длительноÑти" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "ЧаÑтота кадрів" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "П'ÑтницÑ" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Повний" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "Повний (0-%1)" @@ -1019,35 +1054,35 @@ msgstr "Повна довжина відео-кадрів на швидкоÑÑ‚Ñ msgid "Full length in video frames at content rate" msgstr "Повна довжина відео-кадрів на швидкоÑті контенту" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "Гамма 22 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "Гамма 28 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "Ð Ð¾Ð·Ð±Ð¸Ñ‚Ñ‚Ñ Ð³Ñ€Ð°Ð´Ñ–Ñ”Ð½Ñ‚Ð°" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "HI" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "Ð”Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹ з вадами Ñлуху" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "ВиÑокоÑкіÑне Ð¿Ñ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ 3D" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "Перевернути по горизонталі" @@ -1055,106 +1090,107 @@ msgstr "Перевернути по горизонталі" msgid "Hz" msgstr "Гц" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB или sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " "particular reason to use Interop. It is advisable to set your DCP to use " "the SMPTE standard in the \"DCP\" tab." msgstr "" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." msgstr "" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "Ðевідомо, що викликало цю помилку." -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ KDM: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "ДеинтерлейÑинг Ñдром" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "L" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "Лівий" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "Лівий центральний" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "Лівий тиловий surround" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "Лівий surround" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "ТриваліÑть" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "LFE" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "ÐЧ (sub)" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "Обмежено" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 #, fuzzy msgid "Limited / video (%1-%2)" msgstr "Обмежено (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "Лінійний" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "Логаріфмічний (діапазон 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "Логаріфмічний (діапазон 316:1)" @@ -1162,7 +1198,7 @@ msgstr "Логаріфмічний (діапазон 316:1)" msgid "Lost communication between main and writer processes" msgstr "" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "Ls" @@ -1170,24 +1206,24 @@ msgstr "Ls" msgid "Mid-side decoder" msgstr "Mid-side декодер" -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "Різне" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "Ðевідповідна кількіÑть аудіоканалів в DCP" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "ÐевідповідніÑть чаÑтоти диÑкретизації аудіо в DCP" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "ÐевідповідніÑть чаÑтоти кадрів в DCP" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "ÐевідповідніÑть розміру відео в DCP" @@ -1195,19 +1231,19 @@ msgstr "ÐевідповідніÑть розміру відео в DCP" msgid "Missing required setting %1" msgstr "ВідÑутнє обов'Ñзкове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "Понеділок" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "Моно" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "ДеінтерлейÑер компенÑації руху" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "У DCP не виÑвлені CPL-файли." @@ -1221,76 +1257,86 @@ msgstr "Ðе наÑтроєний поштовий Ñервер у Ð½Ð°Ð»Ð°ÑˆÑ‚Ñ msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "Ðе наÑтроєний поштовий Ñервер у налаштуваннÑÑ…" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "У папці не знайдено відповідних зображень." -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "Ðічого" -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 #, fuzzy msgid "OK (ran for %1 from %2 to %3)" msgstr "Готово! (виконано за %1)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "Готово! (виконано за %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "Тільки перший елемент контенту може мати обрізку з початку." -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "Тільки оÑтанній елемент контенту може мати обрізку з кінцÑ." -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ" + +#: src/lib/text_type.cc:79 #, fuzzy msgid "Open subtitles" msgstr "ТекÑтові Ñубтитри" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "ОріентаціÑ" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "ÐедоÑтатньо пам'Ñті (Out of memory)" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "Ðадповне Ð¿Ñ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ невеликої хвилі" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "POL (Стратегічний)" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "Підготовлене Ð´Ð»Ñ Ñ‡Ð°Ñтоти кадрів відео" @@ -1298,116 +1344,116 @@ msgstr "Підготовлене Ð´Ð»Ñ Ñ‡Ð°Ñтоти кадрів відео" msgid "Programming error at %1:%2 %3" msgstr "Помилка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "PSA (Соціальна реклама)" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "R" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "RTG (Рейтинг)" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "Правий" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "Правий центральний" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "Правий тиловий surround" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "Правий surround" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "Повернути на 90º проти чаÑової Ñтрілкі" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "Повернути на 90º по чаÑовій Ñтрілці" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "Rs" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " "You should add these markers using the 'Markers' button in the \"DCP\" tab." msgstr "" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 Ð´Ð»Ñ 10, 12, 14 та 16-бітних ÑиÑтем" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1422,27 +1468,27 @@ msgstr "Помилка SSH (%1)" msgid "SSH error [%1] (%2)" msgstr "Помилка SSH (%1)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "Субота" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² зображеннÑ" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "Відправка пошти" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "SHR (Короткометражний фільм)" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "Розмір" @@ -1450,11 +1496,11 @@ msgstr "Розмір" msgid "Some audio will be resampled to %1Hz" msgstr "ДеÑке аудіо будет реÑемпловано в %1 Гц" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1469,13 +1515,13 @@ msgid "" "These files will now be re-examined, so you may need to check their settings." msgstr "" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1495,11 +1541,11 @@ msgstr "ЧаÑтина вашого контенту потребує KDM" msgid "Some of your content needs an OV" msgstr "ЧаÑть вашего контента требует OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "Стерео" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 #, fuzzy msgid "Stereo card" msgstr "Стерео" @@ -1512,19 +1558,19 @@ msgstr "Перетворювач A Ñтерео-->5.1" msgid "Stereo to 5.1 up-mixer B" msgstr "Перетворювач B Ñтерео-->5.1" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "ÐеділÑ" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "TSR (Тизер)" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "Фільтр Telecine" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "TST (ТеÑтовий)" @@ -1544,32 +1590,32 @@ msgstr "Ланцюг Ñертифікатів Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñу невірн msgid "The certificate chain for signing is invalid (%1)" msgstr "Ланцюг Ñертифікатів Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñу невірний (%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " "ticking the 3D option in the DCP video tab." msgstr "" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." @@ -1577,23 +1623,37 @@ msgstr "" "Ðа приÑтрої, на Ñкому зберігаєтьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚, закінчуєтьÑÑ Ð¼Ñ–Ñце. Звільніть " "трохи міÑÑ†Ñ Ñ‚Ð° Ñпробуйте знову." -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "Файл %1 переміщений на %2 міліÑекунди раніше." -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "Файл %1 переміщений на %2 міліÑекунди пізніше." -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "Файл %1 був обрізаний на %2 міліÑекунд менше." -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "Файл %1 був обрізаний на %2 міліÑекунд більше." -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1608,11 +1668,11 @@ msgstr "" "вашого контенту, при умові, що ваша цільова проекційна ÑиÑтема підтримує " "обрану вами швидкіÑть DCP." -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "У даному DCP немає відео" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " @@ -1622,27 +1682,30 @@ msgstr "" "Ñпробуйте зменшити кількіÑть потоків ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ \"ÐалаштуваннÑÑ…\" у вкладці " "\"ОÑновні\"." -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +msgid "This KDM was not made for %1's decryption certificate." msgstr "" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" +"ÐедоÑтатньо пам'Ñті Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ—. Якщо у Ð²Ð°Ñ 32-бітна ÑиÑтема, " +"Ñпробуйте зменшити кількіÑть потоків ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ \"ÐалаштуваннÑÑ…\" у вкладці " +"\"ОÑновні\"." -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" #: src/lib/exceptions.cc:113 @@ -1653,46 +1716,48 @@ msgstr "" "Цей файл - ключ (KDM). Ключі додаютьÑÑ Ð´Ð¾ DCP натиÑканнÑм правої клавіші на " "контент Ñ– вибором «Додати KDM» у контекÑтному меню." -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "Проект був Ñтворений більш новою верÑією DCP-o-matic Ñ– не може бути " "завантажений цією верÑією. Вибачте!" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "Проект був Ñтворений більш Ñтарою верÑією DCP-o-matic Ñ–, на жаль, не може " "бути завантажений цією верÑією. Вам необхідно Ñтворити новий проект, " "повторно додати контент та налаштувати його. Вибачте!" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "Четвер" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "TRL (Трейлер)" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 #, fuzzy msgid "Transcoding %1" msgstr "ТранÑÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "XSN (Транзитний)" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "Вівторок" @@ -1700,7 +1765,7 @@ msgstr "Вівторок" msgid "USL" msgstr "" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "Ðеочікуваний зміÑÑ‚ ZIP-файла" @@ -1708,36 +1773,36 @@ msgstr "Ðеочікуваний зміÑÑ‚ ZIP-файла" msgid "Unexpected image type received by server" msgstr "Сервером отриманий неочікуваний тип зображеннÑ" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 #, fuzzy msgid "Unknown" msgstr "невідомо" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "Ðевідома помилка" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "Ðерозпізнаний формат аудіо (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "МаÑка Ð¿Ð¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ€Ñ–Ð·ÐºÐ¾Ñті та ГауÑÑово розмиттÑ" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "Ðе визначено" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "Безіменний" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "Ðе викориÑтовуєтьÑÑ" @@ -1749,7 +1814,7 @@ msgstr "Перевторити Л" msgid "Upmix R" msgstr "Перевторити П" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "VI" @@ -1757,11 +1822,11 @@ msgstr "VI" msgid "Verify DCP" msgstr "Перевірити DCP" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "Перевернути по вертикалі" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "Ð”Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹ з вадами зору" @@ -1769,23 +1834,23 @@ msgstr "Ð”Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹ з вадами зору" msgid "Waiting" msgstr "ОчікуваннÑ" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Фільтр Weave" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "Середа" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Ще один фільтр деінтерлейÑинга" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1795,7 +1860,7 @@ msgstr "" "Ви обрали Ð´Ð»Ñ Interop DCP чаÑтоту кадрів, Ñка офіційно не підтримуєтьÑÑ. " "Радимо змінити чаÑтоту кадрів вашого DCP або заміÑть цього зробити SMPTE DCP." -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1805,7 +1870,7 @@ msgstr "" "Ви обрали Ð´Ð»Ñ Interop DCP чаÑтоту кадрів, Ñка офіційно не підтримуєтьÑÑ. " "Радимо змінити чаÑтоту кадрів вашого DCP або заміÑть цього зробити SMPTE DCP." -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 #, fuzzy msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " @@ -1814,19 +1879,11 @@ msgstr "" "Ви обрали Ð´Ð»Ñ Interop DCP чаÑтоту кадрів, Ñка офіційно не підтримуєтьÑÑ. " "Радимо змінити чаÑтоту кадрів вашого DCP або заміÑть цього зробити SMPTE DCP." -#: src/lib/hints.cc:304 -msgid "" -"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " -"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" -msgstr "" -"Ви викориÑтовуєте 3D контент, але тип вашого DCP - 2D. Змінить тип DCP на " -"3D, Ñкщо хочете відтворити його на 3D-ÑиÑтемі (напр. Real-D, MasterImage Ñ– Ñ‚." -"п.)" - -#: src/lib/hints.cc:120 +#: src/lib/hints.cc:127 +#, fuzzy msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " "resulting DCP in a cinema to make sure that it sounds good." msgstr "" "Ви викориÑтовуєте поÑилювач DCP-o-matic Ð´Ð»Ñ Ñтерео-в-5.1. Це Ñ” " @@ -1834,7 +1891,16 @@ msgstr "" "продовжите, ви маєте проÑлухати отриманий DCP у кінотеатрі, щоб впевнитиÑÑŒ, " "що він звучить добре." -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:324 +msgid "" +"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " +"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" +msgstr "" +"Ви викориÑтовуєте 3D контент, але тип вашого DCP - 2D. Змінить тип DCP на " +"3D, Ñкщо хочете відтворити його на 3D-ÑиÑтемі (напр. Real-D, MasterImage Ñ– Ñ‚." +"п.)" + +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1842,19 +1908,19 @@ msgstr "" "У Ð²Ð°Ñ %1 файлів, Ñкі Ñхожі на VOB-файли з DVD. Вам необхідно об'єднати " "(приєднати) Ñ—Ñ…, щоб гарантувати гладке з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ файлами." -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1866,22 +1932,22 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Вам необхідно додати контент в DCP перед його ÑтвореннÑм" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -1891,7 +1957,7 @@ msgstr "" "призвеÑти к проблемам на деÑких проекторах. Якщо можливо, викориÑтовуйте " "ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін Flat або Scope Ð´Ð»Ñ DCP" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." @@ -1899,14 +1965,14 @@ msgstr "" "Рівень вашого аудіо занадто виÑокий (на %1). Вам варто знизити рівень " "гучноÑті вашого аудіо-контенту." -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "" "У вашому проекті міÑтитьÑÑ Ð²Ñ–Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, Ñкий не був прив’Ñзаний до межі " "кадру." -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." @@ -1914,21 +1980,21 @@ msgstr "" "У вашому проекті міÑтитьÑÑ Ð²Ñ–Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, обрізка Ñкого не була вирівнена по " "межі кадру." -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[поÑлідовніÑть]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[Ñтатичний]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[Ñубтитри]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "" @@ -1960,12 +2026,12 @@ msgstr "ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ %1" msgid "could not find stream information" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ інформацію про поток" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 #, fuzzy msgid "could not move atmos asset into the DCP (%1)" msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити аудіо в DCP-пакет (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити аудіо в DCP-пакет (%1)" @@ -1996,7 +2062,7 @@ msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати в файл %1 (%2)" msgid "error during async_connect (%1)" msgstr "помилка під Ñ‡Ð°Ñ async_connect (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "помилка під Ñ‡Ð°Ñ async_read (%1)" @@ -2004,65 +2070,75 @@ msgstr "помилка під Ñ‡Ð°Ñ async_read (%1)" msgid "error during async_write (%1)" msgstr "помилка під Ñ‡Ð°Ñ async_write (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "кадра(ів) в Ñекунду" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "г" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 #, fuzzy msgid "it has a different frame rate to the film." msgstr "чаÑтота кадрів проекту відрізнÑєтьÑÑ Ð²Ñ–Ð´ чаÑтоти кадрів DCP." -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 #, fuzzy msgid "it is 2K and the film is 4K." msgstr "Ñ” Interop , а проект наÑтроений Ñк SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 #, fuzzy msgid "it is 4K and the film is 2K." msgstr "Ñ” Interop , а проект наÑтроений Ñк SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "Ñ” Interop , а проект наÑтроений Ñк SMPTE." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "Ñ” SMPTE, а проект наÑтроений Ñк Interop." -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." msgstr "перекриває інший аудіо-контент; приберіть інший аудіо-контент." -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." +msgstr "перекриває інший аудіо-контент; приберіть інший аудіо-контент." + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "перекриває інший відео-контент; приберіть інший відео-контент." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2071,16 +2147,16 @@ msgstr "" "бобін «РозділÑти по відео-контенту»." #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "розмір кадру відео у проекті відрізнÑєтьÑÑ Ð²Ð¸Ð´ розміру відео DCP." #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "м" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "поÑлідовніÑть" @@ -2089,46 +2165,52 @@ msgid "name" msgstr "назва" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "Ñ" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "Ñтатичний" -#: src/lib/dcp_content.cc:790 -#, fuzzy -msgid "they overlap other text content; remove the other content." -msgstr "перекриває інший відео-контент; приберіть інший відео-контент." - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "невідомо" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "відеокадри" #, fuzzy +#~ msgid "Copying video file into DCP" +#~ msgstr "ÐевідповідніÑть розміру відео в DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ DCP-o-matic" + +#, fuzzy +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "перекриває інший відео-контент; приберіть інший відео-контент." + +#, fuzzy #~ msgid "it does not have closed captions in all its reels." #~ msgstr "у вÑÑ–Ñ… бобінах відÑутній звук." diff --git a/src/lib/po/zh_CN.po b/src/lib/po/zh_CN.po index 8cb34b9ca..f308a5ec8 100644 --- a/src/lib/po/zh_CN.po +++ b/src/lib/po/zh_CN.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: LIBDCPOMATIC\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 16:08+0200\n" -"PO-Revision-Date: 2023-09-15 00:45+0800\n" +"POT-Creation-Date: 2024-09-27 20:49+0200\n" +"PO-Revision-Date: 2024-11-19 08:31+0800\n" "Last-Translator: Dian Li <xslidian@gmail.com>\n" "Language-Team: Chinese Simplified (Rov8 branch)\n" "Language: zh_CN\n" @@ -21,10 +21,10 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.5\n" "X-Poedit-SourceCharset: UTF-8\n" -#: src/lib/video_content.cc:518 +#: src/lib/video_content.cc:520 #, c-format msgid "" "\n" @@ -33,7 +33,7 @@ msgstr "" "\n" "æºè§†é¢‘帧率 %.4f\n" -#: src/lib/video_content.cc:482 +#: src/lib/video_content.cc:484 msgid "" "\n" "Cropped to %1x%2" @@ -41,7 +41,7 @@ msgstr "" "\n" "è£å‰ªä¸º %1x%2" -#: src/lib/video_content.cc:472 +#: src/lib/video_content.cc:474 #, c-format msgid "" "\n" @@ -50,7 +50,7 @@ msgstr "" "\n" "显示宽高比 %.2f:1" -#: src/lib/video_content.cc:506 +#: src/lib/video_content.cc:508 msgid "" "\n" "Padded with black to fit container %1 (%2x%3)" @@ -58,7 +58,7 @@ msgstr "" "\n" "填充为黑色,以适应打包宽高比 %1 (%2x%3)" -#: src/lib/video_content.cc:496 +#: src/lib/video_content.cc:498 msgid "" "\n" "Scaled to %1x%2" @@ -66,18 +66,18 @@ msgstr "" "\n" "缩放到 %1x%2" -#: src/lib/video_content.cc:500 src/lib/video_content.cc:511 +#: src/lib/video_content.cc:502 src/lib/video_content.cc:513 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" #. TRANSLATORS: the %1 in this string will be filled in with a day of the week #. to say what day a job will finish. -#: src/lib/job.cc:588 +#: src/lib/job.cc:598 msgid " on %1" msgstr " 于 %1" -#: src/lib/config.cc:1276 +#: src/lib/config.cc:1275 msgid "" "$CPL_NAME\n" "\n" @@ -101,39 +101,83 @@ msgstr "" "长度: $LENGTH\n" "大å°: $SIZE\n" -#: src/lib/config.cc:1254 +#: src/lib/config.cc:1253 msgid "$JOB_NAME: $JOB_STATUS" msgstr "$任务åç§°: $JOB_STATUS" -#: src/lib/cross_common.cc:102 +#: src/lib/cross_common.cc:99 msgid "%1 (%2 GB) [%3]" msgstr "%1 (%2 GB) [%3]" -#: src/lib/atmos_mxf_content.cc:96 +#: src/lib/atmos_mxf_content.cc:97 msgid "%1 [Atmos]" msgstr "%1 [全景声]" -#: src/lib/dcp_content.cc:334 +#: src/lib/dcp_content.cc:361 msgid "%1 [DCP]" msgstr "%1 [DCP]" -#: src/lib/ffmpeg_content.cc:353 +#: src/lib/ffmpeg_content.cc:354 msgid "%1 [audio]" msgstr "%1 [音频]" -#: src/lib/ffmpeg_content.cc:349 +#: src/lib/ffmpeg_content.cc:350 msgid "%1 [movie]" msgstr "%1 [影片]" -#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105 +#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106 msgid "%1 [video]" msgstr "%1 [视频]" -#: src/lib/transcode_job.cc:162 +#: src/lib/job.cc:181 src/lib/job.cc:196 +msgid "" +"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an " +"unexpected format." +msgstr "%1 æ— æ³•æ‰“å¼€æ–‡ä»¶%2 (%3)。文件ä¸å˜åœ¨æˆ–æ ¼å¼æ— 法识别。" + +#: src/lib/film.cc:1659 +#, fuzzy +msgid "" +"%1 had to change your settings for referring to DCPs as OV. Please review " +"those settings to make sure they are what you want." +msgstr "" +"DCP-o-matic必须把您DCP的设置更改为OVã€‚è¯·é‡æ–°æ£€æŸ¥è®¾ç½®ç¡®è®¤è®¾ç½®å†…容是å¦ä¸ºæ‚¨çš„æœŸ" +"望值。" + +#: src/lib/film.cc:1627 +#, fuzzy +msgid "" +"%1 had to change your settings so that the film's frame rate is the same as " +"that of your Atmos content." +msgstr "DCP-o-matic必须更改您DCP的设置,使影片的帧率与 Atmos 内容一致。" + +#: src/lib/film.cc:1672 +msgid "" +"%1 had to remove one of your custom reel boundaries as it no longer lies " +"within the film." +msgstr "%1 å¿…é¡»åˆ é™¤ä¸€ä¸ªè‡ªå®šä¹‰å·è½´è¾¹ç•Œï¼Œå› 为它ä¸å†ä½äºŽå½±ç‰‡å†…" + +#: src/lib/film.cc:1670 +msgid "" +"%1 had to remove some of your custom reel boundaries as they no longer lie " +"within the film." +msgstr "%1å¿…é¡»åˆ é™¤ä¸€äº›è‡ªå®šä¹‰å·è½´è¾¹ç•Œï¼Œå› 为它ä¸å†ä½äºŽå½±ç‰‡ä¸" + +#: src/lib/ffmpeg_content.cc:122 +#, fuzzy +msgid "%1 no longer supports the `%2' filter, so it has been turned off." +msgstr "䏿”¯æŒçš„æ ¼å¼`%1'。" + +#: src/lib/config.cc:434 src/lib/config.cc:1250 +#, fuzzy +msgid "%1 notification" +msgstr "电å邮件æé†’" + +#: src/lib/transcode_job.cc:180 msgid "%1; %2/%3 frames" msgstr "%1; %2/%3 帧" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", åƒç´ 宽高比 %.2f:1" @@ -170,11 +214,11 @@ msgstr "1.85 (é®å¹…)" msgid "1.90 (Full frame)" msgstr "1.90 (全幅)" -#: src/lib/util.cc:661 +#: src/lib/util.cc:668 msgid "10" msgstr "10" -#: src/lib/util.cc:667 +#: src/lib/util.cc:674 msgid "16" msgstr "16" @@ -186,11 +230,11 @@ msgstr "2.35 (35mm 宽幅)" msgid "2.39 (Scope)" msgstr "2.39 (宽幅)" -#: src/lib/filter.cc:102 +#: src/lib/filter.cc:103 msgid "3D denoiser" msgstr "3D é™å™ª" -#: src/lib/hints.cc:210 +#: src/lib/hints.cc:221 msgid "" "4K 3D is only supported by a very limited number of projectors. Unless you " "know that you will play this DCP back on a capable projector, it is " @@ -199,32 +243,33 @@ msgstr "" "åªæœ‰æžå°‘æ•°çš„æ”¾æ˜ è®¾å¤‡æ”¯æŒ4K 3Dï¼Œé™¤éžæ‚¨ç¡®è®¤ä½ çš„è®¾å¤‡æ”¯æŒæ”¾æ˜ ,å¦åˆ™å»ºè®®åœ¨â€œDCP→视" "频â€é€‰é¡¹å¡ä¸å°†DCP设置为2K。" -#: src/lib/util.cc:660 +#: src/lib/util.cc:667 msgid "9" msgstr "9" #. TRANSLATORS: fps here is an abbreviation for frames per second -#: src/lib/transcode_job.cc:165 +#: src/lib/transcode_job.cc:183 msgid "; %1 fps" msgstr "; %1 fps" -#: src/lib/job.cc:593 +#: src/lib/job.cc:603 msgid "; %1 remaining; finishing at %2%3" msgstr "; 剩余 %1 ; 完æˆäºŽ %2%3" -#: src/lib/analytics.cc:65 -msgid "" -"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the " -"developer of DCP-o-matic. I work on it in my spare time (with the help of a " -"fine volunteer team of testers and translators) and I release it as free " -"software.<p>If you find DCP-o-matic useful, please consider a donation to " -"the project. Financial support will help me to spend more time developing " -"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a " -"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to " -"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!" +#: src/lib/analytics.cc:66 +#, fuzzy +msgid "" +"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me." +"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the " +"developer of %3. I work on it in my spare time (with the help of a fine " +"volunteer team of testers and translators) and I release it as free software." +"<p>If you find %4 useful, please consider a donation to the project. " +"Financial support will help me to spend more time developing %5 and making " +"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic." +"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a " +"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " +"donate €10</a></ul><p>Thank you!</font>" msgstr "" "<h2>您已ç»ç”¨ DCP-o-matic 创建了%1 DCPï¼</h2><img width=\"20%%\" src=\"memory:" "me.jpg\" align=\"center\"><p>ä½ å¥½ã€‚æˆ‘æ˜¯å¡å°”,我是DCP-o-matic的开å‘者。我在业" @@ -236,33 +281,35 @@ msgstr "" "a><li><a href=\"https://dcpomatic.com/donate_amount?amount=10\">去Paypalææ¬¾" "10欧元</a></ul><p>谢谢您ï¼" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:178 +#, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " -"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is " +"a good idea to drop the video bit rate down to about 200Mbit/s; this is " "unlikely to have any visible effect on the image." msgstr "" "æœ‰äº›æ”¾æ˜ è®¾å¤‡ä¸æ”¯æŒé«˜ç 率DCP,我们推è使用200Mbit/s以内的ç 率æ¥è¿›è¡Œæ‰“包,这ç§" "细微的调整是肉眼很难分辨的。" -#: src/lib/text_content.cc:247 +#: src/lib/text_content.cc:251 +#, fuzzy msgid "" "A subtitle or closed caption file in this project is marked with the " -"language '%1', which DCP-o-matic does not recognise. The file's language " -"has been cleared." +"language '%1', which %2 does not recognise. The file's language has been " +"cleared." msgstr "" "æ¤é¡¹ç›®å†…有å—幕或éšè—å¼å—å¹•æ–‡ä»¶è¢«æ ‡æ³¨ä¸º DCP-o-matic æ— æ³•è¯†åˆ«çš„â€œ%1â€è¯è¨€ã€‚ 该文" "ä»¶çš„è¯è¨€å—段已被清空。" -#: src/lib/ffmpeg_content.cc:645 +#: src/lib/ffmpeg_content.cc:646 msgid "ARIB STD-B67 ('Hybrid log-gamma')" msgstr "ARIB STD-B67 (“HLG†HDR)" -#: src/lib/dcp_content_type.cc:62 +#: src/lib/dcp_content_type.cc:63 msgid "Advertisement" msgstr "广告片" -#: src/lib/hints.cc:144 +#: src/lib/hints.cc:155 msgid "" "All of your content is in Scope (2.39:1) but your DCP's container is Flat " "(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. " @@ -272,7 +319,7 @@ msgstr "" "æ‚¨æ·»åŠ çš„åª’ä½“ç”»é¢å®½é«˜æ¯”为2.39:1,但是DCP容器设置为1.85:1的模å¼ã€‚这将会使您的画" "é¢åœ¨æ”¾æ˜ æ—¶å˜åœ¨ä¸Šä¸‹é»‘边。建议把DCP容器设置为2.39:1的模å¼ã€‚" -#: src/lib/hints.cc:148 +#: src/lib/hints.cc:159 msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " "(2.39:1). This will pillar-box your content. You may prefer to set your " @@ -281,7 +328,7 @@ msgstr "" "æ‚¨æ·»åŠ çš„åª’ä½“ç”»é¢å®½é«˜æ¯”å°äºŽ1.90:1,但是DCP容器设置为2.39:1的模å¼ã€‚这将会使您的" "ç”»é¢åœ¨æ”¾æ˜ æ—¶å˜åœ¨å·¦å³é»‘边。建议把DCPå®¹å™¨è®¾ç½®ä¸ºä¸Žç´ æç›¸åŒå®½é«˜æ¯”的模å¼ã€‚" -#: src/lib/job.cc:115 +#: src/lib/job.cc:116 msgid "An error occurred whilst handling the file %1." msgstr "å¤„ç†æ–‡ä»¶ %1 æ—¶å‘生错误。" @@ -289,59 +336,59 @@ msgstr "å¤„ç†æ–‡ä»¶ %1 æ—¶å‘生错误。" msgid "Analysing audio" msgstr "分æžéŸ³é¢‘ä¸" -#: src/lib/analyse_subtitles_job.cc:56 +#: src/lib/analyse_subtitles_job.cc:62 msgid "Analysing subtitles" msgstr "分æžå—幕ä¸" -#: src/lib/hints.cc:366 +#: src/lib/hints.cc:386 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "è‡³å°‘æœ‰ä¸€ä¸ªæ ‡è®°å‡ºçŽ°åœ¨é¡¹ç›®ç»“æŸåŽï¼Œå°†è¢«å¿½ç•¥ã€‚" -#: src/lib/hints.cc:502 +#: src/lib/hints.cc:523 msgid "At least one of your closed caption files is larger than " msgstr "至少有一个éšè—å—幕文件过大了 " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:516 msgid "At least one of your closed caption files' XML part is larger than " msgstr "至少有一个éšè—å¼å—幕文件的XML部分过大了 " -#: src/lib/hints.cc:510 +#: src/lib/hints.cc:531 msgid "At least one of your subtitle files is larger than " msgstr "至少有一个å—幕文件过大了 " -#: src/lib/hints.cc:474 +#: src/lib/hints.cc:495 msgid "" "At least one of your subtitle lines has more than 52 characters. It is " "recommended to make each line 52 characters at most in length." msgstr "至少有一行å—幕超过52个å—符, 建议æ¯è¡Œæœ€å¤š52个å—符。" -#: src/lib/hints.cc:476 +#: src/lib/hints.cc:497 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." msgstr "至少有一行å—幕超过79个å—符, ä½ åº”è¯¥è®©æ¯è¡Œæœ€å¤š79个å—符。" -#: src/lib/hints.cc:642 +#: src/lib/hints.cc:663 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." msgstr "您的å—幕ä¸è‡³å°‘有一个超过3行, 建议使用ä¸è¶…过3行。" -#: src/lib/hints.cc:609 +#: src/lib/hints.cc:630 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." msgstr "您的å—幕ä¸è‡³å°‘有一个æŒç»æ—¶é—´å°‘于15帧, 建议æ¯ä¸ªå—幕至少15帧长。" -#: src/lib/hints.cc:614 +#: src/lib/hints.cc:635 msgid "" "At least one of your subtitles starts less than 2 frames after the previous " "one. It is advisable to make the gap between subtitles at least 2 frames." msgstr "" "至少有一个å—幕在å‰ä¸€ä¸ªå—幕åŽä¸åˆ°2帧开始, 建议å—幕之间的间隔至少为2帧。" -#: src/lib/hints.cc:685 +#: src/lib/hints.cc:706 msgid "" "At least one piece of subtitle content has no specified language. It is " "advisable to set the language for each piece of subtitle content in the " @@ -362,72 +409,72 @@ msgstr "éŸ³é¢‘å°†è¢«é‡æ–°é‡‡æ ·è‡³ %1Hz" msgid "Audio will not be resampled" msgstr "音频将ä¸ä¼šè¢«é‡æ–°é‡‡æ ·" -#: src/lib/ffmpeg_content.cc:639 +#: src/lib/ffmpeg_content.cc:640 msgid "BT1361 extended colour gamut" msgstr "BT1361扩展色域" -#: src/lib/ffmpeg_content.cc:607 +#: src/lib/ffmpeg_content.cc:608 msgid "BT2020" msgstr "BT2020" -#: src/lib/ffmpeg_content.cc:662 +#: src/lib/ffmpeg_content.cc:663 msgid "BT2020 constant luminance" msgstr "BT2020 æ’定亮度" -#: src/lib/ffmpeg_content.cc:641 +#: src/lib/ffmpeg_content.cc:642 msgid "BT2020 for a 10-bit system" msgstr "BT2020 é‡‡æ ·æ·±åº¦ä¸º 10-bit" -#: src/lib/ffmpeg_content.cc:642 +#: src/lib/ffmpeg_content.cc:643 msgid "BT2020 for a 12-bit system" msgstr "BT2020 é‡‡æ ·æ·±åº¦ä¸º 12-bit" -#: src/lib/ffmpeg_content.cc:661 +#: src/lib/ffmpeg_content.cc:662 msgid "BT2020 non-constant luminance" msgstr "BT2020 éžæ’定亮度" -#: src/lib/ffmpeg_content.cc:666 +#: src/lib/ffmpeg_content.cc:667 msgid "BT2100" msgstr "BT2100" -#: src/lib/ffmpeg_content.cc:603 +#: src/lib/ffmpeg_content.cc:604 msgid "BT470BG" msgstr "BT470BG" -#: src/lib/ffmpeg_content.cc:657 +#: src/lib/ffmpeg_content.cc:658 msgid "BT470BG (BT601-6)" msgstr "BT470BG (BT601-6)" -#: src/lib/ffmpeg_content.cc:602 +#: src/lib/ffmpeg_content.cc:603 msgid "BT470M" msgstr "BT470M" -#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628 -#: src/lib/ffmpeg_content.cc:653 +#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629 +#: src/lib/ffmpeg_content.cc:654 msgid "BT709" msgstr "BT709" -#: src/lib/ffmpeg_content.cc:673 +#: src/lib/ffmpeg_content.cc:674 msgid "Bits per pixel" msgstr "åƒç´ ä½" -#: src/lib/filter.cc:98 +#: src/lib/filter.cc:99 msgid "Bob Weaver Deinterlacing Filter" msgstr "Bob Weaver åéš”è¡Œæ‰«ææ»¤é•œ" -#: src/lib/util.cc:662 +#: src/lib/util.cc:669 msgid "BsL" msgstr "å·¦åŽçŽ¯ç»•" -#: src/lib/util.cc:663 +#: src/lib/util.cc:670 msgid "BsR" msgstr "å³åŽçŽ¯ç»•" -#: src/lib/util.cc:654 +#: src/lib/util.cc:661 msgid "C" msgstr "ä¸ç½®" -#: src/lib/job.cc:617 +#: src/lib/job.cc:627 msgid "Cancelled" msgstr "å–æ¶ˆ" @@ -439,11 +486,11 @@ msgstr "ä¸èƒ½åŒ…嫿–œæ " msgid "Cannot handle pixel format %1 during %2" msgstr "在 %2 ä¸èƒ½å¤„ç†å›¾ç‰‡æ ¼å¼ %1" -#: src/lib/film.cc:1671 +#: src/lib/film.cc:1768 msgid "Cannot make a KDM as this project is not encrypted." msgstr "ä¸èƒ½ç”ŸæˆKDMï¼Œå› ä¸ºé¡¹ç›®æ²¡æœ‰è¢«åŠ å¯†ã€‚" -#: src/lib/util.cc:623 +#: src/lib/util.cc:630 msgid "Centre" msgstr "ä¸ç½®" @@ -451,7 +498,7 @@ msgstr "ä¸ç½®" msgid "Channels" msgstr "声音通é“" -#: src/lib/transcode_job.cc:108 +#: src/lib/transcode_job.cc:109 msgid "Check their new settings, then try again." msgstr "检查其新设置åŽå†è¯•。" @@ -459,27 +506,32 @@ msgstr "检查其新设置åŽå†è¯•。" msgid "Checking content" msgstr "检查媒体内容ä¸" -#: src/lib/reel_writer.cc:271 +#: src/lib/reel_writer.cc:248 msgid "Checking existing image data" msgstr "æ£€æŸ¥çŽ°æœ‰çš„å›¾åƒæ•°æ®" -#: src/lib/ffmpeg_content.cc:665 +#: src/lib/ffmpeg_content.cc:666 msgid "Chroma-derived constant luminance" msgstr "色度派生的æ’定亮度" -#: src/lib/ffmpeg_content.cc:664 +#: src/lib/ffmpeg_content.cc:665 msgid "Chroma-derived non-constant luminance" msgstr "è‰²åº¦æ´¾ç”Ÿçš„éžæ’定亮度" -#: src/lib/dcp_content_type.cc:63 +#: src/lib/dcp_content_type.cc:64 msgid "Clip" msgstr "片段" -#: src/lib/text_type.cc:72 +#: src/lib/text_type.cc:85 msgid "Closed captions" msgstr "éšè—å¼å—幕" -#: src/lib/ffmpeg_content.cc:624 +#: src/lib/text_type.cc:83 +#, fuzzy +msgid "Closed subtitles" +msgstr "开放å¼å—幕" + +#: src/lib/ffmpeg_content.cc:625 msgid "Colour primaries" msgstr "原色" @@ -493,17 +545,17 @@ msgstr "原色" #. file is limited, so that not all possible values are valid. #. TRANSLATORS: this means that the range of pixel values used in this #. file is full, so that all possible pixel values are valid. -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563 -#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564 +#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591 msgid "Colour range" msgstr "色彩范围" -#: src/lib/ffmpeg_content.cc:649 +#: src/lib/ffmpeg_content.cc:650 msgid "Colour transfer characteristic" msgstr "è‰²å½©ä¼ è¾“ç‰¹æ€§" -#: src/lib/ffmpeg_content.cc:670 +#: src/lib/ffmpeg_content.cc:671 msgid "Colourspace" msgstr "色彩空间" @@ -511,15 +563,15 @@ msgstr "色彩空间" msgid "Combine DCPs" msgstr "åˆå¹¶ DCP" -#: src/lib/content.cc:179 +#: src/lib/content.cc:188 msgid "Computing digest" msgstr "计算Hash值ä¸" -#: src/lib/writer.cc:529 +#: src/lib/writer.cc:534 msgid "Computing digests" msgstr "计算Hash值ä¸" -#: src/lib/analytics.cc:63 +#: src/lib/analytics.cc:64 msgid "Congratulations!" msgstr "æå–œä½ ï¼" @@ -535,19 +587,19 @@ msgstr "æºå†…容使·±" msgid "Content sample rate" msgstr "æºéŸ³é¢‘é‡‡æ ·çŽ‡" -#: src/lib/ffmpeg_content.cc:157 +#: src/lib/ffmpeg_content.cc:158 msgid "Content to be joined must all have or not have audio" msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»éƒ½æœ‰æˆ–éƒ½æ²¡æœ‰éŸ³é¢‘" -#: src/lib/ffmpeg_content.cc:160 +#: src/lib/ffmpeg_content.cc:161 msgid "Content to be joined must all have or not have subtitles or captions" msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»éƒ½æœ‰æˆ–éƒ½æ²¡æœ‰éšè—å¼å—幕" -#: src/lib/ffmpeg_content.cc:154 +#: src/lib/ffmpeg_content.cc:155 msgid "Content to be joined must all have or not have video" msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»éƒ½æœ‰æˆ–éƒ½æ²¡æœ‰è§†é¢‘" -#: src/lib/text_content.cc:319 +#: src/lib/text_content.cc:323 msgid "" "Content to be joined must both be main subtitle languages or both additional." msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»å‡ä¸ºä¸»å—幕è¯è¨€æˆ–é™„åŠ å—幕è¯è¨€ã€‚" @@ -556,11 +608,11 @@ msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»å‡ä¸ºä¸»å—幕è¯è¨€æˆ–é™„åŠ å—幕è¯è¨€ã€‚" msgid "Content to be joined must have all its video used or not used." msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»å‡é€‰ä¸/ä¸é€‰ä¸è§†é¢‘部分。" -#: src/lib/text_content.cc:274 +#: src/lib/text_content.cc:278 msgid "Content to be joined must have the same 'burn subtitles' setting." msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»å…·æœ‰ç›¸åŒçš„“刻录å—幕â€è®¾ç½®ã€‚" -#: src/lib/text_content.cc:270 +#: src/lib/text_content.cc:274 msgid "Content to be joined must have the same 'use subtitles' setting." msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»å…·æœ‰ç›¸åŒçš„“使用å—幕â€è®¾ç½®ã€‚" @@ -596,7 +648,7 @@ msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»æœ‰ç›¸åŒçš„自定义尺寸设置。" msgid "Content to be joined must have the same fades." msgstr "æ·»åŠ çš„å†…å®¹è§†é¢‘æ·¡å…¥æ·¡å‡ºæ•ˆæžœå¿…é¡»ç›¸åŒã€‚" -#: src/lib/text_content.cc:302 +#: src/lib/text_content.cc:306 msgid "Content to be joined must have the same outline width." msgstr "æ·»åŠ çš„å†…å®¹å—幕宽度尺寸必须相åŒã€‚" @@ -604,31 +656,31 @@ msgstr "æ·»åŠ çš„å†…å®¹å—幕宽度尺寸必须相åŒã€‚" msgid "Content to be joined must have the same picture size." msgstr "æ·»åŠ çš„å†…å®¹è§†é¢‘å›¾åƒå°ºå¯¸å¿…须相åŒã€‚" -#: src/lib/text_content.cc:278 +#: src/lib/text_content.cc:282 msgid "Content to be joined must have the same subtitle X offset." msgstr "æ·»åŠ çš„å†…å®¹å—幕Xè½´å移必须相åŒã€‚" -#: src/lib/text_content.cc:286 +#: src/lib/text_content.cc:290 msgid "Content to be joined must have the same subtitle X scale." msgstr "æ·»åŠ çš„å†…å®¹å—幕X轴缩放大å°å¿…须相åŒã€‚" -#: src/lib/text_content.cc:282 +#: src/lib/text_content.cc:286 msgid "Content to be joined must have the same subtitle Y offset." msgstr "æ·»åŠ çš„å†…å®¹å—幕Yè½´å移必须相åŒã€‚" -#: src/lib/text_content.cc:290 +#: src/lib/text_content.cc:294 msgid "Content to be joined must have the same subtitle Y scale." msgstr "æ·»åŠ çš„å†…å®¹å—幕Y轴缩放大å°å¿…须相åŒã€‚" -#: src/lib/text_content.cc:298 +#: src/lib/text_content.cc:302 msgid "Content to be joined must have the same subtitle fades." msgstr "æ·»åŠ çš„å†…å®¹å—幕淡入淡出效果必须相åŒã€‚" -#: src/lib/text_content.cc:294 +#: src/lib/text_content.cc:298 msgid "Content to be joined must have the same subtitle line spacing." msgstr "æ·»åŠ çš„å†…å®¹å—幕行è·å¿…须相åŒã€‚" -#: src/lib/content.cc:127 src/lib/content.cc:131 +#: src/lib/content.cc:131 src/lib/content.cc:135 msgid "Content to be joined must have the same video frame rate" msgstr "æ·»åŠ çš„å†…å®¹å†…å®¹å¸§çŽ‡å¿…é¡»ç›¸åŒ" @@ -636,23 +688,23 @@ msgstr "æ·»åŠ çš„å†…å®¹å†…å®¹å¸§çŽ‡å¿…é¡»ç›¸åŒ" msgid "Content to be joined must have the same video frame type." msgstr "æ·»åŠ çš„å†…å®¹è§†é¢‘å¸§çŽ‡å¿…é¡»ç›¸åŒã€‚" -#: src/lib/text_content.cc:311 +#: src/lib/text_content.cc:315 msgid "Content to be joined must use the same DCP track." msgstr "æ·»åŠ çš„å†…å®¹DCP轨é“必须相åŒã€‚" -#: src/lib/text_content.cc:307 src/lib/text_content.cc:327 +#: src/lib/text_content.cc:311 src/lib/text_content.cc:331 msgid "Content to be joined must use the same fonts." msgstr "æ·»åŠ çš„å†…å®¹å—幕å—体必须相åŒã€‚" -#: src/lib/ffmpeg_content.cc:181 +#: src/lib/ffmpeg_content.cc:182 msgid "Content to be joined must use the same subtitle stream." msgstr "æ·»åŠ çš„å†…å®¹å—幕æµå¿…须相åŒã€‚" -#: src/lib/text_content.cc:315 +#: src/lib/text_content.cc:319 msgid "Content to be joined must use the same text language." msgstr "æ·»åŠ çš„å†…å®¹å¿…é¡»æœ‰ç›¸åŒçš„æ–‡å—è¯è¨€ã€‚" -#: src/lib/video_content.cc:458 +#: src/lib/video_content.cc:460 msgid "Content video is %1x%2" msgstr "æºè§†é¢‘分辨率是 %1x%2" @@ -660,14 +712,6 @@ msgstr "æºè§†é¢‘分辨率是 %1x%2" msgid "Copy DCP to TMS" msgstr "å¤åˆ¶DCP到TMS" -#: src/lib/reel_writer.cc:142 -msgid "Copying old video file" -msgstr "å¤åˆ¶æºè§†é¢‘文件" - -#: src/lib/reel_writer.cc:407 -msgid "Copying video file into DCP" -msgstr "æ£åœ¨å°†è§†é¢‘文件å¤åˆ¶åˆ° DCP" - #: src/lib/scp_uploader.cc:57 msgid "Could not connect to server %1 (%2)" msgstr "æ— æ³•è¿žæŽ¥åˆ°æœåС噍 %1 (%2)" @@ -684,18 +728,19 @@ msgstr "æ— æ³•è§£ç JPEG2000文件%1 (%2)" msgid "Could not decode image (%1)" msgstr "æ— æ³•è§£ç 图åƒ(%1)" -#: src/lib/unzipper.cc:64 +#: src/lib/unzipper.cc:76 #, fuzzy msgid "Could not find file %1 in ZIP file" msgstr "æ— æ³•æ‰“å¼€ä¸‹è½½çš„zip文件" -#: src/lib/encode_server_finder.cc:191 +#: src/lib/encode_server_finder.cc:193 +#, fuzzy msgid "" -"Could not listen for remote encode servers. Perhaps another instance of DCP-" -"o-matic is running." +"Could not listen for remote encode servers. Perhaps another instance of %1 " +"is running." msgstr "æ— æ³•ä¾¦å¬åˆ°è¿œç¨‹ç¼–ç æœåŠ¡å™¨ã€‚å¯èƒ½å¦ä¸€ä¸ªDCP-o-matic进程æ£åœ¨è¿è¡Œã€‚" -#: src/lib/job.cc:170 src/lib/job.cc:185 +#: src/lib/job.cc:180 src/lib/job.cc:195 msgid "Could not open %1" msgstr "æ— æ³•æ‰“å¼€%1" @@ -703,19 +748,19 @@ msgstr "æ— æ³•æ‰“å¼€%1" msgid "Could not open %1 to send" msgstr "æ— æ³•æ‰“å¼€%1å¹¶å‘é€" -#: src/lib/internet.cc:165 src/lib/internet.cc:170 +#: src/lib/internet.cc:167 src/lib/internet.cc:172 msgid "Could not open downloaded ZIP file" msgstr "æ— æ³•æ‰“å¼€ä¸‹è½½çš„zip文件" -#: src/lib/internet.cc:177 +#: src/lib/internet.cc:179 msgid "Could not open downloaded ZIP file (%1:%2: %3)" msgstr "æ— æ³•æ‰“å¼€ä¸‹è½½çš„zip文件 (%1:%2: %3)" -#: src/lib/config.cc:1140 +#: src/lib/config.cc:1153 msgid "Could not open file for writing" msgstr "æ— æ³•æ‰§è¡Œå†™å…¥ï¼Œç›®æ ‡æ–‡ä»¶æ— æ³•æ‰“å¼€" -#: src/lib/ffmpeg_file_encoder.cc:265 +#: src/lib/ffmpeg_file_encoder.cc:271 msgid "Could not open output file %1 (%2)" msgstr "æ— æ³•æ‰“å¼€è¾“å‡ºæ–‡ä»¶ %1 (%2)" @@ -731,19 +776,19 @@ msgstr "æ— æ³•å¼€å§‹ä¼ è¾“" msgid "Could not write to remote file (%1)" msgstr "写入远程文件 (%1)失败ï¼" -#: src/lib/util.cc:633 +#: src/lib/util.cc:640 msgid "D-BOX primary" msgstr "一级D-BOX" -#: src/lib/util.cc:634 +#: src/lib/util.cc:641 msgid "D-BOX secondary" msgstr "二级D-BOX" -#: src/lib/util.cc:664 +#: src/lib/util.cc:671 msgid "DBP" msgstr "DBP" -#: src/lib/util.cc:665 +#: src/lib/util.cc:672 msgid "DBS" msgstr "DBS" @@ -755,7 +800,7 @@ msgstr "DCI Flat(é®å¹…/1.77/1.78/1.85)" msgid "DCI Scope" msgstr "DCI Scope(宽银幕/2.35/2.39)" -#: src/lib/dcp_subtitle_content.cc:136 +#: src/lib/dcp_subtitle_content.cc:140 msgid "DCP XML subtitles" msgstr "DCP XMLå—幕" @@ -772,45 +817,35 @@ msgstr "DCP队列将在速度 %.1f%% 下è¿è¡Œã€‚\n" msgid "DCP will use every other frame of the content.\n" msgstr "将使用隔帧打包DCP。\n" -#: src/lib/job.cc:172 src/lib/job.cc:187 -msgid "" -"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or " -"is in an unexpected format." -msgstr "æ— æ³•æ‰“å¼€æ–‡ä»¶%1 (%2)。文件ä¸å˜åœ¨æˆ–æ ¼å¼æ— 法识别。" - -#: src/lib/film.cc:1596 +#: src/lib/film.cc:1685 msgid "" -"DCP-o-matic had to change your settings for referring to DCPs as OV. Please " -"review those settings to make sure they are what you want." +"DCP-o-matic had to set your container to 1920x1080 as it's the only one that " +"can be used with MPEG2 encoding." msgstr "" -"DCP-o-matic必须把您DCP的设置更改为OVã€‚è¯·é‡æ–°æ£€æŸ¥è®¾ç½®ç¡®è®¤è®¾ç½®å†…容是å¦ä¸ºæ‚¨çš„æœŸ" -"望值。" -#: src/lib/film.cc:1564 +#: src/lib/film.cc:1689 msgid "" -"DCP-o-matic had to change your settings so that the film's frame rate is the " -"same as that of your Atmos content." -msgstr "DCP-o-matic必须更改您DCP的设置,使影片的帧率与 Atmos 内容一致。" +"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 " +"encoding." +msgstr "" -#: src/lib/ffmpeg_content.cc:121 +#: src/lib/film.cc:1693 msgid "" -"DCP-o-matic no longer supports the `%1' filter, so it has been turned off." -msgstr "䏿”¯æŒçš„æ ¼å¼`%1'。" - -#: src/lib/config.cc:429 src/lib/config.cc:1251 -msgid "DCP-o-matic notification" -msgstr "DCP-o-maticæé†’" +"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 " +"and that is not a standard ratio with JPEG2000 encoding." +msgstr "" #: src/lib/datasat_ap2x.cc:28 msgid "Datasat AP20 or AP25" msgstr "æ•°æ®æ¥è‡ªAP20或AP25" -#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97 -#: src/lib/filter.cc:98 src/lib/filter.cc:99 +#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98 +#: src/lib/filter.cc:99 src/lib/filter.cc:100 msgid "De-interlacing" msgstr "去除隔行" -#: src/lib/config.cc:1239 +#: src/lib/config.cc:1238 +#, fuzzy msgid "" "Dear Projectionist\n" "\n" @@ -822,7 +857,7 @@ msgid "" "The KDMs are valid from $START_TIME until $END_TIME.\n" "\n" "Best regards,\n" -"DCP-o-matic" +"%1" msgstr "" "äº²çˆ±çš„æ”¾æ˜ å‘˜\n" "\n" @@ -836,11 +871,15 @@ msgstr "" "ç¥å¥½ï¼Œ\n" "DCP-o-matic" +#: src/lib/exceptions.cc:178 +msgid "Disk full when writing %1" +msgstr "" + #: src/lib/dolby_cp750.cc:31 msgid "Dolby CP650 or CP750" msgstr "æœæ¯” CP650 或 CP750" -#: src/lib/internet.cc:122 +#: src/lib/internet.cc:124 msgid "Download failed (%1 error %2)" msgstr "下载失败 (%1 error %2)" @@ -864,19 +903,19 @@ msgstr "通过电å邮件å‘é€ %1 çš„ KDM" msgid "Email notification" msgstr "电å邮件æé†’" -#: src/lib/send_problem_report_job.cc:68 +#: src/lib/send_problem_report_job.cc:69 msgid "Email problem report" msgstr "通过邮件å‘é€æŠ¥å‘Š" -#: src/lib/send_problem_report_job.cc:71 +#: src/lib/send_problem_report_job.cc:72 msgid "Email problem report for %1" msgstr "通过邮件å‘é€æŠ¥å‘Šç»™ %1" -#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135 +#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135 msgid "Encoding" msgstr "ç¼–ç ä¸" -#: src/lib/dcp_content_type.cc:66 +#: src/lib/dcp_content_type.cc:67 msgid "Episode" msgstr "æ’æ›²" @@ -884,20 +923,19 @@ msgstr "æ’æ›²" msgid "Error in subtitle file: saw %1 while expecting %2" msgstr "å—幕文件错误: 执行为 %1 å®žé™…è¦æ±‚为%2" -#: src/lib/job.cc:615 +#: src/lib/job.cc:625 msgid "Error: %1" msgstr "错误: (%1)" -#: src/lib/dcp_content_type.cc:68 +#: src/lib/dcp_content_type.cc:69 msgid "Event" msgstr "事件" -#: src/lib/hints.cc:397 -#, fuzzy +#: src/lib/hints.cc:417 msgid "Examining audio" -msgstr "定ä½å—幕ä¸" +msgstr "æ£åœ¨æ£€æŸ¥éŸ³é¢‘" -#: src/lib/hints.cc:399 +#: src/lib/hints.cc:419 msgid "Examining audio, subtitles and closed captions" msgstr "检查音频ã€å—幕和éšè—å¼å—幕ä¸" @@ -909,15 +947,15 @@ msgstr "分æžå†…容ä¸" msgid "Examining subtitles" msgstr "定ä½å—幕ä¸" -#: src/lib/hints.cc:395 +#: src/lib/hints.cc:415 msgid "Examining subtitles and closed captions" msgstr "检查å—幕和éšè—å¼å—幕ä¸" -#: src/lib/subtitle_encoder.cc:99 +#: src/lib/subtitle_film_encoder.cc:99 msgid "Extracting" msgstr "æ£åœ¨æå–" -#: src/lib/ffmpeg_content.cc:656 +#: src/lib/ffmpeg_content.cc:657 msgid "FCC" msgstr "FCC" @@ -925,51 +963,51 @@ msgstr "FCC" msgid "Failed to authenticate with server (%1)" msgstr "æ— æ³•ä¸ŽæœåŠ¡å™¨è¿›è¡Œèº«ä»½éªŒè¯ (%1)" -#: src/lib/job.cc:139 src/lib/job.cc:149 +#: src/lib/job.cc:140 src/lib/job.cc:154 msgid "Failed to encode the DCP." msgstr "ç¼–ç DCP 失败。" -#: src/lib/email.cc:239 +#: src/lib/email.cc:240 msgid "Failed to send email" msgstr "电å邮件å‘é€å¤±è´¥" -#: src/lib/dcp_content_type.cc:53 +#: src/lib/dcp_content_type.cc:54 msgid "Feature" msgstr "æ£ç‰‡" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filename" msgstr "文件å" -#: src/lib/content.cc:475 +#: src/lib/content.cc:487 msgid "Filenames" msgstr "文件å" -#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115 msgid "Files have changed since they were added to the project." msgstr "éƒ¨åˆ†æ–‡ä»¶åœ¨æ·»åŠ åˆ°é¡¹ç›®åŽè¢«ä¿®æ”¹ã€‚" -#: src/lib/ffmpeg_content.cc:606 +#: src/lib/ffmpeg_content.cc:607 msgid "Film" msgstr "影片" -#: src/lib/ffmpeg_examiner.cc:113 +#: src/lib/ffmpeg_examiner.cc:105 msgid "Finding length" msgstr "定ä½é•¿åº¦" -#: src/lib/content.cc:485 +#: src/lib/content.cc:497 msgid "Frame rate" msgstr "帧率" -#: src/lib/job.cc:559 +#: src/lib/job.cc:569 msgid "Friday" msgstr "星期五" -#: src/lib/ffmpeg_content.cc:590 +#: src/lib/ffmpeg_content.cc:591 msgid "Full" msgstr "Full(全幅/1.90)" -#: src/lib/ffmpeg_content.cc:570 +#: src/lib/ffmpeg_content.cc:571 msgid "Full (0-%1)" msgstr "全幅 (0-%1)" @@ -993,35 +1031,35 @@ msgstr "DCPä¸è§†é¢‘总时长" msgid "Full length in video frames at content rate" msgstr "æºè§†é¢‘æ—¶é•¿" -#: src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:632 msgid "Gamma 22 (BT470M)" msgstr "伽玛 2.2 (BT470M)" -#: src/lib/ffmpeg_content.cc:632 +#: src/lib/ffmpeg_content.cc:633 msgid "Gamma 28 (BT470BG)" msgstr "伽玛 2.8 (BT470BG)" -#: src/lib/filter.cc:100 +#: src/lib/filter.cc:101 msgid "Gradient debander" msgstr "梯度" -#: src/lib/util.cc:658 +#: src/lib/util.cc:665 msgid "HI" msgstr "å¬åŠ›éšœç¢" -#: src/lib/util.cc:627 +#: src/lib/util.cc:634 msgid "Hearing impaired" msgstr "å¬åŠ›éšœç¢" -#: src/lib/filter.cc:103 +#: src/lib/filter.cc:104 msgid "High quality 3D denoiser" msgstr "高å“质的3Dé™å™ª" -#: src/lib/dcp_content_type.cc:67 +#: src/lib/dcp_content_type.cc:68 msgid "Highlights" msgstr "高光" -#: src/lib/filter.cc:92 +#: src/lib/filter.cc:93 msgid "Horizontal flip" msgstr "水平翻转" @@ -1029,19 +1067,19 @@ msgstr "水平翻转" msgid "Hz" msgstr "Hz(赫兹)" -#: src/lib/ffmpeg_content.cc:640 +#: src/lib/ffmpeg_content.cc:641 msgid "IEC61966-2-1 (sRGB or sYCC)" msgstr "IEC61966-2-1 (sRGB或sYCC)" -#: src/lib/ffmpeg_content.cc:638 +#: src/lib/ffmpeg_content.cc:639 msgid "IEC61966-2-4" msgstr "IEC61966-2-4" -#: src/lib/hints.cc:186 +#: src/lib/hints.cc:197 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "如果您选择使用25fps,那就必须把DCPæ ‡å‡†é€‰çº¿è®¾ç½®ä¸ºSMPTE。" -#: src/lib/hints.cc:249 +#: src/lib/hints.cc:260 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1051,9 +1089,10 @@ msgstr "" "一般建议您使用SMPTE DCPSï¼Œé™¤éžæ‚¨æœ‰ç‰¹æ®ŠåŽŸå› ä½¿ç”¨Interop。建议您在“DCPâ€é€‰é¡¹å¡ä¸" "å°†DCP设置为使用SMPTEæ ‡å‡†ã€‚" -#: src/lib/release_notes.cc:53 +#: src/lib/release_notes.cc:79 +#, fuzzy msgid "" -"In this version there are changes to the way that subtitles are positioned. " +"In this version there are changes to the way that subtitles are positioned. " "Positioning should now be more correct, with respect to the standards, but " "you should check any subtitles in your project to make sure that they are " "placed where you want them." @@ -1061,78 +1100,79 @@ msgstr "" "在这个版本ä¸ï¼Œå—å¹•çš„å®šä½æ–¹å¼å‘生了å˜åŒ–ã€‚ç›¸å¯¹äºŽæ ‡å‡†ï¼Œå®šä½çŽ°åœ¨åº”è¯¥æ›´åŠ æ£ç¡®ï¼Œä½†" "您ä»åº”该检查项目ä¸çš„任何å—幕,以确ä¿å®ƒä»¬æ”¾åœ¨æ‚¨æƒ³è¦çš„ä½ç½®ã€‚" -#: src/lib/hints.cc:602 +#: src/lib/hints.cc:623 msgid "" "It is advisable to put your first subtitle at least 4 seconds after the " "start of the DCP to make sure it is seen." msgstr "建议在DCP开始åŽè‡³å°‘4秒放置您的第一个å—幕,以确ä¿å®ƒèƒ½è¢«çœ‹åˆ°ã€‚" -#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265 -msgid "It is not known what caused this error." +#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275 +#, fuzzy +msgid "It is not known what caused this error. %1" msgstr "æœªçŸ¥åŽŸå› é”™è¯¯ã€‚" -#: src/lib/ffmpeg_content.cc:620 +#: src/lib/ffmpeg_content.cc:621 msgid "JEDEC P22" msgstr "JEDEC P22" -#: src/lib/config.cc:419 src/lib/config.cc:1236 +#: src/lib/config.cc:424 src/lib/config.cc:1235 msgid "KDM delivery: $CPL_NAME" msgstr "å‘行KDM: $CPL_NAME" -#: src/lib/filter.cc:96 +#: src/lib/filter.cc:97 msgid "Kernel deinterlacer" msgstr "隔行扫æ" #. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652 +#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659 msgid "L" msgstr "左声é“" -#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621 +#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628 msgid "Left" msgstr "左声é“" -#: src/lib/util.cc:629 +#: src/lib/util.cc:636 msgid "Left centre" msgstr "å·¦ä¸" -#: src/lib/util.cc:631 +#: src/lib/util.cc:638 msgid "Left rear surround" msgstr "å·¦åŽçŽ¯ç»•" -#: src/lib/util.cc:625 +#: src/lib/util.cc:632 msgid "Left surround" msgstr "左环绕" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "Length" msgstr "长度" -#: src/lib/util.cc:655 +#: src/lib/util.cc:662 msgid "Lfe" msgstr "次低" -#: src/lib/util.cc:624 +#: src/lib/util.cc:631 msgid "Lfe (sub)" msgstr "次低(é‡ä½ŽéŸ³ï¼‰" -#: src/lib/ffmpeg_content.cc:585 +#: src/lib/ffmpeg_content.cc:586 msgid "Limited" msgstr "é™åˆ¶" -#: src/lib/ffmpeg_content.cc:563 +#: src/lib/ffmpeg_content.cc:564 msgid "Limited / video (%1-%2)" msgstr "é™åˆ¶/视频 (%1-%2)" -#: src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:636 msgid "Linear" msgstr "线性" -#: src/lib/ffmpeg_content.cc:636 +#: src/lib/ffmpeg_content.cc:637 msgid "Logarithmic (100:1 range)" msgstr "对数 (范围 100:1)" -#: src/lib/ffmpeg_content.cc:637 +#: src/lib/ffmpeg_content.cc:638 msgid "Logarithmic (316:1 range)" msgstr "对数 (范围 316:1)" @@ -1140,7 +1180,7 @@ msgstr "对数 (范围 316:1)" msgid "Lost communication between main and writer processes" msgstr "主进程和写入进程之间的通信丢失" -#: src/lib/util.cc:656 +#: src/lib/util.cc:663 msgid "Ls" msgstr "左环绕" @@ -1148,24 +1188,24 @@ msgstr "左环绕" msgid "Mid-side decoder" msgstr "ä¸ç½®è§£ç " -#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104 -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105 +#: src/lib/filter.cc:107 msgid "Misc" msgstr "å…¶ä»–" -#: src/lib/dcp_examiner.cc:183 +#: src/lib/dcp_examiner.cc:191 msgid "Mismatched audio channel counts in DCP" msgstr "DCPä¸çš„éŸ³é¢‘é€šé“æ•°ä¸åŒ¹é…" -#: src/lib/dcp_examiner.cc:191 +#: src/lib/dcp_examiner.cc:199 msgid "Mismatched audio sample rates in DCP" msgstr "DCPä¸çš„éŸ³é¢‘é‡‡æ ·çŽ‡ä¸åŒ¹é…" -#: src/lib/dcp_examiner.cc:156 +#: src/lib/dcp_examiner.cc:160 msgid "Mismatched frame rates in DCP" msgstr "DCPä¸çš„帧率ä¸åŒ¹é…" -#: src/lib/dcp_examiner.cc:163 +#: src/lib/dcp_examiner.cc:167 msgid "Mismatched video sizes in DCP" msgstr "DCPä¸çš„视频分辨率ä¸åŒ¹é…" @@ -1173,19 +1213,19 @@ msgstr "DCPä¸çš„视频分辨率ä¸åŒ¹é…" msgid "Missing required setting %1" msgstr "缺少必需的设置 %1" -#: src/lib/job.cc:551 +#: src/lib/job.cc:561 msgid "Monday" msgstr "星期一" -#: src/lib/writer.cc:779 +#: src/lib/writer.cc:783 msgid "Mono" msgstr "å•声é“" -#: src/lib/filter.cc:95 +#: src/lib/filter.cc:96 msgid "Motion compensating deinterlacer" msgstr "动æ€éš”行补å¿" -#: src/lib/dcp_decoder.cc:111 +#: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." msgstr "DCP䏿²¡æœ‰æ‰¾åˆ°CPL文件。" @@ -1199,74 +1239,87 @@ msgstr "首选项ä¸é…ç½®çš„åœ°å€æ²¡æœ‰ KDM" msgid "No outgoing mail server configured in the Email tab of preferences" msgstr "没有é…ç½®å好的邮件æœåŠ¡" -#: src/lib/image_content.cc:131 +#: src/lib/image_content.cc:132 msgid "No valid image files were found in the folder." msgstr "未在文件夹ä¸å‘现有效的图片åºåˆ—文件。" -#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105 +#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106 msgid "Noise reduction" msgstr "é™å™ª" -#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777 +#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781 msgid "None" msgstr "æ— " -#: src/lib/job.cc:607 +#: src/lib/job.cc:617 msgid "OK" msgstr "完æˆ" -#: src/lib/job.cc:612 +#: src/lib/job.cc:622 msgid "OK (ran for %1 from %2 to %3)" msgstr "å®Œæˆ (è¿è¡Œç”¨æ—¶ %1,预计从 %2 到 %3)" -#: src/lib/job.cc:610 +#: src/lib/job.cc:620 msgid "OK (ran for %1)" msgstr "å®Œæˆ (è¿è¡Œç”¨æ—¶ %1)" -#: src/lib/content.cc:116 +#: src/lib/content.cc:120 msgid "Only the first piece of content to be joined can have a start trim." msgstr "åªæœ‰ç¬¬ä¸€æ®µè¢«åŠ å…¥çš„å†…å®¹æ‰å¯ä»¥è¿›è¡Œå¼€å§‹è£å‰ªã€‚" -#: src/lib/content.cc:120 +#: src/lib/content.cc:124 msgid "Only the last piece of content to be joined can have an end trim." msgstr "åªæœ‰æœ€åŽä¸€æ®µè¢«åŠ å…¥çš„å†…å®¹æ‰å¯ä»¥è¿›è¡Œç»“æŸè£å‰ªã€‚" -#: src/lib/text_type.cc:70 +#: src/lib/text_type.cc:81 +#, fuzzy +msgid "Open captions" +msgstr "éšè—å¼å—幕" + +#: src/lib/text_type.cc:79 msgid "Open subtitles" msgstr "开放å¼å—幕" -#: src/lib/transcode_job.cc:113 +#: src/lib/transcode_job.cc:116 +#, fuzzy msgid "" -"Open the project in DCP-o-matic, check the settings, then save it before " -"trying again." +"Open the project in %1, check the settings, then save it before trying again." msgstr "在DCP-o-matic䏿‰“开项目,检查设置,然åŽä¿å˜åŽé‡è¯•。" -#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93 -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Orientation" msgstr "æ–¹å‘" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "Out of memory" msgstr "内å˜ä¸è¶³" -#: src/lib/filter.cc:105 +#: src/lib/filter.cc:106 msgid "Overcomplete wavelet denoiser" msgstr "å°æ³¢é™å™ª" -#: src/lib/colour_conversion.cc:293 +#: src/lib/colour_conversion.cc:292 msgid "P3" msgstr "P3" -#: src/lib/dcp_content_type.cc:60 +#: src/lib/util.cc:1186 +#, fuzzy +msgid "" +"Please report this problem by using Help -> Report a problem or via email to " +"%1" +msgstr "" +"请æäº¤è¿™ä¸ªé—®é¢˜ï¼Œåœ¨å¸®åŠ©é¤å•ä¸é€‰æ‹©ï¼šé€šè¿‡Emailå馈问题:carl@dcpomatic.com" + +#: src/lib/dcp_content_type.cc:61 msgid "Policy" msgstr "政ç–相关" -#: src/lib/filter.cc:106 +#: src/lib/filter.cc:107 msgid "Premultiply alpha channel" msgstr "" -#: src/lib/content.cc:494 +#: src/lib/content.cc:506 msgid "Prepared for video frame rate" msgstr "准备视频帧率" @@ -1274,93 +1327,93 @@ msgstr "准备视频帧率" msgid "Programming error at %1:%2 %3" msgstr "程åºå†…部错误 %1:%2 %3" -#: src/lib/dcp_content_type.cc:64 +#: src/lib/dcp_content_type.cc:65 msgid "Promo" msgstr "å®£ä¼ ç‰‡" -#: src/lib/dcp_content_type.cc:61 +#: src/lib/dcp_content_type.cc:62 msgid "Public Service Announcement" msgstr "公共æœåŠ¡æˆ–å…¬å‘Š" #. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export -#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653 +#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660 msgid "R" msgstr "å³å£°é“" -#: src/lib/ffmpeg_content.cc:652 +#: src/lib/ffmpeg_content.cc:653 msgid "RGB / sRGB (IEC61966-2-1)" msgstr "é¢œè‰²æ¨¡å¼ RGB / sRGB (IEC61966-2-1)" -#: src/lib/dcp_content_type.cc:58 +#: src/lib/dcp_content_type.cc:59 msgid "Rating" msgstr "分级" -#: src/lib/colour_conversion.cc:294 +#: src/lib/colour_conversion.cc:293 msgid "Rec. 1886" msgstr "Rec. 1886" -#: src/lib/colour_conversion.cc:295 +#: src/lib/colour_conversion.cc:294 msgid "Rec. 2020" msgstr "Rec. 2020" -#: src/lib/colour_conversion.cc:291 +#: src/lib/colour_conversion.cc:290 msgid "Rec. 601" msgstr "Rec. 601" -#: src/lib/colour_conversion.cc:292 +#: src/lib/colour_conversion.cc:291 msgid "Rec. 709" msgstr "Rec. 709" -#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622 +#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629 msgid "Right" msgstr "å³å£°é“" -#: src/lib/util.cc:630 +#: src/lib/util.cc:637 msgid "Right centre" msgstr "å³ä¸" -#: src/lib/util.cc:632 +#: src/lib/util.cc:639 msgid "Right rear surround" msgstr "å³åŽçŽ¯ç»•" -#: src/lib/util.cc:626 +#: src/lib/util.cc:633 msgid "Right surround" msgstr "å³çŽ¯ç»•" -#: src/lib/filter.cc:94 +#: src/lib/filter.cc:95 msgid "Rotate 90 degrees anti-clockwise" msgstr "逆时针旋转90°" -#: src/lib/filter.cc:93 +#: src/lib/filter.cc:94 msgid "Rotate 90 degrees clockwise" msgstr "顺时针旋转90°" -#: src/lib/util.cc:657 +#: src/lib/util.cc:664 msgid "Rs" msgstr "å³çŽ¯ç»•" -#: src/lib/colour_conversion.cc:296 +#: src/lib/colour_conversion.cc:295 msgid "S-Gamut3/S-Log3" msgstr "索尼S-Gamut3/S-Log3" -#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633 +#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 msgid "SMPTE 170M (BT601)" msgstr "SMPTE 170M (BT601)" -#: src/lib/ffmpeg_content.cc:658 +#: src/lib/ffmpeg_content.cc:659 msgid "SMPTE 170M (BT601-6)" msgstr "SMPTE 170M (BT601-6)" -#: src/lib/ffmpeg_content.cc:663 +#: src/lib/ffmpeg_content.cc:664 msgid "SMPTE 2085, Y'D'zD'x" msgstr "SMPTE 2085, Y'D'zD'x" -#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634 -#: src/lib/ffmpeg_content.cc:659 +#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635 +#: src/lib/ffmpeg_content.cc:660 msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:667 +#: src/lib/hints.cc:688 msgid "" "SMPTE DCPs with the type FTR (feature) should have markers for the first " "frame of end credits (FFEC) and the first frame of moving credits (FFMC). " @@ -1369,23 +1422,23 @@ msgstr "" "类型为FTR(FEATURE)çš„SMPTE DCP应具有结æŸå—幕的第一帧(FFEC)和移动å—幕的第一帧" "(FFMC)çš„æ ‡è®°ã€‚æ‚¨åº”è¯¥ä½¿ç”¨â€œDCPâ€é€‰é¡¹å¡ä¸çš„â€œæ ‡è®°â€æŒ‰é’®æ·»åŠ è¿™äº›æ ‡è®°ã€‚" -#: src/lib/ffmpeg_content.cc:643 +#: src/lib/ffmpeg_content.cc:644 msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems" msgstr "SMPTE ST 2084 10, 12, 14å’Œ16 bit" -#: src/lib/ffmpeg_content.cc:644 +#: src/lib/ffmpeg_content.cc:645 msgid "SMPTE ST 428-1" msgstr "SMPTE ST 428-1" -#: src/lib/ffmpeg_content.cc:608 +#: src/lib/ffmpeg_content.cc:609 msgid "SMPTE ST 428-1 (CIE 1931 XYZ)" msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)" -#: src/lib/ffmpeg_content.cc:609 +#: src/lib/ffmpeg_content.cc:610 msgid "SMPTE ST 431-2 (2011)" msgstr "SMPTE ST 431-2 (2011)" -#: src/lib/ffmpeg_content.cc:610 +#: src/lib/ffmpeg_content.cc:611 msgid "SMPTE ST 432-1 D65 (2010)" msgstr "SMPTE ST 432-1 D65 (2010)" @@ -1398,27 +1451,27 @@ msgstr "SSH 错误 [%1]" msgid "SSH error [%1] (%2)" msgstr "SSH 错误 [%1] (%2)" -#: src/lib/job.cc:561 +#: src/lib/job.cc:571 msgid "Saturday" msgstr "星期å…" -#: src/lib/image_content.cc:117 +#: src/lib/image_content.cc:118 msgid "Scanning image files" msgstr "æ£åœ¨æ‰«æå›¾åƒ" -#: src/lib/send_problem_report_job.cc:85 +#: src/lib/send_problem_report_job.cc:86 msgid "Sending email" msgstr "å‘é€ç”µå邮件" -#: src/lib/dcp_content_type.cc:54 +#: src/lib/dcp_content_type.cc:55 msgid "Short" msgstr "çŸç‰‡" -#: src/lib/util.cc:666 +#: src/lib/util.cc:673 msgid "Sign" msgstr "ç¾å" -#: src/lib/video_content.cc:533 +#: src/lib/video_content.cc:535 msgid "Size" msgstr "大å°" @@ -1426,11 +1479,11 @@ msgstr "大å°" msgid "Some audio will be resampled to %1Hz" msgstr "éƒ¨åˆ†éŸ³é¢‘å°†è¢«é‡æ–°é‡‡æ ·åˆ°%1Hz" -#: src/lib/transcode_job.cc:117 +#: src/lib/transcode_job.cc:121 msgid "Some files have been changed since they were added to the project." msgstr "æœ‰äº›æ–‡ä»¶åœ¨æ·»åŠ åˆ°é¡¹ç›®åŽå‘生了更改。" -#: src/lib/transcode_job.cc:107 +#: src/lib/transcode_job.cc:108 msgid "" "Some files have been changed since they were added to the project.\n" "\n" @@ -1451,13 +1504,13 @@ msgstr "" "\n" "è¿™äº›æ–‡ä»¶çŽ°åœ¨å°†è¢«é‡æ–°æ£€æŸ¥ï¼Œå› æ¤æ‚¨å¯èƒ½éœ€è¦æ£€æŸ¥å®ƒä»¬çš„设置。" -#: src/lib/hints.cc:583 +#: src/lib/hints.cc:604 msgid "" "Some of your closed captions span more than %1 lines, so they will be " "truncated." msgstr "您的æŸäº›éšè—å—幕跨度超过%1è¡Œï¼Œå› æ¤å®ƒå°†è¢«æˆªæ–,å¯èƒ½æ˜¾ç¤ºä¸å®Œæ•´ã€‚" -#: src/lib/hints.cc:705 +#: src/lib/hints.cc:726 msgid "" "Some of your content has audio but you have not set the audio language. It " "is advisable to set the audio language in the \"DCP\" tab unless your audio " @@ -1478,11 +1531,11 @@ msgstr "一些内容需è¦KDM密钥" msgid "Some of your content needs an OV" msgstr "一些内容需è¦OV" -#: src/lib/writer.cc:781 +#: src/lib/writer.cc:785 msgid "Stereo" msgstr "立体声" -#: src/lib/dcp_content_type.cc:65 +#: src/lib/dcp_content_type.cc:66 msgid "Stereo card" msgstr "立体声å¡" @@ -1494,19 +1547,19 @@ msgstr "立体声到5.1,混音器A" msgid "Stereo to 5.1 up-mixer B" msgstr "立体声到5.1,混音器B" -#: src/lib/job.cc:549 +#: src/lib/job.cc:559 msgid "Sunday" msgstr "星期日" -#: src/lib/dcp_content_type.cc:59 +#: src/lib/dcp_content_type.cc:60 msgid "Teaser" msgstr "ä¼ æƒ…ç‰‡" -#: src/lib/filter.cc:104 +#: src/lib/filter.cc:105 msgid "Telecine filter" msgstr "èƒ¶è½¬ç£æ»¤é•œ" -#: src/lib/dcp_content_type.cc:56 +#: src/lib/dcp_content_type.cc:57 msgid "Test" msgstr "测试片" @@ -1526,33 +1579,33 @@ msgstr "è¯ä¹¦ç¾åæ— æ•ˆ" msgid "The certificate chain for signing is invalid (%1)" msgstr "è¯ä¹¦ç¾åæ— æ•ˆ(%1)" -#: src/lib/hints.cc:721 +#: src/lib/hints.cc:743 #, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs " -"contains a small error which will prevent DCPs from being validated " -"correctly on some systems. It is advisable to re-create the signing " -"certificate chain by clicking the \"Re-make certificates and key...\" button " -"in the Keys page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs contains a " +"small error which will prevent DCPs from being validated correctly on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "DCP-o-matic用于ç¾åDCPå’ŒKDMçš„è¯ä¹¦é“¾åŒ…å«ä¸€ä¸ªå°é”™è¯¯ï¼Œè¿™å°†é˜»æ¢DCP在æŸäº›ç³»ç»Ÿä¸Šè¢«" "æ£ç¡®éªŒè¯ã€‚建议您通过å•击“首选项â€çš„“密钥â€é¡µé¢ä¸çš„â€œé‡æ–°åˆ¶ä½œè¯ä¹¦å’Œå¯†é’¥â€¦â€æŒ‰é’®æ¥é‡" "新创建ç¾åè¯ä¹¦é“¾ã€‚" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:751 #, fuzzy msgid "" -"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a " -"validity period that is too long. This will cause problems playing back " -"DCPs on some systems. It is advisable to re-create the signing certificate " -"chain by clicking the \"Re-make certificates and key...\" button in the Keys " -"page of Preferences." +"The certificate chain that %1 uses for signing DCPs and KDMs has a validity " +"period that is too long. This will cause problems playing back DCPs on some " +"systems. It is advisable to re-create the signing certificate chain by " +"clicking the \"Re-make certificates and key...\" button in the Keys page of " +"Preferences." msgstr "" "DCP-o-matic用于ç¾ç½²DCPå’ŒKDMçš„è¯ä¹¦é“¾çš„æœ‰æ•ˆæœŸå¤ªé•¿ã€‚这将导致在æŸäº›ç³»ç»Ÿä¸Šæ’放DCP" "时出现问题。建议您通过å•击“首选项â€çš„“密钥â€é¡µé¢ä¸çš„â€œé‡æ–°åˆ¶ä½œè¯ä¹¦å’Œå¯†é’¥â€¦â€æŒ‰é’®æ¥" "釿–°åˆ›å»ºç¾åè¯ä¹¦é“¾ã€‚" -#: src/lib/video_decoder.cc:81 +#: src/lib/video_decoder.cc:70 msgid "" "The content file %1 is set as 3D but does not appear to contain 3D images. " "Please set it to 2D. You can still make a 3D DCP from this content by " @@ -1561,29 +1614,46 @@ msgstr "" "内容文件%1设置为3D,但似乎ä¸åŒ…å«3D图åƒã€‚请将其设置为2D。通过勾选DCP视频选项å¡" "ä¸çš„3D选项,您ä»ç„¶å¯ä»¥æ ¹æ®æ¤å†…容制作3D DCP。" -#: src/lib/job.cc:121 +#: src/lib/job.cc:122 msgid "" "The drive that the film is stored on is low in disc space. Free some more " "space and try again." msgstr "ç£ç›˜ç©ºé—´ä¸è¶³ï¼Œæ¸…ç†ç£ç›˜ç©ºé—´ä»¥ç»§ç»ã€‚" -#: src/lib/playlist.cc:244 +#: src/lib/playlist.cc:245 msgid "The file %1 has been moved %2 milliseconds earlier." msgstr "文件 %1 被å‘å‰ç§»åŠ¨äº† %2 毫秒。" -#: src/lib/playlist.cc:239 +#: src/lib/playlist.cc:240 msgid "The file %1 has been moved %2 milliseconds later." msgstr "文件 %1 被å‘åŽç§»åŠ¨äº† %2 毫秒。" -#: src/lib/playlist.cc:264 +#: src/lib/playlist.cc:265 msgid "The file %1 has been trimmed by %2 milliseconds less." msgstr "文件 %1 被缩çŸäº† %2 毫秒。" -#: src/lib/playlist.cc:259 +#: src/lib/playlist.cc:260 msgid "The file %1 has been trimmed by %2 milliseconds more." msgstr "文件 %1 被延长了 %2 毫秒。" -#: src/lib/hints.cc:239 +#: src/lib/hints.cc:269 +msgid "" +"The vast majority of cinemas in Europe, Australasia and North America expect " +"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema " +"really wants an old-style MPEG2 DCP." +msgstr "" + +#: src/lib/release_notes.cc:86 +#, fuzzy +msgid "" +"The vertical offset control for some subtitles now works in the opposite " +"direction to how it was before. You should check any subtitles in your " +"project to make sure that they are placed where you want them." +msgstr "" +"在这个版本ä¸ï¼Œå—å¹•çš„å®šä½æ–¹å¼å‘生了å˜åŒ–ã€‚ç›¸å¯¹äºŽæ ‡å‡†ï¼Œå®šä½çŽ°åœ¨åº”è¯¥æ›´åŠ æ£ç¡®ï¼Œä½†" +"您ä»åº”该检查项目ä¸çš„任何å—幕,以确ä¿å®ƒä»¬æ”¾åœ¨æ‚¨æƒ³è¦çš„ä½ç½®ã€‚" + +#: src/lib/hints.cc:250 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1595,40 +1665,43 @@ msgstr "" "您的DCPå’ŒæŸäº›å†…容的帧速率ä¸ç¬¦ã€‚å¯èƒ½å¯¼è‡´å£°ç”»ä¸åŒæ¥ã€‚å¦‚æžœæ‚¨çš„æ”¾æ˜ æœåŠ¡å™¨æ”¯æŒå½“å‰" "速率,建议您将DCP帧速率设置为更接近当å‰åŽŸè§†é¢‘çš„é€ŸçŽ‡ã€‚" -#: src/lib/dcp_content.cc:675 +#: src/lib/dcp_content.cc:714 msgid "There is no video in this DCP" msgstr "DCPä¸ä¸åŒ…å«è§†é¢‘ç”»é¢" -#: src/lib/job.cc:217 +#: src/lib/job.cc:227 msgid "" "There was not enough memory to do this. If you are running a 32-bit " "operating system try reducing the number of encoding threads in the General " "tab of Preferences." msgstr "内å˜ä¸è¶³ï¼Œå¦‚您是32ä½ç³»ç»Ÿï¼Œè¯·é‡æ–°è®¾ç½®è¿è¡Œçº¿ç¨‹æ•°é‡æ¥è¾¾åˆ°ç¨³å®šè¿è¡Œã€‚" -#: src/lib/util.cc:1029 -msgid "This KDM was made for DCP-o-matic but not for its leaf certificate." +#: src/lib/util.cc:1027 +#, fuzzy +msgid "This KDM was made for %1 but not for its leaf certificate." msgstr "KDM是为DCP-o-matic生æˆï¼Œä½†ä¸æ˜¯ä¸ºå®ƒçš„å¶åè¯ä¹¦ç”Ÿæˆã€‚" -#: src/lib/util.cc:1027 -msgid "This KDM was not made for DCP-o-matic's decryption certificate." +#: src/lib/util.cc:1025 +#, fuzzy +msgid "This KDM was not made for %1's decryption certificate." msgstr "KDM䏿˜¯ä¸ºDCP-o-matic解密è¯ä¹¦è€Œç”Ÿæˆã€‚" -#: src/lib/job.cc:140 +#: src/lib/job.cc:142 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic and trying to use too many encoding threads. Please reduce " -"the 'number of threads DCP-o-matic should use' in the General tab of " -"Preferences and try again." +"of %1 and trying to use too many encoding threads. Please reduce the " +"'number of threads %2 should use' in the General tab of Preferences and try " +"again." msgstr "" "出现æ¤é”™è¯¯å¯èƒ½æ˜¯å› 为您æ£åœ¨è¿è¡Œ32ä½ç‰ˆæœ¬çš„DCP-o-matic,并且试图使用太多编ç 线" "程。请在“首选项â€çš„“常规â€é€‰é¡¹å¡ä¸å‡å°‘“DCP-o-matic应该使用的线程数â€ï¼Œç„¶åŽé‡è¯•。" -#: src/lib/job.cc:150 +#: src/lib/job.cc:156 +#, fuzzy msgid "" "This error has probably occurred because you are running the 32-bit version " -"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and " -"try again." +"of %1. Please re-install %2 with the 64-bit installer and try again." msgstr "" "出现æ¤é”™è¯¯å¯èƒ½æ˜¯å› 为您æ£åœ¨è¿è¡Œ32ä½ç‰ˆæœ¬çš„DCP-o-matic。请使用64ä½å®‰è£…程åºé‡æ–°å®‰" "装DCP-o-matic,然åŽé‡è¯•。" @@ -1641,44 +1714,46 @@ msgstr "" "这是一个KDM密钥文件。KDM密钥文件å¯ä»¥é€šè¿‡åœ¨ä½ çš„DCP包上å³é”®ï¼Œç‚¹å‡»â€œæ·»åŠ KDMæ–‡" "ä»¶â€æ·»åŠ åˆ°DCPä¸ã€‚" -#: src/lib/film.cc:521 +#: src/lib/film.cc:546 +#, fuzzy msgid "" -"This film was created with a newer version of DCP-o-matic, and it cannot be " -"loaded into this version. Sorry!" +"This film was created with a newer version of %1, and it cannot be loaded " +"into this version. Sorry!" msgstr "" "这一工程文件是使用新版DCP-o-maticåˆ›å»ºçš„ï¼Œæ— æ³•è¢«è¿™ä¸€ç‰ˆæœ¬çš„DCP-o-maticåŠ è½½ã€‚æŠ±" "æ‰ï¼" -#: src/lib/film.cc:506 +#: src/lib/film.cc:527 +#, fuzzy msgid "" -"This film was created with an older version of DCP-o-matic, and " -"unfortunately it cannot be loaded into this version. You will need to " -"create a new Film, re-add your content and set it up again. Sorry!" +"This film was created with an older version of %1, and unfortunately it " +"cannot be loaded into this version. You will need to create a new Film, re-" +"add your content and set it up again. Sorry!" msgstr "" "这一工程文件是使用旧版本的DCP-o-maticåˆ›å»ºçš„ï¼Œå¾ˆé—æ†¾æ— 法被这一版本的DCP-o-" "maticåŠ è½½ã€‚æ‚¨éœ€è¦åˆ›å»ºä¸€ä¸ªæ–°çš„å·¥ç¨‹æ–‡ä»¶ï¼Œé‡æ–°æ·»åР内容并釿–°è®¾ç½®ã€‚抱æ‰ï¼" -#: src/lib/job.cc:557 +#: src/lib/job.cc:567 msgid "Thursday" msgstr "星期四" -#: src/lib/text_type.cc:68 +#: src/lib/text_type.cc:77 msgid "Timed text" msgstr "时控文本" -#: src/lib/dcp_content_type.cc:55 +#: src/lib/dcp_content_type.cc:56 msgid "Trailer" msgstr "预告片" -#: src/lib/transcode_job.cc:74 +#: src/lib/transcode_job.cc:75 msgid "Transcoding %1" msgstr "转ç ä¸ %1" -#: src/lib/dcp_content_type.cc:57 +#: src/lib/dcp_content_type.cc:58 msgid "Transitional" msgstr "过渡片" -#: src/lib/job.cc:553 +#: src/lib/job.cc:563 msgid "Tuesday" msgstr "星期二" @@ -1686,7 +1761,7 @@ msgstr "星期二" msgid "USL" msgstr "è§„æ ¼ä¸Šé™ USL" -#: src/lib/internet.cc:186 +#: src/lib/internet.cc:188 msgid "Unexpected ZIP file contents" msgstr "æ„外的ZIP文件的内容" @@ -1694,35 +1769,35 @@ msgstr "æ„外的ZIP文件的内容" msgid "Unexpected image type received by server" msgstr "æœåŠ¡å™¨æŽ¥æ”¶åˆ°æ„外的图åƒç±»åž‹" -#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53 +#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53 msgid "Unknown" msgstr "未知" -#: src/lib/job.cc:264 +#: src/lib/job.cc:274 msgid "Unknown error" msgstr "未知错误" -#: src/lib/ffmpeg_decoder.cc:374 +#: src/lib/ffmpeg_decoder.cc:373 msgid "Unrecognised audio sample format (%1)" msgstr "æ— æ³•è¯†åˆ«çš„éŸ³é¢‘é‡‡æ ·æ ¼å¼ (%1)" -#: src/lib/filter.cc:101 +#: src/lib/filter.cc:102 msgid "Unsharp mask and Gaussian blur" msgstr "USMé”化和高斯模糊" -#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580 -#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600 -#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627 -#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630 -#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655 +#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581 +#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601 +#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628 +#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631 +#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656 msgid "Unspecified" msgstr "未指定" -#: src/lib/colour_conversion.cc:249 +#: src/lib/colour_conversion.cc:248 msgid "Untitled" msgstr "æ— æ ‡é¢˜" -#: src/lib/util.cc:635 src/lib/util.cc:636 +#: src/lib/util.cc:642 src/lib/util.cc:643 msgid "Unused" msgstr "未使用" @@ -1734,7 +1809,7 @@ msgstr "ä¸Šå˜æ¢æ··éŸ³ï¼ˆå·¦ï¼‰" msgid "Upmix R" msgstr "ä¸Šå˜æ¢æ··éŸ³ï¼ˆå³ï¼‰" -#: src/lib/util.cc:659 +#: src/lib/util.cc:666 msgid "VI" msgstr "视力障ç¢" @@ -1742,11 +1817,11 @@ msgstr "视力障ç¢" msgid "Verify DCP" msgstr "验è¯DCPä¸" -#: src/lib/filter.cc:91 +#: src/lib/filter.cc:92 msgid "Vertical flip" msgstr "垂直翻转" -#: src/lib/util.cc:628 +#: src/lib/util.cc:635 msgid "Visually impaired" msgstr "视力障ç¢" @@ -1754,23 +1829,23 @@ msgstr "视力障ç¢" msgid "Waiting" msgstr "请ç¨å€™" -#: src/lib/filter.cc:99 +#: src/lib/filter.cc:100 msgid "Weave filter" msgstr "Weave 滤镜" -#: src/lib/job.cc:555 +#: src/lib/job.cc:565 msgid "Wednesday" msgstr "星期三" -#: src/lib/ffmpeg_content.cc:660 +#: src/lib/ffmpeg_content.cc:661 msgid "YCOCG" msgstr "YCOCG" -#: src/lib/filter.cc:97 +#: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "åéš”è¡Œæ‰«ææ»¤é•œ" -#: src/lib/hints.cc:199 +#: src/lib/hints.cc:210 #, fuzzy msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " @@ -1780,7 +1855,7 @@ msgstr "" "您设置的帧率为%1 fpsçš„DCPã€‚å¹¶éžæ‰€æœ‰æ”¾æ˜ è®¾å¤‡éƒ½æ”¯æŒæ¤å¸§çŽ‡ã€‚å»ºè®®æ‚¨å°†DCP帧率更改" "为%2 fps。" -#: src/lib/hints.cc:183 +#: src/lib/hints.cc:194 msgid "" "You are set up for a DCP at a frame rate of %1 fps. This frame rate is not " "supported by all projectors. You may want to consider changing your frame " @@ -1789,13 +1864,23 @@ msgstr "" "您设置的帧率为%1 fpsçš„DCPã€‚å¹¶éžæ‰€æœ‰æ”¾æ˜ è®¾å¤‡éƒ½æ”¯æŒæ¤å¸§çŽ‡ã€‚å»ºè®®æ‚¨å°†å¸§çŽ‡æ›´æ”¹ä¸º " "%2 fps。" -#: src/lib/hints.cc:193 +#: src/lib/hints.cc:204 msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " "projectors. Be aware that you may have compatibility problems." msgstr "您设置的DCP帧速率为30fpsï¼Œè¿™ä¸æ˜¯æ‰€æœ‰æ”¾æ˜ è®¾å¤‡éƒ½æ”¯æŒ ï¼Œè¯·æ³¨æ„兼容问题。" -#: src/lib/hints.cc:304 +#: src/lib/hints.cc:127 +#, fuzzy +msgid "" +"You are using %1's stereo-to-5.1 upmixer. This is experimental and may " +"result in poor-quality audio. If you continue, you should listen to the " +"resulting DCP in a cinema to make sure that it sounds good." +msgstr "" +"ä½ ç”¨çš„æ˜¯DCP-o-maticåŒå£°é“转5.1环绕声的上混音器。这是实验性的功能,å¯èƒ½å¯¼è‡´éŸ³" +"频质é‡å˜å·®ã€‚å¦‚æžœä½ ç»§ç»ï¼Œä½ 应该在影院试å¬å®Œæˆçš„DCP声音以确认。" + +#: src/lib/hints.cc:324 msgid "" "You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if " "you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)" @@ -1803,16 +1888,7 @@ msgstr "" "æ‚¨æ·»åŠ çš„å†…å®¹æ˜¯3D内容,但您的DCP包设置为2D模å¼ï¼Œå¦‚果您想在3Dæ”¾æ˜ ç³»ç»Ÿï¼ˆå¦‚Real-" "D, MasterImageç‰ï¼‰ä¸Šæ’放,请设置到3D模å¼ã€‚" -#: src/lib/hints.cc:120 -msgid "" -"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and " -"may result in poor-quality audio. If you continue, you should listen to the " -"resulting DCP in a cinema to make sure that it sounds good." -msgstr "" -"ä½ ç”¨çš„æ˜¯DCP-o-maticåŒå£°é“转5.1环绕声的上混音器。这是实验性的功能,å¯èƒ½å¯¼è‡´éŸ³" -"频质é‡å˜å·®ã€‚å¦‚æžœä½ ç»§ç»ï¼Œä½ 应该在影院试å¬å®Œæˆçš„DCP声音以确认。" - -#: src/lib/hints.cc:288 +#: src/lib/hints.cc:308 msgid "" "You have %1 files that look like they are VOB files from DVD. You should " "join them to ensure smooth joins between the files." @@ -1820,13 +1896,13 @@ msgstr "" "æ‚¨å·²ç»æ·»åŠ äº† %1 个VOB文件,如果他们æ¥è‡ªä¸€å¼ DVDï¼Œè¯·ç¡®ä¿æ‚¨å·²ç»å¯¼å…¥äº†æ‰€æœ‰æ–‡ä»¶ï¼Œ" "å¦åˆ™å¯èƒ½æ— 法æ£å¸¸æ’放。" -#: src/lib/film.cc:1560 +#: src/lib/film.cc:1623 msgid "" "You have more than one piece of Atmos content, and they do not have the same " "frame rate. You must remove some Atmos content." msgstr "您有多个全景声内容片段,而它们的帧率ä¸åŒã€‚æ‚¨å¿…é¡»åˆ é™¤ä¸€äº›å…¨æ™¯å£°å†…å®¹ã€‚" -#: src/lib/hints.cc:590 +#: src/lib/hints.cc:611 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -1834,7 +1910,7 @@ msgstr "" "您有é‡å çš„éšè—å¼å—幕,这在 Interop DCP䏿˜¯ä¸å…许的。请您的DCPæ ‡å‡†æ›´æ”¹ä¸º" "SMPTE。" -#: src/lib/hints.cc:272 +#: src/lib/hints.cc:292 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -1846,7 +1922,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "在创建 DCP 之å‰ï¼Œå¿…é¡»å‘其䏿·»åŠ ä¸€äº›å†…å®¹" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:769 msgid "" "Your DCP has %1 audio channels, rather than 8 or 16. This may cause some " "distributors to raise QC errors when they check your DCP. To avoid this, " @@ -1855,17 +1931,18 @@ msgstr "" "您的DCP具有 %1 个音频通é“ï¼Œè€Œä¸æ˜¯8或16个通é“。这å¯èƒ½å¯¼è‡´ä¸€äº›å‘行商在检查您的 " "DCP 时出现 QC 报错。为防æ¢è¿™ç§æƒ…况,建议设置8或16个DCP音频通é“。" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:112 +#, fuzzy msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " "projectors. You may want to set the DCP to have 6 channels. It does not " -"matter if your content has fewer channels, as DCP-o-matic will fill the " -"extras with silence." +"matter if your content has fewer channels, as %1 will fill the extras with " +"silence." msgstr "" "您的DCP的音轨少于6个,æŸäº›æ”¾æ˜ 设备å¯èƒ½ä¸æ”¯æŒã€‚但是如果您的内容没有这么多的音" "轨,您ä»ç„¶å¯ä»¥è®¾ç½®æˆ6ä¸ªéŸ³è½¨ï¼Œå› ä¸ºDCP-o-matic将用空白音轨补é½ã€‚" -#: src/lib/hints.cc:158 +#: src/lib/hints.cc:169 msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " "projectors. If possible, use Flat or Scope for the DCP container ratio." @@ -1873,38 +1950,38 @@ msgstr "" "您的DCP使用了ä¸å¸¸è§çš„画幅比例,å¯èƒ½å¯¼è‡´éƒ¨åˆ†ç”µå½±æ”¾æ˜ æœºæ— æ³•æ£å¸¸æ’放,建议改æˆ" "Flat (1.77/1.78/1.85) 或者Scope (2.35/2.39) 比例。" -#: src/lib/hints.cc:338 +#: src/lib/hints.cc:358 msgid "" "Your audio level is very high (on %1). You should reduce the gain of your " "audio content." msgstr "您的音频增益过大 (在%1),请é™ä½ŽéŸ³é¢‘增益。" -#: src/lib/playlist.cc:235 +#: src/lib/playlist.cc:236 msgid "" "Your project contains video content that was not aligned to a frame boundary." msgstr "您的项目包å«ä¸ä¸Žå¸§è¾¹ç•Œå¯¹é½çš„视频内容。" -#: src/lib/playlist.cc:255 +#: src/lib/playlist.cc:256 msgid "" "Your project contains video content whose trim was not aligned to a frame " "boundary." msgstr "您的项目包å«çš„视频内容包å«ä¿®å‰ªä¸å¯¹é½çš„帧边界。" -#: src/lib/image_content.cc:78 +#: src/lib/image_content.cc:79 msgid "[moving images]" msgstr "[动æ€å›¾åƒ]" -#: src/lib/image_content.cc:76 +#: src/lib/image_content.cc:77 msgid "[still]" msgstr "[陿€å›¾åƒ]" -#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112 +#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112 msgid "[subtitles]" msgstr "[å—幕]" #. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate #. which reel it is. Preserve the %1; it will be replaced with the reel number. -#: src/lib/ffmpeg_encoder.cc:152 +#: src/lib/ffmpeg_film_encoder.cc:152 msgid "_reel%1" msgstr "_å·å·%1" @@ -1936,11 +2013,11 @@ msgstr "å¤åˆ¶ %1 ä¸" msgid "could not find stream information" msgstr "找ä¸åˆ°æµä¿¡æ¯" -#: src/lib/reel_writer.cc:453 +#: src/lib/reel_writer.cc:407 msgid "could not move atmos asset into the DCP (%1)" msgstr "æ— æ³•å°† Atmos asset移动到 DCP (%1)" -#: src/lib/reel_writer.cc:436 +#: src/lib/reel_writer.cc:390 msgid "could not move audio asset into the DCP (%1)" msgstr "æ— æ³•å°†éŸ³é¢‘asset移动到 DCP (%1)" @@ -1968,7 +2045,7 @@ msgstr "ä¸èƒ½å†™å…¥æ–‡ä»¶ %1 (%2)" msgid "error during async_connect (%1)" msgstr "异æ¥è¿žæŽ¥é”™è¯¯ (%1)" -#: src/lib/dcpomatic_socket.cc:142 +#: src/lib/dcpomatic_socket.cc:149 msgid "error during async_read (%1)" msgstr "异æ¥è¯»å–错误 (%1)" @@ -1976,62 +2053,72 @@ msgstr "异æ¥è¯»å–错误 (%1)" msgid "error during async_write (%1)" msgstr "异æ¥å†™å…¥é”™è¯¯ (%1)" -#: src/lib/content.cc:487 src/lib/content.cc:496 +#: src/lib/content.cc:499 src/lib/content.cc:508 msgid "frames per second" msgstr "æ¯ç§’帧数" #. TRANSLATORS: h here is an abbreviation for hours -#: src/lib/util.cc:207 +#: src/lib/util.cc:208 msgid "h" msgstr "å°æ—¶" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:633 +#: src/lib/dcp_content.cc:671 msgid "it has a different frame rate to the film." msgstr "它的帧率与影片ä¸ä¸€è‡´ã€‚" -#: src/lib/dcp_content.cc:726 +#: src/lib/dcp_content.cc:753 msgid "" "it has a different number of audio channels than the project; set the " "project to have %1 channels." msgstr "" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:780 +#: src/lib/dcp_content.cc:789 msgid "" "it has a start trim so its subtitles or closed captions must be re-written." msgstr "当å‰å†…容有修剪,所以å—幕或éšè—å—幕必须é‡å†™ã€‚" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:685 +#: src/lib/dcp_content.cc:724 msgid "it is 2K and the film is 4K." msgstr "它是 2K 分辨率,而影片是 4K。" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:682 +#: src/lib/dcp_content.cc:721 msgid "it is 4K and the film is 2K." msgstr "它是 4K 分辨率,而影片是 2K。" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:621 +#: src/lib/dcp_content.cc:659 msgid "it is Interop and the film is set to SMPTE." msgstr "它是Interop类型,而实际打包类型是 SMPTE。" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:625 +#: src/lib/dcp_content.cc:663 msgid "it is SMPTE and the film is set to Interop." msgstr "它是SMPTE类型,而实际打包类型是 Interop。" -#: src/lib/dcp_content.cc:736 -msgid "it overlaps other audio content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:764 +#, fuzzy +msgid "it overlaps other audio content." msgstr "与其他音频内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–å†…å®¹ã€‚" -#: src/lib/dcp_content.cc:700 -msgid "it overlaps other video content; remove the other content." +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:799 +#, fuzzy +msgid "it overlaps other text content." +msgstr "与其他音频内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–å†…å®¹ã€‚" + +#. TRANSLATORS: this string will follow "Cannot reference this DCP: " +#: src/lib/dcp_content.cc:739 +#, fuzzy +msgid "it overlaps other video content." msgstr "与其他视频内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–å†…å®¹ã€‚" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:656 +#: src/lib/dcp_content.cc:694 msgid "" "its reel lengths differ from those in the film; set the reel mode to 'split " "by video content'." @@ -2039,16 +2126,16 @@ msgstr "" "å…¶åˆ†å·æ—¶é•¿ä¸Žå½±ç‰‡ä¸çš„ä¸ä¸€è‡´ï¼›è¯·è®¾ç½® ã€ åˆ†å·æ¨¡å¼ 】 为〠按视频内容分割 】。" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:690 +#: src/lib/dcp_content.cc:729 msgid "its video frame size differs from the film's." msgstr "视频帧大å°ä¸Žå½±ç‰‡ä¸ä¸€è‡´ã€‚" #. TRANSLATORS: m here is an abbreviation for minutes -#: src/lib/util.cc:216 +#: src/lib/util.cc:217 msgid "m" msgstr "分" -#: src/lib/image_content.cc:94 +#: src/lib/image_content.cc:95 msgid "moving" msgstr "移动" @@ -2057,44 +2144,52 @@ msgid "name" msgstr "åå—" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:771 +#: src/lib/dcp_content.cc:783 msgid "" "one of its closed caption has a non-zero entry point so it must be re-" "written." msgstr "它的一个éšè—å—幕有一个éžé›¶çš„æ—¶é—´ç‚¹ï¼Œå› æ¤å¿…é¡»é‡å†™ã€‚" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " -#: src/lib/dcp_content.cc:763 +#: src/lib/dcp_content.cc:777 msgid "" "one of its subtitle reels has a non-zero entry point so it must be re-" "written." msgstr "它的一个å—幕å·è½´æœ‰ä¸€ä¸ªéžé›¶çš„æ—¶é—´ç‚¹ï¼Œå› æ¤å¿…é¡»é‡å†™ã€‚" #. TRANSLATORS: s here is an abbreviation for seconds -#: src/lib/util.cc:226 +#: src/lib/util.cc:227 msgid "s" msgstr "ç§’" -#: src/lib/colour_conversion.cc:290 +#: src/lib/colour_conversion.cc:289 msgid "sRGB" msgstr "sRGB" -#: src/lib/image_content.cc:92 +#: src/lib/image_content.cc:93 msgid "still" msgstr "陿¢å›¾åƒ" -#: src/lib/dcp_content.cc:790 -msgid "they overlap other text content; remove the other content." -msgstr "与其他文å—内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–å†…å®¹ã€‚" - -#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375 +#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375 msgid "unknown" msgstr "未知" -#: src/lib/video_content.cc:531 +#: src/lib/video_content.cc:533 msgid "video frames" msgstr "视频帧" +#~ msgid "Copying old video file" +#~ msgstr "å¤åˆ¶æºè§†é¢‘文件" + +#~ msgid "Copying video file into DCP" +#~ msgstr "æ£åœ¨å°†è§†é¢‘文件å¤åˆ¶åˆ° DCP" + +#~ msgid "DCP-o-matic notification" +#~ msgstr "DCP-o-maticæé†’" + +#~ msgid "they overlap other text content; remove the other content." +#~ msgstr "与其他文å—内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–å†…å®¹ã€‚" + #~ msgid "it does not have closed captions in all its reels." #~ msgstr "它的所有分å·éƒ½æ²¡æœ‰éšè—å¼å—幕。" @@ -2105,12 +2200,6 @@ msgstr "视频帧" #~ msgstr "它的所有分å·éƒ½æ²¡æœ‰å£°éŸ³ã€‚" #~ msgid "" -#~ "Please report this problem by using Help -> Report a problem or via email " -#~ "to carl@dcpomatic.com" -#~ msgstr "" -#~ "请æäº¤è¿™ä¸ªé—®é¢˜ï¼Œåœ¨å¸®åŠ©é¤å•ä¸é€‰æ‹©ï¼šé€šè¿‡Emailå馈问题:carl@dcpomatic.com" - -#~ msgid "" #~ "Your default container is not valid and has been changed to Flat (1.85:1)" #~ msgstr "默认设置的容器ä¸å¯ç”¨ï¼Œå·²è¢«æ›¿æ¢ä¸ºFlat (1.85:1)" diff --git a/src/lib/raw_image_proxy.cc b/src/lib/raw_image_proxy.cc index c606ddd99..1ad78827c 100644 --- a/src/lib/raw_image_proxy.cc +++ b/src/lib/raw_image_proxy.cc @@ -73,12 +73,12 @@ RawImageProxy::image (Image::Alignment alignment, optional<dcp::Size>) const void -RawImageProxy::add_metadata (xmlpp::Node* node) const +RawImageProxy::add_metadata(xmlpp::Element* element) const { - node->add_child("Type")->add_child_text(N_("Raw")); - node->add_child("Width")->add_child_text(raw_convert<string>(_image->size().width)); - node->add_child("Height")->add_child_text(raw_convert<string>(_image->size().height)); - node->add_child("PixelFormat")->add_child_text(raw_convert<string>(static_cast<int>(_image->pixel_format()))); + cxml::add_text_child(element, "Type", N_("Raw")); + cxml::add_text_child(element, "Width", raw_convert<string>(_image->size().width)); + cxml::add_text_child(element, "Height", raw_convert<string>(_image->size().height)); + cxml::add_text_child(element, "PixelFormat", raw_convert<string>(static_cast<int>(_image->pixel_format()))); } diff --git a/src/lib/raw_image_proxy.h b/src/lib/raw_image_proxy.h index d5ae2457d..852f7c076 100644 --- a/src/lib/raw_image_proxy.h +++ b/src/lib/raw_image_proxy.h @@ -37,7 +37,7 @@ public: boost::optional<dcp::Size> size = boost::optional<dcp::Size> () ) const override; - void add_metadata (xmlpp::Node *) const override; + void add_metadata(xmlpp::Element*) const override; void write_to_socket (std::shared_ptr<Socket>) const override; bool same (std::shared_ptr<const ImageProxy>) const override; size_t memory_used () const override; diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc index 1b33cae85..5210466b2 100644 --- a/src/lib/reel_writer.cc +++ b/src/lib/reel_writer.cc @@ -28,35 +28,35 @@ #include "digester.h" #include "film.h" #include "film_util.h" +#include "frame_info.h" #include "image.h" #include "image_png.h" #include "job.h" #include "log.h" #include "reel_writer.h" +#include "remembered_asset.h" #include <dcp/atmos_asset.h> #include <dcp/atmos_asset_writer.h> #include <dcp/certificate_chain.h> #include <dcp/cpl.h> #include <dcp/dcp.h> #include <dcp/filesystem.h> -#include <dcp/interop_subtitle_asset.h> -#include <dcp/mono_picture_asset.h> +#include <dcp/interop_text_asset.h> +#include <dcp/mono_j2k_picture_asset.h> #include <dcp/raw_convert.h> #include <dcp/reel.h> #include <dcp/reel_atmos_asset.h> -#include <dcp/reel_interop_closed_caption_asset.h> -#include <dcp/reel_interop_subtitle_asset.h> +#include <dcp/reel_interop_text_asset.h> #include <dcp/reel_markers_asset.h> #include <dcp/reel_mono_picture_asset.h> -#include <dcp/reel_smpte_closed_caption_asset.h> -#include <dcp/reel_smpte_subtitle_asset.h> +#include <dcp/reel_smpte_text_asset.h> #include <dcp/reel_sound_asset.h> #include <dcp/reel_stereo_picture_asset.h> -#include <dcp/smpte_subtitle_asset.h> +#include <dcp/smpte_text_asset.h> #include <dcp/sound_asset.h> #include <dcp/sound_asset_writer.h> -#include <dcp/stereo_picture_asset.h> -#include <dcp/subtitle_image.h> +#include <dcp/stereo_j2k_picture_asset.h> +#include <dcp/text_image.h> #include "i18n.h" @@ -81,9 +81,6 @@ using dcp::raw_convert; using namespace dcpomatic; -int const ReelWriter::_info_size = 48; - - static dcp::MXFMetadata mxf_metadata () { @@ -108,9 +105,10 @@ mxf_metadata () * subtitle / closed caption files. */ ReelWriter::ReelWriter ( - weak_ptr<const Film> weak_film, DCPTimePeriod period, shared_ptr<Job> job, int reel_index, int reel_count, bool text_only + weak_ptr<const Film> weak_film, DCPTimePeriod period, shared_ptr<Job> job, int reel_index, int reel_count, bool text_only, boost::filesystem::path output_dir ) - : WeakConstFilm (weak_film) + : WeakConstFilm(weak_film) + , _output_dir(std::move(output_dir)) , _period (period) , _reel_index (reel_index) , _reel_count (reel_count) @@ -119,59 +117,87 @@ ReelWriter::ReelWriter ( , _text_only (text_only) , _font_metrics(film()->frame_size().height) { - /* Create or find our picture asset in a subdirectory, named - according to those film's parameters which affect the video - output. We will hard-link it into the DCP later. - */ + _default_font = dcp::ArrayData(default_font_file()); + + if (text_only) { + return; + } auto const standard = film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE; - boost::filesystem::path const asset = - film()->internal_video_asset_dir() / film()->internal_video_asset_filename(_period); + auto remembered_assets = film()->read_remembered_assets(); + DCPOMATIC_ASSERT(film()->directory()); - _first_nonexistent_frame = check_existing_picture_asset (asset); + auto existing_asset_filename = find_asset(remembered_assets, *film()->directory(), period, film()->video_identifier()); + if (existing_asset_filename) { + _first_nonexistent_frame = check_existing_picture_asset(*existing_asset_filename); + } if (_first_nonexistent_frame < period.duration().frames_round(film()->video_frame_rate())) { - /* We do not have a complete picture asset. If there is an - existing asset, break any hard links to it as we are about - to change its contents (if only by changing the IDs); see - #1126. - */ - if (dcp::filesystem::exists(asset) && dcp::filesystem::hard_link_count(asset) > 1) { - if (job) { - job->sub (_("Copying old video file")); - copy_in_bits (asset, asset.string() + ".tmp", bind(&Job::set_progress, job.get(), _1, false)); - } else { - dcp::filesystem::copy_file(asset, asset.string() + ".tmp"); + /* No existing asset, or an incomplete one */ + + auto const rate = dcp::Fraction(film()->video_frame_rate(), 1); + + auto setup = [this](shared_ptr<dcp::PictureAsset> asset) { + asset->set_size(film()->frame_size()); + asset->set_metadata(mxf_metadata()); + + if (film()->encrypted()) { + asset->set_key(film()->key()); + asset->set_context_id(film()->context_id()); } - dcp::filesystem::remove(asset); - dcp::filesystem::rename(asset.string() + ".tmp", asset); - } + }; + shared_ptr<dcp::PictureAsset> picture_asset; - if (film()->three_d()) { - _picture_asset.reset (new dcp::StereoPictureAsset(dcp::Fraction(film()->video_frame_rate(), 1), standard)); + if (film()->video_encoding() == VideoEncoding::JPEG2000) { + if (film()->three_d()) { + _j2k_picture_asset = std::make_shared<dcp::StereoJ2KPictureAsset>(rate, standard); + } else { + _j2k_picture_asset = std::make_shared<dcp::MonoJ2KPictureAsset>(rate, standard); + } + setup(_j2k_picture_asset); + picture_asset = _j2k_picture_asset; } else { - _picture_asset.reset (new dcp::MonoPictureAsset(dcp::Fraction(film()->video_frame_rate(), 1), standard)); + _mpeg2_picture_asset = std::make_shared<dcp::MonoMPEG2PictureAsset>(rate); + setup(_mpeg2_picture_asset); + picture_asset = _mpeg2_picture_asset; } - _picture_asset->set_size (film()->frame_size()); - _picture_asset->set_metadata (mxf_metadata()); - - if (film()->encrypted()) { - _picture_asset->set_key (film()->key()); - _picture_asset->set_context_id (film()->context_id()); + auto new_asset_filename = _output_dir / video_asset_filename(picture_asset, _reel_index, _reel_count, _content_summary); + if (_first_nonexistent_frame > 0) { + LOG_GENERAL("Re-using partial asset %1: has frames up to %2", *existing_asset_filename, _first_nonexistent_frame); + dcp::filesystem::rename(*existing_asset_filename, new_asset_filename); } + remembered_assets.push_back(RememberedAsset(new_asset_filename.filename(), period, film()->video_identifier())); + film()->write_remembered_assets(remembered_assets); + picture_asset->set_file(new_asset_filename); - _picture_asset->set_file (asset); - _picture_asset_writer = _picture_asset->start_write(asset, _first_nonexistent_frame > 0 ? dcp::PictureAsset::Behaviour::OVERWRITE_EXISTING : dcp::PictureAsset::Behaviour::MAKE_NEW); - } else if (!text_only) { + dcp::Behaviour const behaviour = _first_nonexistent_frame > 0 ? dcp::Behaviour::OVERWRITE_EXISTING : dcp::Behaviour::MAKE_NEW; + if (_j2k_picture_asset) { + _j2k_picture_asset_writer = _j2k_picture_asset->start_write(new_asset_filename, behaviour); + } else { + _mpeg2_picture_asset_writer = _mpeg2_picture_asset->start_write(new_asset_filename, behaviour); + } + } else { + LOG_GENERAL("Re-using complete asset %1", *existing_asset_filename); /* We already have a complete picture asset that we can just re-use */ /* XXX: what about if the encryption key changes? */ - if (film()->three_d()) { - _picture_asset = make_shared<dcp::StereoPictureAsset>(asset); + auto new_asset_filename = _output_dir / existing_asset_filename->filename(); + if (new_asset_filename != *existing_asset_filename) { + dcp::filesystem::copy(*existing_asset_filename, new_asset_filename); + remembered_assets.push_back(RememberedAsset(new_asset_filename, period, film()->video_identifier())); + } + film()->write_remembered_assets(remembered_assets); + + if (film()->video_encoding() == VideoEncoding::JPEG2000) { + if (film()->three_d()) { + _j2k_picture_asset = make_shared<dcp::StereoJ2KPictureAsset>(new_asset_filename); + } else { + _j2k_picture_asset = make_shared<dcp::MonoJ2KPictureAsset>(new_asset_filename); + } } else { - _picture_asset = make_shared<dcp::MonoPictureAsset>(asset); + _mpeg2_picture_asset = make_shared<dcp::MonoMPEG2PictureAsset>(new_asset_filename); } } @@ -210,55 +236,6 @@ ReelWriter::ReelWriter ( film()->limit_to_smpte_bv20() ? dcp::SoundAsset::MCASubDescriptors::DISABLED : dcp::SoundAsset::MCASubDescriptors::ENABLED ); } - - _default_font = dcp::ArrayData(default_font_file()); -} - - -/** @param frame reel-relative frame */ -void -ReelWriter::write_frame_info (Frame frame, Eyes eyes, dcp::FrameInfo info) const -{ - auto handle = film()->info_file_handle(_period, false); - handle->get().seek(frame_info_position(frame, eyes), SEEK_SET); - handle->get().checked_write(&info.offset, sizeof(info.offset)); - handle->get().checked_write(&info.size, sizeof(info.size)); - handle->get().checked_write(info.hash.c_str(), info.hash.size()); -} - - -dcp::FrameInfo -ReelWriter::read_frame_info (shared_ptr<InfoFileHandle> info, Frame frame, Eyes eyes) const -{ - dcp::FrameInfo frame_info; - info->get().seek(frame_info_position(frame, eyes), SEEK_SET); - info->get().checked_read(&frame_info.offset, sizeof(frame_info.offset)); - info->get().checked_read(&frame_info.size, sizeof(frame_info.size)); - - char hash_buffer[33]; - info->get().checked_read(hash_buffer, 32); - hash_buffer[32] = '\0'; - frame_info.hash = hash_buffer; - - return frame_info; -} - - -long -ReelWriter::frame_info_position (Frame frame, Eyes eyes) const -{ - switch (eyes) { - case Eyes::BOTH: - return frame * _info_size; - case Eyes::LEFT: - return frame * _info_size * 2; - case Eyes::RIGHT: - return frame * _info_size * 2 + _info_size; - default: - DCPOMATIC_ASSERT (false); - } - - DCPOMATIC_ASSERT (false); } @@ -290,8 +267,8 @@ ReelWriter::check_existing_picture_asset (boost::filesystem::path asset) } /* Offset of the last dcp::FrameInfo in the info file */ - int const n = (dcp::filesystem::file_size(info_file->get().path()) / _info_size) - 1; - LOG_GENERAL ("The last FI is %1; info file is %2, info size %3", n, dcp::filesystem::file_size(info_file->get().path()), _info_size); + int const n = (dcp::filesystem::file_size(info_file->get().path()) / J2KFrameInfo::size_on_disk()) - 1; + LOG_GENERAL("The last FI is %1; info file is %2, info size %3", n, dcp::filesystem::file_size(info_file->get().path()), J2KFrameInfo::size_on_disk()) Frame first_nonexistent_frame; if (film()->three_d()) { @@ -321,13 +298,13 @@ ReelWriter::check_existing_picture_asset (boost::filesystem::path asset) void ReelWriter::write (shared_ptr<const Data> encoded, Frame frame, Eyes eyes) { - if (!_picture_asset_writer) { + if (!_j2k_picture_asset_writer) { /* We're not writing any data */ return; } - auto fin = _picture_asset_writer->write (encoded->data(), encoded->size()); - write_frame_info (frame, eyes, fin); + auto fin = J2KFrameInfo(_j2k_picture_asset_writer->write(encoded->data(), encoded->size())); + fin.write(film()->info_file_handle(_period, false), frame, eyes); _last_written[eyes] = encoded; } @@ -349,37 +326,50 @@ ReelWriter::write (shared_ptr<const dcp::AtmosFrame> atmos, AtmosMetadata metada void -ReelWriter::fake_write (int size) +ReelWriter::write(shared_ptr<dcp::MonoMPEG2PictureFrame> image) { - if (!_picture_asset_writer) { + _mpeg2_picture_asset_writer->write(image->data(), image->size()); +} + + +void +ReelWriter::fake_write(dcp::J2KFrameInfo const& info) +{ + if (!_j2k_picture_asset_writer) { /* We're not writing any data */ return; } - _picture_asset_writer->fake_write (size); + _j2k_picture_asset_writer->fake_write(info); } void ReelWriter::repeat_write (Frame frame, Eyes eyes) { - if (!_picture_asset_writer) { + if (!_j2k_picture_asset_writer) { /* We're not writing any data */ return; } - auto fin = _picture_asset_writer->write(_last_written[eyes]->data(), _last_written[eyes]->size()); - write_frame_info (frame, eyes, fin); + auto fin = J2KFrameInfo(_j2k_picture_asset_writer->write(_last_written[eyes]->data(), _last_written[eyes]->size())); + fin.write(film()->info_file_handle(_period, false), frame, eyes); } void ReelWriter::finish (boost::filesystem::path output_dcp) { - if (_picture_asset_writer && !_picture_asset_writer->finalize ()) { - /* Nothing was written to the picture asset */ - LOG_GENERAL ("Nothing was written to reel %1 of %2", _reel_index, _reel_count); - _picture_asset.reset (); + if (_j2k_picture_asset_writer && !_j2k_picture_asset_writer->finalize()) { + /* Nothing was written to the J2K picture asset */ + LOG_GENERAL("Nothing was written to J2K asset for reel %1 of %2", _reel_index, _reel_count); + _j2k_picture_asset.reset(); + } + + if (_mpeg2_picture_asset_writer && !_mpeg2_picture_asset_writer->finalize()) { + /* Nothing was written to the MPEG2 picture asset */ + LOG_GENERAL("Nothing was written to MPEG2 asset for reel %1 of %2", _reel_index, _reel_count); + _mpeg2_picture_asset.reset(); } if (_sound_asset_writer && !_sound_asset_writer->finalize ()) { @@ -387,42 +377,6 @@ ReelWriter::finish (boost::filesystem::path output_dcp) _sound_asset.reset (); } - /* Hard-link any video asset file into the DCP */ - if (_picture_asset) { - DCPOMATIC_ASSERT (_picture_asset->file()); - boost::filesystem::path video_from = _picture_asset->file().get(); - boost::filesystem::path video_to = output_dcp; - video_to /= video_asset_filename (_picture_asset, _reel_index, _reel_count, _content_summary); - /* There may be an existing "to" file if we are recreating a DCP in the same place without - changing any video. - */ - boost::system::error_code ec; - dcp::filesystem::remove(video_to, ec); - - dcp::filesystem::create_hard_link(video_from, video_to, ec); - if (ec) { - LOG_WARNING("Hard-link failed (%1); copying instead", error_details(ec)); - auto job = _job.lock (); - if (job) { - job->sub (_("Copying video file into DCP")); - try { - copy_in_bits (video_from, video_to, bind(&Job::set_progress, job.get(), _1, false)); - } catch (exception& e) { - LOG_ERROR ("Failed to copy video file from %1 to %2 (%3)", video_from.string(), video_to.string(), e.what()); - throw FileError (e.what(), video_from); - } - } else { - dcp::filesystem::copy_file(video_from, video_to, ec); - if (ec) { - LOG_ERROR("Failed to copy video file from %1 to %2 (%3)", video_from.string(), video_to.string(), error_details(ec)); - throw FileError (ec.message(), video_from); - } - } - } - - _picture_asset->set_file (video_to); - } - /* Move the audio asset into the DCP */ if (_sound_asset) { boost::filesystem::path audio_to = output_dcp; @@ -460,12 +414,13 @@ ReelWriter::finish (boost::filesystem::path output_dcp) /** Try to make a ReelAsset for a subtitles or closed captions in a given period in the DCP. - * A SubtitleAsset can be provided, or we will use one from @ref refs if not. + * A TextAsset can be provided, or we will use one from @ref refs if not. */ template <class Interop, class SMPTE, class Result> shared_ptr<Result> maybe_add_text ( - shared_ptr<dcp::SubtitleAsset> asset, + shared_ptr<dcp::TextAsset> asset, + dcp::TextType type, int64_t picture_duration, shared_ptr<dcp::Reel> reel, int reel_index, @@ -483,17 +438,18 @@ maybe_add_text ( shared_ptr<Result> reel_asset; if (asset) { - if (auto interop = dynamic_pointer_cast<dcp::InteropSubtitleAsset>(asset)) { + if (auto interop = dynamic_pointer_cast<dcp::InteropTextAsset>(asset)) { auto directory = output_dcp / interop->id (); dcp::filesystem::create_directories(directory); interop->write (directory / subtitle_asset_filename(asset, reel_index, reel_count, content_summary, ".xml")); reel_asset = make_shared<Interop> ( + type, interop, dcp::Fraction(film->video_frame_rate(), 1), picture_duration, 0 ); - } else if (auto smpte = dynamic_pointer_cast<dcp::SMPTESubtitleAsset>(asset)) { + } else if (auto smpte = dynamic_pointer_cast<dcp::SMPTETextAsset>(asset)) { /* All our assets should be the same length; use the picture asset length here as a reference to set the subtitle one. We'll use the duration rather than the intrinsic duration; we don't care if the picture asset has been trimmed, we're @@ -504,6 +460,7 @@ maybe_add_text ( output_dcp / subtitle_asset_filename(asset, reel_index, reel_count, content_summary, ".mxf") ); reel_asset = make_shared<SMPTE> ( + type, smpte, dcp::Fraction(film->video_frame_rate(), 1), picture_duration, @@ -544,17 +501,17 @@ ReelWriter::create_reel_picture (shared_ptr<dcp::Reel> reel, list<ReferencedReel { shared_ptr<dcp::ReelPictureAsset> reel_asset; - if (_picture_asset) { + if (_j2k_picture_asset) { /* We have made a picture asset of our own. Put it into the reel */ - auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset> (_picture_asset); - if (mono) { + if (auto mono = dynamic_pointer_cast<dcp::MonoJ2KPictureAsset>(_j2k_picture_asset)) { reel_asset = make_shared<dcp::ReelMonoPictureAsset>(mono, 0); } - auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset> (_picture_asset); - if (stereo) { + if (auto stereo = dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(_j2k_picture_asset)) { reel_asset = make_shared<dcp::ReelStereoPictureAsset>(stereo, 0); } + } else if (_mpeg2_picture_asset) { + reel_asset = make_shared<dcp::ReelMonoPictureAsset>(_mpeg2_picture_asset, 0); } else { LOG_GENERAL ("no picture asset of our own; look through %1", refs.size()); /* We don't have a picture asset of our own; hopefully we have one to reference */ @@ -646,14 +603,15 @@ ReelWriter::create_reel_text ( set<DCPTextTrack> ensure_closed_captions ) const { - auto subtitle = maybe_add_text<dcp::ReelInteropSubtitleAsset, dcp::ReelSMPTESubtitleAsset, dcp::ReelSubtitleAsset> ( - _subtitle_asset, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only + auto subtitle = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset> ( + _subtitle_asset, dcp::TextType::OPEN_SUBTITLE, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only ); if (!subtitle && ensure_subtitles) { /* We had no subtitle asset, but we've been asked to make sure there is one */ - subtitle = maybe_add_text<dcp::ReelInteropSubtitleAsset, dcp::ReelSMPTESubtitleAsset, dcp::ReelSubtitleAsset> ( + subtitle = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>( empty_text_asset(TextType::OPEN_SUBTITLE, optional<DCPTextTrack>(), true), + dcp::TextType::OPEN_SUBTITLE, duration, reel, _reel_index, @@ -675,8 +633,8 @@ ReelWriter::create_reel_text ( } for (auto const& i: _closed_caption_assets) { - auto a = maybe_add_text<dcp::ReelInteropClosedCaptionAsset, dcp::ReelSMPTEClosedCaptionAsset, dcp::ReelClosedCaptionAsset> ( - i.second, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only + auto a = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>( + i.second, dcp::TextType::CLOSED_CAPTION, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only ); DCPOMATIC_ASSERT (a); a->set_annotation_text (i.first.name); @@ -689,8 +647,9 @@ ReelWriter::create_reel_text ( /* Make empty tracks for anything we've been asked to ensure but that we haven't added */ for (auto i: ensure_closed_captions) { - auto a = maybe_add_text<dcp::ReelInteropClosedCaptionAsset, dcp::ReelSMPTEClosedCaptionAsset, dcp::ReelClosedCaptionAsset> ( + auto a = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>( empty_text_asset(TextType::CLOSED_CAPTION, i, true), + dcp::TextType::CLOSED_CAPTION, duration, reel, _reel_index, @@ -783,8 +742,11 @@ try { vector<shared_ptr<const dcp::Asset>> assets; - if (_picture_asset) { - assets.push_back(_picture_asset); + if (_j2k_picture_asset) { + assets.push_back(_j2k_picture_asset); + } + if (_mpeg2_picture_asset) { + assets.push_back(_mpeg2_picture_asset); } if (_sound_asset) { assets.push_back(_sound_asset); @@ -832,15 +794,15 @@ ReelWriter::write (shared_ptr<const AudioBuffers> audio) } -shared_ptr<dcp::SubtitleAsset> +shared_ptr<dcp::TextAsset> ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool with_dummy) const { - shared_ptr<dcp::SubtitleAsset> asset; + shared_ptr<dcp::TextAsset> asset; optional<string> font; auto lang = film()->subtitle_languages(); if (film()->interop()) { - auto s = make_shared<dcp::InteropSubtitleAsset>(); + auto s = make_shared<dcp::InteropTextAsset>(); s->set_movie_title (film()->name()); if (type == TextType::OPEN_SUBTITLE) { s->set_language (lang.first ? lang.first->to_string() : "Unknown"); @@ -850,7 +812,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool s->set_reel_number (raw_convert<string> (_reel_index + 1)); asset = s; } else { - auto s = make_shared<dcp::SMPTESubtitleAsset>(); + auto s = make_shared<dcp::SMPTETextAsset>(); s->set_content_title_text (film()->name()); s->set_metadata (mxf_metadata()); if (type == TextType::OPEN_SUBTITLE && lang.first) { @@ -870,7 +832,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool if (with_dummy) { asset->add( - std::make_shared<dcp::SubtitleString>( + std::make_shared<dcp::TextString>( font, false, false, @@ -938,7 +900,7 @@ ReelWriter::convert_vertical_position(StringText const& subtitle, dcp::SubtitleS void ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period, FontIdMap const& fonts, shared_ptr<dcpomatic::Font> chosen_interop_font) { - shared_ptr<dcp::SubtitleAsset> asset; + shared_ptr<dcp::TextAsset> asset; switch (type) { case TextType::OPEN_SUBTITLE: @@ -975,7 +937,7 @@ ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track, i.set_in (dcp::Time(period.from.seconds() - _period.from.seconds(), tcr)); i.set_out (dcp::Time(period.to.seconds() - _period.from.seconds(), tcr)); i.set_v_position(convert_vertical_position(i, film()->interop() ? dcp::SubtitleStandard::INTEROP : dcp::SubtitleStandard::SMPTE_2014)); - auto sub = make_shared<dcp::SubtitleString>(i); + auto sub = make_shared<dcp::TextString>(i); /* i.font is a shared_ptr<Font> which uniquely identifies the font we want, * though if we are Interop we can only have one font, so we'll use the chosen * one instead. @@ -992,7 +954,7 @@ ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track, for (auto i: subs.bitmap) { asset->add ( - make_shared<dcp::SubtitleImage>( + make_shared<dcp::TextImage>( image_as_png(i.image), dcp::Time(period.from.seconds() - _period.from.seconds(), tcr), dcp::Time(period.to.seconds() - _period.from.seconds(), tcr), @@ -1012,7 +974,7 @@ ReelWriter::existing_picture_frame_ok (dcp::File& asset_file, shared_ptr<InfoFil /* Read the data from the info file; for 3D we just check the left frames until we find a good one. */ - auto const info = read_frame_info (info_file, frame, film()->three_d() ? Eyes::LEFT : Eyes::BOTH); + auto const info = J2KFrameInfo(info_file, frame, film()->three_d() ? Eyes::LEFT : Eyes::BOTH); bool ok = true; diff --git a/src/lib/reel_writer.h b/src/lib/reel_writer.h index c9052c832..ac6531148 100644 --- a/src/lib/reel_writer.h +++ b/src/lib/reel_writer.h @@ -27,10 +27,14 @@ #include "player_text.h" #include "referenced_reel_asset.h" #include "render_text.h" +#include "text_type.h" #include "weak_film.h" #include <dcp/atmos_asset_writer.h> #include <dcp/file.h> -#include <dcp/picture_asset_writer.h> +#include <dcp/ffmpeg_image.h> +#include <dcp/j2k_picture_asset_writer.h> +#include <dcp/mono_mpeg2_picture_frame.h> +#include <dcp/mpeg2_picture_asset_writer.h> class AudioBuffers; @@ -41,18 +45,19 @@ struct write_frame_info_test; namespace dcp { class AtmosAsset; - class MonoPictureAsset; - class MonoPictureAssetWriter; - class PictureAsset; - class PictureAssetWriter; + class MonoJ2KPictureAsset; + class MonoJ2KPictureAssetWriter; + class J2KPictureAsset; + class J2KPictureAssetWriter; + class MPEG2PictureAsset; class Reel; class ReelAsset; class ReelPictureAsset; class SoundAsset; class SoundAssetWriter; - class StereoPictureAsset; - class StereoPictureAssetWriter; - class SubtitleAsset; + class StereoJ2KPictureAsset; + class StereoJ2KPictureAssetWriter; + class TextAsset; } @@ -65,15 +70,17 @@ public: std::shared_ptr<Job> job, int reel_index, int reel_count, - bool text_only + bool text_only, + boost::filesystem::path output_dir ); void write (std::shared_ptr<const dcp::Data> encoded, Frame frame, Eyes eyes); - void fake_write (int size); + void fake_write(dcp::J2KFrameInfo const& info); void repeat_write (Frame frame, Eyes eyes); void write (std::shared_ptr<const AudioBuffers> audio); void write(PlayerText text, TextType type, boost::optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period, FontIdMap const& fonts, std::shared_ptr<dcpomatic::Font> chosen_interop_font); void write (std::shared_ptr<const dcp::AtmosFrame> atmos, AtmosMetadata metadata); + void write(std::shared_ptr<dcp::MonoMPEG2PictureFrame> image); void finish (boost::filesystem::path output_dcp); std::shared_ptr<dcp::Reel> create_reel ( @@ -94,17 +101,13 @@ public: return _first_nonexistent_frame; } - dcp::FrameInfo read_frame_info (std::shared_ptr<InfoFileHandle> info, Frame frame, Eyes eyes) const; - private: friend struct ::write_frame_info_test; - void write_frame_info (Frame frame, Eyes eyes, dcp::FrameInfo info) const; - long frame_info_position (Frame frame, Eyes eyes) const; Frame check_existing_picture_asset (boost::filesystem::path asset); bool existing_picture_frame_ok (dcp::File& asset_file, std::shared_ptr<InfoFileHandle> info_file, Frame frame) const; - std::shared_ptr<dcp::SubtitleAsset> empty_text_asset (TextType type, boost::optional<DCPTextTrack> track, bool with_dummy) const; + std::shared_ptr<dcp::TextAsset> empty_text_asset (TextType type, boost::optional<DCPTextTrack> track, bool with_dummy) const; std::shared_ptr<dcp::ReelPictureAsset> create_reel_picture (std::shared_ptr<dcp::Reel> reel, std::list<ReferencedReelAsset> const & refs) const; void create_reel_sound (std::shared_ptr<dcp::Reel> reel, std::list<ReferencedReelAsset> const & refs) const; @@ -119,9 +122,10 @@ private: void create_reel_markers (std::shared_ptr<dcp::Reel> reel) const; float convert_vertical_position(StringText const& subtitle, dcp::SubtitleStandard to) const; + boost::filesystem::path _output_dir; dcpomatic::DCPTimePeriod _period; /** the first picture frame index that does not already exist in our MXF */ - int _first_nonexistent_frame; + int _first_nonexistent_frame = 0; /** the data of the last written frame, if there is one */ EnumIndexedVector<std::shared_ptr<const dcp::Data>, Eyes> _last_written; /** index of this reel within the DCP (starting from 0) */ @@ -134,17 +138,17 @@ private: dcp::ArrayData _default_font; - std::shared_ptr<dcp::PictureAsset> _picture_asset; + std::shared_ptr<dcp::J2KPictureAsset> _j2k_picture_asset; + std::shared_ptr<dcp::MPEG2PictureAsset> _mpeg2_picture_asset; /** picture asset writer, or 0 if we are not writing any picture because we already have one */ - std::shared_ptr<dcp::PictureAssetWriter> _picture_asset_writer; + std::shared_ptr<dcp::J2KPictureAssetWriter> _j2k_picture_asset_writer; + std::shared_ptr<dcp::MPEG2PictureAssetWriter> _mpeg2_picture_asset_writer; std::shared_ptr<dcp::SoundAsset> _sound_asset; std::shared_ptr<dcp::SoundAssetWriter> _sound_asset_writer; - std::shared_ptr<dcp::SubtitleAsset> _subtitle_asset; - std::map<DCPTextTrack, std::shared_ptr<dcp::SubtitleAsset>> _closed_caption_assets; + std::shared_ptr<dcp::TextAsset> _subtitle_asset; + std::map<DCPTextTrack, std::shared_ptr<dcp::TextAsset>> _closed_caption_assets; std::shared_ptr<dcp::AtmosAsset> _atmos_asset; std::shared_ptr<dcp::AtmosAssetWriter> _atmos_asset_writer; mutable FontMetrics _font_metrics; - - static int const _info_size; }; diff --git a/src/lib/referenced_reel_asset.cc b/src/lib/referenced_reel_asset.cc index 3175d772d..5ef3b9ae7 100644 --- a/src/lib/referenced_reel_asset.cc +++ b/src/lib/referenced_reel_asset.cc @@ -27,10 +27,9 @@ #include "referenced_reel_asset.h" #include <dcp/reel.h> #include <dcp/reel_asset.h> -#include <dcp/reel_closed_caption_asset.h> #include <dcp/reel_picture_asset.h> #include <dcp/reel_sound_asset.h> -#include <dcp/reel_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <cmath> diff --git a/src/lib/release_notes.cc b/src/lib/release_notes.cc index d69738427..64556bb26 100644 --- a/src/lib/release_notes.cc +++ b/src/lib/release_notes.cc @@ -21,15 +21,46 @@ #include "config.h" #include "release_notes.h" +#include "variant.h" #include "version.h" +#include <dcp/raw_convert.h> +#include <boost/algorithm/string.hpp> #include "i18n.h" using std::string; +using std::vector; using boost::optional; +bool +before(optional<string> last, string current) +{ + if (!last) { + return true; + } + + vector<string> last_parts; + boost::split(last_parts, *last, boost::is_any_of(".")); + vector<string> current_parts; + boost::split(current_parts, current, boost::is_any_of(".")); + + if (last_parts.size() != 3 || current_parts.size() != 3) { + /* One or other is a git version; don't bother reporting anything */ + return false; + } + + for (int i = 0; i < 3; ++i) { + if (dcp::raw_convert<int>(last_parts[i]) < dcp::raw_convert<int>(current_parts[i])) { + return true; + } + } + + return false; +} + + optional<string> find_release_notes(bool dark, optional<string> current) { @@ -43,19 +74,34 @@ find_release_notes(bool dark, optional<string> current) Config::instance()->set_last_release_notes_version(*current); + vector<string> notes; + if (!last) { + notes.push_back(_("In this version there are changes to the way that subtitles are positioned. " + "Positioning should now be more correct, with respect to the standards, but you " + "should check any subtitles in your project to make sure that they are placed " + "where you want them.")); + } + + if (before(last, "2.17.19")) { + notes.push_back(_("The vertical offset control for some subtitles now works in the opposite direction " + "to how it was before. You should check any subtitles in your project to make sure " + "that they are placed where you want them.")); + } + + if (notes.empty()) { + return {}; + } + string const colour = dark ? "white" : "black"; auto const span = String::compose("<span style=\"color: %1\">", colour); - const string header = String::compose("<h1>%1DCP-o-matic %2 release notes</span></h1>", span, *current); + auto output = String::compose("<h1>%1%2 %3 release notes</span></h1><ul>", span, variant::dcpomatic(), *current); - if (!last) { - return header + span + - _("In this version there are changes to the way that subtitles are positioned. " - "Positioning should now be more correct, with respect to the standards, but you " - "should check any subtitles in your project to make sure that they are placed " - "where you want them.") - + "</span>"; + for (auto const& note: notes) { + output += string("<li>") + span + note + "</span>"; } - return {}; + output += "</ul>"; + + return output; } diff --git a/src/lib/remembered_asset.cc b/src/lib/remembered_asset.cc new file mode 100644 index 000000000..20b65970c --- /dev/null +++ b/src/lib/remembered_asset.cc @@ -0,0 +1,97 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcpomatic_assert.h" +#include "remembered_asset.h" +#include <dcp/filesystem.h> +#include <dcp/raw_convert.h> +#include <libcxml/cxml.h> +LIBDCP_DISABLE_WARNINGS +#include <libxml++/libxml++.h> +LIBDCP_ENABLE_WARNINGS + + +using std::string; +using std::vector; + + +RememberedAsset::RememberedAsset(cxml::ConstNodePtr node) +{ + _filename = node->string_child("Filename"); + auto period_node = node->node_child("Period"); + DCPOMATIC_ASSERT(period_node); + + _period = { + dcpomatic::DCPTime(period_node->number_child<int64_t>("From")), + dcpomatic::DCPTime(period_node->number_child<int64_t>("To")) + }; + + _identifier = node->string_child("Identifier"); +} + + +void +RememberedAsset::as_xml(xmlpp::Element* parent) const +{ + cxml::add_text_child(parent, "Filename", _filename.string()); + auto period_node = cxml::add_child(parent, "Period"); + cxml::add_text_child(period_node, "From", dcp::raw_convert<string>(_period.from.get())); + cxml::add_text_child(period_node, "To", dcp::raw_convert<string>(_period.to.get())); + cxml::add_text_child(parent, "Identifier", _identifier); +} + + +boost::optional<boost::filesystem::path> +find_asset(vector<RememberedAsset> const& assets, boost::filesystem::path directory, dcpomatic::DCPTimePeriod period, string identifier) +{ + for (auto path: dcp::filesystem::recursive_directory_iterator(directory)) { + auto iter = std::find_if(assets.begin(), assets.end(), [period, identifier, path](RememberedAsset const& asset) { + return asset.filename() == path.path().filename() && asset.period() == period && asset.identifier() == identifier; + }); + if (iter != assets.end()) { + return path.path(); + } + } + + return {}; +} + + +void +clean_up_asset_directory(boost::filesystem::path directory) +{ + /* We could do something more advanced here (e.g. keep the last N assets) but for now + * let's just clean the whole thing out. + */ + boost::system::error_code ec; + dcp::filesystem::remove_all(directory, ec); +} + + +void +preserve_assets(boost::filesystem::path search, boost::filesystem::path assets_path) +{ + for (auto const& path: boost::filesystem::directory_iterator(search)) { + if (path.path().extension() == ".mxf") { + dcp::filesystem::rename(path.path(), assets_path / path.path().filename()); + } + } +} diff --git a/src/lib/remembered_asset.h b/src/lib/remembered_asset.h new file mode 100644 index 000000000..ec9344e24 --- /dev/null +++ b/src/lib/remembered_asset.h @@ -0,0 +1,79 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_REMEMBERED_ASSET_H +#define DCPOMATIC_REMEMBERED_ASSET_H + + +#include "dcpomatic_time.h" +#include <libcxml/cxml.h> +#include <dcp/warnings.h> +LIBDCP_DISABLE_WARNINGS +#include <libxml++/libxml++.h> +LIBDCP_ENABLE_WARNINGS +#include <boost/filesystem.hpp> + + +class RememberedAsset +{ +public: + explicit RememberedAsset(cxml::ConstNodePtr node); + + RememberedAsset(boost::filesystem::path filename, dcpomatic::DCPTimePeriod period, std::string identifier) + : _filename(filename) + , _period(period) + , _identifier(std::move(identifier)) + {} + + void as_xml(xmlpp::Element* parent) const; + + boost::filesystem::path filename() const { + return _filename; + } + + dcpomatic::DCPTimePeriod period() const { + return _period; + } + + std::string identifier() const { + return _identifier; + } + +private: + boost::filesystem::path _filename; + dcpomatic::DCPTimePeriod _period; + std::string _identifier; +}; + + +boost::optional<boost::filesystem::path> find_asset( + std::vector<RememberedAsset> const& assets, boost::filesystem::path directory, dcpomatic::DCPTimePeriod period, std::string identifier + ); + + +void clean_up_asset_directory(boost::filesystem::path directory); + + +void preserve_assets(boost::filesystem::path search, boost::filesystem::path assets_path); + + +#endif + diff --git a/src/lib/remote_j2k_encoder_thread.cc b/src/lib/remote_j2k_encoder_thread.cc new file mode 100644 index 000000000..49d80953d --- /dev/null +++ b/src/lib/remote_j2k_encoder_thread.cc @@ -0,0 +1,84 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcp_video.h" +#include "dcpomatic_log.h" +#include "j2k_encoder.h" +#include "remote_j2k_encoder_thread.h" +#include "util.h" + +#include "i18n.h" + + +using std::make_shared; +using std::shared_ptr; + + +RemoteJ2KEncoderThread::RemoteJ2KEncoderThread(J2KEncoder& encoder, EncodeServerDescription server) + : J2KSyncEncoderThread(encoder) + , _server(server) +{ + +} + + +void +RemoteJ2KEncoderThread::log_thread_start() const +{ + start_of_thread("RemoteJ2KEncoder"); + LOG_TIMING("start-encoder-thread thread=%1 server=%2", thread_id(), _server.host_name()); +} + + +shared_ptr<dcp::ArrayData> +RemoteJ2KEncoderThread::encode(DCPVideo const& frame) +{ + shared_ptr<dcp::ArrayData> encoded; + + try { + encoded = make_shared<dcp::ArrayData>(frame.encode_remotely(_server)); + if (_remote_backoff > 0) { + LOG_GENERAL("%1 was lost, but now she is found; removing backoff", _server.host_name()); + _remote_backoff = 0; + } + } catch (std::exception& e) { + LOG_ERROR( + N_("Remote encode of %1 on %2 failed (%3); thread sleeping for %4s"), + frame.index(), _server.host_name(), e.what(), _remote_backoff + ); + } catch (...) { + LOG_ERROR( + N_("Remote encode of %1 on %2 failed; thread sleeping for %4s"), + frame.index(), _server.host_name(), _remote_backoff + ); + } + + if (!encoded) { + if (_remote_backoff < 60) { + /* back off more */ + _remote_backoff += 10; + } + boost::this_thread::sleep(boost::posix_time::seconds(_remote_backoff)); + } + + return encoded; +} + diff --git a/src/lib/remote_j2k_encoder_thread.h b/src/lib/remote_j2k_encoder_thread.h new file mode 100644 index 000000000..f3fe7f94a --- /dev/null +++ b/src/lib/remote_j2k_encoder_thread.h @@ -0,0 +1,21 @@ +#include "encode_server_description.h" +#include "j2k_sync_encoder_thread.h" + + +class RemoteJ2KEncoderThread : public J2KSyncEncoderThread +{ +public: + RemoteJ2KEncoderThread(J2KEncoder& encoder, EncodeServerDescription server); + + void log_thread_start() const override; + std::shared_ptr<dcp::ArrayData> encode(DCPVideo const& frame) override; + + EncodeServerDescription server() const { + return _server; + } + +private: + EncodeServerDescription _server; + /** Number of seconds that we currently wait between attempts to connect to the server */ + int _remote_backoff = 0; +}; diff --git a/src/lib/render_text.cc b/src/lib/render_text.cc index 870f3045d..3c3d4eed7 100644 --- a/src/lib/render_text.cc +++ b/src/lib/render_text.cc @@ -31,6 +31,7 @@ #include <cairomm/cairomm.h> LIBDCP_DISABLE_WARNINGS #include <pangomm.h> +#include <pangommconfig.h> LIBDCP_ENABLE_WARNINGS #include <pango/pangocairo.h> #include <boost/algorithm/string.hpp> @@ -51,6 +52,15 @@ using boost::optional; using namespace dcpomatic; +#if CAIROMM_MAJOR_VERSION == 1 && CAIROMM_MINOR_VERSION <= 14 +#define DCPOMATIC_OLD_CAIROMM_API +#endif + +#if PANGOMM_MAJOR_VERSION == 2 && PANGOMM_MINOR_VERSION <= 46 +#define DCPOMATIC_OLD_PANGOMM_API +#endif + + /** Create a Pango layout using a dummy context which we can use to calculate the size * of the text we will render. Then we can transfer the layout over to the real context * for the actual render. @@ -62,11 +72,25 @@ create_layout(string font_name, string markup) DCPOMATIC_ASSERT (c_font_map); auto font_map = Glib::wrap (c_font_map); auto c_context = pango_font_map_create_context (c_font_map); + + cairo_font_options_t *options = cairo_font_options_create(); + /* CAIRO_ANTIALIAS_BEST is totally broken here: see e.g. + * https://gitlab.freedesktop.org/cairo/cairo/-/issues/152 + */ + cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_GOOD); + cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_FULL); + pango_cairo_context_set_font_options(c_context, options); + cairo_font_options_destroy(options); + DCPOMATIC_ASSERT (c_context); auto context = Glib::wrap (c_context); auto layout = Pango::Layout::create(context); - layout->set_alignment (Pango::ALIGN_LEFT); +#ifdef DCPOMATIC_OLD_PANGOMM_API + layout->set_alignment(Pango::ALIGN_LEFT); +#else + layout->set_alignment(Pango::Alignment::LEFT); +#endif Pango::FontDescription font (font_name); layout->set_font_description (font); layout->set_markup (markup); @@ -124,7 +148,7 @@ marked_up(vector<StringText> subtitles, int target_height, float fade_factor, st int dummy; layout->get_pixel_size(space_width, dummy); auto spacing = ((i.space_before() * i.size_in_pixels(target_height) - space_width) / 2) * pixels_to_1024ths_point; - out += make_span(i, " ", "letter_spacing=\"" + dcp::raw_convert<string>(spacing) + "\""); + out += make_span(i, " ", "letter_spacing=\"" + dcp::raw_convert<string>(std::round(spacing)) + "\""); } out += make_span(i, i.text(), {}); @@ -163,11 +187,22 @@ create_surface (shared_ptr<Image> image) DCPOMATIC_ASSERT (image->pixel_format() == AV_PIX_FMT_BGRA); return Cairo::ImageSurface::create ( image->data()[0], +#ifdef DCPOMATIC_OLD_CAIROMM_API Cairo::FORMAT_ARGB32, +#else + Cairo::ImageSurface::Format::ARGB32, +#endif image->size().width, image->size().height, /* Cairo ARGB32 means first byte blue, second byte green, third byte red, fourth byte alpha */ - Cairo::ImageSurface::format_stride_for_width (Cairo::FORMAT_ARGB32, image->size().width) + Cairo::ImageSurface::format_stride_for_width( +#ifdef DCPOMATIC_OLD_CAIROMM_API + Cairo::FORMAT_ARGB32, +#else + Cairo::ImageSurface::Format::ARGB32, +#endif + image->size().width + ) ); } @@ -394,24 +429,19 @@ render_line(vector<StringText> subtitles, dcp::Size target, DCPTime time, int fr /* Border effect */ set_source_rgba (context, first.effect_colour(), fade_factor); context->set_line_width (border_width); +#ifdef DCPOMATIC_OLD_CAIROMM_API context->set_line_join (Cairo::LINE_JOIN_ROUND); +#else + context->set_line_join (Cairo::Context::LineJoin::ROUND); +#endif context->move_to (x_offset, y_offset); layout.pango->add_to_cairo_context (context); context->stroke (); } /* The actual subtitle */ - - set_source_rgba (context, first.colour(), fade_factor); - - context->move_to (x_offset, y_offset); - layout.pango->add_to_cairo_context (context); - context->fill (); - - context->set_line_width (0.5); context->move_to (x_offset, y_offset); - layout.pango->add_to_cairo_context (context); - context->stroke (); + layout.pango->show_in_cairo_context(context); int const x = x_position(first.h_align(), first.h_position(), target.width, layout.size.width); int const y = y_position(first.valign_standard, first.v_align(), first.v_position(), target.height, layout.baseline_to_bottom(border_width), layout.size.height); diff --git a/src/lib/rgba.cc b/src/lib/rgba.cc index 2e6a4fab6..2e0408d8a 100644 --- a/src/lib/rgba.cc +++ b/src/lib/rgba.cc @@ -41,12 +41,12 @@ RGBA::RGBA (cxml::ConstNodePtr node) void -RGBA::as_xml (xmlpp::Node* parent) const +RGBA::as_xml(xmlpp::Element* parent) const { - parent->add_child("R")->add_child_text(lexical_cast<string>(int(r))); - parent->add_child("G")->add_child_text(lexical_cast<string>(int(g))); - parent->add_child("B")->add_child_text(lexical_cast<string>(int(b))); - parent->add_child("A")->add_child_text(lexical_cast<string>(int(a))); + cxml::add_text_child(parent, "R", lexical_cast<string>(int(r))); + cxml::add_text_child(parent, "G", lexical_cast<string>(int(g))); + cxml::add_text_child(parent, "B", lexical_cast<string>(int(b))); + cxml::add_text_child(parent, "A", lexical_cast<string>(int(a))); } diff --git a/src/lib/rgba.h b/src/lib/rgba.h index 96fed710e..a582a4ca1 100644 --- a/src/lib/rgba.h +++ b/src/lib/rgba.h @@ -44,7 +44,7 @@ public: explicit RGBA (cxml::ConstNodePtr node); - void as_xml (xmlpp::Node* parent) const; + void as_xml(xmlpp::Element* parent) const; uint8_t r = 0; uint8_t g = 0; diff --git a/src/lib/screen.cc b/src/lib/screen.cc index febf9085c..b77eb6b52 100644 --- a/src/lib/screen.cc +++ b/src/lib/screen.cc @@ -20,6 +20,7 @@ #include "cinema.h" +#include "cinema_list.h" #include "config.h" #include "film.h" #include "kdm_util.h" @@ -39,29 +40,6 @@ using boost::optional; using namespace dcpomatic; -Screen::Screen (cxml::ConstNodePtr node) - : KDMRecipient (node) -{ - for (auto i: node->node_children ("TrustedDevice")) { - if (boost::algorithm::starts_with(i->content(), "-----BEGIN CERTIFICATE-----")) { - trusted_devices.push_back (TrustedDevice(dcp::Certificate(i->content()))); - } else { - trusted_devices.push_back (TrustedDevice(i->content())); - } - } -} - - -void -Screen::as_xml (xmlpp::Element* parent) const -{ - KDMRecipient::as_xml (parent); - for (auto i: trusted_devices) { - parent->add_child("TrustedDevice")->add_child_text(i.as_string()); - } -} - - vector<string> Screen::trusted_device_thumbprints () const { @@ -76,46 +54,40 @@ Screen::trusted_device_thumbprints () const KDMWithMetadataPtr kdm_for_screen ( std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm, - shared_ptr<const dcpomatic::Screen> screen, - boost::posix_time::ptime valid_from, - boost::posix_time::ptime valid_to, + CinemaID cinema_id, + Cinema const& cinema, + Screen const& screen, + dcp::LocalTime valid_from, + dcp::LocalTime valid_to, dcp::Formulation formulation, bool disable_forensic_marking_picture, optional<int> disable_forensic_marking_audio, vector<KDMCertificatePeriod>& period_checks ) { - if (!screen->recipient) { + if (!screen.recipient) { return {}; } - auto cinema = screen->cinema; - dcp::LocalTime const begin(valid_from, dcp::UTCOffset(cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0)); - dcp::LocalTime const end (valid_to, dcp::UTCOffset(cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0)); - - period_checks.push_back(check_kdm_and_certificate_validity_periods(cinema ? cinema->name : "", screen->name, screen->recipient.get(), begin, end)); + period_checks.push_back(check_kdm_and_certificate_validity_periods(cinema.name, screen.name, screen.recipient.get(), valid_from, valid_to)); auto signer = Config::instance()->signer_chain(); if (!signer->valid()) { throw InvalidSignerError(); } - auto kdm = make_kdm(begin, end).encrypt( - signer, screen->recipient.get(), screen->trusted_device_thumbprints(), formulation, disable_forensic_marking_picture, disable_forensic_marking_audio + auto kdm = make_kdm(valid_from, valid_to).encrypt( + signer, screen.recipient.get(), screen.trusted_device_thumbprints(), formulation, disable_forensic_marking_picture, disable_forensic_marking_audio ); dcp::NameFormat::Map name_values; - if (cinema) { - name_values['c'] = cinema->name; - } else { - name_values['c'] = ""; - } - name_values['s'] = screen->name; + name_values['c'] = cinema.name; + name_values['s'] = screen.name; name_values['f'] = kdm.content_title_text(); - name_values['b'] = begin.date() + " " + begin.time_of_day(true, false); - name_values['e'] = end.date() + " " + end.time_of_day(true, false); + name_values['b'] = valid_from.date() + " " + valid_from.time_of_day(true, false); + name_values['e'] = valid_to.date() + " " + valid_to.time_of_day(true, false); name_values['i'] = kdm.cpl_id(); - return make_shared<KDMWithMetadata>(name_values, cinema.get(), cinema ? cinema->emails : vector<string>(), kdm); + return make_shared<KDMWithMetadata>(name_values, cinema_id, cinema.emails, kdm); } diff --git a/src/lib/screen.h b/src/lib/screen.h index 7f01cdf27..89ebc3ab4 100644 --- a/src/lib/screen.h +++ b/src/lib/screen.h @@ -23,12 +23,14 @@ #define DCPOMATIC_SCREEN_H -#include "kdm_with_metadata.h" +#include "cinema_list.h" #include "kdm_recipient.h" #include "kdm_util.h" +#include "kdm_with_metadata.h" #include "trusted_device.h" #include <dcp/certificate.h> #include <dcp/decrypted_kdm.h> +#include <dcp/utc_offset.h> #include <libcxml/cxml.h> #include <boost/optional.hpp> #include <string> @@ -62,12 +64,7 @@ public: , trusted_devices (trusted_devices_) {} - explicit Screen (cxml::ConstNodePtr); - - void as_xml (xmlpp::Element *) const override; std::vector<std::string> trusted_device_thumbprints () const; - - std::shared_ptr<Cinema> cinema; std::vector<TrustedDevice> trusted_devices; }; @@ -77,9 +74,11 @@ public: KDMWithMetadataPtr kdm_for_screen ( std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm, - std::shared_ptr<const dcpomatic::Screen> screen, - boost::posix_time::ptime valid_from, - boost::posix_time::ptime valid_to, + CinemaID cinema_id, + Cinema const& cinema, + dcpomatic::Screen const& screen, + dcp::LocalTime valid_from, + dcp::LocalTime valid_to, dcp::Formulation formulation, bool disable_forensic_marking_picture, boost::optional<int> disable_forensic_marking_audio, diff --git a/src/lib/send_problem_report_job.cc b/src/lib/send_problem_report_job.cc index 9569aca3b..ed78112e9 100644 --- a/src/lib/send_problem_report_job.cc +++ b/src/lib/send_problem_report_job.cc @@ -19,15 +19,16 @@ */ -#include "send_problem_report_job.h" #include "compose.hpp" -#include "film.h" #include "cross.h" +#include "email.h" +#include "environment_info.h" +#include "film.h" #include "film.h" #include "log.h" +#include "send_problem_report_job.h" +#include "variant.h" #include "version.h" -#include "email.h" -#include "environment_info.h" #include <libxml++/libxml++.h> #include "i18n.h" @@ -108,7 +109,7 @@ SendProblemReportJob::run () body += "---<8----\n"; } - Email email(_from, {"carl@dcpomatic.com"}, "DCP-o-matic problem report", body); + Email email(_from, {"carl@dcpomatic.com"}, variant::insert_dcpomatic("%1 problem report"), body); email.send("main.carlh.net", 2525, EmailProtocol::STARTTLS); set_progress (1); diff --git a/src/lib/server.cc b/src/lib/server.cc index c1be5735e..359234044 100644 --- a/src/lib/server.cc +++ b/src/lib/server.cc @@ -41,13 +41,7 @@ Server::Server (int port, int timeout) Server::~Server () { - { - boost::mutex::scoped_lock lm (_mutex); - _terminate = true; - } - - _acceptor.close (); - stop (); + stop(); } @@ -81,6 +75,8 @@ Server::handle_accept (shared_ptr<Socket> socket, boost::system::error_code cons return; } + _socket = socket; + handle (socket); start_accept (); } @@ -89,5 +85,14 @@ Server::handle_accept (shared_ptr<Socket> socket, boost::system::error_code cons void Server::stop () { + { + boost::mutex::scoped_lock lm (_mutex); + _terminate = true; + } + + _acceptor.close (); + if (auto s = _socket.lock()) { + s->close(); + } _io_service.stop (); } diff --git a/src/lib/server.h b/src/lib/server.h index 0b1950aa7..7e42f6cbd 100644 --- a/src/lib/server.h +++ b/src/lib/server.h @@ -57,6 +57,7 @@ private: boost::asio::io_service _io_service; boost::asio::ip::tcp::acceptor _acceptor; int _timeout; + std::weak_ptr<Socket> _socket; }; diff --git a/src/lib/shuffler.cc b/src/lib/shuffler.cc index 5a4faf4d1..a4ea0f5dc 100644 --- a/src/lib/shuffler.cc +++ b/src/lib/shuffler.cc @@ -40,8 +40,8 @@ int const Shuffler::_max_size = 64; struct Comparator { bool operator()(Shuffler::Store const & a, Shuffler::Store const & b) { - if (a.second.frame != b.second.frame) { - return a.second.frame < b.second.frame; + if (a.second.time != b.second.time) { + return a.second.time < b.second.time; } return a.second.eyes < b.second.eyes; } @@ -51,7 +51,7 @@ struct Comparator void Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video) { - LOG_DEBUG_THREE_D ("Shuffler::video frame=%1 eyes=%2 part=%3", video.frame, static_cast<int>(video.eyes), static_cast<int>(video.part)); + LOG_DEBUG_THREE_D("Shuffler::video time=%1 eyes=%2 part=%3", to_string(video.time), static_cast<int>(video.eyes), static_cast<int>(video.part)); if (video.eyes != Eyes::LEFT && video.eyes != Eyes::RIGHT) { /* Pass through anything that we don't care about */ @@ -79,13 +79,13 @@ Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video) !_store.empty() && _last && ( - (_store.front().second.frame == _last->frame && _store.front().second.eyes == Eyes::RIGHT && _last->eyes == Eyes::LEFT) || - (_store.front().second.frame >= (_last->frame + 1) && _store.front().second.eyes == Eyes::LEFT && _last->eyes == Eyes::RIGHT) + (_store.front().second.time == _last->time && _store.front().second.eyes == Eyes::RIGHT && _last->eyes == Eyes::LEFT) || + (_store.front().second.time > _last->time && _store.front().second.eyes == Eyes::LEFT && _last->eyes == Eyes::RIGHT) ); if (!store_front_in_sequence) { - string const store = _store.empty() ? "store empty" : String::compose("store front frame=%1 eyes=%2", _store.front().second.frame, static_cast<int>(_store.front().second.eyes)); - string const last = _last ? String::compose("last frame=%1 eyes=%2", _last->frame, static_cast<int>(_last->eyes)) : "no last"; + string const store = _store.empty() ? "store empty" : String::compose("store front time=%1 eyes=%2", to_string(_store.front().second.time), static_cast<int>(_store.front().second.eyes)); + string const last = _last ? String::compose("last time=%1 eyes=%2", to_string(_last->time), static_cast<int>(_last->eyes)) : "no last"; LOG_DEBUG_THREE_D("Shuffler not in sequence: %1 %2", store, last); } @@ -98,10 +98,10 @@ Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video) } if (_store.size() > _max_size) { - LOG_WARNING ("Shuffler is full after receiving frame %1; 3D sync may be incorrect.", video.frame); + LOG_WARNING("Shuffler is full after receiving frame at %1; 3D sync may be incorrect.", to_string(video.time)); } - LOG_DEBUG_THREE_D("Shuffler emits frame=%1 eyes=%2 store=%3", _store.front().second.frame, static_cast<int>(_store.front().second.eyes), _store.size()); + LOG_DEBUG_THREE_D("Shuffler emits time=%1 eyes=%2 store=%3", to_string(_store.front().second.time), static_cast<int>(_store.front().second.eyes), _store.size()); Video (_store.front().first, _store.front().second); _last = _store.front().second; _store.pop_front (); diff --git a/src/lib/spl.cc b/src/lib/spl.cc index f49f11a7d..e87465cdc 100644 --- a/src/lib/spl.cc +++ b/src/lib/spl.cc @@ -62,10 +62,10 @@ SPL::write (boost::filesystem::path path) const { xmlpp::Document doc; auto root = doc.create_root_node ("SPL"); - root->add_child("Id")->add_child_text (_id); - root->add_child("Name")->add_child_text (_name); + cxml::add_text_child(root, "Id", _id); + cxml::add_text_child(root, "Name", _name); for (auto i: _spl) { - i.as_xml (root->add_child("Entry")); + i.as_xml(cxml::add_child(root, "Entry")); } doc.write_to_file_formatted (path.string()); } diff --git a/src/lib/spl_entry.cc b/src/lib/spl_entry.cc index f0b377a56..a77b0b7d5 100644 --- a/src/lib/spl_entry.cc +++ b/src/lib/spl_entry.cc @@ -53,5 +53,5 @@ SPLEntry::SPLEntry (shared_ptr<Content> c) void SPLEntry::as_xml (xmlpp::Element* e) { - e->add_child("Digest")->add_child_text(digest); + cxml::add_text_child(e, "Digest", digest); } diff --git a/src/lib/sqlite_statement.cc b/src/lib/sqlite_statement.cc new file mode 100644 index 000000000..b3ec1fb81 --- /dev/null +++ b/src/lib/sqlite_statement.cc @@ -0,0 +1,111 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "exceptions.h" +#include "sqlite_statement.h" + + +using std::function; +using std::string; + + +SQLiteStatement::SQLiteStatement(sqlite3* db, string const& statement) + : _db(db) +{ +#ifdef DCPOMATIC_HAVE_SQLITE3_PREPARE_V3 + auto rc = sqlite3_prepare_v3(_db, statement.c_str(), -1, 0, &_stmt, nullptr); +#else + auto rc = sqlite3_prepare_v2(_db, statement.c_str(), -1, &_stmt, nullptr); +#endif + if (rc != SQLITE_OK) { + throw SQLError(_db, rc, statement); + } +} + + +SQLiteStatement::~SQLiteStatement() +{ + sqlite3_finalize(_stmt); +} + + +void +SQLiteStatement::bind_text(int index, string const& value) +{ + auto rc = sqlite3_bind_text(_stmt, index, value.c_str(), -1, SQLITE_TRANSIENT); + if (rc != SQLITE_OK) { + throw SQLError(_db, rc); + } +} + + +void +SQLiteStatement::bind_int64(int index, int64_t value) +{ + auto rc = sqlite3_bind_int64(_stmt, index, value); + if (rc != SQLITE_OK) { + throw SQLError(_db, rc); + } +} + + +void +SQLiteStatement::execute(function<void(SQLiteStatement&)> row, function<void()> busy) +{ + while (true) { + auto const rc = sqlite3_step(_stmt); + switch (rc) { + case SQLITE_BUSY: + busy(); + break; + case SQLITE_DONE: + return; + case SQLITE_ROW: + row(*this); + break; + case SQLITE_ERROR: + case SQLITE_MISUSE: + throw SQLError(_db, sqlite3_errmsg(_db)); + } + } +} + + +int +SQLiteStatement::data_count() +{ + return sqlite3_data_count(_stmt); +} + + +int64_t +SQLiteStatement::column_int64(int index) +{ + return sqlite3_column_int64(_stmt, index); +} + + +string +SQLiteStatement::column_text(int index) +{ + return reinterpret_cast<const char*>(sqlite3_column_text(_stmt, index)); +} + diff --git a/src/lib/sqlite_statement.h b/src/lib/sqlite_statement.h new file mode 100644 index 000000000..3c2246efb --- /dev/null +++ b/src/lib/sqlite_statement.h @@ -0,0 +1,50 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include <sqlite3.h> +#include <functional> +#include <string> + + +class SQLiteStatement +{ +public: + SQLiteStatement(sqlite3* db, std::string const& statement); + ~SQLiteStatement(); + + SQLiteStatement(SQLiteStatement const&) = delete; + SQLiteStatement& operator=(SQLiteStatement const&) = delete; + + void bind_text(int index, std::string const& value); + void bind_int64(int index, int64_t value); + + int64_t column_int64(int index); + std::string column_text(int index); + + void execute(std::function<void(SQLiteStatement&)> row = std::function<void(SQLiteStatement& statement)>(), std::function<void()> busy = std::function<void()>()); + + int data_count(); + +private: + sqlite3* _db; + sqlite3_stmt* _stmt; +}; + diff --git a/src/lib/sqlite_table.cc b/src/lib/sqlite_table.cc new file mode 100644 index 000000000..f00fa6b74 --- /dev/null +++ b/src/lib/sqlite_table.cc @@ -0,0 +1,79 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcpomatic_assert.h" +#include "compose.hpp" +#include "sqlite_table.h" +#include "util.h" + + +using std::string; +using std::vector; + + +void +SQLiteTable::add_column(string const& name, string const& type) +{ + _columns.push_back(name); + _types.push_back(type); +} + + +string +SQLiteTable::create() const +{ + DCPOMATIC_ASSERT(!_columns.empty()); + DCPOMATIC_ASSERT(_columns.size() == _types.size()); + vector<string> columns(_columns.size()); + for (size_t i = 0; i < _columns.size(); ++i) { + columns[i] = _columns[i] + " " + _types[i]; + } + return String::compose("CREATE TABLE IF NOT EXISTS %1 (id INTEGER PRIMARY KEY, %2)", _name, join_strings(columns, ", ")); +} + + +string +SQLiteTable::insert() const +{ + DCPOMATIC_ASSERT(!_columns.empty()); + vector<string> placeholders(_columns.size(), "?"); + return String::compose("INSERT INTO %1 (%2) VALUES (%3)", _name, join_strings(_columns, ", "), join_strings(placeholders, ", ")); +} + + +string +SQLiteTable::update(string const& condition) const +{ + DCPOMATIC_ASSERT(!_columns.empty()); + vector<string> placeholders(_columns.size()); + for (size_t i = 0; i < _columns.size(); ++i) { + placeholders[i] = _columns[i] + "=?"; + } + + return String::compose("UPDATE %1 SET %2 %3", _name, join_strings(placeholders, ", "), condition); +} + + +string +SQLiteTable::select(string const& condition) const +{ + return String::compose("SELECT id,%1 FROM %2 %3", join_strings(_columns, ","), _name, condition); +} diff --git a/src/lib/sqlite_table.h b/src/lib/sqlite_table.h new file mode 100644 index 000000000..43c9491ed --- /dev/null +++ b/src/lib/sqlite_table.h @@ -0,0 +1,54 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_SQLITE_TABLE_H +#define DCPOMATIC_SQLITE_TABLE_H + +#include <string> +#include <vector> + + +class SQLiteTable +{ +public: + SQLiteTable(std::string name) + : _name(std::move(name)) + {} + + SQLiteTable(SQLiteTable const&) = default; + SQLiteTable(SQLiteTable&&) = default; + + void add_column(std::string const& name, std::string const& type); + + std::string create() const; + std::string insert() const; + std::string update(std::string const& condition) const; + std::string select(std::string const& condition) const; + +private: + std::string _name; + std::vector<std::string> _columns; + std::vector<std::string> _types; +}; + + +#endif + diff --git a/src/lib/sqlite_transaction.cc b/src/lib/sqlite_transaction.cc new file mode 100644 index 000000000..239d85020 --- /dev/null +++ b/src/lib/sqlite_transaction.cc @@ -0,0 +1,50 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "sqlite_statement.h" +#include "sqlite_transaction.h" + + +SQLiteTransaction::SQLiteTransaction(sqlite3* db) + : _db(db) +{ + SQLiteStatement statement(_db, "BEGIN TRANSACTION"); + statement.execute(); +} + + +SQLiteTransaction::~SQLiteTransaction() +{ + if (_rollback) { + SQLiteStatement rollback(_db, "ROLLBACK"); + rollback.execute(); + } +} + + +void +SQLiteTransaction::commit() +{ + SQLiteStatement commit(_db, "COMMIT"); + commit.execute(); + _rollback = false; +} + diff --git a/src/lib/sqlite_transaction.h b/src/lib/sqlite_transaction.h new file mode 100644 index 000000000..0f6319243 --- /dev/null +++ b/src/lib/sqlite_transaction.h @@ -0,0 +1,40 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include <sqlite3.h> + + +class SQLiteTransaction +{ +public: + SQLiteTransaction(sqlite3* db); + ~SQLiteTransaction(); + + SQLiteTransaction(SQLiteTransaction const&) = delete; + SQLiteTransaction& operator=(SQLiteTransaction const&) = delete; + + void commit(); + +private: + sqlite3* _db; + bool _rollback = true; +}; + diff --git a/src/lib/state.cc b/src/lib/state.cc index a8230385d..7a3232ee9 100644 --- a/src/lib/state.cc +++ b/src/lib/state.cc @@ -35,7 +35,7 @@ boost::optional<boost::filesystem::path> State::override_path; /* List of config versions to look for in descending order of preference; * i.e. look at the first one, and if that doesn't exist, try the second, etc. */ -static std::vector<std::string> config_versions = { "2.16" }; +static std::vector<std::string> config_versions = { "2.18", "2.16" }; static diff --git a/src/lib/string_text.h b/src/lib/string_text.h index 787231b8c..d39a889cf 100644 --- a/src/lib/string_text.h +++ b/src/lib/string_text.h @@ -25,7 +25,7 @@ #include "font.h" #include <dcp/subtitle_standard.h> -#include <dcp/subtitle_string.h> +#include <dcp/text_string.h> /** A wrapper for SubtitleString which allows us to: @@ -36,13 +36,13 @@ * - include details of how v_align should be interpreted * * - specify the font by referring to a Font object from the content we came from, rather than - * having to use a DCP ID like in dcp::SubtitleString. + * having to use a DCP ID like in dcp::TextString. */ -class StringText : public dcp::SubtitleString +class StringText : public dcp::TextString { public: - StringText(dcp::SubtitleString dcp_, int outline_width_, std::shared_ptr<dcpomatic::Font> font_, dcp::SubtitleStandard valign_standard_) - : dcp::SubtitleString (dcp_) + StringText(dcp::TextString dcp_, int outline_width_, std::shared_ptr<dcpomatic::Font> font_, dcp::SubtitleStandard valign_standard_) + : dcp::TextString(dcp_) , outline_width (outline_width_) , font (font_) , valign_standard (valign_standard_) diff --git a/src/lib/string_text_file_content.cc b/src/lib/string_text_file_content.cc index d8c195be7..4f7fbb241 100644 --- a/src/lib/string_text_file_content.cc +++ b/src/lib/string_text_file_content.cc @@ -52,8 +52,8 @@ StringTextFileContent::StringTextFileContent (boost::filesystem::path path) } -StringTextFileContent::StringTextFileContent (cxml::ConstNodePtr node, int version, list<string>& notes) - : Content (node) +StringTextFileContent::StringTextFileContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes) + : Content (node, film_directory) , _length (node->number_child<ContentTime::Type>("Length")) { text = TextContent::from_xml (this, node, version, notes); @@ -122,16 +122,16 @@ StringTextFileContent::technical_summary () const void -StringTextFileContent::as_xml (xmlpp::Node* node, bool with_paths) const +StringTextFileContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { - node->add_child("Type")->add_child_text("TextSubtitle"); - Content::as_xml (node, with_paths); + cxml::add_text_child(element, "Type", "TextSubtitle"); + Content::as_xml(element, with_paths, path_behaviour, film_directory); if (only_text()) { - only_text()->as_xml(node); + only_text()->as_xml(element); } - node->add_child("Length")->add_child_text(raw_convert<string>(_length.get ())); + cxml::add_text_child(element, "Length", raw_convert<string>(_length.get())); } diff --git a/src/lib/string_text_file_content.h b/src/lib/string_text_file_content.h index 30f543381..abfd72906 100644 --- a/src/lib/string_text_file_content.h +++ b/src/lib/string_text_file_content.h @@ -32,7 +32,7 @@ class StringTextFileContent : public Content { public: StringTextFileContent (boost::filesystem::path); - StringTextFileContent (cxml::ConstNodePtr, int, std::list<std::string>&); + StringTextFileContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int, std::list<std::string>&); std::shared_ptr<StringTextFileContent> shared_from_this () { return std::dynamic_pointer_cast<StringTextFileContent> (Content::shared_from_this ()); @@ -45,7 +45,14 @@ public: void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override; std::string summary () const override; std::string technical_summary () const override; - void as_xml (xmlpp::Node *, bool with_paths) const override; + + void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const override; + dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override; dcpomatic::DCPTime approximate_length () const override; std::string identifier () const override; diff --git a/src/lib/string_text_file_decoder.cc b/src/lib/string_text_file_decoder.cc index 2ec0ec1cb..585d68888 100644 --- a/src/lib/string_text_file_decoder.cc +++ b/src/lib/string_text_file_decoder.cc @@ -19,11 +19,11 @@ */ -#include "string_text_file_decoder.h" #include "string_text_file_content.h" +#include "string_text_file_decoder.h" #include "text_content.h" #include "text_decoder.h" -#include <dcp/subtitle_string.h> +#include <dcp/text_string.h> #include <iostream> diff --git a/src/lib/subtitle_analysis.cc b/src/lib/subtitle_analysis.cc index ff1969a3a..2968416c6 100644 --- a/src/lib/subtitle_analysis.cc +++ b/src/lib/subtitle_analysis.cc @@ -70,18 +70,18 @@ SubtitleAnalysis::write (boost::filesystem::path path) const auto doc = make_shared<xmlpp::Document>(); xmlpp::Element* root = doc->create_root_node ("SubtitleAnalysis"); - root->add_child("Version")->add_child_text (raw_convert<string>(_current_state_version)); + cxml::add_text_child(root, "Version", raw_convert<string>(_current_state_version)); if (_bounding_box) { - auto bounding_box = root->add_child("BoundingBox"); - bounding_box->add_child("X")->add_child_text(raw_convert<string>(_bounding_box->x)); - bounding_box->add_child("Y")->add_child_text(raw_convert<string>(_bounding_box->y)); - bounding_box->add_child("Width")->add_child_text(raw_convert<string>(_bounding_box->width)); - bounding_box->add_child("Height")->add_child_text(raw_convert<string>(_bounding_box->height)); + auto bounding_box = cxml::add_child(root, "BoundingBox"); + cxml::add_text_child(bounding_box, "X", raw_convert<string>(_bounding_box->x)); + cxml::add_text_child(bounding_box, "Y", raw_convert<string>(_bounding_box->y)); + cxml::add_text_child(bounding_box, "Width", raw_convert<string>(_bounding_box->width)); + cxml::add_text_child(bounding_box, "Height", raw_convert<string>(_bounding_box->height)); } - root->add_child("AnalysisXOffset")->add_child_text(raw_convert<string>(_analysis_x_offset)); - root->add_child("AnalysisYOffset")->add_child_text(raw_convert<string>(_analysis_y_offset)); + cxml::add_text_child(root, "AnalysisXOffset", raw_convert<string>(_analysis_x_offset)); + cxml::add_text_child(root, "AnalysisYOffset", raw_convert<string>(_analysis_y_offset)); doc->write_to_file_formatted (path.string()); } diff --git a/src/lib/subtitle_encoder.cc b/src/lib/subtitle_film_encoder.cc index 8b1d9a15b..8356433a8 100644 --- a/src/lib/subtitle_encoder.cc +++ b/src/lib/subtitle_film_encoder.cc @@ -23,11 +23,11 @@ #include "film.h" #include "job.h" #include "player.h" -#include "subtitle_encoder.h" +#include "subtitle_film_encoder.h" #include <dcp/filesystem.h> -#include <dcp/interop_subtitle_asset.h> +#include <dcp/interop_text_asset.h> #include <dcp/raw_convert.h> -#include <dcp/smpte_subtitle_asset.h> +#include <dcp/smpte_text_asset.h> #include <boost/filesystem.hpp> #include <boost/bind/bind.hpp> @@ -51,8 +51,8 @@ using dcp::raw_convert; * @param initial_name Hint that may be used to create filenames, if @ref output is a directory. * @param include_font true to refer to and export any font file (for Interop; ignored for SMPTE). */ -SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> job, boost::filesystem::path output, string initial_name, bool split_reels, bool include_font) - : Encoder (film, job) +SubtitleFilmEncoder::SubtitleFilmEncoder(shared_ptr<const Film> film, shared_ptr<Job> job, boost::filesystem::path output, string initial_name, bool split_reels, bool include_font) + : FilmEncoder(film, job) , _split_reels (split_reels) , _include_font (include_font) , _reel_index (0) @@ -61,7 +61,7 @@ SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> j _player.set_play_referenced(); _player.set_ignore_video(); _player.set_ignore_audio(); - _player.Text.connect(boost::bind(&SubtitleEncoder::text, this, _1, _2, _3, _4)); + _player.Text.connect(boost::bind(&SubtitleFilmEncoder::text, this, _1, _2, _3, _4)); string const extension = film->interop() ? ".xml" : ".mxf"; @@ -79,7 +79,7 @@ SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> j } } - _assets.push_back(make_pair(shared_ptr<dcp::SubtitleAsset>(), dcp::filesystem::change_extension(filename, extension))); + _assets.push_back(make_pair(shared_ptr<dcp::TextAsset>(), dcp::filesystem::change_extension(filename, extension))); } for (auto i: film->reels()) { @@ -91,7 +91,7 @@ SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> j void -SubtitleEncoder::go () +SubtitleFilmEncoder::go() { { shared_ptr<Job> job = _job.lock (); @@ -108,12 +108,12 @@ SubtitleEncoder::go () if (!i.first) { /* No subtitles arrived for this asset; make an empty one so we write something to the output */ if (_film->interop()) { - auto s = make_shared<dcp::InteropSubtitleAsset>(); + auto s = make_shared<dcp::InteropTextAsset>(); s->set_movie_title (_film->name()); s->set_reel_number (raw_convert<string>(reel + 1)); i.first = s; } else { - auto s = make_shared<dcp::SMPTESubtitleAsset>(); + auto s = make_shared<dcp::SMPTETextAsset>(); s->set_content_title_text (_film->name()); s->set_reel_number (reel + 1); i.first = s; @@ -133,17 +133,17 @@ SubtitleEncoder::go () void -SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period) +SubtitleFilmEncoder::text(PlayerText subs, TextType type, optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period) { if (type != TextType::OPEN_SUBTITLE) { return; } if (!_assets[_reel_index].first) { - shared_ptr<dcp::SubtitleAsset> asset; + shared_ptr<dcp::TextAsset> asset; auto lang = _film->subtitle_languages (); if (_film->interop ()) { - auto s = make_shared<dcp::InteropSubtitleAsset>(); + auto s = make_shared<dcp::InteropTextAsset>(); s->set_movie_title (_film->name()); if (lang.first) { s->set_language (lang.first->to_string()); @@ -151,7 +151,7 @@ SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> tr s->set_reel_number (raw_convert<string>(_reel_index + 1)); _assets[_reel_index].first = s; } else { - auto s = make_shared<dcp::SMPTESubtitleAsset>(); + auto s = make_shared<dcp::SMPTETextAsset>(); s->set_content_title_text (_film->name()); if (lang.first) { s->set_language (*lang.first); @@ -176,7 +176,7 @@ SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> tr if (_film->interop() && !_include_font) { i.unset_font (); } - _assets[_reel_index].first->add (make_shared<dcp::SubtitleString>(i)); + _assets[_reel_index].first->add(make_shared<dcp::TextString>(i)); } if (_split_reels && (_reel_index < int(_reels.size()) - 1) && period.from > _reels[_reel_index].from) { @@ -193,7 +193,7 @@ SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> tr Frame -SubtitleEncoder::frames_done () const +SubtitleFilmEncoder::frames_done() const { if (!_last) { return 0; diff --git a/src/lib/subtitle_encoder.h b/src/lib/subtitle_film_encoder.h index 0815b1fff..6482916cb 100644 --- a/src/lib/subtitle_encoder.h +++ b/src/lib/subtitle_film_encoder.h @@ -21,25 +21,25 @@ #include "dcp_text_track.h" #include "dcpomatic_time.h" -#include "encoder.h" +#include "film_encoder.h" #include "player_text.h" namespace dcp { - class SubtitleAsset; + class TextAsset; } class Film; -/** @class SubtitleEncoder. +/** @class SubtitleFilmEncoder. * @brief An `encoder' which extracts a film's subtitles to DCP XML format. */ -class SubtitleEncoder : public Encoder +class SubtitleFilmEncoder : public FilmEncoder { public: - SubtitleEncoder (std::shared_ptr<const Film> film, std::shared_ptr<Job> job, boost::filesystem::path output, std::string initial_name, bool split_reels, bool include_font); + SubtitleFilmEncoder(std::shared_ptr<const Film> film, std::shared_ptr<Job> job, boost::filesystem::path output, std::string initial_name, bool split_reels, bool include_font); void go () override; @@ -53,7 +53,7 @@ public: private: void text (PlayerText subs, TextType type, boost::optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period); - std::vector<std::pair<std::shared_ptr<dcp::SubtitleAsset>, boost::filesystem::path>> _assets; + std::vector<std::pair<std::shared_ptr<dcp::TextAsset>, boost::filesystem::path>> _assets; std::vector<dcpomatic::DCPTimePeriod> _reels; bool _split_reels; bool _include_font; diff --git a/src/lib/text_content.cc b/src/lib/text_content.cc index 92a35b822..03336f15d 100644 --- a/src/lib/text_content.cc +++ b/src/lib/text_content.cc @@ -19,11 +19,12 @@ */ -#include "text_content.h" -#include "util.h" +#include "content.h" #include "exceptions.h" #include "font.h" -#include "content.h" +#include "text_content.h" +#include "util.h" +#include "variant.h" #include <dcp/raw_convert.h> #include <libcxml/cxml.h> #include <libxml++/libxml++.h> @@ -32,13 +33,13 @@ #include "i18n.h" -using std::string; -using std::vector; using std::cout; +using std::dynamic_pointer_cast; using std::list; -using std::shared_ptr; using std::make_shared; -using std::dynamic_pointer_cast; +using std::shared_ptr; +using std::string; +using std::vector; using boost::optional; using dcp::raw_convert; using namespace dcpomatic; @@ -235,17 +236,20 @@ TextContent::TextContent (Content* parent, cxml::ConstNodePtr node, int version, if (lang) { try { _language = dcp::LanguageTag(lang->content()); - auto add = lang->optional_bool_attribute("Additional"); - _language_is_additional = add && *add; + auto additional = lang->optional_bool_attribute("Additional"); + if (!additional) { + additional = lang->optional_bool_attribute("additional"); + } + _language_is_additional = additional.get_value_or(false); } catch (dcp::LanguageTagError&) { /* The language tag can be empty or invalid if it was loaded from a * 2.14.x metadata file; we'll just ignore it in that case. */ if (version <= 37) { if (!lang->content().empty()) { - notes.push_back (String::compose( + notes.push_back(String::compose( _("A subtitle or closed caption file in this project is marked with the language '%1', " - "which DCP-o-matic does not recognise. The file's language has been cleared."), lang->content())); + "which %2 does not recognise. The file's language has been cleared."), lang->content(), variant::dcpomatic())); } } else { throw; @@ -353,63 +357,63 @@ TextContent::TextContent (Content* parent, vector<shared_ptr<Content>> c) /** _mutex must not be held on entry */ void -TextContent::as_xml (xmlpp::Node* root) const +TextContent::as_xml(xmlpp::Element* root) const { boost::mutex::scoped_lock lm (_mutex); - auto text = root->add_child ("Text"); + auto text = cxml::add_child(root, "Text"); - text->add_child("Use")->add_child_text (_use ? "1" : "0"); - text->add_child("Burn")->add_child_text (_burn ? "1" : "0"); - text->add_child("XOffset")->add_child_text (raw_convert<string> (_x_offset)); - text->add_child("YOffset")->add_child_text (raw_convert<string> (_y_offset)); - text->add_child("XScale")->add_child_text (raw_convert<string> (_x_scale)); - text->add_child("YScale")->add_child_text (raw_convert<string> (_y_scale)); + cxml::add_text_child(text, "Use", _use ? "1" : "0"); + cxml::add_text_child(text, "Burn", _burn ? "1" : "0"); + cxml::add_text_child(text, "XOffset", raw_convert<string>(_x_offset)); + cxml::add_text_child(text, "YOffset", raw_convert<string>(_y_offset)); + cxml::add_text_child(text, "XScale", raw_convert<string>(_x_scale)); + cxml::add_text_child(text, "YScale", raw_convert<string>(_y_scale)); if (_colour) { - text->add_child("Red")->add_child_text (raw_convert<string> (_colour->r)); - text->add_child("Green")->add_child_text (raw_convert<string> (_colour->g)); - text->add_child("Blue")->add_child_text (raw_convert<string> (_colour->b)); + cxml::add_text_child(text, "Red", raw_convert<string>(_colour->r)); + cxml::add_text_child(text, "Green", raw_convert<string>(_colour->g)); + cxml::add_text_child(text, "Blue", raw_convert<string>(_colour->b)); } if (_effect) { switch (*_effect) { case dcp::Effect::NONE: - text->add_child("Effect")->add_child_text("none"); + cxml::add_text_child(text, "Effect", "none"); break; case dcp::Effect::BORDER: - text->add_child("Effect")->add_child_text("outline"); + cxml::add_text_child(text, "Effect", "outline"); break; case dcp::Effect::SHADOW: - text->add_child("Effect")->add_child_text("shadow"); + cxml::add_text_child(text, "Effect", "shadow"); break; } } if (_effect_colour) { - text->add_child("EffectRed")->add_child_text (raw_convert<string> (_effect_colour->r)); - text->add_child("EffectGreen")->add_child_text (raw_convert<string> (_effect_colour->g)); - text->add_child("EffectBlue")->add_child_text (raw_convert<string> (_effect_colour->b)); + cxml::add_text_child(text, "EffectRed", raw_convert<string>(_effect_colour->r)); + cxml::add_text_child(text, "EffectGreen", raw_convert<string>(_effect_colour->g)); + cxml::add_text_child(text, "EffectBlue", raw_convert<string>(_effect_colour->b)); } - text->add_child("LineSpacing")->add_child_text (raw_convert<string> (_line_spacing)); + cxml::add_text_child(text, "LineSpacing", raw_convert<string>(_line_spacing)); if (_fade_in) { - text->add_child("FadeIn")->add_child_text (raw_convert<string> (_fade_in->get())); + cxml::add_text_child(text, "FadeIn", raw_convert<string>(_fade_in->get())); } if (_fade_out) { - text->add_child("FadeOut")->add_child_text (raw_convert<string> (_fade_out->get())); + cxml::add_text_child(text, "FadeOut", raw_convert<string>(_fade_out->get())); } - text->add_child("OutlineWidth")->add_child_text (raw_convert<string> (_outline_width)); + cxml::add_text_child(text, "OutlineWidth", raw_convert<string>(_outline_width)); for (auto i: _fonts) { - i->as_xml (text->add_child("Font")); + i->as_xml(cxml::add_child(text, "Font")); } - text->add_child("Type")->add_child_text (text_type_to_string(_type)); - text->add_child("OriginalType")->add_child_text (text_type_to_string(_original_type)); + cxml::add_text_child(text, "Type", text_type_to_string(_type)); + cxml::add_text_child(text, "OriginalType", text_type_to_string(_original_type)); if (_dcp_track) { - _dcp_track->as_xml(text->add_child("DCPTrack")); + _dcp_track->as_xml(cxml::add_child(text, "DCPTrack")); } if (_language) { - auto lang = text->add_child("Language"); + auto lang = cxml::add_child(text, "Language"); lang->add_child_text (_language->to_string()); - lang->set_attribute ("Additional", _language_is_additional ? "1" : "0"); + lang->set_attribute("additional", _language_is_additional ? "1" : "0"); } } diff --git a/src/lib/text_content.h b/src/lib/text_content.h index 4d4bdc507..58014917b 100644 --- a/src/lib/text_content.h +++ b/src/lib/text_content.h @@ -72,7 +72,7 @@ public: TextContent (Content* parent, std::vector<std::shared_ptr<Content>>); TextContent (Content* parent, cxml::ConstNodePtr, int version, std::list<std::string>& notes); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; std::string identifier () const; void take_settings_from (std::shared_ptr<const TextContent> c); @@ -224,6 +224,10 @@ private: double _x_scale; /** y scale factor to apply to subtitles */ double _y_scale; + /** Fonts used by this content. They are added during content examination, then + * saved/loaded from metadata.xml. This is so the user can change the font in + * used by a piece of content. + */ std::list<std::shared_ptr<dcpomatic::Font>> _fonts; boost::optional<dcp::Colour> _colour; boost::optional<dcp::Effect> _effect; diff --git a/src/lib/text_decoder.cc b/src/lib/text_decoder.cc index 75fa33605..36909c2ee 100644 --- a/src/lib/text_decoder.cc +++ b/src/lib/text_decoder.cc @@ -20,6 +20,7 @@ #include "compose.hpp" +#include "dcpomatic_log.h" #include "log.h" #include "text_content.h" #include "text_decoder.h" @@ -127,7 +128,7 @@ TextDecoder::remove_invalid_characters_for_xml(string text) void -TextDecoder::emit_plain_start(ContentTime from, vector<dcp::SubtitleString> subtitles, dcp::SubtitleStandard valign_standard) +TextDecoder::emit_plain_start(ContentTime from, vector<dcp::TextString> subtitles, dcp::SubtitleStandard valign_standard) { vector<StringText> string_texts; @@ -273,7 +274,7 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & sub_subti return dcp::Colour(lrintf(c.r * 255), lrintf(c.g * 255), lrintf(c.b * 255)); }; - auto dcp_subtitle = dcp::SubtitleString( + auto dcp_subtitle = dcp::TextString( optional<string>(), block.italic, block.bold, @@ -306,6 +307,10 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & sub_subti ); auto font = content()->get_font(block.font.get_value_or("")); + if (!font) { + LOG_WARNING("Could not find font '%1' in content; falling back to default", block.font.get_value_or("")); + font = std::make_shared<dcpomatic::Font>(block.font.get_value_or(""), default_font_file()); + } DCPOMATIC_ASSERT(font); auto string_text = StringText( @@ -332,7 +337,7 @@ TextDecoder::emit_stop (ContentTime to) void -TextDecoder::emit_plain(ContentTimePeriod period, vector<dcp::SubtitleString> subtitles, dcp::SubtitleStandard valign_standard) +TextDecoder::emit_plain(ContentTimePeriod period, vector<dcp::TextString> subtitles, dcp::SubtitleStandard valign_standard) { emit_plain_start (period.from, subtitles, valign_standard); emit_stop (period.to); diff --git a/src/lib/text_decoder.h b/src/lib/text_decoder.h index 1a7632fd8..26248ef06 100644 --- a/src/lib/text_decoder.h +++ b/src/lib/text_decoder.h @@ -30,7 +30,7 @@ #include "content_text.h" #include "types.h" #include <dcp/subtitle_standard.h> -#include <dcp/subtitle_string.h> +#include <dcp/text_string.h> #include <boost/signals2.hpp> @@ -52,9 +52,9 @@ public: void emit_bitmap_start (ContentBitmapText const& bitmap); void emit_bitmap (dcpomatic::ContentTimePeriod period, std::shared_ptr<const Image> image, dcpomatic::Rect<double> rect); - void emit_plain_start(dcpomatic::ContentTime from, std::vector<dcp::SubtitleString> s, dcp::SubtitleStandard valign_standard); + void emit_plain_start(dcpomatic::ContentTime from, std::vector<dcp::TextString> s, dcp::SubtitleStandard valign_standard); void emit_plain_start (dcpomatic::ContentTime from, sub::Subtitle const & subtitle); - void emit_plain(dcpomatic::ContentTimePeriod period, std::vector<dcp::SubtitleString> s, dcp::SubtitleStandard valign_standard); + void emit_plain(dcpomatic::ContentTimePeriod period, std::vector<dcp::TextString> s, dcp::SubtitleStandard valign_standard); void emit_plain (dcpomatic::ContentTimePeriod period, sub::Subtitle const & subtitle); void emit_stop (dcpomatic::ContentTime to); diff --git a/src/lib/text_type.cc b/src/lib/text_type.cc index b1dcfc99c..33e74bdca 100644 --- a/src/lib/text_type.cc +++ b/src/lib/text_type.cc @@ -24,6 +24,7 @@ #include "exceptions.h" #include "text_type.h" #include "types.h" +#include <dcp/text_type.h> #include "i18n.h" @@ -38,6 +39,10 @@ string_to_text_type(string s) return TextType::UNKNOWN; } else if (s == "open-subtitle") { return TextType::OPEN_SUBTITLE; + } else if (s == "open-caption") { + return TextType::OPEN_CAPTION; + } else if (s == "closed-subtitle") { + return TextType::CLOSED_SUBTITLE; } else if (s == "closed-caption") { return TextType::CLOSED_CAPTION; } else { @@ -53,6 +58,10 @@ text_type_to_string(TextType t) return "unknown"; case TextType::OPEN_SUBTITLE: return "open-subtitle"; + case TextType::OPEN_CAPTION: + return "open-caption"; + case TextType::CLOSED_SUBTITLE: + return "closed-subtitle"; case TextType::CLOSED_CAPTION: return "closed-caption"; default: @@ -68,6 +77,10 @@ text_type_to_name(TextType t) return _("Timed text"); case TextType::OPEN_SUBTITLE: return _("Open subtitles"); + case TextType::OPEN_CAPTION: + return _("Open captions"); + case TextType::CLOSED_SUBTITLE: + return _("Closed subtitles"); case TextType::CLOSED_CAPTION: return _("Closed captions"); default: @@ -76,3 +89,15 @@ text_type_to_name(TextType t) } +bool +is_open(TextType type) +{ + return type == TextType::OPEN_SUBTITLE || type == TextType::OPEN_CAPTION; +} + + +bool +is_open(dcp::TextType type) +{ + return type == dcp::TextType::OPEN_SUBTITLE || type == dcp::TextType::OPEN_CAPTION; +} diff --git a/src/lib/text_type.h b/src/lib/text_type.h index d21e03a60..1f2a5aeec 100644 --- a/src/lib/text_type.h +++ b/src/lib/text_type.h @@ -24,6 +24,7 @@ #include <string> +#include <dcp/text_type.h> /** Type of captions. @@ -34,8 +35,6 @@ * - open: on-screen * - closed: only visible by some audience members * - * At the moment DoM supports open subtitles and closed captions. - * * There is some use of the word `subtitle' in the code which may mean * caption in some contexts. */ @@ -43,6 +42,8 @@ enum class TextType { UNKNOWN, OPEN_SUBTITLE, + OPEN_CAPTION, + CLOSED_SUBTITLE, CLOSED_CAPTION, COUNT }; @@ -50,6 +51,8 @@ enum class TextType extern std::string text_type_to_string(TextType t); extern std::string text_type_to_name(TextType t); extern TextType string_to_text_type(std::string s); +bool is_open(TextType type); +bool is_open(dcp::TextType type); #endif diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc index 12b9a2aa3..f1373fb4a 100644 --- a/src/lib/transcode_job.cc +++ b/src/lib/transcode_job.cc @@ -28,15 +28,16 @@ #include "compose.hpp" #include "content.h" #include "config.h" -#include "dcp_encoder.h" +#include "dcp_film_encoder.h" #include "dcpomatic_log.h" -#include "encoder.h" #include "examine_content_job.h" #include "film.h" +#include "film_encoder.h" #include "job_manager.h" #include "log.h" #include "transcode_job.h" #include "upload_job.h" +#include "variant.h" #include <iomanip> #include <iostream> @@ -83,7 +84,7 @@ TranscodeJob::json_name () const void -TranscodeJob::set_encoder (shared_ptr<Encoder> e) +TranscodeJob::set_encoder(shared_ptr<FilmEncoder> e) { _encoder = e; } @@ -110,7 +111,10 @@ TranscodeJob::run () return; case ChangedBehaviour::STOP: set_progress (1); - set_error (_("Files have changed since they were added to the project."), _("Open the project in DCP-o-matic, check the settings, then save it before trying again.")); + set_error( + _("Files have changed since they were added to the project."), + variant::insert_dcpomatic(_("Open the project in %1, check the settings, then save it before trying again.")) + ); set_state (FINISHED_ERROR); return; default: @@ -129,7 +133,7 @@ TranscodeJob::run () LOG_GENERAL(N_("Transcode job completed successfully: %1 fps"), dcp::locale_convert<string>(frames_per_second(), 2, true)); - if (dynamic_pointer_cast<DCPEncoder>(_encoder)) { + if (variant::count_created_dcps() && dynamic_pointer_cast<DCPFilmEncoder>(_encoder)) { try { Analytics::instance()->successful_dcp_encode(); } catch (FileError& e) { @@ -148,6 +152,20 @@ TranscodeJob::run () } +void +TranscodeJob::pause() +{ + _encoder->pause(); +} + + +void TranscodeJob::resume() +{ + _encoder->resume(); + Job::resume(); +} + + string TranscodeJob::status () const { diff --git a/src/lib/transcode_job.h b/src/lib/transcode_job.h index b05b20a16..720d7f99b 100644 --- a/src/lib/transcode_job.h +++ b/src/lib/transcode_job.h @@ -35,7 +35,9 @@ #undef IGNORE -class Encoder; +class FilmEncoder; + +struct frames_not_lost_when_threads_disappear; /** @class TranscodeJob @@ -56,20 +58,24 @@ public: std::string name () const override; std::string json_name () const override; void run () override; + void pause() override; + void resume() override; std::string status () const override; bool enable_notify () const override { return true; } - void set_encoder (std::shared_ptr<Encoder> t); + void set_encoder(std::shared_ptr<FilmEncoder> encoder); private: + friend struct ::frames_not_lost_when_threads_disappear; + virtual void post_transcode () {} float frames_per_second() const; int remaining_time () const override; - std::shared_ptr<Encoder> _encoder; + std::shared_ptr<FilmEncoder> _encoder; ChangedBehaviour _changed; }; diff --git a/src/lib/types.h b/src/lib/types.h index 36059401e..b4fcea959 100644 --- a/src/lib/types.h +++ b/src/lib/types.h @@ -43,8 +43,9 @@ class FFmpegContent; * * 64 - first version used * 65 - v2.16.0 - checksums added to communication + * 66 - v2.17.x - J2KBandwidth -> VideoBitRate in metadata */ -#define SERVER_LINK_VERSION (64+1) +#define SERVER_LINK_VERSION (64+2) /** A film of F seconds at f FPS will be Ff frames; Consider some delta FPS d, so if we run the same @@ -107,7 +108,8 @@ enum class ReelType { SINGLE, BY_VIDEO_CONTENT, - BY_LENGTH + BY_LENGTH, + CUSTOM }; diff --git a/src/lib/unzipper.cc b/src/lib/unzipper.cc index f0170e7e0..8d468f24f 100644 --- a/src/lib/unzipper.cc +++ b/src/lib/unzipper.cc @@ -56,8 +56,20 @@ Unzipper::~Unzipper() } +bool +Unzipper::contains(string const& filename) const +{ + auto file = zip_fopen(_zip, filename.c_str(), 0); + bool exists = file != nullptr; + if (file) { + zip_fclose(file); + } + return exists; +} + + string -Unzipper::get(string const& filename) +Unzipper::get(string const& filename) const { auto file = zip_fopen(_zip, filename.c_str(), 0); if (!file) { diff --git a/src/lib/unzipper.h b/src/lib/unzipper.h index 7cab6e5f4..76b2fe45a 100644 --- a/src/lib/unzipper.h +++ b/src/lib/unzipper.h @@ -33,7 +33,8 @@ public: Unzipper(Unzipper const&) = delete; Unzipper& operator=(Unzipper const&) = delete; - std::string get(std::string const& filename); + std::string get(std::string const& filename) const; + bool contains(std::string const& filename) const; private: struct zip* _zip; diff --git a/src/lib/util.cc b/src/lib/util.cc index b71ce8581..022289a58 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -49,17 +49,19 @@ #include "string_text.h" #include "text_decoder.h" #include "util.h" +#include "variant.h" #include "video_content.h" #include <dcp/atmos_asset.h> #include <dcp/decrypted_kdm.h> #include <dcp/file.h> #include <dcp/filesystem.h> #include <dcp/locale_convert.h> +#include <dcp/mpeg2_picture_asset.h> #include <dcp/picture_asset.h> #include <dcp/raw_convert.h> #include <dcp/scope_guard.h> #include <dcp/sound_asset.h> -#include <dcp/subtitle_asset.h> +#include <dcp/text_asset.h> #include <dcp/util.h> #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS @@ -87,10 +89,11 @@ LIBDCP_ENABLE_WARNINGS #include <dbghelp.h> #endif #include <signal.h> +#include <climits> #include <iomanip> #include <iostream> #include <fstream> -#include <climits> +#include <numeric> #include <stdexcept> #ifdef DCPOMATIC_POSIX #include <execinfo.h> @@ -102,6 +105,7 @@ LIBDCP_ENABLE_WARNINGS using std::bad_alloc; using std::cout; +using std::dynamic_pointer_cast; using std::endl; using std::istream; using std::list; @@ -118,9 +122,6 @@ using std::vector; using std::wstring; using boost::thread; using boost::optional; -using boost::lexical_cast; -using boost::bad_lexical_cast; -using boost::scoped_array; using dcp::Size; using dcp::raw_convert; using dcp::locale_convert; @@ -243,6 +244,7 @@ addr2line (void const * const addr) { char addr2line_cmd[512] = { 0 }; sprintf (addr2line_cmd, "addr2line -f -p -e %.256s %p > %s", program_name.c_str(), addr, backtrace_file.string().c_str()); + std::cout << addr2line_cmd << "\n"; return system(addr2line_cmd); } @@ -428,6 +430,11 @@ dcpomatic_setup () SetUnhandledExceptionFilter(exception_handler); #endif +#ifdef DCPOMATIC_GROK + /* This makes grok support work with CUDA 12.2 */ + setenv("CUDA_MODULE_LOADING", "EAGER", 1); +#endif + #ifdef DCPOMATIC_HAVE_AVREGISTER LIBDCP_DISABLE_WARNINGS av_register_all (); @@ -468,7 +475,7 @@ LIBDCP_ENABLE_WARNINGS #if defined(DCPOMATIC_WINDOWS) || defined(DCPOMATIC_OSX) /* Render something to fontconfig to create its cache */ vector<StringText> subs; - dcp::SubtitleString ss( + dcp::TextString ss( optional<string>(), false, false, false, dcp::Colour(), 42, 1, dcp::Time(), dcp::Time(), 0, dcp::HAlign::CENTER, 0, dcp::VAlign::CENTER, 0, dcp::Direction::LTR, "Hello dolly", dcp::Effect::NONE, dcp::Colour(), dcp::Time(), dcp::Time(), 0, std::vector<dcp::Ruby>() ); @@ -509,7 +516,7 @@ mo_path () boost::filesystem::path mo_path () { - return "DCP-o-matic 2.app/Contents/Resources"; + return variant::dcpomatic_app() + "/Contents/Resources"; } #endif @@ -741,9 +748,10 @@ asset_filename (shared_ptr<dcp::Asset> asset, string type, int reel_index, int r string -video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary) +video_asset_filename(shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary) { - return asset_filename(asset, "j2c", reel_index, reel_count, summary, ".mxf"); + string type = dynamic_pointer_cast<dcp::MPEG2PictureAsset>(asset) ? "mpeg2" : "j2c"; + return asset_filename(asset, type, reel_index, reel_count, summary, ".mxf"); } @@ -755,7 +763,7 @@ audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int ree string -subtitle_asset_filename (shared_ptr<dcp::SubtitleAsset> asset, int reel_index, int reel_count, optional<string> summary, string extension) +subtitle_asset_filename (shared_ptr<dcp::TextAsset> asset, int reel_index, int reel_count, optional<string> summary, string extension) { return asset_filename(asset, "sub", reel_index, reel_count, summary, extension); } @@ -792,7 +800,7 @@ careful_string_filter (string s) for (int i = 0; i < transliterated.length(); ++i) { auto replacement = replacements.find(transliterated[i]); if (replacement != replacements.end()) { - transliterated_more += replacement->second; + transliterated_more += static_cast<UChar32>(replacement->second); } else { transliterated_more += transliterated[i]; } @@ -879,16 +887,6 @@ remap (shared_ptr<const AudioBuffers> input, int output_channels, AudioMapping m return mapped; } -Eyes -increment_eyes (Eyes e) -{ - if (e == Eyes::LEFT) { - return Eyes::RIGHT; - } - - return Eyes::LEFT; -} - size_t utf8_strlen (string s) @@ -912,7 +910,7 @@ utf8_strlen (string s) /** @param size Size of picture that the subtitle will be overlaid onto */ void -emit_subtitle_image (ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size size, shared_ptr<TextDecoder> decoder) +emit_subtitle_image(ContentTimePeriod period, dcp::TextImage sub, dcp::Size size, shared_ptr<TextDecoder> decoder) { /* XXX: this is rather inefficient; decoding the image just to get its size */ FFmpegImageProxy proxy (sub.png_image()); @@ -1024,9 +1022,9 @@ decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm) } } if (!on_chain) { - throw KDMError (_("This KDM was not made for DCP-o-matic's decryption certificate."), e.what()); + throw KDMError(variant::insert_dcpomatic(_("This KDM was not made for %1's decryption certificate.")), e.what()); } else if (kdm_subject_name != dc->leaf().subject()) { - throw KDMError (_("This KDM was made for DCP-o-matic but not for its leaf certificate."), e.what()); + throw KDMError(variant::insert_dcpomatic(_("This KDM was made for %1 but not for its leaf certificate.")), e.what()); } else { throw; } @@ -1130,6 +1128,34 @@ word_wrap(string input, int columns) } +#ifdef DCPOMATIC_GROK +void +setup_grok_library_path() +{ + static std::string old_path; + if (old_path.empty()) { + auto const old = getenv("LD_LIRARY_PATH"); + if (old) { + old_path = old; + } + } + auto const grok = Config::instance()->grok(); + if (!grok || grok->binary_location.empty()) { + setenv("LD_LIRARY_PATH", old_path.c_str(), 1); + return; + } + + std::string new_path = old_path; + if (!new_path.empty()) { + new_path += ":"; + } + new_path += grok->binary_location.string(); + + setenv("LD_LIBRARY_PATH", new_path.c_str(), 1); +} +#endif + + string screen_names_to_string(vector<string> names) { @@ -1157,3 +1183,23 @@ screen_names_to_string(vector<string> names) return result.substr(0, result.length() - 2); } + +string +report_problem() +{ + return String::compose(_("Please report this problem by using Help -> Report a problem or via email to %1"), variant::report_problem_email()); +} + + +string +join_strings(vector<string> const& in, string const& separator) +{ + if (in.empty()) { + return {}; + } + + return std::accumulate(std::next(in.begin()), in.end(), in.front(), [separator](string a, string b) { + return a + separator + b; + }); +} + diff --git a/src/lib/util.h b/src/lib/util.h index fd6fd6164..d6ed0bccc 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -32,10 +32,11 @@ #include "dcpomatic_time.h" #include "pixel_quanta.h" #include "types.h" +#include <libcxml/cxml.h> #include <dcp/atmos_asset.h> #include <dcp/decrypted_kdm.h> #include <dcp/util.h> -#include <dcp/subtitle_image.h> +#include <dcp/text_image.h> #include <boost/optional.hpp> #include <boost/filesystem.hpp> #include <boost/date_time/gregorian/gregorian.hpp> @@ -49,7 +50,7 @@ namespace dcp { class PictureAsset; class SoundAsset; - class SubtitleAsset; + class TextAsset; } extern std::string program_name; @@ -81,13 +82,13 @@ extern dcp::Size fit_ratio_within (float ratio, dcp::Size); extern void set_backtrace_file (boost::filesystem::path); extern std::string video_asset_filename (std::shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary); extern std::string audio_asset_filename (std::shared_ptr<dcp::SoundAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary); -extern std::string subtitle_asset_filename (std::shared_ptr<dcp::SubtitleAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary, std::string extension); +extern std::string subtitle_asset_filename (std::shared_ptr<dcp::TextAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary, std::string extension); extern std::string atmos_asset_filename (std::shared_ptr<dcp::AtmosAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary); extern std::string careful_string_filter (std::string); extern std::pair<int, int> audio_channel_types (std::list<int> mapped, int channels); extern std::shared_ptr<AudioBuffers> remap (std::shared_ptr<const AudioBuffers> input, int output_channels, AudioMapping map); extern size_t utf8_strlen (std::string s); -extern void emit_subtitle_image (dcpomatic::ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size size, std::shared_ptr<TextDecoder> decoder); +extern void emit_subtitle_image (dcpomatic::ContentTimePeriod period, dcp::TextImage sub, dcp::Size size, std::shared_ptr<TextDecoder> decoder); extern void copy_in_bits (boost::filesystem::path from, boost::filesystem::path to, std::function<void (float)>); extern dcp::Size scale_for_display (dcp::Size s, dcp::Size display_container, dcp::Size film_container, PixelQuanta quanta); extern dcp::DecryptedKDM decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm); @@ -97,6 +98,24 @@ extern std::string error_details(boost::system::error_code ec); extern bool contains_assetmap(boost::filesystem::path dir); extern std::string word_wrap(std::string input, int columns); extern void capture_ffmpeg_logs(); +#ifdef DCPOMATIC_GROK +extern void setup_grok_library_path(); +#endif +extern std::string join_strings(std::vector<std::string> const& in, std::string const& separator = " "); + + +template <class T> +T +number_attribute(cxml::ConstNodePtr node, std::string name1, std::string name2) +{ + auto value = node->optional_number_attribute<T>(name1); + if (!value) { + value = node->number_attribute<T>(name2); + } + return *value; +} + extern std::string screen_names_to_string(std::vector<std::string> names); +extern std::string report_problem(); #endif diff --git a/src/lib/variant.cc b/src/lib/variant.cc new file mode 100644 index 000000000..a9dc56307 --- /dev/null +++ b/src/lib/variant.cc @@ -0,0 +1,179 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "variant.h" + + +static char const* _dcpomatic = "DCP-o-matic"; +static char const* _dcpomatic_player = "DCP-o-matic Player"; +static char const* _dcpomatic_kdm_creator = "DCP-o-matic KDM Creator"; +static char const* _dcpomatic_verifier = "DCP-o-matic Verifier"; +static char const* _dcpomatic_app = "DCP-o-matic 2.app"; +static char const* _dcpomatic_player_app = "DCP-o-matic 2 Player.app"; +static char const* _dcpomatic_disk_writer = "DCP-o-matic Disk Writer"; +static char const* _dcpomatic_editor = "DCP-o-matic Editor"; +static char const* _dcpomatic_encode_server = "DCP-o-matic Encode Server"; +static char const* _dcpomatic_batch_converter_app = "DCP-o-matic 2 Batch Converter.app"; +static char const* _dcpomatic_playlist_editor = "DCP-o-matic Playlist Editor"; +static char const* _dcpomatic_combiner = "DCP-o-matic Combiner"; +static char const* _dcpomatic_batch_converter = "DCP-o-matic Batch Converter"; + +static char const* _report_problem_email = "carl@dcpomatic.com"; + +static bool const _show_tagline = true; +static bool const _show_dcpomatic_website = true; +static bool const _show_credits = true; +static bool const _show_report_a_problem = true; +static bool const _count_created_dcps = true; + + +std::string +variant::dcpomatic() +{ + return _dcpomatic; +} + +std::string +variant::dcpomatic_batch_converter() +{ + return _dcpomatic_batch_converter; +} + +std::string +variant::dcpomatic_combiner() +{ + return _dcpomatic_combiner; +} + +std::string +variant::dcpomatic_disk_writer() +{ + return _dcpomatic_disk_writer; +} + +std::string +variant::dcpomatic_editor() +{ + return _dcpomatic_editor; +} + +std::string +variant::dcpomatic_encode_server() +{ + return _dcpomatic_encode_server; +} + +std::string +variant::dcpomatic_kdm_creator() +{ + return _dcpomatic_kdm_creator; +} + +std::string +variant::dcpomatic_player() +{ + return _dcpomatic_player; +} + +std::string +variant::dcpomatic_playlist_editor() +{ + return _dcpomatic_playlist_editor; +} + +std::string +variant::dcpomatic_verifier() +{ + return _dcpomatic_verifier; +} + +std::string +variant::insert_dcpomatic(std::string const& s) +{ + return String::compose(s, _dcpomatic); +} + +std::string +variant::insert_dcpomatic_encode_server(std::string const& s) +{ + return String::compose(s, _dcpomatic_encode_server); +} + +std::string +variant::insert_dcpomatic_kdm_creator(std::string const& s) +{ + return String::compose(s, _dcpomatic_kdm_creator); +} + +std::string +variant::dcpomatic_app() +{ + return _dcpomatic_app; +} + +std::string +variant::dcpomatic_batch_converter_app() +{ + return _dcpomatic_batch_converter_app; +} + +std::string +variant::dcpomatic_player_app() +{ + return _dcpomatic_player_app; +} + +bool +variant::show_tagline() +{ + return _show_tagline; +} + +bool +variant::show_dcpomatic_website() +{ + return _show_dcpomatic_website; +} + +bool +variant::show_credits() +{ + return _show_credits; +} + +bool +variant::show_report_a_problem() +{ + return _show_report_a_problem; +} + +bool +variant::count_created_dcps() +{ + return _count_created_dcps; +} + +std::string +variant::report_problem_email() +{ + return _report_problem_email; +} + diff --git a/src/lib/variant.h b/src/lib/variant.h new file mode 100644 index 000000000..9a42f3eca --- /dev/null +++ b/src/lib/variant.h @@ -0,0 +1,56 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "compose.hpp" + + +namespace variant +{ + +std::string dcpomatic(); +std::string dcpomatic_batch_converter(); +std::string dcpomatic_combiner(); +std::string dcpomatic_disk_writer(); +std::string dcpomatic_editor(); +std::string dcpomatic_encode_server(); +std::string dcpomatic_kdm_creator(); +std::string dcpomatic_player(); +std::string dcpomatic_playlist_editor(); +std::string dcpomatic_verifier(); + +std::string insert_dcpomatic(std::string const& s); +std::string insert_dcpomatic_encode_server(std::string const& s); +std::string insert_dcpomatic_kdm_creator(std::string const& s); + +std::string dcpomatic_app(); +std::string dcpomatic_batch_converter_app(); +std::string dcpomatic_player_app(); + +std::string report_problem_email(); + +bool show_tagline(); +bool show_dcpomatic_website(); +bool show_credits(); +bool show_report_a_problem(); +bool count_created_dcps(); + +} + diff --git a/src/lib/verify_dcp_job.cc b/src/lib/verify_dcp_job.cc index 6635d408c..a7688717d 100644 --- a/src/lib/verify_dcp_job.cc +++ b/src/lib/verify_dcp_job.cc @@ -86,7 +86,7 @@ VerifyDCPJob::run () } } - _notes = dcp::verify( + _result = dcp::verify( _directories, decrypted_kdms, bind(&VerifyDCPJob::update_stage, this, _1, _2), @@ -96,7 +96,7 @@ VerifyDCPJob::run () ); bool failed = false; - for (auto i: _notes) { + for (auto i: _result.notes) { if (i.type() == dcp::VerificationNote::Type::ERROR) { failed = true; } diff --git a/src/lib/verify_dcp_job.h b/src/lib/verify_dcp_job.h index e6497bd83..d7ac21d41 100644 --- a/src/lib/verify_dcp_job.h +++ b/src/lib/verify_dcp_job.h @@ -36,8 +36,8 @@ public: std::string json_name () const override; void run () override; - std::vector<dcp::VerificationNote> const& notes() const { - return _notes; + dcp::VerificationResult const& result() const { + return _result; } private: @@ -45,5 +45,5 @@ private: std::vector<boost::filesystem::path> _directories; std::vector<boost::filesystem::path> _kdms; - std::vector<dcp::VerificationNote> _notes; + dcp::VerificationResult _result; }; diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index 6c027ff11..058bb4ea2 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -175,8 +175,10 @@ VideoContent::VideoContent (Content* parent, cxml::ConstNodePtr node, int versio _yuv = node->optional_bool_child("YUV").get_value_or (true); - if (version >= 32) { - /* These should be VideoFadeIn and VideoFadeOut but we'll leave them like this until 2.18.x */ + if (version >= 39) { + _fade_in = node->number_child<Frame>("VideoFadeIn"); + _fade_out = node->number_child<Frame>("VideoFadeOut"); + } else if (version >= 32) { _fade_in = node->number_child<Frame> ("FadeIn"); _fade_out = node->number_child<Frame> ("FadeOut"); } else { @@ -273,37 +275,37 @@ VideoContent::VideoContent (Content* parent, vector<shared_ptr<Content> > c) void -VideoContent::as_xml (xmlpp::Node* node) const +VideoContent::as_xml(xmlpp::Element* element) const { boost::mutex::scoped_lock lm (_mutex); - node->add_child("Use")->add_child_text (_use ? "1" : "0"); - node->add_child("VideoLength")->add_child_text (raw_convert<string> (_length)); + cxml::add_text_child(element, "Use", _use ? "1" : "0"); + cxml::add_text_child(element, "VideoLength", raw_convert<string>(_length)); if (_size) { - node->add_child("VideoWidth")->add_child_text(raw_convert<string>(_size->width)); - node->add_child("VideoHeight")->add_child_text(raw_convert<string>(_size->height)); + cxml::add_text_child(element, "VideoWidth", raw_convert<string>(_size->width)); + cxml::add_text_child(element, "VideoHeight", raw_convert<string>(_size->height)); } - node->add_child("VideoFrameType")->add_child_text (video_frame_type_to_string (_frame_type)); + cxml::add_text_child(element, "VideoFrameType", video_frame_type_to_string(_frame_type)); if (_sample_aspect_ratio) { - node->add_child("SampleAspectRatio")->add_child_text (raw_convert<string> (_sample_aspect_ratio.get ())); + cxml::add_text_child(element, "SampleAspectRatio", raw_convert<string> (_sample_aspect_ratio.get ())); } - _crop.as_xml (node); + _crop.as_xml(element); if (_custom_ratio) { - node->add_child("CustomRatio")->add_child_text(raw_convert<string>(*_custom_ratio)); + cxml::add_text_child(element, "CustomRatio", raw_convert<string>(*_custom_ratio)); } if (_custom_size) { - node->add_child("CustomWidth")->add_child_text(raw_convert<string>(_custom_size->width)); - node->add_child("CustomHeight")->add_child_text(raw_convert<string>(_custom_size->height)); + cxml::add_text_child(element, "CustomWidth", raw_convert<string>(_custom_size->width)); + cxml::add_text_child(element, "CustomHeight", raw_convert<string>(_custom_size->height)); } if (_colour_conversion) { - _colour_conversion.get().as_xml (node->add_child("ColourConversion")); + _colour_conversion.get().as_xml(cxml::add_child(element, "ColourConversion")); } - node->add_child("YUV")->add_child_text (_yuv ? "1" : "0"); - node->add_child("FadeIn")->add_child_text (raw_convert<string> (_fade_in)); - node->add_child("FadeOut")->add_child_text (raw_convert<string> (_fade_out)); - node->add_child("Range")->add_child_text(_range == VideoRange::FULL ? "full" : "video"); - _pixel_quanta.as_xml(node->add_child("PixelQuanta")); + cxml::add_text_child(element, "YUV", _yuv ? "1" : "0"); + cxml::add_text_child(element, "VideoFadeIn", raw_convert<string>(_fade_in)); + cxml::add_text_child(element, "VideoFadeOut", raw_convert<string>(_fade_out)); + cxml::add_text_child(element, "Range", _range == VideoRange::FULL ? "full" : "video"); + _pixel_quanta.as_xml(cxml::add_child(element, "PixelQuanta")); if (_burnt_subtitle_language) { - node->add_child("BurntSubtitleLanguage")->add_child_text(_burnt_subtitle_language->to_string()); + cxml::add_text_child(element, "BurntSubtitleLanguage", _burnt_subtitle_language->to_string()); } } @@ -424,27 +426,29 @@ VideoContent::size_after_crop () const } -/** @param f Frame index within the whole (untrimmed) content. +/** @param time Time within the whole (untrimmed) content. * @return Fade factor (between 0 and 1) or unset if there is no fade. */ optional<double> -VideoContent::fade (shared_ptr<const Film> film, Frame f) const +VideoContent::fade(shared_ptr<const Film> film, ContentTime time) const { - DCPOMATIC_ASSERT (f >= 0); + DCPOMATIC_ASSERT(time.get() >= 0); double const vfr = _parent->active_video_frame_rate(film); - auto const ts = _parent->trim_start().frames_round(vfr); - if ((f - ts) < fade_in()) { - return double (f - ts) / fade_in(); + auto const ts = _parent->trim_start(); + auto const fade_in_time = ContentTime::from_frames(fade_in(), vfr); + if ((time - ts) < fade_in_time) { + return double(ContentTime(time - ts).get()) / fade_in_time.get(); } - auto fade_out_start = length() - _parent->trim_end().frames_round(vfr) - fade_out(); - if (f >= fade_out_start) { - return 1 - double (f - fade_out_start) / fade_out(); + auto const fade_out_time = ContentTime::from_frames(fade_out(), vfr); + auto fade_out_start = ContentTime::from_frames(length(), vfr) - _parent->trim_end() - fade_out_time; + if (time >= fade_out_start) { + return 1 - double(ContentTime(time - fade_out_start).get()) / fade_out_time.get(); } - return optional<double> (); + return {}; } string diff --git a/src/lib/video_content.h b/src/lib/video_content.h index 495d000e1..eb106cc75 100644 --- a/src/lib/video_content.h +++ b/src/lib/video_content.h @@ -66,7 +66,7 @@ public: VideoContent (Content* parent, cxml::ConstNodePtr node, int version, VideoRange video_range_hint); VideoContent (Content* parent, std::vector<std::shared_ptr<Content>>); - void as_xml (xmlpp::Node *) const; + void as_xml(xmlpp::Element*) const; std::string technical_summary () const; std::string identifier () const; void take_settings_from (std::shared_ptr<const VideoContent> c); @@ -208,7 +208,7 @@ public: boost::optional<dcp::Size> size_after_crop() const; boost::optional<dcp::Size> scaled_size(dcp::Size container_size); - boost::optional<double> fade (std::shared_ptr<const Film> film, Frame) const; + boost::optional<double> fade(std::shared_ptr<const Film> film, dcpomatic::ContentTime time) const; std::string processing_description (std::shared_ptr<const Film> film); diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc index cf21f885a..c628fddd9 100644 --- a/src/lib/video_decoder.cc +++ b/src/lib/video_decoder.cc @@ -20,7 +20,6 @@ #include "compose.hpp" -#include "film.h" #include "frame_interval_checker.h" #include "image.h" #include "j2k_image_proxy.h" @@ -47,17 +46,9 @@ VideoDecoder::VideoDecoder (Decoder* parent, shared_ptr<const Content> c) } -/** Called by decoder classes when they have a video frame ready. - * @param frame Frame index within the content; this does not take into account 3D - * so for 3D_ALTERNATE this value goes: - * 0: frame 0 left - * 1: frame 0 right - * 2: frame 1 left - * 3: frame 1 right - * and so on. - */ +/** Called by decoder classes when they have a video frame ready */ void -VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> image, Frame decoder_frame) +VideoDecoder::emit(shared_ptr<const Film> film, shared_ptr<const ImageProxy> image, ContentTime time) { if (ignore ()) { return; @@ -66,14 +57,12 @@ VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> im auto const afr = _content->active_video_frame_rate(film); auto const vft = _content->video->frame_type(); - auto frame_time = ContentTime::from_frames (decoder_frame, afr); - /* Do some heuristics to try and spot the case where the user sets content to 3D * when it is not. We try to tell this by looking at the differences in time between * the first few frames. Real 3D content should have two frames for each timestamp. */ if (_frame_interval_checker) { - _frame_interval_checker->feed (frame_time, afr); + _frame_interval_checker->feed(time, afr); if (_frame_interval_checker->guess() == FrameIntervalChecker::PROBABLY_NOT_3D && vft == VideoFrameType::THREE_D) { boost::throw_exception ( DecodeError( @@ -91,94 +80,54 @@ VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> im } } - Frame frame; - Eyes eyes = Eyes::BOTH; - if (!_position) { - /* This is the first data we have received since initialisation or seek. Set - the position based on the frame that was given. After this first time - we just count frames, since (as with audio) it seems that ContentTimes - are unreliable from FFmpegDecoder. They are much better than audio times - but still we get the occasional one which is duplicated. In this case - ffmpeg seems to carry on regardless, processing the video frame as normal. - If we drop the frame with the duplicated timestamp we obviously lose sync. - */ - - if (vft == VideoFrameType::THREE_D_ALTERNATE) { - frame = decoder_frame / 2; - eyes = (decoder_frame % 2) ? Eyes::RIGHT : Eyes::LEFT; - } else { - frame = decoder_frame; - if (vft == VideoFrameType::THREE_D) { - auto j2k = dynamic_pointer_cast<const J2KImageProxy>(image); - /* At the moment only DCP decoders producers VideoFrameType::THREE_D, so only the J2KImageProxy - * knows which eye it is. - */ - if (j2k && j2k->eye()) { - eyes = j2k->eye().get() == dcp::Eye::LEFT ? Eyes::LEFT : Eyes::RIGHT; - } - } - } - - _position = ContentTime::from_frames (frame, afr); - } else { - if (vft == VideoFrameType::THREE_D) { - auto j2k = dynamic_pointer_cast<const J2KImageProxy>(image); - if (j2k && j2k->eye()) { - if (j2k->eye() == dcp::Eye::LEFT) { - frame = _position->frames_round(afr) + 1; - eyes = Eyes::LEFT; - } else { - frame = _position->frames_round(afr); - eyes = Eyes::RIGHT; - } - } else { - /* This should not happen; see above */ - frame = _position->frames_round(afr) + 1; - } - } else if (vft == VideoFrameType::THREE_D_ALTERNATE) { - DCPOMATIC_ASSERT (_last_emitted_eyes); - if (_last_emitted_eyes.get() == Eyes::RIGHT) { - frame = _position->frames_round(afr) + 1; - eyes = Eyes::LEFT; - } else { - frame = _position->frames_round(afr); - eyes = Eyes::RIGHT; - } - } else { - frame = _position->frames_round(afr) + 1; - } - } - switch (vft) { case VideoFrameType::TWO_D: + Data(ContentVideo(image, time, Eyes::BOTH, Part::WHOLE)); + break; case VideoFrameType::THREE_D: - Data (ContentVideo (image, frame, eyes, Part::WHOLE)); + { + auto eyes = Eyes::LEFT; + auto j2k = dynamic_pointer_cast<const J2KImageProxy>(image); + if (j2k && j2k->eye()) { + eyes = *j2k->eye() == dcp::Eye::LEFT ? Eyes::LEFT : Eyes::RIGHT; + } + + Data(ContentVideo(image, time, eyes, Part::WHOLE)); break; + } case VideoFrameType::THREE_D_ALTERNATE: { - Data (ContentVideo (image, frame, eyes, Part::WHOLE)); + Eyes eyes; + if (_last_emitted_eyes) { + eyes = _last_emitted_eyes.get() == Eyes::LEFT ? Eyes::RIGHT : Eyes::LEFT; + } else { + /* We don't know what eye this frame is, so just guess */ + auto frame = time.frames_round(_content->video_frame_rate().get_value_or(24)); + eyes = (frame % 2) ? Eyes::RIGHT : Eyes::LEFT; + } + Data(ContentVideo(image, time, eyes, Part::WHOLE)); _last_emitted_eyes = eyes; break; } case VideoFrameType::THREE_D_LEFT_RIGHT: - Data (ContentVideo (image, frame, Eyes::LEFT, Part::LEFT_HALF)); - Data (ContentVideo (image, frame, Eyes::RIGHT, Part::RIGHT_HALF)); + Data(ContentVideo(image, time, Eyes::LEFT, Part::LEFT_HALF)); + Data(ContentVideo(image, time, Eyes::RIGHT, Part::RIGHT_HALF)); break; case VideoFrameType::THREE_D_TOP_BOTTOM: - Data (ContentVideo (image, frame, Eyes::LEFT, Part::TOP_HALF)); - Data (ContentVideo (image, frame, Eyes::RIGHT, Part::BOTTOM_HALF)); + Data(ContentVideo(image, time, Eyes::LEFT, Part::TOP_HALF)); + Data(ContentVideo(image, time, Eyes::RIGHT, Part::BOTTOM_HALF)); break; case VideoFrameType::THREE_D_LEFT: - Data (ContentVideo (image, frame, Eyes::LEFT, Part::WHOLE)); + Data(ContentVideo(image, time, Eyes::LEFT, Part::WHOLE)); break; case VideoFrameType::THREE_D_RIGHT: - Data (ContentVideo (image, frame, Eyes::RIGHT, Part::WHOLE)); + Data(ContentVideo(image, time, Eyes::RIGHT, Part::WHOLE)); break; default: DCPOMATIC_ASSERT (false); } - _position = ContentTime::from_frames (frame, afr); + _position = time; } diff --git a/src/lib/video_decoder.h b/src/lib/video_decoder.h index f6ee17425..b609404c4 100644 --- a/src/lib/video_decoder.h +++ b/src/lib/video_decoder.h @@ -60,7 +60,7 @@ public: } void seek () override; - void emit (std::shared_ptr<const Film> film, std::shared_ptr<const ImageProxy>, Frame frame); + void emit(std::shared_ptr<const Film> film, std::shared_ptr<const ImageProxy>, dcpomatic::ContentTime time); boost::signals2::signal<void (ContentVideo)> Data; diff --git a/src/lib/video_encoder.cc b/src/lib/video_encoder.cc new file mode 100644 index 000000000..590dc7471 --- /dev/null +++ b/src/lib/video_encoder.cc @@ -0,0 +1,64 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "video_encoder.h" + + +using std::shared_ptr; +using boost::optional; + + +VideoEncoder::VideoEncoder(shared_ptr<const Film> film, Writer& writer) + : _film(film) + , _writer(writer) + , _history(200) +{ + +} + + +void +VideoEncoder::encode(shared_ptr<PlayerVideo>, dcpomatic::DCPTime time) +{ + _last_player_video_time = time; +} + + +/** @return Number of video frames that have been queued for encoding */ +int +VideoEncoder::video_frames_enqueued() const +{ + if (!_last_player_video_time) { + return 0; + } + + return _last_player_video_time->frames_floor(_film->video_frame_rate()); +} + + +/** @return an estimate of the current number of frames we are encoding per second, + * if known. + */ +optional<float> +VideoEncoder::current_encoding_rate() const +{ + return _history.rate(); +} diff --git a/src/lib/video_encoder.h b/src/lib/video_encoder.h new file mode 100644 index 000000000..8cc33ef8a --- /dev/null +++ b/src/lib/video_encoder.h @@ -0,0 +1,69 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_VIDEO_ENCODER_H +#define DCPOMATIC_VIDEO_ENCODER_H + + +#include "dcpomatic_time.h" +#include "event_history.h" +#include "film.h" +#include "player_video.h" + + +class Writer; + + +class VideoEncoder +{ +public: + VideoEncoder(std::shared_ptr<const Film> film, Writer& writer); + virtual ~VideoEncoder() {} + + VideoEncoder(VideoEncoder const&) = delete; + VideoEncoder& operator=(VideoEncoder const&) = delete; + + /** Called to indicate that a processing run is about to begin */ + virtual void begin() {} + + /** Called to pass a bit of video to be encoded as the next DCP frame */ + virtual void encode(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time); + + virtual void pause() = 0; + virtual void resume() = 0; + + /** Called when a processing run has finished */ + virtual void end() = 0; + + int video_frames_enqueued() const; + boost::optional<float> current_encoding_rate() const; + +protected: + /** Film that we are encoding */ + std::shared_ptr<const Film> _film; + Writer& _writer; + EventHistory _history; + boost::optional<dcpomatic::DCPTime> _last_player_video_time; +}; + + +#endif + diff --git a/src/lib/video_encoding.cc b/src/lib/video_encoding.cc new file mode 100644 index 000000000..de68c6ae9 --- /dev/null +++ b/src/lib/video_encoding.cc @@ -0,0 +1,58 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcpomatic_assert.h" +#include "video_encoding.h" + + +using std::string; + + +string +video_encoding_to_string(VideoEncoding encoding) +{ + switch (encoding) { + case VideoEncoding::JPEG2000: + return "jpeg2000"; + case VideoEncoding::MPEG2: + return "mpeg2"; + case VideoEncoding::COUNT: + DCPOMATIC_ASSERT(false); + } + + DCPOMATIC_ASSERT(false); +} + + +VideoEncoding +video_encoding_from_string(string const& encoding) +{ + if (encoding == "jpeg2000") { + return VideoEncoding::JPEG2000; + } + + if (encoding == "mpeg2") { + return VideoEncoding::MPEG2; + } + + DCPOMATIC_ASSERT(false); +} + diff --git a/src/lib/video_encoding.h b/src/lib/video_encoding.h new file mode 100644 index 000000000..7c240f06f --- /dev/null +++ b/src/lib/video_encoding.h @@ -0,0 +1,42 @@ +/* + Copyright (C) 2024 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_VIDEO_ENCODING_H +#define DCPOMATIC_VIDEO_ENCODING_H + + +#include <string> + + +enum class VideoEncoding +{ + JPEG2000, + MPEG2, + COUNT +}; + + +std::string video_encoding_to_string(VideoEncoding encoding); +VideoEncoding video_encoding_from_string(std::string const& encoding); + + +#endif + diff --git a/src/lib/video_mxf_content.cc b/src/lib/video_mxf_content.cc index 9adca5a2d..ded81e6bf 100644 --- a/src/lib/video_mxf_content.cc +++ b/src/lib/video_mxf_content.cc @@ -19,25 +19,26 @@ */ -#include "video_mxf_examiner.h" -#include "video_mxf_content.h" -#include "video_content.h" -#include "job.h" -#include "film.h" #include "compose.hpp" +#include "film.h" +#include "job.h" +#include "video_content.h" +#include "video_mxf_content.h" +#include "video_mxf_examiner.h" #include <asdcp/KM_log.h> -#include <dcp/mono_picture_asset.h> -#include <dcp/stereo_picture_asset.h> #include <dcp/exceptions.h> +#include <dcp/mono_j2k_picture_asset.h> +#include <dcp/stereo_j2k_picture_asset.h> #include <libxml++/libxml++.h> #include "i18n.h" using std::list; -using std::string; -using std::shared_ptr; using std::make_shared; +using std::shared_ptr; +using std::string; +using boost::optional; using namespace dcpomatic; @@ -48,8 +49,8 @@ VideoMXFContent::VideoMXFContent (boost::filesystem::path path) } -VideoMXFContent::VideoMXFContent (cxml::ConstNodePtr node, int version) - : Content (node) +VideoMXFContent::VideoMXFContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version) + : Content(node, film_directory) { video = VideoContent::from_xml (this, node, version, VideoRange::FULL); } @@ -61,7 +62,7 @@ VideoMXFContent::valid_mxf (boost::filesystem::path path) Kumu::DefaultLogSink().UnsetFilterFlag(Kumu::LOG_ALLOW_ALL); try { - dcp::MonoPictureAsset mp (path); + dcp::MonoJ2KPictureAsset mp(path); return true; } catch (dcp::MXFFileError& e) { @@ -71,7 +72,7 @@ VideoMXFContent::valid_mxf (boost::filesystem::path path) try { Kumu::DefaultLogSink().SetFilterFlag(0); - dcp::StereoPictureAsset sp (path); + dcp::StereoJ2KPictureAsset sp (path); return true; } catch (dcp::MXFFileError& e) { @@ -121,11 +122,11 @@ VideoMXFContent::identifier () const void -VideoMXFContent::as_xml (xmlpp::Node* node, bool with_paths) const +VideoMXFContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const { - node->add_child("Type")->add_child_text("VideoMXF"); - Content::as_xml (node, with_paths); - video->as_xml (node); + cxml::add_text_child(element, "Type", "VideoMXF"); + Content::as_xml(element, with_paths, path_behaviour, film_directory); + video->as_xml(element); } diff --git a/src/lib/video_mxf_content.h b/src/lib/video_mxf_content.h index 5a04c3da9..0def6008c 100644 --- a/src/lib/video_mxf_content.h +++ b/src/lib/video_mxf_content.h @@ -26,7 +26,7 @@ class VideoMXFContent : public Content { public: VideoMXFContent (boost::filesystem::path path); - VideoMXFContent (cxml::ConstNodePtr node, int version); + VideoMXFContent (cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version); std::shared_ptr<VideoMXFContent> shared_from_this () { return std::dynamic_pointer_cast<VideoMXFContent>(Content::shared_from_this()); @@ -40,7 +40,14 @@ public: std::string summary () const override; std::string technical_summary () const override; std::string identifier () const override; - void as_xml (xmlpp::Node* node, bool with_paths) const override; + + void as_xml( + xmlpp::Element* element, + bool with_paths, + PathBehaviour path_behaviour, + boost::optional<boost::filesystem::path> film_directory + ) const override; + dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override; dcpomatic::DCPTime approximate_length () const override; void add_properties (std::shared_ptr<const Film> film, std::list<UserProperty>& p) const override; diff --git a/src/lib/video_mxf_decoder.cc b/src/lib/video_mxf_decoder.cc index 40d3a461a..3d1ed7f4e 100644 --- a/src/lib/video_mxf_decoder.cc +++ b/src/lib/video_mxf_decoder.cc @@ -24,10 +24,10 @@ #include "video_mxf_content.h" #include "j2k_image_proxy.h" #include "frame_interval_checker.h" -#include <dcp/mono_picture_asset.h> -#include <dcp/mono_picture_asset_reader.h> -#include <dcp/stereo_picture_asset.h> -#include <dcp/stereo_picture_asset_reader.h> +#include <dcp/mono_j2k_picture_asset.h> +#include <dcp/mono_j2k_picture_asset_reader.h> +#include <dcp/stereo_j2k_picture_asset.h> +#include <dcp/stereo_j2k_picture_asset_reader.h> #include <dcp/exceptions.h> @@ -44,7 +44,7 @@ VideoMXFDecoder::VideoMXFDecoder (shared_ptr<const Film> film, shared_ptr<const video = make_shared<VideoDecoder>(this, content); try { - auto mono = make_shared<dcp::MonoPictureAsset>(_content->path(0)); + auto mono = make_shared<dcp::MonoJ2KPictureAsset>(_content->path(0)); _mono_reader = mono->start_read (); _mono_reader->set_check_hmac (false); _size = mono->size (); @@ -55,7 +55,7 @@ VideoMXFDecoder::VideoMXFDecoder (shared_ptr<const Film> film, shared_ptr<const /* maybe it's stereo */ } - auto stereo = make_shared<dcp::StereoPictureAsset>(_content->path(0)); + auto stereo = make_shared<dcp::StereoJ2KPictureAsset>(_content->path(0)); _stereo_reader = stereo->start_read (); _stereo_reader->set_check_hmac (false); _size = stereo->size (); @@ -76,18 +76,18 @@ VideoMXFDecoder::pass () video->emit ( film(), std::make_shared<J2KImageProxy>(_mono_reader->get_frame(frame), _size, AV_PIX_FMT_XYZ12LE, optional<int>()), - frame + _next ); } else { video->emit ( film(), std::make_shared<J2KImageProxy>(_stereo_reader->get_frame(frame), _size, dcp::Eye::LEFT, AV_PIX_FMT_XYZ12LE, optional<int>()), - frame + _next ); video->emit ( film(), std::make_shared<J2KImageProxy>(_stereo_reader->get_frame(frame), _size, dcp::Eye::RIGHT, AV_PIX_FMT_XYZ12LE, optional<int>()), - frame + _next ); } diff --git a/src/lib/video_mxf_decoder.h b/src/lib/video_mxf_decoder.h index 774e269c6..16d8b112e 100644 --- a/src/lib/video_mxf_decoder.h +++ b/src/lib/video_mxf_decoder.h @@ -20,8 +20,8 @@ #include "decoder.h" -#include <dcp/mono_picture_asset_reader.h> -#include <dcp/stereo_picture_asset_reader.h> +#include <dcp/mono_j2k_picture_asset_reader.h> +#include <dcp/stereo_j2k_picture_asset_reader.h> class VideoMXFContent; @@ -42,7 +42,7 @@ private: /** Time of next thing to return from pass */ dcpomatic::ContentTime _next; - std::shared_ptr<dcp::MonoPictureAssetReader> _mono_reader; - std::shared_ptr<dcp::StereoPictureAssetReader> _stereo_reader; + std::shared_ptr<dcp::MonoJ2KPictureAssetReader> _mono_reader; + std::shared_ptr<dcp::StereoJ2KPictureAssetReader> _stereo_reader; dcp::Size _size; }; diff --git a/src/lib/video_mxf_examiner.cc b/src/lib/video_mxf_examiner.cc index 7a05f3369..276664a14 100644 --- a/src/lib/video_mxf_examiner.cc +++ b/src/lib/video_mxf_examiner.cc @@ -21,8 +21,8 @@ #include "video_mxf_content.h" #include "video_mxf_examiner.h" #include <dcp/exceptions.h> -#include <dcp/mono_picture_asset.h> -#include <dcp/stereo_picture_asset.h> +#include <dcp/mono_j2k_picture_asset.h> +#include <dcp/stereo_j2k_picture_asset.h> using std::shared_ptr; using boost::optional; @@ -30,7 +30,7 @@ using boost::optional; VideoMXFExaminer::VideoMXFExaminer (shared_ptr<const VideoMXFContent> content) { try { - _asset.reset (new dcp::MonoPictureAsset (content->path(0))); + _asset = std::make_shared<dcp::MonoJ2KPictureAsset>(content->path(0)); } catch (dcp::MXFFileError& e) { /* maybe it's stereo */ } catch (dcp::ReadError& e) { @@ -38,7 +38,7 @@ VideoMXFExaminer::VideoMXFExaminer (shared_ptr<const VideoMXFContent> content) } if (!_asset) { - _asset.reset (new dcp::StereoPictureAsset (content->path(0))); + _asset = std::make_shared<dcp::StereoJ2KPictureAsset>(content->path(0)); } } diff --git a/src/lib/writer.cc b/src/lib/writer.cc index 37b8e4ccb..971085046 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -30,6 +30,7 @@ #include "dcpomatic_log.h" #include "film.h" #include "film_util.h" +#include "frame_info.h" #include "job.h" #include "log.h" #include "ratio.h" @@ -39,11 +40,11 @@ #include "version.h" #include "writer.h" #include <dcp/cpl.h> +#include <dcp/mono_mpeg2_picture_frame.h> #include <dcp/locale_convert.h> #include <dcp/raw_convert.h> -#include <dcp/reel_closed_caption_asset.h> #include <dcp/reel_file_asset.h> -#include <dcp/reel_subtitle_asset.h> +#include <dcp/reel_text_asset.h> #include <cerrno> #include <cfloat> #include <set> @@ -77,9 +78,10 @@ using namespace dcpomatic; /** @param weak_job Job to report progress to, or 0. * @param text_only true to enable only the text (subtitle/ccap) parts of the writer. */ -Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, bool text_only) - : WeakConstFilm (weak_film) +Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, boost::filesystem::path output_dir, bool text_only) + : WeakConstFilm(weak_film) , _job(weak_job) + , _output_dir(output_dir) /* These will be reset to sensible values when J2KEncoder is created */ , _maximum_frames_in_memory (8) , _maximum_queue_size (8) @@ -90,7 +92,7 @@ Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, bool text int reel_index = 0; auto const reels = film()->reels(); for (auto p: reels) { - _reels.push_back (ReelWriter(weak_film, p, job, reel_index++, reels.size(), text_only)); + _reels.push_back(ReelWriter(weak_film, p, job, reel_index++, reels.size(), text_only, _output_dir)); } _last_written.resize (reels.size()); @@ -100,7 +102,7 @@ Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, bool text */ _audio_reel = _reels.begin (); _subtitle_reel = _reels.begin (); - for (auto i: film()->closed_caption_tracks()) { + for (auto i: film()->closed_text_tracks()) { _caption_reels[i] = _reels.begin (); } _atmos_reel = _reels.begin (); @@ -172,6 +174,13 @@ Writer::write (shared_ptr<const Data> encoded, Frame frame, Eyes eyes) } +void +Writer::write(shared_ptr<dcp::MonoMPEG2PictureFrame> image, Frame frame) +{ + _reels[video_reel(frame)].write(image); +} + + bool Writer::can_repeat (Frame frame) const { @@ -233,11 +242,7 @@ Writer::fake_write (Frame frame, Eyes eyes) QueueItem qi; qi.type = QueueItem::Type::FAKE; - - { - shared_ptr<InfoFileHandle> info_file = film()->info_file_handle(_reels[reel].period(), true); - qi.size = _reels[reel].read_frame_info(info_file, frame_in_reel, eyes).size; - } + qi.info = J2KFrameInfo(film()->info_file_handle(_reels[reel].period(), true), frame_in_reel, eyes); DCPOMATIC_ASSERT((film()->three_d() && eyes != Eyes::BOTH) || (!film()->three_d() && eyes == Eyes::BOTH)); @@ -411,7 +416,7 @@ try if (i.type == QueueItem::Type::FULL) { LOG_WARNING (N_("- type FULL, frame %1, eyes %2"), i.frame, (int) i.eyes); } else { - LOG_WARNING (N_("- type FAKE, size %1, frame %2, eyes %3"), i.size, i.frame, (int) i.eyes); + LOG_WARNING (N_("- type FAKE, size %1, frame %2, eyes %3"), i.info.size, i.frame, (int) i.eyes); } } } @@ -442,7 +447,7 @@ try break; case QueueItem::Type::FAKE: LOG_DEBUG_ENCODE (N_("Writer FAKE-writes %1"), qi.frame); - reel.fake_write (qi.size); + reel.fake_write(qi.info); ++_fake_written; break; case QueueItem::Type::REPEAT: @@ -583,9 +588,8 @@ Writer::calculate_digests () } -/** @param output_dcp Path to DCP folder to write */ void -Writer::finish (boost::filesystem::path output_dcp) +Writer::finish() { if (_thread.joinable()) { LOG_GENERAL_NC ("Terminating writer thread"); @@ -596,12 +600,12 @@ Writer::finish (boost::filesystem::path output_dcp) for (auto& reel: _reels) { write_hanging_text(reel); - reel.finish(output_dcp); + reel.finish(_output_dir); } LOG_GENERAL_NC ("Writing XML"); - dcp::DCP dcp (output_dcp); + dcp::DCP dcp(_output_dir); auto cpl = make_shared<dcp::CPL>( film()->dcp_name(), @@ -616,7 +620,7 @@ Writer::finish (boost::filesystem::path output_dcp) /* Add reels */ for (auto& i: _reels) { - cpl->add(i.create_reel(_reel_assets, output_dcp, _have_subtitles, _have_closed_captions)); + cpl->add(i.create_reel(_reel_assets, _output_dir, _have_subtitles, _have_closed_captions)); } /* Add metadata */ @@ -718,12 +722,12 @@ Writer::finish (boost::filesystem::path output_dcp) N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT, %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk ); - write_cover_sheet (output_dcp); + write_cover_sheet(); } void -Writer::write_cover_sheet (boost::filesystem::path output_dcp) +Writer::write_cover_sheet() { auto const cover = film()->file("COVER_SHEET.txt"); dcp::File file(cover, "w"); @@ -756,7 +760,7 @@ Writer::write_cover_sheet (boost::filesystem::path output_dcp) boost::uintmax_t size = 0; for ( - auto i = dcp::filesystem::recursive_directory_iterator(output_dcp); + auto i = dcp::filesystem::recursive_directory_iterator(_output_dir); i != dcp::filesystem::recursive_directory_iterator(); ++i) { if (dcp::filesystem::is_regular_file(i->path())) { @@ -940,19 +944,21 @@ Writer::write (ReferencedReelAsset asset) { _reel_assets.push_back (asset); - if (dynamic_pointer_cast<dcp::ReelSubtitleAsset>(asset.asset)) { - _have_subtitles = true; - } else if (auto ccap = dynamic_pointer_cast<dcp::ReelClosedCaptionAsset>(asset.asset)) { - /* This feels quite fragile. We have a referenced reel and want to know if it's - * part of a given closed-caption track so that we can fill if it has any - * missing reels. I guess for that purpose almost any DCPTextTrack values are - * fine so long as they are consistent. - */ - DCPTextTrack track; - track.name = ccap->annotation_text().get_value_or(""); - track.language = dcp::LanguageTag(ccap->language().get_value_or("en-US")); - if (_have_closed_captions.find(track) == _have_closed_captions.end()) { - _have_closed_captions.insert(track); + if (auto text_asset = dynamic_pointer_cast<dcp::ReelTextAsset>(asset.asset)) { + if (is_open(text_asset->type())) { + _have_subtitles = true; + } else { + /* This feels quite fragile. We have a referenced reel and want to know if it's + * part of a given closed-caption track so that we can fill if it has any + * missing reels. I guess for that purpose almost any DCPTextTrack values are + * fine so long as they are consistent. + */ + DCPTextTrack track; + track.name = text_asset->annotation_text().get_value_or(""); + track.language = dcp::LanguageTag(text_asset->language().get_value_or("en-US")); + if (_have_closed_captions.find(track) == _have_closed_captions.end()) { + _have_closed_captions.insert(track); + } } } } diff --git a/src/lib/writer.h b/src/lib/writer.h index f0f1fe69a..3e93c9b7b 100644 --- a/src/lib/writer.h +++ b/src/lib/writer.h @@ -38,6 +38,8 @@ #include "types.h" #include "weak_film.h" #include <dcp/atmos_frame.h> +#include <dcp/frame_info.h> +#include <dcp/mono_mpeg2_picture_frame.h> #include <boost/thread.hpp> #include <boost/thread/condition.hpp> #include <list> @@ -75,8 +77,8 @@ public: /** encoded data for FULL */ std::shared_ptr<const dcp::Data> encoded; - /** size of data for FAKE */ - int size = 0; + /** info for FAKE */ + dcp::J2KFrameInfo info; /** reel index */ size_t reel = 0; /** frame index within the reel */ @@ -104,7 +106,7 @@ bool operator== (QueueItem const & a, QueueItem const & b); class Writer : public ExceptionStore, public WeakConstFilm { public: - Writer (std::weak_ptr<const Film>, std::weak_ptr<Job>, bool text_only = false); + Writer(std::weak_ptr<const Film>, std::weak_ptr<Job>, boost::filesystem::path output_dir, bool text_only = false); ~Writer (); Writer (Writer const &) = delete; @@ -123,7 +125,8 @@ public: void write (std::vector<std::shared_ptr<dcpomatic::Font>> fonts); void write (ReferencedReelAsset asset); void write (std::shared_ptr<const dcp::AtmosFrame> atmos, dcpomatic::DCPTime time, AtmosMetadata metadata); - void finish (boost::filesystem::path output_dcp); + void write (std::shared_ptr<dcp::MonoMPEG2PictureFrame> image, Frame frame); + void finish(); void set_encoder_threads (int threads); @@ -139,7 +142,7 @@ private: bool have_sequenced_image_at_queue_head (); size_t video_reel (int frame) const; void set_digest_progress(Job* job, int id, int64_t done, int64_t size); - void write_cover_sheet (boost::filesystem::path output_dcp); + void write_cover_sheet(); void calculate_referenced_digests(std::function<void (int64_t, int64_t)> set_progress); void write_hanging_text (ReelWriter& reel); void calculate_digests (); @@ -151,6 +154,7 @@ private: std::map<DCPTextTrack, std::vector<ReelWriter>::iterator> _caption_reels; std::vector<ReelWriter>::iterator _atmos_reel; + boost::filesystem::path _output_dir; /** our thread */ boost::thread _thread; /** true if our thread should finish */ diff --git a/src/lib/wscript b/src/lib/wscript index 87a1ca787..dfe3ce487 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -49,7 +49,7 @@ sources = """ text_decoder.cc case_insensitive_sorter.cc check_content_job.cc - cinema.cc + cinema_list.cc cinema_sound_processor.cc change_signaller.cc collator.cc @@ -59,6 +59,7 @@ sources = """ content_factory.cc combine_dcp_job.cc copy_dcp_details_to_film.cc + cpu_j2k_encoder_thread.cc create_cli.cc crop.cc cross_common.cc @@ -67,9 +68,9 @@ sources = """ dcp_content.cc dcp_content_type.cc dcp_decoder.cc - dcp_encoder.cc dcp_examiner.cc dcp_digest_file.cc + dcp_film_encoder.cc dcp_subtitle.cc dcp_subtitle_content.cc dcp_subtitle_decoder.cc @@ -84,11 +85,11 @@ sources = """ decoder_part.cc digester.cc dkdm_recipient.cc + dkdm_recipient_list.cc dkdm_wrapper.cc dolby_cp750.cc email.cc empty.cc - encoder.cc encode_server.cc encode_server_finder.cc encoded_log_entry.cc @@ -98,6 +99,7 @@ sources = """ examine_ffmpeg_subtitles_job.cc exceptions.cc export_config.cc + frame_info.cc file_group.cc file_log.cc filter_graph.cc @@ -106,14 +108,15 @@ sources = """ ffmpeg_audio_stream.cc ffmpeg_content.cc ffmpeg_decoder.cc - ffmpeg_encoder.cc ffmpeg_examiner.cc ffmpeg_file_encoder.cc + ffmpeg_film_encoder.cc ffmpeg_image_proxy.cc ffmpeg_stream.cc ffmpeg_subtitle_stream.cc ffmpeg_wrapper.cc film.cc + film_encoder.cc film_util.cc filter.cc font.cc @@ -124,6 +127,8 @@ sources = """ frame_rate_change.cc guess_crop.cc hints.cc + http_server.cc + id.cc internet.cc image.cc image_content.cc @@ -134,10 +139,13 @@ sources = """ image_png.cc image_proxy.cc image_store.cc + internal_player_server.cc j2k_image_proxy.cc job.cc job_manager.cc j2k_encoder.cc + j2k_encoder_thread.cc + j2k_sync_encoder_thread.cc json_server.cc kdm_cli.cc kdm_recipient.cc @@ -150,6 +158,7 @@ sources = """ maths_util.cc memory_util.cc mid_side_decoder.cc + mpeg2_encoder.cc named_channel.cc overlaps.cc pixel_quanta.cc @@ -162,7 +171,9 @@ sources = """ reel_writer.cc referenced_reel_asset.cc release_notes.cc + remembered_asset.cc render_text.cc + remote_j2k_encoder_thread.cc resampler.cc resolution.cc rgba.cc @@ -178,12 +189,15 @@ sources = """ state.cc spl.cc spl_entry.cc + sqlite_statement.cc + sqlite_table.cc + sqlite_transaction.cc string_log_entry.cc string_text_file.cc string_text_file_content.cc string_text_file_decoder.cc subtitle_analysis.cc - subtitle_encoder.cc + subtitle_film_encoder.cc territory_type.cc text_ring_buffers.cc text_type.cc @@ -202,9 +216,12 @@ sources = """ upmixer_b.cc usl.cc util.cc + variant.cc verify_dcp_job.cc video_content.cc video_decoder.cc + video_encoder.cc + video_encoding.cc video_filter_graph.cc video_filter_graph_set.cc video_frame_type.cc @@ -230,7 +247,7 @@ def build(bld): BOOST_FILESYSTEM BOOST_THREAD BOOST_DATETIME BOOST_SIGNALS2 BOOST_REGEX SAMPLERATE POSTPROC TIFF SSH DCP CXML GLIB LZMA XML++ CURL ZIP BZ2 FONTCONFIG PANGOMM CAIROMM XMLSEC SUB ICU NETTLE PNG JPEG LEQM_NRT - LIBZ + LIBZ SQLITE3 """ if bld.env.TARGET_OSX: @@ -244,6 +261,9 @@ def build(bld): if bld.env.TARGET_LINUX: obj.uselib += ' POLKIT' + if bld.env.ENABLE_GROK: + obj.source += ' grok_j2k_encoder_thread.cc' + if bld.env.TARGET_WINDOWS_64 or bld.env.TARGET_WINDOWS_32: obj.uselib += ' WINSOCK2 DBGHELP SHLWAPI MSWSOCK BOOST_LOCALE SETUPAPI OLE32 UUID' obj.source += ' cross_windows.cc' |
